-1

イメージ操作に .NET dll ファイルを使用しており、ソリューション エクスプローラーの [参照の追加] を使用して C# アプリケーションに追加し、そのクラスを使用しています。多くのアプリケーションがそのdllを使用しているため、次のようなアプリケーション固有のフォルダーにdllファイルを配置したくありません。

  • C:\Program Files\<Application Name>\また
  • C:\Program Files (x86)\<Application Name>\また
  • C:\ProgramData\<Application Name>\また
  • C:\Users\<Username>\AppData\

また、dll ファイルを Windows のすべてのアプリケーションから共通にアクセスできるフォルダやフォルダC:\Windows\などの共通フォルダに配置したいと考えています。C:\Windows\System32

dll ファイルを呼び出し元の exe と同じフォルダーに配置すると正常に動作しますが、C:\Windows\System32ディレクトリに配置すると、アプリケーションの C# コードが dll を見つけることができず、エラーが発生します。

DLL をロードできません: 指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E)

system32 ディレクトリまたはその他の共通ディレクトリで dll を探すようにコードに指示するにはどうすればよいですか?

共有 dll とライブラリに使用できる他の共通フォルダーは何ですか?

4

1 に答える 1

1

これが、グローバル アセンブリ キャッシュの設計目的です。こちらの MS ドキュメントに記載されているとおりです。

共通言語ランタイムがインストールされている各コンピューターには、グローバル アセンブリ キャッシュと呼ばれるコンピューター全体のコード キャッシュがあります。グローバル アセンブリ キャッシュには、コンピューター上の複数のアプリケーションによって共有されるように特別に指定されたアセンブリが格納されます。

ただし、使用には落とし穴があるため、MS 自身のアドバイスに注意してください。

アセンブリは、必要な場合にのみグローバル アセンブリ キャッシュにインストールして共有する必要があります。一般的なガイドラインとして、アセンブリの依存関係をプライベートに保ち、アセンブリの共有が明示的に必要でない限り、アセンブリをアプリケーション ディレクトリに配置します。

于 2014-04-15T13:21:46.257 に答える