我正在使用MsBuild和TransformXml任务来设置一些web.config文件。这一切都很好,但现在我想在xml转换中扩展一个MSBuild属性。
为了更清楚,我使用itemgroup批量处理TransformXml任务,为配置不同的多个网站进行多次转换:
<PropertyGroup>
<WebsiteTargetDirectory>$(MSBuildProjectDirectory)\BUILD\</WebsiteTargetDirectory>
</PropertyGroup>
<ItemGroup>
<WebsitesToBeCopied Include="CH;DE;EN">
<InProject>false</InProject>
</WebsitesToBeCopied>
</ItemGroup>
<target name="CreateWebConfigs">
<TransformXml
Source="$(MSBuildProjectDirectory)\Web.Template.config"
Transform="$(MSBuildProjectDirectory)\Web.%(WebsitesToBeCopied.Identity).config"
Destination="$(WebsiteTargetDirectory)\%WebsitesToBeCopied.Identity)\Web.config"
/>
</target>
这完全正常,但如果有可能在转换中获得一些MSBuild属性,我可以省去几行和转换。例如,我需要将'DE','EN'或'CH'附加到属性值,并且在模板中简单地使用占位符而不是为每个web.config编写转换将是很好的。
有没有办法实现这一点,如果是的话,那将如何运作?
答案 0 :(得分:4)
我自己找到了解决方法。
在TransformXml任务之后,我可以使用Detokenise中的MSBuildExtensionPack任务在第二步中将我的变量放入转换后的文件中。我只需要使用原始的$(PropertyName)语法作为文件中的占位符,其他任务会自动替换它们。