6

我注意到大多数(全部?).winmd文件的版本为255.255.255.255 ,例如:

Windows,版本=255.255.255.255,文化=中性,PublicKeyToken=null

Metro 应用程序使用此版本号引用此类程序集。


进一步的 Windows.winmd 本身引用:

mscorlib,版本=255.255.255.255,文化=中性,PublicKeyToken=b77a5c561934e089

但是,据我所知,不存在具有此版本号的程序集。

这个版本号有什么特殊含义吗?有这方面的文件吗?

4

2 回答 2

9

ECMA 335 程序集需要有一个版本号。但是 windows 运行时类型解析算法不使用版本号,因此创建 winmd 格式的团队选择了任意版本号 255.255.255.255 作为程序集版本号。

这有助于确保在进行类型解析时没有人尝试使用 .Net 类型解析算法(它并不完美,不幸的是,有些工具仍然使用 .Net 类型解析算法)。

哦,mscorlib 参考是一个形式参考——ECMA 335 要求所有 typeref 都具有相应的 assemblyref,并且 WINMD 文件格式选择将 typerefs 用于某些 ECMA 335 类型作为特定类型的指示符。例如,winrt“enum”构造表示为扩展“System.Enum”的类型 - 对于 winmd 文件,“System.Enum”部分只是一个字符串(它可能是任何东西),不能解析为一个真正的类型。该字符串在元数据中表示为 typeref 并且 typerefs 必须有一个 assemblyref - 我们选择使用 System.Enum 的 mscorlib 版本作为枚举的 assemblyref,因为它很方便。

于 2012-05-02T14:22:41.860 回答
3

请记住,.winmd 文件包含 WinRT 接口的元数据。Windows 不能假定将使用任何特定版本的 .NET。Windows 8 将比 .NET 4.5 长很多

.NET 项目也不能假定它将在任何特定版本的 Windows 上运行。它应该在 Windows 8 上和在 Windows 10 上一样好。

所以将 255.255.255.255 解释为“任何版本”。

于 2012-05-02T10:19:13.313 回答