msbuild转换一次配置几次

San*_*huk 8 msbuild web-config configuration-files visual-studio-2010 visual-studio

我的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>
Run Code Online (Sandbox Code Playgroud)

我想要做的是从ProjectsDeployBin目录中获取所有配置并将每个文件应用到主web.config.

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

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

Bil*_*lal 8

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

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

例:

<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>
Run Code Online (Sandbox Code Playgroud)

通过快速测试,看起来这个错误在Visual Studio 2012中得到修复,但是我无法找到记录该错误的参考/来源,并且原来的Connect错误不再可见.