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 ファイル形式では、特定の型のインジケーターとして特定の ECMA 335 型への typeref を使用することが選択されています。たとえば、winrt の "enum" コンストラクトは、"System.Enum" を拡張する型として表されます。winmd ファイルの場合、"System.Enum" の部分は単なる文字列 (何でもかまいません) であり、解決することはできません。実在するタイプ。その文字列はメタデータで typeref として表され、typerefs には assemblyref が必要です。便利なため、System.Enum の mscorlib バージョンを enum の 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 に答える