我使用下面的代码来读取.NET应用程序的AssemblyTitle属性,不幸的是,Assembly.GetEntryAssembly()总是在ASP.NET应用程序中返回Null。如何在ASP.NET应用程序中阅读AssemblyTitle?
public static string Title
{
get
{
var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if (attributes.Length > 0)
{
var titleAttribute = (AssemblyTitleAttribute)attributes[0];
if (titleAttribute.Title.Length > 0)
return titleAttribute.Title;
}
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase);
}
}
答案 0 :(得分:4)
您必须拥有一个您知道的类型,该类型在包含AssemblyTitle
的同一程序集中定义。然后你可以这样做:
typeof(MyType).Assembly.GetCustomAttributes
请注意(据我所知),没有任何其他防弹方法。
例如,如果您不想在Web请求期间执行此操作,则使用HttpContext.Current
不起作用(因此您可以在响应用户操作时执行此操作,但不能从单独的线程或静态执行此操作初始化程序,或来自global.asax
)
一些类似的读数(半成功):
GetEntryAssembly for web applications
Using the Web Application version number from an assembly (ASP.NET/C#)
答案 1 :(得分:2)
我在asp.net web app中使用以下内容:
if (ApplicationDeployment.IsNetworkDeployed)
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
编辑:对不起,那就是版本,而不是标题!我把你的版本和我的版本结合起来了:
System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
这样可以获得程序集标题属性。区别在于GetExecutingAssembly()
与GetEntryAssembly()
。