1

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

FileVersionInfo currentVersion = FileVersionInfo.GetVersionInfo(filePath);

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

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

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

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

更新

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

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

4

1 回答 1

2

这取决于您所说的“版本”是什么意思。与所有事情一样,它并不像看起来那么简单。托管程序集有一个托管版本,这是在您的AssemblyVersion属性中设置的内容,如下所示:

[assembly: AssemblyVersion("3.0.2")]

这是托管加载程序使用的版本,也是程序集中类型的类型名称中的版本。这真的是“重要”的版本号。如果您查看程序集的Version属性,这是您获得的版本。

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

资源管理器查看本机 VERSION_INFO 标头的文件,这些标头与托管版本完全断开。对于桌面应用程序,它是使用AssemblyFileVersion属性设置的。然而,Compact Framework 不支持设置该版本信息。 如果你愿意,你可以解决这个问题,但 CF 也没有固有的方式来读回它。这就是您所指的博客条目正在谈论的原因 - 获取本机版本信息。

所以你必须弄清楚你对哪个版本感兴趣,然后按照路径进行设置和获取。一般来说,如果它是一个托管程序集,我会非常努力地避免与本机打交道,AssemblyFileVersion因为它实际上对任何事情都没有用处。相反,我只使用AssemblyVersion. 这适用于 CF、桌面或 Mono。

于 2014-03-03T22:31:18.853 回答