我有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,所以我不能在那里调用它。
答案 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的名称”或产品名称。