.NET 2.0 SP1 がインストールされたマシン上で、.NET 2.0 に対してアプリケーションを構築しました。アプリケーションは、.NET SP1 に含まれるいくつかの標準 .NET アセンブリ (つまりSystem.Xml.dll
) を参照します。
このアプリケーションを .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 にパブリッシャ ポリシーまたはリダイレクトが存在しないためです。しかし、バインドは正常に機能します。どうしてですか?
上記の問題に続くもう1つの質問。
すべてのクライアントに、コンピュータに .NET 2.0 SP1 をインストールするよう強制することはできません。.NET 2.0 SP1 から System.Xml.dll を出荷する場合、アプリケーションに付属の System.Xml.dll を使用させるにはどうすればよいでしょうか。
更新 1: System.Xml.dll のバージョンは 2.0.50727.x ではなく 2.0.0.0 のようです。これは、ランタイムが問題を正常に解決する理由を説明しています。ただし、2 番目の質問は依然として当てはまります。SP1 から System.Xml.dll をアプリケーションと共に出荷し、アプリケーションでそれを使用するように強制することはできますか?