Как вставить <configSections> как первый дочерний элемент в app.config
В настоящее время я создаю новый пакет NuGet, но не могу получить правильный файл app.config.install.xdt (это XML-файл, который преобразует 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])">