MSBuild复制任务第一次无法复制文件

14

我创建了一个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> 

请修正您的代码缩进,它不易理解。 - Julien Hoarau
抱歉,插入脚本时遇到了一些问题...现在一切都解决了。 - Draco
1个回答

23

当解析脚本时,itemgroups将被评估。此时您的文件还不存在。要能找到文件,您需要从目标中填充itemgroup。

  <!-- 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。

编辑:

现在我可以读取您的脚本:将CreateItem标签添加到CopyToBuildFolder目标中。


1
这已经是2014年了,我还在犯这个错误!谢谢 :) - Sameer
1
我花了很长时间尴尬地试图弄清楚为什么复制任务似乎是异步的,而实际上是我的ItemGroup放错了位置。 - Saurbaum
1
MSBuild 3.5及以上版本支持在Target中使用ItemGroups,无需使用CreateItem。同样适用于PropertyGroups和CreateProperty。 - Biepbot Von Stirling
此外,微软文档中展示了一个递归复制文件的例子,其中也犯了同样的错误:https://learn.microsoft.com/en-us/visualstudio/msbuild/copy-task?view=vs-2022。 我已经提交了一个工单来解决这个问题:https://github.com/MicrosoftDocs/visualstudio-docs/issues/7591。 - Nullius
你能展示一下完成的标记吗?这很难跟进。另外,我认为这不适用于最新的 .NET Core。 - Seabizkit
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接