Как вставить <configSections> как первый дочерний элемент в app.config

В настоящее время я создаю новый пакет NuGet, но не могу получить правильный файл app.config.install.xdt (это XML-файл, который преобразует app.config в соответствии с установленным пакетом).

Проблема заключается в вставке раздела в app.config в качестве первого дочернего элемента - но только в случае, если он отсутствует!

Это ДОЛЖЕН быть первый ребенок, иначе произойдет сбой приложения с исключением (принудительное применение Microsoft).

Если я просто использую обычное преобразование "InsertIfMissing", вставка происходит после любых существующих дочерних элементов, так что кажется, что нет.

Что я могу сделать, чтобы решить мою проблему?

1 ответ

У меня была точно такая же проблема, и я решил ее следующим образом:

<configSections xdt:Transform="InsertBefore(/configuration/*[1])" />
<configSections xdt:Locator="XPath(/configuration/configSections[last()])">
     do_your_stuff_with_sections_here...
</configSections>
<configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" />

Первая строка безоговорочно создает узел как первый дочерний элемент:

<configSections xdt:Transform="InsertBefore(/configuration/*[1])" />

Вторая строка гарантирует, что все ваши изменения внесены в последний узел configSections, который является правильным узлом, если он уже существовал…

<configSections xdt:Locator="XPath(/configuration/configSections[last()])">

После преобразований, которые вы делаете в блоке de configSections, вы вводите команду, которая удаляет все пустые узлы configSections… (последняя строка)

<configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" />

Как вставить в качестве первого ребенка в app.config

Вы можете использовать атрибут xdt:Transform="InsertBefore" вставить новый элемент в раздел, но перед любым другим элементом, например:

<configSections xdt:Transform="InsertBefore(/configuration/*[1])" />

Сертификат: XDT Transform: InsertBefore - условие локатора игнорируется

И посмотрите, Как использовать XDT в NuGet - Примеры и Факты для некоторых подробностей.

Надеюсь это поможет.

Я тоже искал решение...

<configSections xdt:Transform="Remove" />
<configSections xdt:Transform="InsertBefore(/configuration/*[1])">
Другие вопросы по тегам