我有以下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中所述复制文件,但这似乎也无效。
答案 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}},即降级某些警告以调试消息,以减少日志噪音。