Добавление комментариев с использованием XDT-Transform
Я использую XDT-Transform в Visual Studio 2010 для создания нескольких файлов конфигурации.
XML-преобразование работает нормально. Но я не могу найти способ переноса комментариев из файла преобразования XML в конечный файл.
Так же, как есть Insert
преобразование для добавления настроек конфигурации, есть ли возможность добавлять комментарии? Без комментариев мне, возможно, придется отказаться от всего подхода к трансформации.
4 ответа
Я нашел возможное решение для вас.
Необходимо только обозначить что-то как вставку на самом высоком уровне, который вы добавляете. После этого вы можете просто добавить элементы, как обычно.
Это означает, что это не поможет перенести ваш комментарий
<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. Если изменение общего форматирования в порядке, тогда это здорово. Также требуется, чтобы вы воссоздали весь раздел, что может увеличить размер ваших преобразований.
Невозможно без написания кода.
Однако мое текущее решение - расширить библиотеку XDT Transform, в основном перейдя по ссылке: Расширение XML (web.config) Преобразование конфигурации
И вот мой пример CommentAppend
, CommentPrepend
которые принимают текст комментария в качестве входного параметра, как я считаю, в противном случае Insert
Сам не может работать как комментарий, который вы бы поставили xdt:Transform="Insert"
будет игнорироваться XDT Transform как комментарий.
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, чтобы выяснить, как он работает, но, вероятно, лучше взглянуть на сам исходный код
Это не совсем то, что вы хотите, но я нахожу это полезным время от времени. XmlTransform будет добавлять комментарии, если они содержатся в добавленном элементе.
например
<appSettings>
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove>
</appSettings>
Боюсь, насколько я знаю, добавление комментариев с использованием XDT-Transform невозможно.
По крайней мере, это не упоминается в документации XDT-Transform.
Я создал расширение для XDT для обработки инъекции комментариев и других связанных задач.
Вы можете попробовать это онлайн.