8

我旁边的配置在我的Web.config文件的MSBuild变换一个配置几次

<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目录下的所有CONFIGS与每个文件适用于主要的web.config。

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

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

回答

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不再可见。