1

複数のターゲットをデプロイするための msbuild スクリプトを作成しています。いくつかの要素を再利用しようとしていますが、予期しない動作が発生しています。

このプロジェクト ファイルを実行すると、次のようになります。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="All" DependsOnTargets="DeployTarget1;DeployTarget2">
  </Target>
  <Target Name="DeployTarget1">
    <PropertyGroup>
      <RootDir>.\source1</RootDir>
    </PropertyGroup>
    <ItemGroup>
      <DeployFiles Include="$(RootDir)\**\*.dll" Exclude="$(RootDir)\bin\C_*.xml" />
    </ItemGroup>
    <Copy SourceFiles="@(DeployFiles)" DestinationFiles="@(DeployFiles->'D:\deploytest\dest1\%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>
  <Target Name="DeployTarget2">
    <PropertyGroup>
      <RootDir>.\source2</RootDir>
    </PropertyGroup>
    <ItemGroup>
      <DeployFiles Include="$(RootDir)\**\*.dll" Exclude="$(RootDir)\bin\C_*.xml" />
    </ItemGroup>
    <Copy SourceFiles="@(DeployFiles)" DestinationFiles="@(DeployFiles->'D:\deploytest\dest2\%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>
</Project>

DeployTarget1 は、予想どおり、ファイルを source1 ディレクトリから dest1 に再帰的にコピーします。

DeployTarget2 は source1 と source2 の両方を dest2 にコピーします、これは私が予想したものではありません。

D:\deploytest>msbuild /t:All test.proj
Microsoft (R) Build Engine version 4.0.30319.17929
[Microsoft .NET Framework, version 4.0.30319.18052]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 8/20/2013 2:37:17 PM.
Project "D:\deploytest\test.proj" on node 1 (All target(s)).
DeployTarget1:
  Copying file from ".\source1\test1.dll" to "D:\deploytest\dest1\test1.dll".
  copy /y ".\source1\test1.dll" "D:\deploytest\dest1\test1.dll"
DeployTarget2:
  Copying file from ".\source1\test1.dll" to "D:\deploytest\dest2\test1.dll".
  copy /y ".\source1\test1.dll" "D:\deploytest\dest2\test1.dll"
  Copying file from ".\source2\test2.dll" to "D:\deploytest\dest2\test2.dll".
  copy /y ".\source2\test2.dll" "D:\deploytest\dest2\test2.dll"
Done Building Project "D:\deploytest\test.proj" (All target(s)).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.06

なぜこれが起こるのか誰か知っていますか?
この「機能」に関するドキュメントを教えてもらえますか?

4

1 に答える 1

2

ItemGroup は累積的です。項目グループが参照されるたびに、項目が既存のグループに追加されます。明示的なグループが必要な場合は、一意の名前を付けるか、使用する前にクリアする必要があります。

使用する<DeployFiles Remove="**/*">

参照: https://stackoverflow.com/a/7915992/736079

于 2013-08-20T19:08:55.520 に答える