AssemblyInformationalVersion在运行时获取程序集的属性值的C#语法是什么?例:
[assembly: AssemblyInformationalVersion("1.2.3.4")]
Answers:
using System.Reflection.Assembly
using System.Diagnostics.FileVersionInfo
// ...
public string GetInformationalVersion(Assembly assembly) {
return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;
}
mkbundle申请Mono的申请,也无法正常工作
var attr = Assembly
.GetEntryAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false)
as AssemblyInformationalVersionAttribute[];
这是的数组AssemblyInformationalVersionAttribute。即使没有搜索类型的属性,也永远不会为null。
var attr2 = Attribute
.GetCustomAttribute(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute;
如果属性不存在,则可以为null。
var attr3 = Attribute
.GetCustomAttributes(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute[];
与第一个相同。
GetCustomAttribute代替,GetCustomAttributes如果您知道只有一个属性。
Attribute,而不使用Assembly
Assembly.GetEntryAssembly()应以Assembly.GetExecutingAssembly()或代替Assembly.GetCallingAssembly()。通常,如果程序集是插件,则这是必需的-在这种情况下,GetEntryAssembly()它将返回主机应用程序程序集。
在应用程序中使用已知类型,您可以简单地执行以下操作:
using System.Reflection;
public static readonly string ProductVersion = typeof(MyKnownType).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
当然,用于获得应用属性的程序集的任何过程都是好的。请注意,这不依赖System.DiagnosticsWinForm的Application对象。
AssemblyInformationalVersionAttribute attribute =
(AssemblyInformationalVersionAttribute)Assembly.GetExecutingAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false).FirstOrDefault();
if (attribute != null)
Console.WriteLine(attribute.InformationalVersion);
http://msdn.microsoft.com/zh-CN/library/system.reflection.assemblyinformationalversionattribute.aspx
看一下InformationalVersion属性
AssemblyVersionAttribute不是定义的版本AssemblyInformationalVersionAttribute。
鉴于从PE标头中检索日期可能不够可靠,因此有一种方法可以将其他属性包含到您的 AssemblyInfo.cs
[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("1.0.0")]
// and this:
[assembly: AssemblyInformationalVersion("1.0.0 (Build Date: 14.07.2020)")]
该字符串应可读,因为它对最终用户可见。但是,如果您坚持使用特定格式,则可以轻松,可靠地对其进行解析。
注意:我们正在使用Jenkins构建服务器,该服务器将版本信息AssemblyInfo.cs与日期字符串一起写入。
public static string GetInformationalVersion() =>
Assembly
.GetEntryAssembly()
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
.InformationalVersion;
虽然我的回答与其他一些回答相似,但我认为它具有一些优点:
GetEntryAssembly()为GetExecutingAssembly()GetCustomAttribute<T>更好地使用通用扩展方法,并且认为此变体更具可读性。
Assembly.Load(byte[])