0

私は次のようにmsbuildプロジェクトファイルを持っています。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"   DefaultTargets="Demo">

 <ItemGroup>
   <AllFiles Include="src\**\*" ></SrcFiles>
 </ItemGroup>

 <PropertyGroup>
  <DestFolder>copy\</DestFolder>
 </PropertyGroup>

 <ItemGroup>
  <Transform01
   Include="@(AllFiles >'$(DestFolder)%(RecursiveDir)%(Filename)%(Extension)')" />
  </ItemGroup>

 <Target Name="Demo">
  <Message Text="%40(Transform01):" Importance="high" />
   <Message Text="@(Transform01)" />
   <Message Text="===== Copying files =====" Importance="high" />
   <Copy SourceFiles="@(AllFiles)" DestinationFiles="@(Transform01)" />
   <Copy SourceFiles="@(AllFiles)" DestinationFiles="@(AllFiles >'$(DestFolder)%(RecursiveDir)%(Filename)%(Extension)')" />
 </Target>

 </Project>

上記のターゲットで指定された2つのコピープロセスは次のようにエラーをスローしています最初のコピーは次のようにエラーをスローしています

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

2番目のコピーは以下のようにエラーをスローしています

error MSB3021: Unable to copy file "..\Data\Files\dll\1.dll" to "@(AllFiles >'copy\dll\1.dll')".Illegal characters in path.

しかし、私が以下に示すようにコピープロセスを書くと、コピーはエラーなしで行われます

<Copy SourceFiles="@(AllFiles)" DestinationFiles="$(DestFolder)%(RecursiveDir)%(Filename)%(Extension)" />

なぜこれが起こっているのですか?

4

2 に答える 2

4

変換で-文字が欠落している可能性があります。

 <Copy SourceFiles="@(AllFiles)" DestinationFiles="@(AllFiles ->'$(DestFolder)%(RecursiveDir)%(Filename)%(Extension)')" />

以下も機能するはずです。

<Copy SourceFiles="@(AllFiles)" DestinationFolder="$(DestFolder)\%(AllFiles.RecursiveDir)" />

ソース: http: //msdn.microsoft.com/en-us/library/3e54c37h.aspx

于 2012-11-12T18:09:13.737 に答える