8

ich nächste config in meiner Datei Web.config habemsbuild verwandeln

<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> 

Was ich sein alle configs von ProjectsDeployBin Verzeichnis erhalten zu tun versuchen, und jede Datei auf Haupt web.config anzuwenden.

Nach der ersten Umwandlung Haupt web.config von Msbuild gesperrt.

Also, wie kann ich dieses Problem beheben? Gibt es eine andere Möglichkeit, meine web.config durch Sammlung von Dateien zu transformieren? Danke.

Antwort

8

Wie Sie festgestellt haben, weist die mit Visual Studio 2010 ausgelieferte Task TransformXml einen Fehler auf, durch den die Quelldatei gesperrt bleibt.

Um dies zu umgehen, können Sie vor jeder Umwandlung eine temporäre Kopie Ihrer Quelldatei erstellen. Da Sie dann für jede Transformationsdatei mehrere Aufgaben ausführen (kopieren und transformieren), müssen Sie statt Task Batching zu Target Batching wechseln.

Beispiel:

<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> 

Von einem Schnelltest, es sieht aus wie diese Fehler in Visual Studio 2012 festgelegt ist, aber ich bin nicht in der Lage eine Referenz/Quelle zu finden, dass die Dokumente und die original Connect bug ist nicht mehr sichtbar.