いつ参照を設定するかについてのヒューリスティックがあるかどうか疑問に思っていcopy-local=true
ますか?
参照される型が内部でのみ使用される場合は設定できますcopy-local
がtrue
、参照される型がパラメーターまたは戻り値として公開されている場合、設定copy-local
しfalse
て、ライブラリを使用する必要があるときに依存関係の特定のバージョンを参照する必要があることを示しますか?
誰かが私のためにこれを明確にすることができますか?
いつ参照を設定するかについてのヒューリスティックがあるかどうか疑問に思っていcopy-local=true
ますか?
参照される型が内部でのみ使用される場合は設定できますcopy-local
がtrue
、参照される型がパラメーターまたは戻り値として公開されている場合、設定copy-local
しfalse
て、ライブラリを使用する必要があるときに依存関係の特定のバージョンを参照する必要があることを示しますか?
誰かが私のためにこれを明確にすることができますか?
ローカルにコピーすることは、展開のシナリオとツールにとって重要です。原則として、参照が GAC 内に含まれていない場合は、CopyLocal=True を使用する必要があります。
ローカルにコピーするということは、基本的に、アプリケーションを機能させるために、この DLL を手動でデプロイする必要があることを意味します。false の場合、本質的には、「個別にインストールするかチェーンする必要がある別のコンポーネントに依存しています。DLL は既にそこにあるだけです」という意味です。
Copy local は、ローカル デバッグをサポートするために実際に実装されました。アプリケーションをパッケージ化して配置する場合は、プロジェクトを同じ出力フォルダーにビルドし、そこに必要なすべての参照があることを確認する必要があります。
CopyLocal は、大きなソース ツリーを構築する場合に特に厄介です。ここで CopyLocal を無効にする方法についての関連する質問がありました。Visual Studio の大規模ソリューションのベスト プラクティス (2008)。
大規模なソース ツリーの構築に対処する方法については、「MSBuild: 信頼できるビルドを作成するためのベスト プラクティス、パート 2」という記事に書いています。
要するに、ファイルのコピーによってビルドに時間がかかり、すべてのビルドに費やしても構わないと思っている場合は、CopyLocal を無効にします。
それは本当にターゲット環境についてです。コピー ローカルが false の場合、アセンブリは既にターゲット環境 (通常は GAC) に存在することになります。true に設定すると、ビルドの出力に確実に表示されるため、ターゲット環境へのデプロイが容易になります。
CopyLocal の動作について詳しく説明している次の MSDN リファレンスを確認してください。
残念ながら、いくつかの癖があり、CopyLocal は、以下に示すように構造化されたセカンダリ アセンブリのアセンブリ参照に対して期待どおりに動作する必要はありません。
これにより、ターゲット マシンの GAC にサード パーティのアセンブリをインストールする予定がない場合、xcopy の展開が難しくなります。
このオプションは、ビルド フェーズにのみ影響します。ビルドされたアセンブリのローカル ディレクトリへの参照をコピーするだけです。
別のアセンブリ (T) が、別の参照アセンブリ (R) からの戻り値の型またはパラメーターを持つ、構築中のアセンブリ (A) のメソッドを使用する場合、そのアセンブリ (T) はそのアセンブリ (R) にアクセスできる必要があります。参照されているアセンブリ (R) が GAC にインストールされている場合は、特別なことをしなくても実行できる可能性があります。それ以外の場合は、そのローカル コピーが必要です。
CopyLocal=false を設定するとビルド時間が短縮されますが、展開時にさまざまな問題が発生する可能性があります。
CopyLocal=false の設定に関する私の経験は成功しませんでした。長所と短所の概要については、私のブログ投稿「サブシーケンスを理解しない限り、"Copy Local" プロジェクト参照を false に変更しないでください」を参照してください。