我注意到大多数(全部?).winmd文件的版本为255.255.255.255 like:
Windows,版本=255.255.255.255,文化=中性,PublicKeyToken=null
Metro 应用程序引用具有此版本号的此类程序集。
此外 Windows.winmd 本身引用:
mscorlib,版本=255.255.255.255,文化=中性,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 - 我们选择使用 System.Enum 的 mscorlib 版本作为枚举的 assemblyref,因为它很方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)