MSBuild.exe复制任务无法正常工作,除非该文件的某个版本已出现在目标中

时间:2013-03-23 14:05:53

标签: msbuild

我正在使用MSBuild.exe v4.00。我的项目文件中有一个构建目标,它将名为Parameters.MyEnvironment.xml的文件复制到Parameters.xml。 “MyEnvironment”可能会根据调用MSBuild.exe的时间/位置而有所不同。

运行,然后在MSDeployPublish目标中的其他进程使用Parameters.xml。

最后,我删除了Parameters.xml文件,因为它只是我的一个环境特定文件的副本。

如上所述运行时,MSDeployPublish目标的行为就像Parameters.xml不存在但不报告错误。

但是,如果我删除了删除任务,那么在项目构建完成后,Parameters.xml仍然存在,MSDeployPublish会看到它并正确使用它。奇怪的是,对Parameters.MyEnvironment.xml的任何更改都会立即反映在下一个构建过程中。

总结一下 - 将文件(之前不存在的文件)复制到后续目标使用的项目文件夹中不起作用。但是,如果我将原始文件保留在那里并用新版本的源代码覆盖它,它就可以反映新内容!

这位作者已经确定了MSBuild的锁定/打开文件问题,我在这里发生了同样的事情吗? http://dotnet.dzone.com/articles/using-custom-webconfig-0

1 个答案:

答案 0 :(得分:0)

好吧,我仍然没有理解为什么MSDeployPublish目标绊倒我的Copy任务。但是,我现在有一个混乱的解决方法,我现在可以忍受。

我已将这些目标添加到我的wdproj文件中:

<Target Name="BeforeTeamCity">
    <Copy Condition="Exists('$(MSBuildProjectDirectory)\Parameters.$(Configuration).xml')" SourceFiles="$(MSBuildProjectDirectory)\Parameters.$(Configuration).xml" DestinationFiles="$(MSBuildProjectDirectory)\Parameters.xml" />
  </Target>

<Target Name="AfterTeamCity">
  <Delete Files="$(MSBuildProjectDirectory)\Parameters.xml"/>
</Target>

以前我尝试使用BeforeTargets和AfterTargets属性将它们折叠到构建的其余部分,这样我就可以通过一次调用MSBuild.exe完成所有操作,并且它们可以很好地链接在一起。

放弃这个,我现在调用MSBuild.exe三次。一次用于BeforeTeamCity目标,一次用于MSDeployPublish目标,一次用于AfterTeamCity目标。工作正常,去图。