2010-09-23 12 views
9

Tengo un ensamblado C# que usa app.config para almacenar su cadena de conexión de base de datos. Al depurar la aplicación, noté que la conexión con la base de datos no funcionaba porque el ConfigurationManager no dejaba de devolver la cadena de conexión machine.config:ConfigurationManager sigue obteniendo cadena de conexión Machine.config

data source =. \ SQLEXPRESS; Integrated Security; ....

Agregué <clear/> antes de mi cadena de conexión en la aplicación.config y solucionó el problema en mi máquina dev. El problema volvió cuando lo implementé en producción. ¿Alguien puede decirme cómo puedo detener el machine.config cadena de conexión de ser utilizado?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString); 

<connectionStrings> 
    <clear/> 
    <add name="VersionConnectionString" 
    connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"   
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

ACTUALIZACIÓN

El siguiente todavía me da la cadena de conexión machine.config ?!

Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
       string dllConfigData = 
        appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString; 
+0

Sé que es una publicación anterior, pero aún tengo curiosidad, ¿se trata de una aplicación de escritorio o consola? ¿Ve la sección de la cadena de conexión con el elemento claro en el directorio de salida (bin)? –

+0

Todavía tengo el problema en mi aplicación. Agregué códigos claros o usados ​​a continuación y copié el archivo de configuración a la carpeta exe, pero todavía está obteniendo datos predeterminados. Estoy usando VS2015. – Amir

+0

Tuve el mismo problema. Tenía la cadena de conexión correcta en el proyecto de 'biblioteca de clase' que utilicé y dejé el 'web.config' vacío en el proyecto 'Web'. Tan pronto como agregué lo mismo en el proyecto web, funcionó bien para mí. En caso de que tenga varios proyectos en una solución – Sugafree

Respuesta

1

intentar conseguir una instancia de su archivo app.config como un objeto de configuración:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString; 

Esto no pasa por el archivo de configuración de la máquina por completo.

+0

Esta es una biblioteca de clases (.dll) OpenExeConfig throws y excepción. Buena idea sin embargo. – Nick

+4

Eso no parece pasar por alto realmente la configuración de máquina –

0

Debería estar recibiendo su cadena de conexión por NAME en vez de INDEX, eso asegurará que obtenga lo que está pidiendo.

Trate

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString); 
+0

¿recibe su cadena de conexión machine.config cuando la obtiene por su nombre? –

4

Al utilizar cadenas de conexión en un archivo DLL, es necesario añadirlos a app.config de su exe, así, usando exactamente el mismo nombre para el ajuste. Luego, puede cambiar la cadena de conexión en el archivo .config del exe y la DLL la recogerá automáticamente cuando se cargue.

Esta es probablemente la única forma en que puede tener cadenas de conexión personalizadas en el archivo app.config cuando su capa de persistencia de DB se implementa en una DLL separada. Ni siquiera me preguntes cuánto tiempo me llevó investigar y depurar esto.

2

Sé que esta es una pregunta anterior, pero hoy tuve el mismo problema. El problema fue que el app.config que agregué a mi proyecto no se estaba copiando en el directorio de salida. Para solucionar esto, haga clic derecho en app.config y seleccione Properties. Luego cambie Build Action a Content. Espero que esto ayude!

Cuestiones relacionadas