如何在TransformXml任务中使用MSbuild属性?

时间:2011-08-05 15:18:32

标签: msbuild properties xslt

我正在使用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编写转换将是很好的。

有没有办法实现这一点,如果是的话,那将如何运作?

1 个答案:

答案 0 :(得分:4)

我自己找到了解决方法。

在TransformXml任务之后,我可以使用Detokenise中的MSBuildExtensionPack任务在第二步中将我的变量放入转换后的文件中。我只需要使用原始的$(PropertyName)语法作为文件中的占位符,其他任务会自动替换它们。