如何将<configsections>作为第一个子项插入app.config

时间:2018-08-09 07:40:03

标签: visual-studio-2017 nuget app-config xdt-transform xdt

我目前正在编写一个新的NuGet程序包,但是我无法正确获得 app.config.install.xdt 文件(该文件是转换app.config以使其适合已安装的软件包。

问题是在app.config中将 部分作为第一个子项-,但仅在丢失的情况下!

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

如果我仅使用常规的“ InsertIfMissing” 转换,则插入将在所有现有子级之后 进行,所以这似乎行不通。

该如何解决我的问题?

3 个答案:

答案 0 :(得分: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)" />

答案 1 :(得分:0)

  

如何作为第一个孩子插入app.config

您可以利用属性<configSections xdt:Transform="InsertBefore(/configuration/*[1])" /> 在节中但在任何其他元素之前插入新元素,例如:

onClick={()=>this.props.history.push('/whatever')}

证书:XDT Transform: InsertBefore - Locator Condition is ignored

有关更多详细信息,请参见How to use XDT in NuGet - Examples and Facts

希望这会有所帮助。

答案 2 :(得分:-1)

我也在寻找解决方案...

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