Jak uzyskać zadanie msbuild, aby przekształcić konfigurację w zbiorze plików?

Próbuję przekształcić wszystkie pliki web.config w projekcie, który mam, oto moja struktura drzewa:

Transform.batPrzekształcaConfigTransform.projWeb.Transform.configStronie internetowejweb.configWidokiweb.config

Jest więcej plików web.config, ale pomysł polega na tym, że znajdzie je wszystkie i zastosuje na nich tę samą transformację konfiguracji.

Zrobiłem kilka wskazówek odwpis na blogu, który znalazłem ale utknąłem w ostatnim kroku, rzeczywistej transformacji. Jest też trochę szorstkiej części w środku, której tak naprawdę nie lubię (nie do końca rozumiem, co robię i oczywiście robię to źle). Oto, gdzie jestem do tej pory:

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

Mój Transform.bat wygląda tak:

<code>%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
</code>

Kiedy więc wywołam partię, tworzone są odpowiednie katalogi. Jednak, jak widzisz, musiałem być trochę kreatywny w OutDir, tworząc go .. N N. Z jakiegoś powodu, jeśli tego nie zrobię, ścieżka OutDir będzie dokładnie taka sama jak katalog wejściowy. Więc oczywiście muszę coś zmienić w MakeDir, ale nie jestem pewien co.

Prawdziwy problem pojawia się, gdy zaczyna robić transformacje. Próbowałem zachować parametr TransformXml Source w ten sposób lub w ten sposób:

<code>@(_FilesToTransformNotAppConfig->'%(FullPath)')
</code>

Ten ostatni daje mi błąd „Nie można otworzyć pliku źródłowego: Podany format ścieżki nie jest obsługiwany”. a ten pierwszy daje mi to wyjście:

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

Podsumowując moje pytania:

Jak uniknąć problemu ze ścieżką dla OutDir? Bawiłem się wieloma ścieżkami, ale nie mogę tego zrobić dobrze.Jak uzyskać zadanie TransformXml, aby zaakceptować wiele plików w atrybucie Źródło?

questionAnswers(1)

yourAnswerToTheQuestion