3

次のコードが与えられます:

  var n1 = new AssemblyName ("TestDll, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089");
  var n2 = new AssemblyName ("TestDll, Version=2.0.0.2001, Culture=en-US, PublicKeyToken=ab7a5c561934e089");

  Console.WriteLine (AssemblyName.ReferenceMatchesDefinition (n1, n2));
  Console.WriteLine (AssemblyName.ReferenceMatchesDefinition (n2, n1));

これらのチェックの両方が「True」を出力するのはなぜですか?AssemblyName.ReferenceMatchesDefinitionは、アセンブリ名のバージョン、カルチャ、および公開鍵トークン属性の違いを考慮する必要があると思いましたね。

そうでない場合、ReferenceMatchesDefinitionは、単純な名前の比較ではできないことを何をしますか?

4

3 に答える 3

4

Microsoft Connectで問題を報告しましたが、バグが確認されています。

これは確かにAPIのバグです。2.0 RTMで導入されて以来、製品に含まれています。正しく動作しませんでした。

[...]

API AppDomain.ApplyPolicy(手動のAssemblyName比較を使用)を検討することもできます。APIは、フレームワークアセンブリの統合とバインディングリダイレクトをカバーしています。また、厳密ではない名前アセンブリ参照をカバーしようとする場合もあります。PublicKeyTokenが参照に存在しない場合、単純な名前の一致のみが発生し、残りは無視されます。

于 2012-08-07T13:17:08.467 に答える
2

Junfeng Zhangによるこのブログ投稿、特に彼がアセンブリIDについてリンクしている以前のブログ投稿は関連性があると思います。彼といつものように、私はそれのどれも理解していません。幸運を!

于 2010-03-22T19:13:09.617 に答える
0

msdnをチェックするだけで問題は解決します。

http://msdn.microsoft.com/en-us/library/system.reflection.assemblyname.referencematchesdefinition.aspx

正確に言うと、「ローダーが2つのアセンブリ名を同じアセンブリに解決するかどうかを示す値を返します。」

明らかに、両方のAssemblyNameは最終的に同じAssemblyに解決されます。

于 2010-03-22T17:39:39.400 に答える