2010-05-28 14 views
8

Tengo una aplicación que funciona bien en sistemas de 32 bits, pero falla en sistemas de 64 bits de XP. He rastreado hacia abajo a la cadena de conexión definida en mi app.config así:app.config y máquinas de 64 bits

<connectionStrings> 
    <clear/> 
    <add name="IFDSConnectionString" 
     connectionString="Data Source=fdsdata;Initial Catalog=IFDS; 
     Trusted_Connection=true;Connect Timeout=0" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

Cuando intento hacer referencia a ella en el código, me parece que la colección ConfigurationManager.ConnectionStrings sólo contiene la cadena de conexión de la LocalSqlServer archivo machine.config y no mi cadena personalizada.

Otra rareza es que funciona bien cuando ejecuto la aplicación fuera de Visual Studio. Solo cuando me quedo sin la carpeta de lanzamiento, la cadena de conexión no se define. El archivo .exe.config de la aplicación está allí en la carpeta de lanzamiento junto con el archivo .exe y está actualizado.

+0

¿Has intentado replicar esto en una aplicación de consola realmente básica? Estoy usando Win7 de 64 bits y no he notado nada como esto. Por lo tanto, tal vez sea específico de XP, o sea algo distinto a la aplicación.config en máquinas de 64 bits. –

Respuesta

1

Agregue la cadena de conexión al archivo devenv.exe.config.

Este se encuentra

Visual Studio 2010

$$ $$ INSTALLLOCATION \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Devenv.exe.config

Visual Studio 2008

$$ InstallLocation $$ \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ devenv.exe.config

3

Finalmente encontré la explicación aquí: http://social.msdn.microsoft.com/forums/en-US/clr/thread/c25cd2c0-653d-4890-97b8-d2c9ceda2949/

En resumen, este comportamiento se produce cuando se utiliza un archivo de manifiesto para la aplicación. En ese caso, el marco busca application_name.config, NOT application_name.exe.config. Una solución es cambiar el nombre del archivo de configuración después de compilar la aplicación. Otra es agregar el nodo assemblyIdentity al manifiesto. En mi propio caso, pude simplemente eliminar el archivo de manifiesto y la vida es buena una vez más.

Cuestiones relacionadas