5

どこでも「ローカルにコピー」を有効にしないと、多くのプロジェクトを含む C# ソリューションのビルド時間が大幅に短縮されることがわかりました。いくつかのテストを行ったところ、(少なくとも私たちのソリューションでは) 「ローカルにコピー」を削除するだけで、ビルド時間を 2 ~ 3 倍増やすことができるようです。これはおそらく、ライブラリを共通のディレクトリに保存する必要があることを意味します。

これを達成するための提案/ベストプラクティスはありますか? DLL ではなく、プロジェクトへの参照を保持したいことに注意してください。

4

3 に答える 3

4

プロジェクトの出力ディレクトリを ../../Debug (または ../../Release) に再ターゲットします。ライブラリもこれらのディレクトリに配置されます。

各プロジェクトの参照パスを、それに応じて Debug または Release ディレクトリに設定します (この設定は、相対参照ではなく絶対参照であるため、ユーザー ファイルに保持されます)。

プロジェクト参照はプロジェクト参照として保持します。デプロイされたすべてのマシンの GAC に存在することがわかっているシステム レベルの dll でない限り、すべての dll 参照はコピー ローカル false および特定のバージョン false を持ちます。

これは、コマンド ラインから (MSBuild を使用して) スクリプト化されたビルドを模倣する IDE での扱いと手動ビルドで機能します。

展開用ではないテスト プロジェクトは、出力を一元化された Debug|Release ディレクトリに送信せず、標準のデフォルトの場所を使用するだけです (ロックの問題を回避するためにローカルにコピーを使用します)。

ライブラリのバージョンは、Debug および Release ディレクトリの dll を置き換える自動ビルド プロセスによって変更される場合があります。

于 2009-01-28T16:22:34.787 に答える
1

アプリケーションがソリューション全体に分散している場合は、.. \ ..\Buildにビルドすることをお勧めします。(ソリューションが1つしかない場合は、.. \ Buildを検討してください。)Visual Studioは、デフォルトで、出力フォルダー内の参照ファイルを取得します。ただし、MSBuildを使用してVSなしでビルドする場合は、次の例に示すように、ビルドフォルダーを参照パスとして追加する必要があります。

  <Target Name="BuildApp">
    <MSBuild
        Projects="@(ProjectReference)"
        Targets="Rebuild"
        Properties="ReferencePath=..\..\Build;$(LibraryFolder)" >
    </MSBuild>
    <OnError ExecuteTargets="BuildFailed" />
  </Target>

この例はまた、私の2番目の議論に私を連れて行きます。ビルドフォルダをライブラリフォルダとして使用するべきではないと思います。これは、たとえばローカルコピーを使用するなどして、個々のプロジェクトがライブラリアセンブリを誤って上書きする可能性があるためです。ライブラリのバージョンを厳密に管理する必要があるため、これを分離しておくことをお勧めします。(開発者は、このパスを参照パスとしてVSに追加する必要があります。)

ShuggyCoUkの提案に従って、.. \ .. \ Build into .. \ ..\Releaseと..\..\Debugを分離することもできます。

于 2009-02-02T16:32:44.040 に答える
0

私は、Unix ベースのシステムで一般的な最上位の Bin Lib フォルダーのセットアップが好きです。ところで、このタイプのシステムに移行すると、リリース エンジニアの作業も大幅に楽になります。インストーラーの作成は、すべてを 1 つのフォルダーから取り出すだけでよいため、大幅に簡素化されます。DLLはビンに入れられます..

于 2009-01-28T15:36:53.160 に答える