I have a nuget package I'm trying to create and can't seem to figure out how to make this last part work properly. I'm using the config.install.xdt transforms in order to add configuration elements to the client config file.
I am simply adding a new <section>
node into the client config file, as shown below:
<?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>
The issue is that <configSections>
must be the first child of the root <configuration>
element in the client app.config. If there is no existing <configSections>
in the client application, the above transform just appends <configSections>
as the last child within <configuration>
.
Is there any way to force <configSections>
to be inserted as the first child within <configuration>
?
Edit 1
I wanted to add some details as to what I've tried and with what outcomes...
The first transform I went with was <configSections xdt:Transform="InsertIfMissing">
. Even when this is the first child in my config.install.xdt file, it gets placed towards the end of the client config file upon install.
I've tried several variations with the transforms InsertBefore and InsertAfter. Unfortunately I can't just use, for example, <configSections xdt:Transform="InsertBefore(/configuration/appSettings)"
because an appSettings element may not always exist in the client config file and also may not be the first child node.
I think there must be some functionality for this since when installing a nuget package like Entity Framework into a project with a config file that doesn't already have a <configSections>
node, the <configSections>
node is added as the first child within the <configuration>
root with the install of Entity Framework.
Edit 2
After hours of searching and banging my head against a wall, through Leo's answer I found another stackoverflow post with generally the same question. I flagged my question as a duplicate. Here is the link.