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

时间:2016-05-03 15:06:00

标签: c# asp.net-mvc-5 code-generation .net-assembly stackframe

我有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;虽然这适用于控制台应用程序,但它不适用于网络。我已经经历了很多链接,但大多数解决方案都展示了如何从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,所以我不能在那里调用它。

1 个答案:

答案 0 :(得分:0)

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

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

标题将是dll“XYZ”在编译时为“XYZ.dll”的名称。但是,您也可以设置描述,公司,产品等。

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

要检索此信息,您应该在项目中使用Type来获取程序集。在Web应用程序中,入口点不一定是您的站点,它可能是剃刀视图引擎,或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的名称”或产品名称。