Ich versuche, alle die web.config-Dateien in einem Projekt, ich habe hier zu verwandeln ist eine meiner Baumstruktur:Wie erhalte ich eine Msbuild-Aufgabe, um Konfigurationsumwandlungen für eine Sammlung von Dateien durchzuführen?
- Transform.bat
- Wandelt
- ConfigTransform.proj
- Web .Transform.config
- Webseite
- web.config
- Ansichten
- web.config
Es gibt mehr web.config-Dateien, aber die Idee ist, dass dies alle von ihnen finden und gelten die gleichen Config-Transformation auf sie.
Ich habe ein paar Hinweise aus a blog post I found genommen, aber ich bleibe im letzten Schritt stecken, die eigentliche Transformation. Außerdem gibt es ein bisschen einen harten Teil in der Mitte, den ich nicht wirklich mag (ich verstehe nicht ganz, was ich mache und ich mache es offensichtlich falsch). Hier ist, wo ich bin so weit:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Mein Transform.bat sieht wie folgt aus:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Also, wenn ich die Batch aufrufen, die entsprechenden Verzeichnisse erstellt bekommen. Wie Sie jedoch sehen können, musste ich mit dem OutDir ein bisschen kreativ sein, um es zu machen .. \ N \ N. Aus irgendeinem Grund ist der OutDir-Pfad genau so wie das Eingabeverzeichnis, wenn ich dies nicht tue. Also muss ich natürlich etwas in MakeDir ändern, aber ich bin mir nicht sicher was.
Das eigentliche Problem kommt, wenn es beginnt, die Transformationen zu tun. Ich habe versucht, den TransformXML Source-Parameter so zu halten oder in etwa so:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Letzteres ist mir ein Fehler „konnte nicht geöffnet werden Quelldatei. Das Format der angegebenen Pfad wird nicht unterstützt“ und der ehemalige gibt mir diese Ausgabe:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not find a part of the path 'D:\Dev\transform\DoTransforms\Website\Views\Web.config;\Website\Web.config'.
Transformation failed
Done Building Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" (default targets) -- FAILED.
Build FAILED.
auf meine Fragen zusammenfassen:
- Wie vermeide ich den Pfad Problem für die OutDir? Ich habe mit mehreren Pfaden getüftelt, aber ich kann es nicht richtig machen.
- Wie bekomme ich die TransformXml-Task, um mehrere Dateien im Source-Attribut zu akzeptieren?
Bevor Sie in die Richtung gehen, in der Sie sich befinden, können Sie erklären, was Sie zu tun versuchen? –
Umwandlung aller Konfigurationsdateien in meiner Lösung. – sebastiaan
In der Post (unter der Baumstruktur) geklärt. – sebastiaan