【问题标题】:msbuild transform one config few timesmsbuild 转换一个配置几次
【发布时间】:2012-10-18 10:04:59
【问题描述】:

我的 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? 谢谢。

【问题讨论】:

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


    【解决方案1】:

    如您所见,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 不再可见。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2012-05-10
      • 2010-12-24
      • 2022-11-01
      • 2012-01-15
      • 2018-07-03
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多