.NET 2.0 SP1がインストールされたマシンでは、.NET 2.0に対してアプリケーションが構築されています。このアプリケーションは、.NET SP1に含まれるいくつかの標準.NETアセンブリ(つまり、System.Xml.dll
)を参照します。.NET 2.0 RTMのみが存在する場合、ランタイムは.NET 2.0 SP1アセンブリへの呼び出しをどのように解決するのですか?
このアプリケーションを.net 2.0 RTMのコンピュータで実行すると、アプリケーションは正常に動作し、System.Xml.dll
アセンブリも使用されます。 2.0 RTMには存在しないが2.0 SP1に存在するメソッドを使用しようとすると、アプリケーションはMethodNotFoundExceptionをスローします。
私の質問はどのようにランタイムはSystem.Xml.dllを解決しますか?
アセンブリバージョンはリビジョン番号が異なります(ただし、メジャー、マイナー、およびビルド部分は等価です)。つまり、2.0 RTMアセンブリと2.0 SP1アセンブリは、アセンブリバインディングプロセスの点で異なります。ランタイムは、System.Xml.dll 2.0.50727.1378
を検索しようとしますが、2.0.50727.42
しか見つかりません。 Machine.configにPublisherポリシーまたはリダイレクトが存在しないため、アセンブリのバインディング処理が失敗するはずです。しかし、バインディングは正常に動作します。どのようにすることができますか?
上記の問題のもう1つの質問。
すべてのクライアントで強制的にコンピュータに.NET 2.0 SP1をインストールすることはできません。 .NET 2.0 SP1からSystem.Xml.dllを出荷する場合、アプリケーションに付属のSystem.Xml.dllをアプリケーションに使用させるにはどうすればよいですか?
更新1: System.Xml.dllのバージョンは2.0.0.0で、2.0.50727.xではありません。それはランタイムがそれをうまく解決する理由を説明します。しかし、2番目の質問は引き続き適用されます。アプリケーションからSP1のSystem.Xml.dllを出荷し、アプリケーションに強制的に使用させることはできますか?
しばらく前に、2.0 RTMのクライアントを持つ問題が発生しました。 2.0 RTM機能のみを使用してアプリケーションを書き直すか、2.0 SP1 SP1の出荷予定を修正するかを選択する必要があります。今問題は 'System.Xml.dll'のみであり、アプリケーションを書き直すのではなく、SP1からアセンブリを配布するほうがはるかに簡単なようです。 –