0

AfterBuildプロジェクト構造全体を別のフォルダーにコピーするためにターゲットを使用したいと考えています。これがプロジェクト構造です

TANKProject  
|
|__TANK.CLI
|__TANK.Core
|__TANK.Web 

binフォルダーと.slnフォルダーを含むプロジェクト構造全体を場所にコピーしたいB:\animesh\repos

そのために、各ファイルのAfterBuildターゲットに次のスニペットを挿入します。.csproj

<ItemGroup>
    <_CustomFiles Include="..\TANK.ProjectName\*.*" />
</ItemGroup>
<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFiles="B:\repos\TANK"
    SkipUnchangedFiles="true" />

プロジェクトのビルド中に次のエラーが発生します。

"DestinationFiles" refers to 3 item(s), and "SourceFiles" refers to 1 item(s). They must have the same number of items.

ここで何が欠けていますか?


解決

AdrianMonk の回答に基づいて、次のAfterBuildように構成を変更しました。

  <Target Name="AfterBuild">
    <ItemGroup>
      <_CustomFiles Include="..\**" />
    </ItemGroup>
    <Copy 
      SourceFiles="@(_CustomFiles)" 
      DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')" 
      SkipUnchangedFiles="true" />
  </Target>

AfterBuildこれで十分なので、このターゲットを 1 つのプロジェクトにのみ配置しました。

4

1 に答える 1

2

DestinationFolderではなく、を指定する必要がありますDestinationFiles

<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFolder="B:\repos\TANK"
    SkipUnchangedFiles="true" />

ただし、これはプロジェクト構造のルートからファイルをコピーするだけです。サブディレクトリ内のファイルを含む構造全体をコピーするには、次を使用する必要があります。

<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')"
    SkipUnchangedFiles="true" />

これにより、プロジェクト構造全体 (出力ディレクトリも含む) の再帰的なコピーが実行されます。詳細については、MSBuild コピー タスクのリファレンス ドキュメントを参照してください。

于 2013-03-10T21:29:56.927 に答える