MSBuild复制任务不会第一次复制文件

时间:2009-03-03 14:34:41

标签: msbuild

我创建了一个build.proj文件,该文件包含一个复制文件的任务,这些文件将在构建完成后生成。问题是第一次没有复制这些文件,我必须在build.proj上再次运行msbuild,以便可以复制文件。请任何人告诉我以下build.proj文件有什么问题:

<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>

<SourcePath Condition="'$(SourcePath)' == ''">$(MSBuildProjectDirectory)</SourcePath> 

<BuildDir>$(SourcePath)\build</BuildDir>

</PropertyGroup> 

<ItemGroup> 
    <Projects 
       Include="$(SourcePath)\src\myApp\application.csproj">  
    </Projects> 
</ItemGroup> 

<Target Name="Build">
   <Message text = "Building project" />    
   <MSBuild   
     Projects="@(Projects)" 
     Properties="Configuration=$(Configuration)" /> 
</Target>

<ItemGroup>
   <OutputFiles Include ="$(MSBuildProjectDirectory)\**\**\bin\Debug\*.*"/>
</ItemGroup>

<Target Name="CopyToBuildFolder">
   <Message text = "Copying build items" />
   <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(BuildDir)"/>
</Target>

<Target Name="All"
   DependsOnTargets="Build; CopyToBuildFolder"/>

</Project> 

1 个答案:

答案 0 :(得分:22)

解析脚本时会评估项目组。那时你的文件还没有。为了能够找到您必须从目标中填充项目组的文件。

  <!-- SQL Scripts which are needed for deployment -->
  <Target Name="BeforeCopySqlScripts">
    <CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
      <Output ItemName="CopySqlScript" TaskParameter="Include"/>
    </CreateItem>
  </Target>

此示例使用Include属性中的表达式创建名为“CopySqlScript”的ItemGroup。

编辑:

现在我可以阅读你的脚本了:在你的CopyToBuildFolder目标中添加CreateItem标签