我正在编写一个 MSBuild 脚本,它的工作是构建一个解决方案,然后将两个项目的构建输出复制到一个统一的目录中。很简单。
我正在使用Copy任务执行此操作。像这样:
<ItemGroup>
<OutputFiles1 Include="Project1\bin\Release\*.*" />
<OutputFiles2 Include="Project2\bin\Release\*.*" />
</ItemGroup>
<Target CopyOutput>
<Copy SourceFiles="@(OutputFiles1)" DestinationFolder="DeployOutput" />
<Copy SourceFiles="@(OutputFiles2)" DestinationFolder="DeployOutput" />
</Target>
我遇到的问题是:这两个ItemGroup元素包含构建脚本启动时的目录内容,而不是解决方案构建完成时的目录内容。
因此,例如,如果我在 Project1 中添加对新程序集的引用,然后运行构建,则 DeployOutput 目录不包含该新程序集,因为它在构建开始时不存在于项目输出目录中。但是如果我再次运行构建,文件就在那里并被复制。
这种行为似乎是设计使然,但我不确定如何在不生成批处理文件或类似的东西来完成复制的情况下完成我的任务。