我使用的是MSBuild.exe V4.00。 我在我的项目文件中得到了构建目标是复制一个名为Parameters.MyEnvironment.xml到的parameters.xml文件。 “MyEnvironment”可基于何时/何MSBuild.exe被称为上。
这将运行,则的parameters.xml用于通过在MSDeployPublish目标的其它过程。
最后,我删除该文件的parameters.xml,因为它只是一个我的具体环境,文件中的一个副本。
如上所述,当运行时,MSDeployPublish目标的行为就好像是的parameters.xml不是有,但不报告错误。
但是,如果我上的删除任务,以便保留的parameters.xml我的项目建设完成后,MSDeployPublish看到它并正确地使用它。 奇怪的是,到Parameters.MyEnvironment.xml任何变化立即反映在未来的构建过程。
总结 - 复制文件(这是以前没有出现)成随后的目标使用不工作,我的项目文件夹。 但是,如果我离开了原来的文件存在,并与源的新版本覆盖它,它的作品反映了新内容!
笔者已经确定与MSBuild的锁定/打开文件的问题,已经得到了我这里发生了同样的事情? http://dotnet.dzone.com/articles/using-custom-webconfig-0
嗯,我还没有读懂了为什么MSDeployPublish目标绊倒我的副本任务的底部。 但是,我有一个混乱的解决方法,我可以住了。
我已经添加了这些目标,以我的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目标。 做工精细,走的身影。
文章来源: MSBuild.exe Copy task not working properly unless a version of the file already appears in target