1

私は約50のプロジェクトのソリューションを持っています。

これらのプロジェクト (テスト以外のプロジェクト) のほとんどは、単一のフォルダーに出力するようにセットアップされています。

「ローカルにコピー」すると、ファイルが参照されるすべての場所にファイルをコピーする必要があるため、(プロジェクト参照の場合) ビルド時間が遅くなる可能性があると聞きました。

しかし、すべてのプロジェクトが同じ場所にコピーされている場合、Visual Studio はファイルが既にそこにあることを確認し、再度コピーしないようにするのに十分賢いでしょうか?

例を次に示します。

SolutionA
   |
   +---ProjectA (Output set to C:\MyProj)
   |
   +---ProjectB (Output set to C:\MyProj)
   |        References ProjectA
   |
   +---ProjectC (Output set to C:\MyProj)
   |        References ProjectB
   |
   +---ProjectD (Output set to C:\MyProj)
            References ProjectA

通常のソリューションでは、ローカル コピーは、これらの各プロジェクトの bin\Debug フォルダーへの参照のコピーを制御します。

しかし、プロジェクト プロパティの「出力」セクションを更新して、bin\Debug ではなく C:\MyProj にすべてドロップするようにしました。

参照用に Copy Local を false に設定しない場合、ProjectA.dll は C:\MyProj に 4 回コピーされますか? それとも、Visual Studio は 1 回だけ実行できるほどスマートなのでしょうか?

4

2 に答える 2

2

あなたが求めているのは、「ファイルをそれ自体にコピーするのに時間がかかりますか?」ということだと思います。ご想像のとおり、そうではありません。これは、Microsoft.Build.Tasks アセンブリで Reflector または ILSpy を使用して確認できます。Copy クラスがコピーを実行します。その DoCopyIfNecessary() メソッドには、次のコード行が含まれています。

    if (string.Compare(sourceFileState.Name, destinationFileState.Name, StringComparison.OrdinalIgnoreCase) != 0)
    {
        flag = this.DoCopyWithRetries(sourceFileState, destinationFileState, copyFile);
    }

つまり、コピー元とコピー先のファイルが同じ場合、コピーをスキップします。必然的に、 File.Copy() は満足できなくなります。

于 2012-08-20T21:16:31.477 に答える
0

ローカル コピーを bin ディレクトリにコピーします。通常、Visual Studio は Clean コマンドでこのディレクトリを空にします。Copy Local を設定しないと、すべての参照が bin フォルダーにないというリスクがあります。

私が推測する別の方法で、それらを bin フォルダーにコピーできます。ただし、クリーンを実行する場合は手動で行う必要があります...

私の知る限り、VS は各プロジェクトに同じ bin ディレクトリがあることを確認できるほどスマートではないため、4 回コピーします (ただし、テストと検証は行います)。上記のシナリオでは、Copy Local を使用するプロジェクトを 1 つだけ持つことができ、これを回避できます。ただし、少なくとも 1 つには Copy Local が必要です。そうしないと、bin ディレクトリにファイルがない状況が発生します。

于 2012-08-20T18:56:31.423 に答える