2012-11-12 36 views
0

我有一个msbuild proj文件,如下所示。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> 

在上述目标中指定两个复制过程引发错误如下 第一个副本投掷误差如下

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

第二副本被投掷误差如下

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

你可能会丢失一个 - 字符在变换。

<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

+0

谢谢贝蒂 – TVSuser1654136