winmd文件的版本255.255.255.255表示什么?

我注意到大多数(所有?)。 winmd文件的版本为255.255.255.255,如:

Windows,版本= 255.255.255.255,Culture = neutral,PublicKeyToken = null

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


Windows.winmd本身也引用了:

mscorlib,版本= 255.255.255.255,Culture = neutral,PublicKeyToken = b77a5c561934e089

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

此版本号是否具有特殊含义? 有没有这方面的文件?

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

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

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

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

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

因此将255.255.255.255解释为“任何版本”。