2012-01-19 27 views
54

Tengo un Web.config con varios ConnectionStringsCómo quitar un ConnectionString utilizando Config Transformaciones

<connectionStrings> 
    <add name="connStr1" connectionString="... 
    <add name="ConnStr2" connectionString="... 
    <add name="connStr3" connectionString="... 

¿Hay alguna manera usando transformaciones de configuración para eliminar un connectionstring específico? Algo así como:

<connectionStrings> 
    <xdt:Remove connStr2? 

Obviamente no está cerca de la sintaxis correcta, pero usted me entiende ...

Respuesta

54

Desde el MSDN documentation sobre el tema:

<configuration xmlns:xdt="..."> 
    <connectionStrings> 
    <add xdt:Transform="Remove" /> 
    </connectionStrings> 
</configuration> 

El Transform="Remove" es la magia que 'que estas buscando. También hay un Transform="RemoveAll" que puede utilizar junto con un complemento (s) específico (s).

EDITAR

Pensándolo bien es posible que también sea capaz de combinar la Locator attribute con el Remove definido anteriormente para limitar los elementos que realmente desea eliminar.

más definitiva:

<configuration xmlns:xdt="..."> 
    <connectionStrings> 
    <add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='ConnStr2'])" /> 
    </connectionStrings> 
</configuration> 

o equivalente que trabajar.

+12

El XPath no funcionará. La sintaxis correcta es la mencionada por @ hyke20 abajo. Para probar la transformación en línea, puede utilizar: http://webconfigtransformationtester.apphb.com/ –

+0

¿Por qué eliminaría el espacio de nombres real en el ejemplo anterior? Es: xmlns: xdt = "http://schemas.microsoft.com/XML-Document-Transform". Totalmente: [] –

+0

¿Hay alguna manera de hacer esto dinámicamente a través del código C#? –

85

Esto eliminará una cadena de conexión específica en función de su nombre.

<configuration> 
    <connectionStrings> 
    <add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " /> 
    </connectionStrings> 
</configuration> 

Tenga en cuenta que el valor no es connectionString cadena vacía, sino que es un espacio. Cualquier valor no vacío haría.

+2

El argumento 'DefaultConnection-Web.config Connection String' no puede ser nulo o estar vacío. Es lo que obtengo cuando coloco tu código dentro de mi web.release.config. ¿Algunas ideas? Gracias – Leigh

+5

¿Por qué se requiere el atributo 'connectionString' en absoluto? ¿No debería 'xdt: Transform =" Remove "' ser capaz de eliminar el nodo solo en función de su nombre? –

+0

@DmytroShevchenko & Leigh - No entiendo ese error cuando uso el ejemplo de hyke20, pero si dejo fuera la propiedad 'connectionString' recibo una advertencia de que falta. – Robotnik

Cuestiones relacionadas