45

参照の copy-local=true が正確に何をするのか疑問に思っています。参照されたアセンブリをそのすべての依存関係と共に出力ディレクトリにコピーしますか?

私のシナリオは次のとおりです。log4net を利用するカスタム ログ ラッパーがあります。log4net.dll リファレンスを copy-local true に設定して、MyLogWrapper.dll のリリース アセンブリをビルドします。コピー ローカルを true に設定して MyProject から MyLogWrapper.dll を参照すると、log4net.dll もコピーされるはずです。私は MyLogWrapper.dll のみを参照しており、MyProject の依存関係は参照していません。log4net.dll は MyProject 出力ディレクトリにコピーされませんが、MyLogWrapper の他のすべての依存関係はコピーされます。何が問題なのですか?

さらに実験を行ったところ、GAC からアセンブリ (log4net.dll) を削除すると、ローカルにコピーされ始めたようです。これが問題であることを誰でも確認できますか?

4

6 に答える 6

31

残念ながら、MSDN ドキュメントから抜粋した次のステートメントによると、既に GAC にあるアセンブリに対して CopyLocal 機能が期待どおりに機能しないようです。

GAC に登録されているカスタム コンポーネントへの参照を含むアプリケーションをデプロイする場合、CopyLocal 設定に関係なく、コンポーネントはアプリケーションと共にデプロイされません。以前のバージョンの Visual Studio では、参照に CopyLocal プロパティを設定して、アセンブリが配置されたことを確認できました。ここで、\Bin フォルダーにアセンブリを手動で追加する必要があります。これにより、すべてのカスタム コードが精査され、慣れていないカスタム コードを公開するリスクが軽減されます。

プロジェクト参照がどのように機能するかについての詳細を説明する次のページで、より多くの情報を見つけることができます。

MSDN: プロジェクト リファレンス

于 2009-06-10T05:24:44.183 に答える
10

ここで MSDN でこの質問をした後、この動作は仕様によるものと思われます。「GAC に登録されているカスタム コンポーネントへの参照を含むアプリケーションを展開/コピーする場合、ローカル コピーの設定に関係なく、コンポーネントはアプリケーションと共に展開/コピーされません。」

于 2008-11-26T14:08:54.160 に答える
7

トリックがあります。参照 Copy Local を false に設定してから、再度 true に設定すると、Visual Studio はその参照にプライベート メタデータを自動的に追加します。少なくとも VS 2010 はそうです。私は最近、TFS ビルド サーバーの問題を解決するためにこれを行いました。何らかの奇妙な理由で GAC に多くのエンタープライズ ライブラリ コンポーネントがインストールされていたため、TFS ドロップ フォルダーからプロジェクトを展開するときに大きな問題が発生しました。その偽/真のトリックが私たちを救ってくれました。

于 2012-10-08T10:32:30.947 に答える
5

過去に私を捕まえたので、コピーローカルには少し注意する必要があります!

ごくまれに、特定の .dll について、ビルド フォルダーへのコピーに警告なしで失敗することがあります。通常、これは開発マシンには表示されません.dllはGACにもあることが多いため(開発に使用している開発ツール/ライブラリをインストールしている場合)、配布/バンドルされるまで気付かないインストーラーにインストールされ、必要なファイルがクライアント マシンにありません。

このバグに関する情報はあまりありませんが、このスレッドは特定のライブラリについてそれを示しています: here .

これに引っかかったので、プロジェクトに必要なアセンブリを正確に把握し、スクリプトまたは同様の自動化されたアクションを使用して、ビルド時に、または、インストーラーを作成するとき、または配布用のファイルを収集するときに、

于 2008-11-26T12:30:30.833 に答える
4

local copy が true に設定されている場合、属性 local copy = tue を持つすべてのアセンブリがアプリケーションの bin ディレクトリにコピーされます。

あなたの場合、dllは他のdllを使用している可能性があるため、それも必要です。

于 2008-11-26T12:22:30.647 に答える
0

参照されたプロジェクトが GAC アセンブリに依存している場合、これは Visual Studio 2015 ではプロジェクト参照で尊重されなくなっていることがわかりました。GAC アセンブリは常にルート プロジェクトの出力にコピーされ、コピー local = false は、GAC dll への参照を保持するプロジェクトの出力に関してのみ尊重されます。

フィードバックを接続する

于 2015-09-18T08:27:21.483 に答える