Я пытаюсь создать установщик web.config для моего пакета NuGet с использованием XDT Transforms.Как обрабатывать глубокие преобразования XDT, когда структура целевого файла конфигурации неизвестна?
Я хочу, чтобы преобразовать файл web.config:
<configuration>
<system.web>
</system.web>
</configuration>
, чтобы выглядеть следующим образом:
<configuration>
<system.web>
<httpHandlers>
<add path="*." verb="*" type="CustomHandler" />
</httpHandlers>
</system.web>
</configuration>
Вот являются прообразы я пытался:
Transform # 1:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpHandlers>
<add path="*." verb="*" type="CustomHandler" xdt:Transform="Insert" />
</httpHandlers>
</system.web>
</configuration>
Это работает, только если целевой web.config уже содержит раздел <httpHandlers />
.
В приведенном выше примере (примечание, нет <httpHandlers />
раздел), это приводит к ошибке:
No element in the source document matches '/configuration/system.web/httpHandlers/add'
Transform # 2:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpHandlers xdt:Transform="Insert">
<add path="*." verb="*" type="CustomHandler" />
</httpHandlers>
</system.web>
</configuration>
Это работает, как ожидается, в выше, но, учитывая файл web.config с уже существующим разделом <httpHandlers />
, этот раздел дублируется.
Помните, что это для пакета NuGet, и я не могу сделать предположения о состоянии конфигурации пользователя.
Я новичок в XDT Transforms, поэтому, возможно, пропустил что-то очевидное.
Удивительный! Спасибо, Нейл. –
К сожалению, нет соответствующего xdt: Transform = "RemoveIfEmpty", чтобы сделать обратное. –
Ну, они открыли с открытым исходным кодом ... Вы можете написать свой собственный! http://xdt.codeplex.com/ – NeilD