具有项目转换的Msbuild副本无法正常工作

时间:2012-11-12 13:44:11

标签: .net tfs msbuild

我有一个msbuild proj文件如下。

<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)" />

为什么会这样?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

看看这里,一个非常简单的方法来调试MSBuild文件: http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx