为什么MSBuild会保留文件?

时间:2014-05-08 16:01:21

标签: msbuild

我有以下MSBuild脚本:

<Copy SourceFiles="$(AdminPath)\web.config" DestinationFiles="$(AdminPath)\tmpweb.config" />
<TransformXml Source="$(AdminPath)\tmpweb.config" Transform="$(AdminPath)\web.$(Configuration).config" Destination="$(AdminPath)\web2.config" />
<Copy Sourcefiles="$(AdminPath)\web2.config" DestinationFiles="$(AdminPath)\web.config" OverwriteReadOnlyFiles="true" />
<Delete Files="$(AdminPath)\tmpweb.config;$(AdminPath)\web2.config" />

但是,尽管删除了web2.config,但tmpweb.config不是&#34;因为它正被另一个进程使用&#34; (错误MSB3061)。

我该如何解决这个问题?

我已尝试按照this blog post中所述复制文件,但这似乎也无效。

2 个答案:

答案 0 :(得分:1)

我正在使用v10的发布任务。我应该使用v12。

以下使用以下参考:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

答案 1 :(得分:0)

不是MSBuild锁定文件,而是TransformXml任务,它在某些部署策略下非常烦人。您可以尝试bug report中的变通方法,我个人通过TransformXml任务类或XmlTransformation类直接将其包装在自定义任务中,这可以带来额外的灵活性,例如通过{ {1}},即降级某些警告以调试消息,以减少日志噪音。