获取MVC5中的调用程序集项目名称



我有一个MyAwesomeProject,它导入MyAwesomeLogger并调用它:

using MyAwesomeLogger;
using System.Web.Mvc;
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var Logger = new LogFactory.GetLogger();
        Logger.Debug("Hello World");
        return View();
    }
}

LogFactory.GetLogger()方法在MyAwesomeLogger中,它所做的所有美妙的事情之一是设置记录器的文件名。我的主要问题是,我需要获取项目名称并将其设置为日志文件名,这必须适用于控制台应用程序和web应用程序。

我以前尝试做的是:Assembly.GetEntryAssembly().GetName().Name;虽然这适用于控制台应用程序,但不适用于web。我已经浏览了很多链接,但大多数解决方案都显示了如何从mvc项目本身获得项目名称,而不是从这样的dll中获得。最简单的防傻方法是什么?

我试过的另一件事是:

var type = System.Web.HttpContext.Current.ApplicationInstance.GetType();
while (type != null && type.Namespace == "ASP")
{
    type = type.BaseType;
}
var fileName = type.Assembly.GetName().Name;

如果我在HomeController中调用它,上面的方法就可以了,但MyAwesomeLogger不知道HttpContext,所以我不能在那里调用它。

项目的名称不一定在项目的dll中。项目的DLL可以是任何名称,它不必与visual studio中项目文件的名称相匹配。因此,这通常是获取项目名称的糟糕方法。

您可以在应用程序选项卡的项目设置中设置DLL上的程序集信息。

标题将是dll的名称"XYZ"在编译时将是"XYZ.dll"。但是,您也可以设置"说明"、"公司"、"产品"等。

您可以使用"产品字段"作为项目名称,并将其设置为"产品"的名称。

若要检索此信息,应在项目中使用类型来获取程序集。在一个网络应用程序中,入口点不一定是你网站的dll,它可能是一个剃刀视图引擎,或aspx视图引擎,等等。

Type myType = typeof(ThingInMyProject);
Assembly myAsm = myType.GetAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(myAsm.Location);
var title = fvi.Title;
var companyName = fvi.CompanyName;
var productName = fvi.ProductName;

然后,您可以使用标题"Dll的名称"或您认为合适的产品名称。

最新更新