Visual Studio 2010 で XDT-Transform を使用して、複数の構成ファイルを生成しています。
Xml 変換は正常に機能しています。しかし、xml 変換ファイルから最終ファイルにコメントを運ぶ方法が見つからないようです。
構成設定を追加するための変換があるようにInsert
、コメントを追加する方法はありますか? コメントがなければ、変換アプローチ全体をあきらめなければならないかもしれません。
Visual Studio 2010 で XDT-Transform を使用して、複数の構成ファイルを生成しています。
Xml 変換は正常に機能しています。しかし、xml 変換ファイルから最終ファイルにコメントを運ぶ方法が見つからないようです。
構成設定を追加するための変換があるようにInsert
、コメントを追加する方法はありますか? コメントがなければ、変換アプローチ全体をあきらめなければならないかもしれません。
これはまさにあなたが望むものではありませんが、たまには便利だと思います。追加された要素にコメントが含まれている場合、XmlTransform はコメントを追加します。
例えば
<appSettings>
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove>
</appSettings>
コードを書かないとできません。
ただし、私の現在の解決策は、基本的に次のリンクに従って、XDT Transform ライブラリを拡張することです: XML (web.config) 構成変換の拡張
CommentAppend
これは、CommentPrepend
コメント テキストを入力パラメーターとして使用するの例です。そうしないと、XDT Transform によってコメントとして無視されるInsert
コメントとして、それ自体が機能しないと考えられます。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>
そして出力:
<!--comment line 123--><security>
<requestFiltering>
<hiddenSegments>
<add segment="NWebsecConfig" />
<add segment="Logs" />
</hiddenSegments>
</requestFiltering>
</security><!--comment line 123-->
現在、Reflector を使用して Microsoft.Web.XmTransform を参照しています Visual Studio V12.0 に付属している仕組みを理解するためですが、おそらくソース コード自体を参照する方がよいでしょう。
私の知る限り、XDT-Transform を使用してコメントを追加することはできません。