2013-03-23 34 views
1

我正在使用MSBuild.exe v4.00。我在我的项目文件中有一个构建目标,它将名为Parameters.MyEnvironment.xml的文件复制到Parameters.xml。 “MyEnvironment”可以根据MSBuild.exe被调用的时间/地点而有所不同。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

回答

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目标。工作正常,去图。

相关问题