さて、先日この質問をしましたが、あいまいさのため閉鎖されました。もっと具体的にしようと思います。プロジェクトで、たとえばC#(Visual Studioを使用)で、dllへの参照を追加し([参照]-> [参照の追加]を右クリック)、そのdllの場所はC:\ Blah\Fooにあります。ここで、ビルドされたexeを別のマシンに移動する場合、dllの場所はexeと一緒である必要がありますか、それともC:\ Blah \ Fooにある必要がありますか?ありがとうございました。
5 に答える
説明した方法で参照を追加すると、その参照が出力フォルダー(exeファイルと同じ)にコピーされます。参照(F4)のプロパティを確認すると、「ローカルコピー」というオプションが表示されます。これがtrueに設定されている場合、DLLはEXEファイルと同じ出力フォルダーにコピーされます。
したがって、アプリケーションを別のマシンにデプロイするときは、exeとそれが参照するすべてのDLLをデプロイメントの場所にコピーする必要があります。Windowsは、いくつかの場所でDLLを検索します。最初の場所は、EXEファイルと同じフォルダーです。
通常、アセンブリをアプリケーションと同じフォルダーに配置するだけで、デフォルトのプローブパスに配置され、(ほとんどのアプリケーションで)検出されますが、アプリケーションの種類に応じて、他にも多くのオプションがあります。参照を定義するときに、「ローカルにコピー」するオプションがあります。これにより、アセンブリがアプリケーションの出力フォルダーにコピーされます。これをに設定したままにするTrue
と、アセンブリ(DLL)は.exeを使用して実行され、通常は「正常に機能」します。
ランタイムが使用する完全なプロセスについては、MSDNの「ランタイムがアセンブリを見つける方法」で説明されています。特に、「コードベースまたはプロービングによるアセンブリの検索」というタイトルのトピックでは、アセンブリがどのように詳細に配置されるかについて説明します。これは、多くの要因によって異なります。
DLLはexeファイルである必要があります。このリンクを見て、DLLの.NET検索の場所を確認してください。参照されたDLLをロードするために場所が検索される順序は何ですか。
dllは、GACにインストールすることも、EXEとともに同じディレクトリに存在することもできます。
編集:上記は、参照を解決するためのほんの2、3の場所です。
参照を追加するときは、このアセンブリのcsprojにパスを追加します。このdllを参照できることを確認する必要があります。
デプロイするときは、dllがBin
ディレクトリにコピーされるため、別の質問になります。
デプロイする場合は、csprojでアセンブリのパスを確認し、アセンブリをデプロイしていることを確認してください
注意:CopyLocal
あなたのrefrenceのプロパティを確認してください
2その他の解決策:
GAC Global Assembly Cache
アセンブリを共有するために使用できます
ツール:Gacutil.exe
アセンブリを設定するため