在运行时获取程序集的AssemblyInformationalVersion
属性值的C#语法是什么?例如:
[assembly: AssemblyInformationalVersion("1.2.3.4")]
答案 0 :(得分:62)
using System.Reflection.Assembly
using System.Diagnostics.FileVersionInfo
// ...
public string GetInformationalVersion(Assembly assembly) {
return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;
}
答案 1 :(得分:38)
var attr = Assembly
.GetEntryAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false)
as AssemblyInformationalVersionAttribute[];
这是AssemblyInformationalVersionAttribute
的数组。即使没有搜索类型的属性,它也不会为空。
var attr2 = Attribute
.GetCustomAttribute(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute;
如果该属性不存在,则该值为null。
var attr3 = Attribute
.GetCustomAttributes(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute[];
与第一次相同。
答案 2 :(得分:16)
在您的应用程序中使用已知类型,您只需执行此操作:
using System.Reflection;
public static readonly string ProductVersion = typeof(MyKnownType).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
当然,您用于获取属性所应用的程序集的任何过程都是好的。请注意,这不依赖于System.Diagnostics
或WinForm的Application
对象。
答案 3 :(得分:12)
即使问题有点旧:
我提出了一个适合我的不同解决方案:
Application.ProductVersion
答案 4 :(得分:7)
答案 5 :(得分:5)
补充lance的答案:您可以使用Application.ResourceAssembly.Location
找出程序集的文件路径。有了这个,就可以在一行中获得AssemblyInformationalVersion字符串
System.Diagnostics.FileVersionInfo.GetVersionInfo(Application.ResourceAssembly.Location).ProductVersion
答案 6 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.reflection.assemblyinformationalversionattribute.aspx
查看InformationalVersion属性
答案 7 :(得分:0)
建立@Aerthal的答案,如果你想要一个单行程序从MVC Razor View获取AssemblyInformationalVersionAttribute:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
答案 8 :(得分:0)
鉴于从PE标头中检索日期可能不够可靠,因此有一种方法可以将其他属性包含到您的[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("1.0.0")]
// and this:
[assembly: AssemblyInformationalVersion("1.0.0 (Build Date: 14.07.2020)")]
AssemblyInfo.cs
该字符串应可读,因为最终用户可以看到该字符串。但是,如果您坚持使用特定格式,则可以轻松,可靠性对其进行解析。
注意:我们正在使用Jenkins构建服务器,该服务器将版本信息以及日期字符串写入var object = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
_.uniqWith(object, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
中。
答案 9 :(得分:0)
public static string GetInformationalVersion() =>
Assembly
.GetEntryAssembly()
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
.InformationalVersion;
虽然我的答案与其他答案相似,但我认为它具有一些优点:
GetEntryAssembly()
替换为GetExecutingAssembly()
GetCustomAttribute<T>
,并且认为此变体更易读。另请参阅{{3}}。