我在Visual Studio 2010中使用XDT-Transform生成多个配置文件。
Xml转换工作正常。但我似乎无法找到将xml转换文件中的注释带到最终文件的方法。
就像添加配置设置的Insert
转换一样,无论如何都要添加注释?没有评论我可能不得不放弃整个转换方法。
答案 0 :(得分:7)
我找到了一个可能的解决方案。
只需将某些内容表示为您要添加它的最高级别的插入内容。之后,您可以像平常一样添加元素。
这意味着这不会带来你的评论
<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的底部。如果总格式的变化没问题那就太棒了。此外,它还需要您重新创建整个部分,这可能会增加变换的大小。
答案 1 :(得分:3)
这不是你想要的,但我发现它偶尔会有用。 如果注释包含在添加的元素中,XmlTransform将添加注释。
e.g。
<appSettings>
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove>
</appSettings>
答案 2 :(得分:3)
没有编写代码就不可能。
但是,我目前的解决方案是基于以下链接扩展XDT转换库:Extending XML (web.config) Config transformation
这是我的CommentAppend
,CommentPrepend
的示例,它将评论文本作为输入参数,因为我认为Insert
本身无法作为您放置{的评论XDT转换会忽略{1}},因为它是注释。
xdt:Transform="Insert"
输入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>
我目前正在使用Reflector查看Microsoft.Web.XmTransform附带Visual Studio V12.0来弄清楚它是如何工作的,但最好还是看看source code itself
答案 3 :(得分:0)
据我所知,使用XDT-Transform添加评论是不可能的,我担心。
中似乎没有提及答案 4 :(得分:0)
我建立了一个extension for XDT来处理注释注入和其他相关任务。
您可以尝试online。