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

3
我正在使用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编写一个转换会更好。

是否有办法实现这一点,如果有,该如何操作?


我自己找到了一个解决方法。在TransformXml任务之后,我可以使用MSBuildExtensionPack中的Detokenize任务,在第二步将我的变量放入文件中。 - Sebastian P.R. Gingter
现在你应该能够回答了。两天后你就可以将其选为正确答案。 - user1228
1个回答

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

这是我过去使用的解决方案(抱歉我没有早些回复!)。请注意,Detokenise任务存在一个限制,即它不会输入从调用者传递的任何属性,例如MSBUILD命令行。如果需要,我已经开发了一种解决方法,可以发布出来。 - Dan Nolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接