6

厳密な名前のないアセンブリにはさまざまなバージョンがあり、app.exe.config でそれらへのバインディング リダイレクト/プローブ パスはありません。たとえば、MyDll (1.0.0.0_null_neutral) と MyDll (2.0.0.0_null_neutral) です。app.exe に対して、これらのアセンブリは LAC\MyDll_1.0.0.0_null_neutral および LAC\MyDll_2.0.0.0_null_neutral に保存されます。

私の理解では、MyDll アセンブリは厳密な名前が付いていないため、.NET ランタイムは MyDll の異なるバージョンを区別しません。したがって、MyDll 1.0.0.0 が既にメモリにロードされていて、MyDll 2.0.0.0 に対してビルドされたコードが実行された場合、.NET ランタイムは MyDll 2.0.0.0 をロードしません。

しかし、VS2008 でプロセスにアタッチしてモジュール ウィンドウを表示すると、MyDll 1.0.0.0 と MyDll 2.0.0.0 の両方が LAC フォルダーから読み込まれていることに気付きました。

私の理解にはどこかギャップがあるようです。誰かがそれを指摘できますか?

編集: これまでの応答に感謝します。はい、私はそのビットをスキップしました。実行可能ファイルは AssemblyResolve イベントをリッスンし、LAC を調べて処理します。

アセンブリに厳密な名前が付いていない限り、そのバージョンは無視されるというMSDNのドキュメントを見たことがあります。掘り出せるか見てみます。

4

1 に答える 1

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

ステップ 2 は、ロードされているかどうかを確認することです。これは、厳密に名前が付けられていないアイテムであっても、バージョン固有です。

手順 4 では、プローブによってアセンブリを読み込もうとしていますが、これはバージョン固有ではありません。

私が混乱しているのは、構成ファイルに情報がない場合、そもそも DLL をどのように見つけるのかということです。私の理解にもギャップがあると思います:-)。

于 2010-02-12T15:47:24.607 に答える