Visual studio 2017 如何插入<;配置部分>;作为app.config中的第一个子项

Visual studio 2017 如何插入<;配置部分>;作为app.config中的第一个子项,visual-studio-2017,nuget,app-config,xdt-transform,xdt,Visual Studio 2017,Nuget,App Config,Xdt Transform,Xdt,我目前正在编写一个新的NuGet软件包,但我无法正确获取app.config.install.xdt文件(这是转换app.config以适应已安装软件包的xml文件) 问题是在app.config中插入一个节作为第一个子项-但仅在缺少该节的情况下 它必须是第一个子项,否则应用程序将因异常而失败(Microsoft强制执行) 如果我只使用常规的“InsertIfMissing”变换,那么插入将在任何现有子级之后进行,因此这似乎是不可能的 我能做些什么来解决我的问题 如何在app.config中作为

我目前正在编写一个新的NuGet软件包,但我无法正确获取app.config.install.xdt文件(这是转换app.config以适应已安装软件包的xml文件)

问题是在app.config中插入一个节作为第一个子项-但仅在缺少该节的情况下

它必须是第一个子项,否则应用程序将因异常而失败(Microsoft强制执行)

如果我只使用常规的“InsertIfMissing”变换,那么插入将在任何现有子级之后进行,因此这似乎是不可能的

我能做些什么来解决我的问题

如何在app.config中作为第一个子项插入

您可以利用属性
xdt:Transform=“InsertBefore”
在节中但在任何其他元素之前插入新元素,如:

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

证书:

有关更多详细信息,请参阅


希望这有帮助。

我也在寻找解决方案

<configSections xdt:Transform="Remove" />
<configSections xdt:Transform="InsertBefore(/configuration/*[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节点…(最后一行)



不太可能。问题是该节是无条件插入的。这意味着,如果我删除nuget软件包并重新安装它,我只剩下两个孩子,而不是一个。必须只有一个,并且该节点必须始终是第一个子节点。如果您不确定该节点是否为emptyGreat解决方案,则应注意删除该节点。不确定为什么这没有被标记为答案。
<configSections xdt:Transform="RemoveAll" xdt:Locator="Condition(count(*)=0)" />