首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileVersionInfo.FileVersion返回ProductVersion?

FileVersionInfo.FileVersion返回ProductVersion?
EN

Stack Overflow用户
提问于 2011-03-28 22:09:31
回答 2查看 3K关注 0票数 0

我正在尝试使用C#获取文件版本:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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返回。

票数 1
EN

Stack Overflow用户

发布于 2011-03-28 22:30:05

原因是,在WIN32接口(和文件元数据)中,产品版本定义为字符串,而文件版本定义为整数,而在.NET中,产品版本定义为整数,文件版本定义为整数。

如果您使用反射器并检查FileVersionInfo类,您可以看到它们加载方式不同:

代码语言:javascript
复制
 this.productVersion = GetFileVersionString(memIntPtr, string.Format(CultureInfo.InvariantCulture, format, new object[] { codepage, "ProductVersion" }))

但是:

代码语言:javascript
复制
this.fileMajor = HIWORD(fixedFileInfo.dwFileVersionMS);
this.fileMinor = LOWORD(fixedFileInfo.dwFileVersionMS);
this.fileBuild = HIWORD(fixedFileInfo.dwFileVersionLS);
this.filePrivate = LOWORD(fixedFileInfo.dwFileVersionLS);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5460199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档