FileVersionInfo and AssemblyInfo

核能气质少年 提交于 2019-12-02 18:00:59
Matt Davis

I found the answer originally here. I'm repeating the details for ease of reference.

There are three 'versions' that can be included in the AssemblyInfo.cs file:

[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]

AssemblyInformationalVersion defaults to AssemblyFileVersion if it is not specified. Likewise, AssemblyInformationalVersion and AssemblyFileVersion default to AssemblyVersion if both are not specified.

In your example, the AssemblyInfo.cs file did not include AssemblyInformationalVersion, so it defaults to the value of AssemblyFileVersion. As you will see below, AssemblyInformationalVersion maps to the FileVersionInfo.ProductVersion property, which explains why the test returns true.

Obviously, there are a couple of frustrating aspects to this. First, there is no way (that I know of) to set the AssemblyInformationalVersion from Visual Studio. You have to modify the AssemblyInfo.cs file directly to include this attribute. Second, AssemblyInformationalVersion maps to the FileVersionInfo.ProductVersion property, which is non-intuitive. The attribute should more properly be named AssemblyProductVersion. And apparently, a title is also a description, etc.

That said, how do we retrieve these (and related) values in code? Like this:

AssemblyFileVersion          => System.Diagnostics.FileVersionInfo.FileVersion
AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion
AssemblyVersion              => System.Reflection.Assembly.Version

/// others...
AssemblyTitle                => System.Diagnostics.FileVersionInfo.FileDescription
AssemblyDescription          => System.Diagnostics.FileVersionInfo.Comments
AssemblyProduct              => System.Diagnostics.FileVersionInfo.ProductName
AssemblyCompany              => System.Diagnostics.FileVersionInfo.CompanyName
AssemblyCopyright            => System.Diagnostics.FileVersionInfo.LegalCopyright
AssemblyTrademark            => System.Diagnostics.FileVersionInfo.LegalTrademarks

In the case of AssemblyVersion, use this:

string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!