如何在手持设备(CF / CE)中获取.exe的文件版本信息?

时间:2014-03-03 19:11:02

标签: c# compact-framework system.diagnostics assembly-references fileversioninfo

在我的服务器应用程序中,我可以通过这种方式获取文件版本信息:

FileVersionInfo currentVersion = FileVersionInfo.GetVersionInfo(filePath);

...但是这个技巧似乎在Compact Framework中不起作用(我得到了,“找不到类型或命名空间名称'FileVersionInfo'(你是否缺少using指令或程序集引用) ?)

我的服务器/ Web API(.NET 4.5.1)应用程序中需要的“使用”似乎是System.Diagnostics,但是将其添加到我的CF应用程序会使using语句变灰(并且不起作用)上面显示的错误信息的分辨率。)

我是否需要添加特定的程序集引用,再加上特定的“使用”才能使其正常工作?

或者我是否需要为此使用自定义CF代码,例如找到的here

更新

在上面链接的文章中,它说,“在Compact Framework中获取文件版本信息非常简单 - 前提是您需要信息的文件是托管程序集。”

所以,好的:简单的方法是什么?在我跳过火热的篮球之前,我会先尝试一下。而且我知道这个问题对许多人来说似乎很幼稚,但是:我们创建的自定义.exe(“内部”应用程序)是“本机”还是“托管”?我试过谷歌搜索两者之间的差异,但没有找到定义......

1 个答案:

答案 0 :(得分:2)

这取决于“版本”的含义。和所有事情一样,它并不像看起来那么简单。托管程序集具有托管版本,该版本在AssemblyVersion属性中设置,如下所示:

[assembly: AssemblyVersion("3.0.2")]

这是托管加载程序使用的版本以及最终在程序集中类型的类型名称中的版本。这真的是“重要的”版本号。这是您查看Assembly Version属性时获得的版本。

但是,当您在Windows资源管理器中查看“文件 - >属性”时,您看到的不是版本号。

Explorer会查看该文件以查找本机VERSION_INFO标头,这些标头与托管版本完全断开连接。对于桌面应用,使用AssemblyFileVersion属性进行设置。但是,Compact Framework不支持设置该版本信息。 You can work around that如果你愿意,但CF也没有固有的方式来回读它。这就是您所引用的博客条目正在谈论的原因 - 获取本机版本信息。

因此,您必须确定您感兴趣的版本,然后按照路径进行设置并获取它。一般来说,如果它是一个托管程序集,我会努力避免处理本地AssemblyFileVersion因为它对任何事情都没有用。相反,我只使用AssemblyVersion。这适用于CF,桌面或单声道。