我有一个正在尝试创建的 nuget 包,但似乎无法弄清楚如何使最后一部分正常工作。我正在使用config.install.xdt 转换来将配置元素添加到客户端配置文件中。
我只是<section>
在客户端配置文件中添加一个新节点,如下所示:
<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections xdt:Transform="InsertIfMissing">
<section xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)"
name="myPackageName"
type="MyPackage.Config.MySection, MyPackage" />
</configSections>
</configuration>
问题是它<configSections>
必须是<configuration>
客户端 app.config 中根元素的第一个子元素。如果客户端应用程序中不存在<configSections>
,则上述转换只是<configSections>
作为<configuration>
.
有没有办法强制<configSections>
作为第一个孩子插入<configuration>
?
编辑 1
我想添加一些关于我尝试过的内容和结果的细节......
我使用的第一个转换是<configSections xdt:Transform="InsertIfMissing">
. 即使这是我的 config.install.xdt 文件中的第一个子文件,它也会在安装时放置在客户端配置文件的末尾。
我已经尝试了几种变换 InsertBefore 和 InsertAfter 的变体。不幸的是,我不能只使用,例如,<configSections xdt:Transform="InsertBefore(/configuration/appSettings)"
因为 appSettings 元素可能并不总是存在于客户端配置文件中,也可能不是第一个子节点。
我认为必须有一些功能,因为在将 nuget 包(如 Entity Framework)安装到具有尚未具有<configSections>
节点的配置文件的项目中时,该节点将作为安装 Entity<configSections>
的根中的第一个子节点添加<configuration>
框架。
编辑 2
经过数小时的搜索并将我的头撞到墙上,通过 Leo 的回答,我发现了另一个 stackoverflow 帖子,其中的问题大致相同。我将我的问题标记为重复。这是链接。