1

我正在使用 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

4

1 回答 1

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

于 2013-03-23T21:35:35.900 回答