我正在使用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
答案 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目标。工作正常,去图。