2010-05-28 17 views
8

Ich habe eine App, die auf 32-Bit-Systemen funktioniert, aber auf XP 64-Bit-Systemen fehlschlägt. Ich habe es auf die Verbindungszeichenfolge in meinem app.config so definierte aufgespürt:app.config und 64-Bit-Maschinen

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

Wenn ich versuche, es in Code zu verweisen, finde ich, dass die ConfigurationManager.ConnectionStrings Sammlung enthält nur die LocalSqlServer Verbindungszeichenfolge aus dem machine.config Datei und nicht meine benutzerdefinierte Zeichenfolge.

Eine weitere Kuriosität ist, dass es funktioniert, wenn ich die App aus Visual Studio ausführen. Nur wenn ich den Freigabeordner nicht mehr benutze, wird die Verbindungszeichenfolge nicht definiert. Die Datei .exe.config der Anwendung befindet sich zusammen mit der EXE-Datei im Freigabeordner und ist aktuell.

+0

Haben Sie versucht, dies in einer wirklich einfachen Konsolen-App zu replizieren? Ich benutze Win7 64-Bit und habe nichts dergleichen bemerkt. Vielleicht ist es spezifisch für XP, oder es ist etwas anderes als app.config auf 64-Bit-Rechnern. –

Antwort

1

Fügen Sie die Verbindungszeichenfolge der Datei devenv.exe.config hinzu.

Dies liegt

Visual Studio 2010

$$ INSTALL $$ \ 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

Ich fand schließlich die Erklärung hier: http://social.msdn.microsoft.com/forums/en-US/clr/thread/c25cd2c0-653d-4890-97b8-d2c9ceda2949/

Kurz gesagt, tritt dieses Verhalten auf, wenn eine Manifestdatei für die Anwendung verwendet wird. In diesem Fall sucht das Framework nach application_name.config, nicht nach application_name.exe.config. Eine Umgehungslösung besteht darin, die Konfigurationsdatei nach dem Erstellen der App umzubenennen. Eine weitere Möglichkeit besteht darin, den Knoten assemblyIdentity zum Manifest hinzuzufügen. In meinem Fall konnte ich die Manifest-Datei einfach löschen und das Leben ist wieder gut.