私が持っているプロジェクト内のすべての web.config ファイルを変換しようとしています。これが私のツリー構造です:
- Transform.bat
- 変換
- ConfigTransform.proj
- Web.Transform.config
- Webサイト
- web.config
- ビュー
- web.config
他にも web.config ファイルがありますが、アイデアは、これがそれらすべてを見つけて、それらに同じ構成変換を適用することです。
見つけたブログ投稿からいくつかのヒントを得ましたが、最後のステップである実際の変換で行き詰まりました。また、途中でちょっと大雑把な部分がありますが、これはあまり好きではありません (自分が何をしているのかよくわかりませんし、明らかに間違っています)。これが私がこれまでのところです:
<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 のパスの問題を回避するにはどうすればよいですか? 複数のパスをいじりましたが、うまくいきません。
- Source 属性で複数のファイルを受け入れるように TransformXml タスクを取得するにはどうすればよいですか?