とを使用してアセンブリの読み込みを混在させると、奇妙な動作が発生しAssembly.LoadFrom
ますAssembly.Load
。
Assembly.LoadFrom
でアセンブリをロードし、後で でアセンブリをロードするときに、奇妙な動作に遭遇しましたAssembly.Load
。を使用してアセンブリをロードしてAssembly.LoadFrom
います。アセンブリは、実行フォルダーではないフォルダーにあります。
後でテストコードで、このアセンブリをもう一度ロードしようとすると、アセンブリが既にロードされているにもかかわらず、(「ファイルまたはアセンブリをロードできませんでした...」)Assembly.Load
でロードが失敗します。System.IO.FileNotFoundException
読み込みは、厳密な名前と厳密でない名前の両方で失敗します (このアセンブリを再び読み込む本来の理由は、 の使用ですBinaryFormatter
)。
ただし、アセンブリが実行フォルダーに配置されている場合、厳密な名前と厳密でない名前の両方の場合で、後の読み込みは成功します。この場合、2 つの同一のアセンブリが 2 つの異なる場所から読み込まれていることがわかります。
この問題を再現する簡単なコード サンプル:
Assembly assembly1 = Assembly.LoadFrom(@"C:\a.dll");
// Loading with a strong-name fails
Assembly assembly2 = Assembly.Load(@"a, Version=1.0.0.0, Culture=neutral, PublicKeyToken=14986c3f172d1c2c");
// Also loading with a non-strong fails
Assembly assembly3 = Assembly.Load(@"a");
- CLR が既に読み込まれたアセンブリを無視する理由は何ですか?
- どうすればこの問題を軽減できますか?