我目前正在编写一个新的NuGet程序包,但是我无法正确获得 app.config.install.xdt 文件(该文件是转换app.config以使其适合已安装的软件包。
问题是在app.config中将
它必须是第一个孩子,否则应用程序将因异常而失败(Microsoft强制执行)。
如果我仅使用常规的“ InsertIfMissing” 转换,则插入将在所有现有子级之后 进行,所以这似乎行不通。
该如何解决我的问题?
答案 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])">