FileVersionInfo.FileVersion返回ProductVersion?
我试图使用C#获取文件版本:
string file = @"C:\somefile.dll"; Console.WriteLine(FileVersionInfo.GetVersionInfo(file).FileVersion);
对于大多数文件,这很好,但是对于某些我收到的结果与Windows文件浏览器中显示的结果不同。
请参见附图:windows中显示的文件版本为“0.0.0.0”,但我使用FileVersion属性的文件版本为“000.000.000.000”。
我尝试使用不同版本的.NET(2,3.5,4),它们给出了相同的结果。
其他人遇到过这个问题?
谢谢Lior
似乎Windows资源管理器正在剥离版本部分的前导0。
尝试使用FileVersion 001.001.001.001创建程序集,它将在资源管理器中显示为1.1.1.1。 但是您的代码将返回实际值(001.001.001.001)。
编辑:
Explorer将返回001.001.001.001作为ProductVersion ,但仅当未设置AssemblyInformationalVersion时 ,在这种情况下它将返回ProductVersion。
原因是,在WIN32 API(和文件元数据)中,产品版本定义为字符串,但文件版本定义为整数,而在.NET中,所有版本都定义为整数。
如果使用reflection器并检查FileVersionInfo
类,则可以看到它们的加载方式不同:
this.productVersion = GetFileVersionString(memIntPtr, string.Format(CultureInfo.InvariantCulture, format, new object[] { codepage, "ProductVersion" }))
但:
this.fileMajor = HIWORD(fixedFileInfo.dwFileVersionMS); this.fileMinor = LOWORD(fixedFileInfo.dwFileVersionMS); this.fileBuild = HIWORD(fixedFileInfo.dwFileVersionLS); this.filePrivate = LOWORD(fixedFileInfo.dwFileVersionLS);