我正在尝试使用C#获取文件版本:
string file = @"C:\somefile.dll";
Console.WriteLine(FileVersionInfo.GetVersionInfo(file).FileVersion);对于大多数文件来说,这是很好的,但是对于某些文件,我收到的结果与Windows文件浏览器中显示的结果不同。
请看附图: windows中显示的文件版本是"0.0.0.0",而我使用FileVersion属性得到的文件版本是“000.000.000”。
我试过使用不同版本的.NET (2,3.5,4),结果是一样的。
还有没有人遇到过这个问题?
谢谢Lior

发布于 2011-03-28 22:24:12
Windows资源管理器似乎正在剥离前导0的版本部分。
尝试使用FileVersion 001.001.001.001创建一个程序集,它将在资源管理器中显示为1.1.1.1。但是您的代码将返回实际值(001.001.001.001)。
编辑:
Explorer将返回001.001.001.001作为ProductVersion,,但只有在没有设置AssemblyInformationalVersion的情况下,它才会将其作为ProductVersion返回。
发布于 2011-03-28 22:30:05
原因是,在WIN32接口(和文件元数据)中,产品版本定义为字符串,而文件版本定义为整数,而在.NET中,产品版本定义为整数,文件版本定义为整数。
如果您使用反射器并检查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);https://stackoverflow.com/questions/5460199
复制相似问题