2012-11-12 37 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