Добавление комментариев с использованием 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 для обработки инъекции комментариев и других связанных задач.

Вы можете попробовать это онлайн.

Другие вопросы по тегам