Transformación XDT: InsertBefore - Se ignora la condición del localizador

Tengo un archivo web.config en el que necesito insertar el<configSections /> Elemento o manipular hijos de ese nodo si ya existe.
Si ya existe, no quiero volver a insertarlo (obviamente, ya que solo se permite una vez).

Normalmente, eso no sería un problema, sin embargo:

Si este elemento está en un archivo de configuración, debe ser el primer elemento secundario del elemento.

Fuente: MSDN.

Así que si usoxdt:Transform="InsertIfMissing" la<configSections /> El elemento siempre se insertará después de cualquier elemento secundario existente (y siempre hay alguno), lo que viola la restricción anterior de tener que ser el primer elemento secundario de<configuration />

Intenté hacer este trabajo de la siguiente manera:

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

Que funciona perfecto, si el<configSections /> El elemento no existe ya. Sin embargo, la condición que he especificado parece ser ignorada.

De hecho, he probado algunas condiciones como:

Condition(not(/configuration[configSections]))
Condition(/configuration[configSections] = false())
Condition(not(/configuration/configSections))
Condition(/configuration/configSections = false())

Finalmente, por desesperación, intenté:

Condition(true() = false()) 

Todavía inserta el<configSections /> elemento.

Es importante tener en cuenta que estoy tratando de incluir esto en un paquete de NuGet, por lo que no podré usar una transformación personalizada (como el que usa AppHarbor).

¿Hay alguna otra forma inteligente de colocar mi elemento en el lugar correcto solo si aún no existe?

Para probar esto, useAppHarbors config transformer tester. Reemplace el Web.config con lo siguiente:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="initialSection" />
  </configSections>
</configuration>

Y Web.Debug.config con lo siguiente:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

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

  <configSections>
    <section name="mySection" xdt:Transform="Insert" />
  </configSections>

</configuration>

El resultado mostrará dos<configSections /> los elementos, el que contiene "mySection" es el primero, como se especifica en la Transformación InsertBefore. ¿Por qué no se tuvo en cuenta la condición del localizador?

Respuestas a la pregunta(1)

Su respuesta a la pregunta