我在 Visual Studio 2010 中使用 XDT-Transform 来生成多个配置文件。
Xml 转换工作正常。但我似乎无法找到将注释从 xml 转换文件传输到最终文件的方法。
就像Insert
添加配置设置的转换一样,有没有添加评论?如果没有评论,我可能不得不放弃整个转换方法。
我在 Visual Studio 2010 中使用 XDT-Transform 来生成多个配置文件。
Xml 转换工作正常。但我似乎无法找到将注释从 xml 转换文件传输到最终文件的方法。
就像Insert
添加配置设置的转换一样,有没有添加评论?如果没有评论,我可能不得不放弃整个转换方法。
我已经为你找到了一个可能的解决方案。
只需在您要添加的最高级别将某些内容表示为插入。之后,您可以像往常一样添加元素。
这意味着这无法带来您的评论
<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 的底部。如果总格式的变化没问题,那就太棒了。它还要求您重新创建整个部分,这可能会增加转换的大小。
这不完全是您想要的,但我偶尔会发现它很有用。如果注释包含在添加的元素中,XmlTransform 将添加注释。
例如
<appSettings>
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove>
</appSettings>
不写代码是不可能的。
但是,我目前的解决方案是扩展 XDT 转换库,基本上遵循链接:扩展 XML (web.config) 配置转换
这是我的示例CommentAppend
,CommentPrepend
它将注释文本作为输入参数,因为我相信否则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 以了解它是如何工作的,但可能最好查看源代码本身
据我所知,恐怕不可能使用 XDT-Transform 添加评论。
至少XDT-Transform 文档中似乎没有提到它
我为 XDT 构建了一个扩展来处理评论注入和其他相关任务。
你可以在网上试试。