Como obtenho uma tarefa msbuild para fazer transformações de configuração em uma coleção de arquivos?

Eu estou tentando transformar todos os arquivos web.config em um projeto que tenho, aqui está minha estrutura de árvore:

Transform.batTransformaçõesConfigTransform.projWeb.Transform.configLocal na rede Internetweb.configViewsweb.config

Há mais arquivos web.config, mas a ideia é que isso encontre todos eles e aplique a mesma transformação de configuração neles.

Eu tomei algumas dicas deum post que encontrei mas eu fico preso no último passo, a transformação real. Também há uma parte difícil no meio que eu realmente não gosto (eu não entendo muito bem o que estou fazendo e obviamente estou fazendo errado). Aqui é onde eu estou até agora:

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

My Transform.bat tem esta aparência:

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

Então, quando eu chamo o lote, os diretórios apropriados são criados. No entanto, como você pode ver, eu tive que ser um pouco criativo com o OutDir, tornando-o .. \ N \ N. Por alguma razão, se eu não fizer isso, o caminho OutDir será exatamente o mesmo que o diretório de entrada. Então eu obviamente preciso mudar alguma coisa no MakeDir, mas não tenho certeza do que.

O problema real vem quando ele começa a fazer as transformações. Eu tentei manter o parâmetro TransformXml Source assim ou assim:

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

O último me dá um erro "Não foi possível abrir o arquivo Fonte: o formato do caminho fornecido não é suportado." e o primeiro me dá essa saída:

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

Para resumir minhas perguntas:

Como evito o problema de caminho para o OutDir? Eu brinquei com vários caminhos, mas não consigo acertar.Como faço para que a tarefa TransformXml aceite vários arquivos no atributo Fonte?

questionAnswers(1)

yourAnswerToTheQuestion