我正在尝试转换我拥有的项目中的所有 web.config 文件,这是我的树结构:
- 转换.bat
- Transforms
- 配置转换.proj
- Web.Transform.config
- Website
还有更多的 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 的路径问题?我摆弄了多条路径,但我无法得到正确的结果。
- 如何让 TransformXml 任务接受 Source 属性中的多个文件?