2011-07-20 46 views
2

私はビルドプロセスを改善しようとしています。そのためには、コピーローカルをオフにし、ソリューション全体を共通の\ binディレクトリに構築することを検討してきました。CopyLocal = FalseでVS2010の参照を管理する

しかし、もうコピーされていない参照をbinディレクトリに入れるのがベストプラクティスですか?私は実際の実装プロジェクトの1つでこれをやりたいと思っています。その多くは同じ参照コンポーネントを使用しているため、ビルド後のステップが増えることになります。

私はカスタムmsbuildファイルを作成することができますが、それはVisual Studio(私は思う)の外で手動で実行する必要があることがわかりますか?それは摩擦のように思える。たとえば、私がmsbuildプロジェクトを作成し、それを私の解決策の一部として持つ方法がありますか?

これは私のソリューションビルドの外でこれを管理し、その環境をセットアップして/ bin/debugと/ bin/releaseディレクトリに置くためにdevを一度実行しなければならないcopy_references.batファイルを持っているのがベストですか?これは少し壊れやすいようですが、/ binとsvnに直接ファイルをチェックするよりも優れています。

私は空のC#コンポーネントプロジェクトを作成し、コピーローカルをオンにしてそのプロジェクトへの参照を追加することを考えました。これが他のすべてのプロジェクトに依存した場合、それはコピーを管理します。

次の質問は、これをナゲットリファレンスでどのように管理するかです。私の好みは、svnへの参照をチェックしないで、それらをつかむようにnugetに伝えます。したがって、これはビルド・ステップである必要がありますが、ソリューション・レベルでも必要です。私はこのアプローチを評価しています理由について、もう少し背景については

追加情報

、ここを見て:

http://www.ndepend.com/Res%5CNDependWhiteBook_Assembly.pdf

を目的は、大規模停止することにより、コンパイル時間をスピードアップすることですこれらすべての冗長コピー。依存関係の評価が機能しない場合は、手動で作業する必要がない場合もあります。参照されているアセンブリの依存関係を最上位プロジェクトにプルして、それらがbinフォルダーに格納されるようにする必要があります。

コピーローカルをオフにしたいという欲望は、トレース依存関係の両方でmsビルドプロセスの非効率性と、物事をコピーする必要性を評価していると考えられます。

+1

あなたは*ビルドプロセスを改善していません。 –

+0

どのアスペクトを参照しているのかわからないので、ここに値を追加するには、これを展開する必要があります。あなたはローカルコピーのファンですか? – DanH

+0

@Hansと同意すると、表面上の音が悪い...すべてのプロジェクトの出力を統合する実装の詳細を満足させようとすると、[非]機能的な要件はありますか? –

答えて

2

$(OutDir)プロパティをグローバルにオーバーライドして、CopyLocalを有効にしておくことができます。すべてのプロジェクトが同じ$(OutDir)にコピーしているので、重複しすぎることはありません。これはかなり簡単です。

さらに多くの場合、標準のビルドに配線され、カスタムのビルド後のデプロイメントを実行する共有のインポートファイルを作成することもできます。例えば、

<Target Name="Deploy" 
    DependsOnTargets="Deploy)" 
    AfterTargets="Build"> 

    ... copy all output files ... 
    e.g. use wildcards $(OutDir)\*.dll 
    e.g. $(OutDir)\$(TargetName)$(TargetExt) 
    e.g. copy referenced assemblies and copy, see below 
</Target> 

参照を取得するには、あなたがここに答えのように特定のコレクションを取得するにはResovleAssemblyReferencesターゲットを呼び出し、戻り値を使用するか、または独自のターゲットを作成することができ、 Return the ReferenceCopyLocalPaths from <MSBuild> task それはかなり複雑になることがメタデータを持つアイテム配列に独自の "ルール"を宣言できる場合は、簡単に設定できます。

+0

コピーローカルを維持することは、コピーを実行する前にmsbuildがチェックを行わないため、ビルドが遅くなるため、各ビルド時に同じファイルがn回コピーされます。リンクの詳細を私は質問に追加しました。私は、あなたの解決参照先が多くを助けるかもしれないと思います。私はdevスタジオでは可能ではないと思う解決レベル項目として実行したいだけです。一番簡単な方法は、すべてがIDEに残っていて、msbuildで動作するように、ローカルのコピーをローカルに持っているリファレンスを持つダミープロジェクトを作ることです。一方、IDEでは他のアプローチは機能しません。 – DanH

関連する問題