Windowsディレクトリではなく現在のディレクトリにあるDLLを強制的にロードして使用することにより、すべてのオペレーティングシステムで動作するプログラムを作成しようとしていますが、動作しません。「コピー ローカル」を有効にして参照パスを変更しようとしましたが、プログラムは Windows ディレクトリから DLL を読み込もうとしました。私の質問は次のとおりです。どうすればこれを修正できますか?
2 に答える
DLL の検索順序は、MSDN のこちらに記載されています。また、GAC ではなくローカルの bin ディレクトリが最初に検索されるように検索順序を変更する方法についても説明します。
ディレクトリ%windir%\assembly
はGACと呼ばれます。アセンブリはそこにコピーされませんが、通常はインストール パッケージを使用してgacutil /i
、またはインストール パッケージによってインストールされます。
GAC は、一元的に調整されていないビルド バージョンの他の多くのライブラリやアプリケーションによって参照されるライブラリに適したフォルダーです。GAC を使用すると、同じライブラリの複数のバージョンを持つことができます。それらはすべて、1 つのアプリケーションでも間接的に必要になる場合があり、システムに並べてインストールされます。適切な例は、.NET フレームワーク自体です。
あなたが構築するアセンブリは、おそらくそのようなものではありません。基本的に単一のアプリケーションの一部であるアプリケーション アセンブリとライブラリは、GAC に到達することはありません。そうしないと、問題が発生する可能性があります。さまざまなトラブルが考えられます。
- 同じバージョン番号を持つ同じライブラリの異なる (互換性のない) ビルドを誤ってまたは意図的に作成します。
- GAC のアセンブリが GAC にないアセンブリを参照している
- あるアプリは同じアセンブリを GAC にインストールしますが、別のアプリはそれをローカル フォルダー (アプリケーション バイナリが存在する場所) から読み込もうとします。
アセンブリが読み込まれると、GAC のコードが優先されます。GAC からアセンブリを削除するには、 を使用しますgacutil /u
。