Sto cercando di trasformare tutti i file web.config in un progetto che ho, ecco una struttura di mio albero:Come posso ottenere un'attività di msbuild per trasformare le trasformazioni in una raccolta di file?
- Transform.bat
- trasforma
- ConfigTransform.proj
- Web .Transform.config
- Sito
- web.config
- Visualizzazioni
- web.config
C'è più file web.config, ma l'idea è che questo troverà tutti loro e applicare la stessa configurazione di trasformare su di essi.
Ho preso alcuni suggerimenti da a blog post I found ma mi blocco nell'ultimo passaggio, la trasformazione effettiva. C'è anche un po 'di grezzo nel mezzo che non mi piace molto (non capisco bene cosa sto facendo e ovviamente sto sbagliando). Ecco dove sono finora:
<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>
mio Transform.bat si presenta così:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Così, quando io chiamo il lotto, le directory appropriate vengono creati. Tuttavia, come puoi vedere, ho dovuto essere un po 'creativo con l'OutDir, rendendolo ... \ N \ N. Per qualche motivo, se non lo faccio, il percorso di OutDir sarà esattamente lo stesso della directory di input. Quindi ovviamente ho bisogno di cambiare qualcosa in MakeDir ma non sono sicuro di cosa.
Il vero problema arriva quando inizia a fare le trasformazioni. Ho cercato di mantenere il parametro Transformxml Fonte come questo o questo modo:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Quest'ultimo mi dà un errore "Could not File sorgente aperto: Il formato data del percorso non è supportato." e l'ex mi dà questo output:
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.
In sintesi le mie domande:
- Come posso evitare il problema percorso per l'OutDir? Ho manipolato più percorsi ma non riesco a farlo bene.
- Come si ottiene l'attività TransformXml per accettare più file nell'attributo Source?
Prima di andare dove sei, puoi spiegare che cosa stai cercando di fare? –
Trasformazione di tutti i file di configurazione nella mia soluzione. – sebastiaan
Chiarito nel post (sotto la struttura ad albero). – sebastiaan