10

我在 Visual Studio 2010 中使用 XDT-Transform 来生成多个配置文件。

Xml 转换工作正常。但我似乎无法找到将注释从 xml 转换文件传输到最终文件的方法。

就像Insert添加配置设置的转换一样,有没有添加评论?如果没有评论,我可能不得不放弃整个转换方法。

4

5 回答 5

9

我已经为你找到了一个可能的解决方案。

只需在您要添加的最高级别将某些内容表示为插入。之后,您可以像往常一样添加元素。

这意味着这无法带来您的评论

<appSettings>
    <!--My Secret Encryption Key-->
    <add key="ENCRYPT_KEY" value="hunter2" xdt:Transform="Insert" />
</appSettings>

但这会

<appSettings xdt:Transform="Remove" />
<appSettings xdt:Transform="Insert" >
    <!--My Secret Encryption Key-->
    <add key="ENCRYPT_KEY" value="hunter2"/>
</appSettings>

没有其他东西需要转换,因为它完全复制了元素。

好处:你得到你的评论并且不必插入xdt:Transform="Insert"到每个关键元素中。

缺点:您最终会完全破坏该部分并重新添加它,最终将其附加到 Web.config 的底部。如果总格式的变化没问题,那就太棒了。它还要求您重新创建整个部分,这可能会增加转换的大小。

于 2014-04-02T13:12:02.150 回答
4

这不完全是您想要的,但我偶尔会发现它很有用。如果注释包含在添加的元素中,XmlTransform 将添加注释。

例如

<appSettings>
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove>
</appSettings>
于 2013-12-13T18:41:54.523 回答
4

不写代码是不可能的。

但是,我目前的解决方案是扩展 XDT 转换库,基本上遵循链接:扩展 XML (web.config) 配置转换

这是我的示例CommentAppendCommentPrepend它将注释文本作为输入参数,因为我相信否则Insert它本身不能作为您放置的注释,xdt:Transform="Insert"因为它是注释,所以 XDT 转换将忽略它。

internal class CommentInsert: Transform
{
    protected override void Apply()
    {
        if (this.TargetNode != null && this.TargetNode.OwnerDocument != null)
        {
            var commentNode = this.TargetNode.OwnerDocument.CreateComment(this.ArgumentString);
            this.TargetNode.AppendChild(commentNode);
        }
    }
}

internal class CommentAppend: Transform
{
    protected override void Apply()
    {
        if (this.TargetNode != null && this.TargetNode.OwnerDocument != null)
        {
            var commentNode = this.TargetNode.OwnerDocument.CreateComment(this.ArgumentString);
            this.TargetNode.ParentNode.InsertAfter(commentNode, this.TargetNode);
        }
    }
}

和输入web.Release.config

<security xdt:Transform="CommentPrepend(comment line 123)" >
</security>
<security xdt:Transform="CommentAppend(comment line 123)" >
</security>

和输出:

  <!--comment line 123--><security>
  <requestFiltering>
    <hiddenSegments>
      <add segment="NWebsecConfig" />
      <add segment="Logs" />
    </hiddenSegments>
  </requestFiltering>
</security><!--comment line 123-->

我目前正在使用 Reflector 来查看 Visual Studio V12.0 附带的 Microsoft.Web.XmTransform 以了解它是如何工作的,但可能最好查看源代码本身

于 2016-12-08T23:53:34.840 回答
0

据我所知,恐怕不可能使用 XDT-Transform 添加评论。

至少XDT-Transform 文档中似乎没有提到它

于 2013-02-06T14:21:12.403 回答
0

为 XDT 构建了一个扩展来处理评论注入和其他相关任务。

你可以在网上试试。

于 2020-06-14T16:59:24.577 回答