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

标签 c# .net windows-8 windows-runtime

我注意到大多数(所有?).winmd 文件都有一个 255.255.255.255 版本,例如:

Windows,Version=255.255.255.255,Culture=neutral,PublicKeyToken=null

Metro 应用程序引用了具有此版本号的此类程序集。


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

mscorlib,Version=255.255.255.255,Culture=neutral,PublicKeyToken=b77a5c561934e089

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

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

最佳答案

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

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

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

关于c# - winmd 文件的版本 255.255.255.255 表示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411168/

相关文章:

c# - 优化 GridView

c# - 是否有用于将属性从一个类绑定(bind)到另一个类的开源 C# 库?

c# - Graphics.DrawImage Logo 在大图像上缩放不正确

.net - MySQL缓存

windows-8 - 设置ToastNotification的背景

c# - 具有 Unicode 字符的主机名在 Windows 8 中有效

c# - .NET Standard 2.0项目中为什么可以添加.NET framework项目作为引用?

c# - 为什么我必须在 C# 中关闭 () 一个文件?

.net - 如何使用 FtpWebRequest (.NET) 更改目录?

c# - 尝试在 TextBlock 中内联 HyperLinkBut​​ton