msbuild转换一次配置几次

时间:2012-10-18 10:04:59

标签: visual-studio-2010 visual-studio msbuild web-config configuration-files

我的Web.config文件中有下一个配置

<Target Name="UpdateWebConfigForProjectsBeforeRun">
    <ItemGroup>
      <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>      
    </ItemGroup>    
    <Message Text="Transform file: %(FilesToTransofm.Identity)" />
    <TransformXml Source="web.config"
                  Transform="%(FilesToTransofm.Identity)"
                  Destination="web.config" />
  </Target>

我正在尝试从ProjectsDeployBin目录获取所有配置并将每个文件应用于主web.config。

第一次转换后,主要的web.config被msbuild锁定。

那么我该如何解决这个问题呢?有没有其他方法可以通过文件集合转换我的web.config? 感谢。

1 个答案:

答案 0 :(得分:8)

正如您所注意到的,Visual Studio 2010附带的TransformXml任务存在一个错误,导致源文件被锁定。

要解决此问题,您可以在每次转换之前制作源文件的临时副本。 由于您将为每个转换文件(复制和转换)执行多个任务,因此您需要切换到Target Batching而不是Task Batching

示例:

<ItemGroup>
  <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>      
</ItemGroup>

<Target Name="UpdateWebConfigForProjectsBeforeRun"
        Inputs="@(FilesToTransofm)"
        Outputs="%(Identity).AlwaysRun">
  <Message Text="Transform file: %(FilesToTransofm.Identity)" />
  <Copy SourceFiles="web.config"
        DestinationFiles="web.pre-%(FilesToTransofm.Filename).temp.config" />
  <TransformXml Source="web.pre-%(FilesToTransofm.Filename).temp.config"
                Transform="%(FilesToTransofm.Identity)"
                Destination="web.config" />
</Target>

从快速测试看,Visual Studio 2012中修复了这个错误,但是我无法找到记录该错误的参考/来源,并且original Connect bug无法查看了。