Given this snippet from Blah.dll's AssemblyInfo.cs:
[assembly: AssemblyVersion("3.3.3.3")] [assembly: AssemblyFileVersion("2.2.2.2")]
And then in a separate .exe:
var fileInfo = FileVersionInfo.GetVersionInfo("/path/to/Blah.dll"); fileInfo.ProductVersion == fileInfo.FileVersion == true;
Other SO questions show ProductVersion being "correct", curious if there is something odd about how I'm using it.
Shouldn't ProductVersion be "3.3.3.3" and FileVersion be "2.2.2.2"? What would cause it to report both properties as AssemblyFileVersion?
AssemblyInfo. cs contains information about your assembly, like name, description, version, etc. You can find more details about its content reading the comments that are included in it.
cs by right clicking the project and chosing properties. In the application tab fill in the details and press save, this will generate the assemblyInfo. cs file for you. If you build your project after that, it should work.
AssemblyVersion: Specifies the version of the assembly being attributed. AssemblyFileVersion: Instructs a compiler to use a specific version number for the Win32 file version resource.
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With