Wie bekomme ich eine msbuild-Task zum Ausführen von Konfigurationsumwandlungen für eine Dateisammlung?
Ich versuche, alle web.config-Dateien in ein Projekt umzuwandeln. Hier ist meine Baumstruktur:
Transform.batTransformationenConfigTransform.projWeb.Transform.configWebseiteweb.configAnsichtenweb.configEs gibt mehr web.config-Dateien, aber die Idee ist, dass dies alle findet und die gleiche Konfigurationsumwandlung auf sie anwendet.
Ich habe ein paar Hinweise genommeneinen blog post habe ich gefunden Aber ich bleibe im letzten Schritt stecken, der eigentlichen Transformation. Außerdem gibt es in der Mitte einen rauen Teil, den ich nicht wirklich mag (ich verstehe nicht ganz, was ich tue, und ich tue es offensichtlich falsch). Hier bin ich soweit:
<code><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> </code>
Meine Transform.bat sieht so aus:
<code>%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj </code>
Wenn ich also den Batch aufrufe, werden die entsprechenden Verzeichnisse erstellt. Wie Sie jedoch sehen können, musste ich ein wenig kreativ mit dem OutDir umgehen, um es zu schaffen. \ N \ N. Wenn ich dies nicht tue, ist der OutDir-Pfad aus irgendeinem Grund genau derselbe wie das Eingabeverzeichnis. Also muss ich natürlich etwas in MakeDir ändern, aber ich bin mir nicht sicher, was.
Das eigentliche Problem entsteht, wenn die Transformationen beginnen. Ich habe versucht, den TransformXml Source-Parameter so oder so zu belassen:
<code>@(_FilesToTransformNotAppConfig->'%(FullPath)') </code>
Letzteres gibt mir eine Fehlermeldung "Quelldatei konnte nicht geöffnet werden: Das angegebene Pfadformat wird nicht unterstützt." und der erstere gibt mir diese Ausgabe:
<code>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. </code>
Um meine Fragen zusammenzufassen:
Wie vermeide ich das Pfadproblem für das OutDir? Ich habe mit mehreren Pfaden gespielt, aber ich kann es nicht richtig machen.Wie kann ich erreichen, dass die TransformXml-Task mehrere Dateien im Quellattribut akzeptiert?