Я пытаюсь преобразовать все файлы web.config в проекте у меня есть, вот мое дерево структура:Как получить задачу msbuild для выполнения конфигурационных преобразований в коллекции файлов?
- Transform.bat
- Трансформация
- ConfigTransform.proj
- Web .Transform.config
- Сайт
- Web.config
- Просмотров
- web.config
Там больше файлы web.config, но идея состоит в том, что это будет найти все из них и применить тот же конфигурационный преобразование на них.
Я взял несколько советов от a blog post I found, но я застрял на последнем шаге, фактическое преобразование. Также есть немного грубая часть в середине, что мне не очень нравится (я не совсем понимаю, что я делаю, и я, очевидно, делаю это неправильно). Вот где я до сих пор:
<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>
Мой Transform.bat выглядит следующим образом:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Так что, когда я называю партию, соответствующие каталоги получить созданы. Однако, как вы можете видеть, мне пришлось быть немного творческим с OutDir, сделав его .. \ N \ N. По какой-то причине, если я этого не сделаю, путь OutDir будет точно таким же, как и входной каталог. Поэтому я, очевидно, должен что-то изменить в MakeDir, но я не уверен, что.
Настоящая проблема возникает, когда она начинает делать преобразования. Я пытался сохранить параметр TransformXml Source так или вот так:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Последнее дает мне ошибку «Не удалось открыть файл Источник: формат данного пути не поддерживается.» и бывший дает мне этот выход:
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.
Чтобы резюмировать мои вопросы:
- Как избежать проблемы пути для OUTDIR? Я искал несколько путей, но я не могу понять это правильно.
- Как заставить задачу TransformXml принимать несколько файлов в атрибуте Source?
Прежде чем отправиться туда, где вы находитесь, вы можете объяснить, что именно вы пытаетесь сделать? –
Преобразование всех файлов конфигурации в моем решении. – sebastiaan
Уточненный в сообщении (под древовидной структурой). – sebastiaan