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