在
AssemblyInfo
中有两个组装版本:
AssemblyVersion
:指定所归属的程序集的版本。AssemblyFileVersion
:指示编译器对 Win32 文件版本资源使用特定版本号。 Win32 文件版本不需要与程序集的版本号相同。我可以通过以下代码行获得
AssemblyVersion
:
Version version = Assembly.GetEntryAssembly().GetName().Version;
但是我怎样才能得到
AssemblyFileVersion
呢?
请参阅我上面的评论,要求澄清您真正想要什么。希望就是这样:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
有三个版本:程序集、文件和产品(又名程序集信息版本)。它们由不同的功能使用,并且如果您没有明确指定它们,则采用不同的默认值。
string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
string assemblyVersion = Assembly.LoadFile("your assembly file").GetName().Version.ToString();
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
当我想访问应用程序文件版本(在程序集信息 - >文件版本中设置的内容)时,比如说在表单加载时为其设置标签文本以显示版本,我刚刚使用了
versionlabel.Text = "Version " + Application.ProductVersion;
此方法需要参考
System.Windows.Forms
。
更新:正如 Richard Grimes 在我引用的帖子、@Iain 和 @Dmitry Lobanov 中提到的,我的答案在理论上是正确的,但在实践中是错误的。
正如我应该从无数书籍等中记住的那样,当使用
[assembly: XXXAttribute]
设置这些属性时,它们会被编译器劫持并放入 VERSIONINFO
资源中。
由于上述原因,您需要使用@Xiaofu的回答中的方法,因为在从中提取信号后,属性将被剥离。
公共静态字符串 GetProductVersion() { var 属性 = (AssemblyVersionAttribute)Assembly .GetExecutingAssembly() .GetCustomAttributes( typeof(AssemblyVersionAttribute), true ) 。单身的(); 返回属性.InformationalVersion; }
(来自 http://bytes.com/groups/net/420417- assemblyversionattribute - 如那里所述,如果您正在寻找不同的属性,请将其替换为上面的属性)
使用这个:
((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
Assembly.GetExecutingAssembly(),
typeof(AssemblyFileVersionAttribute), false)
).Version;
或者这个:
new Version(System.Windows.Forms.Application.ProductVersion);
交叉发布我在“非常相似的问题”中的答案,因为我在谷歌上搜索自己的答案并最终来到这里。我认为与此处显示的其他方法相比,以下方法具有一些优点。原答案如下。
public static string? GetInformationalVersion() =>
Assembly
.GetEntryAssembly()
?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
?.InformationalVersion;
虽然我的答案与其他一些人类似,但我认为它有一些优点:
它确定条目程序集的信息版本。这意味着该代码可以驻留在更大项目的库中,并且仍然可以获得“用户双击的程序”的版本,而不需要任何依赖。
GetEntryAssembly()
GetExecutingAssembly()
GetCustomAttribute<T>
GetCustomAttribute<T>(Assembly)
Microsoft 文档。