2010-09-23 6 views
9

Ich habe eine C# -Assembly, die die app.config verwendet, um ihre Datenbankverbindungszeichenfolge zu speichern. Beim Debuggen der Anwendung ist mir aufgefallen, dass die Verbindung zur Datenbank immer wieder fehlschlug, weil der ConfigurationManager die Verbindungszeichenfolge machine.config fortsetzte:ConfigurationManager erhält die Verbindungszeichenfolge Machine.config

Datenquelle =. \ SQLEXPRESS; Integrierte Sicherheit; ....

Ich habe <clear/> vor meine Verbindungszeichenfolge in der app.config hinzugefügt und es das Problem auf meinem Dev-Computer behoben. Das Problem wurde zurückgegeben, als ich es in der Produktion bereitgestellt habe. Kann mir jemand sagen, wie ich den machine.config Verbindungsstring stoppen kann?

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> 

UPDATE

Im Folgenden gibt mir immer noch die machine.config Verbindungszeichenfolge ?!

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

Ich weiß, es ist eine alte Post, aber ich bin noch neugierig, ist dies eine Desktop- oder Konsolenanwendung? Sehen Sie den Abschnitt Verbindungszeichenfolge mit dem Löschelement im Ausgabeverzeichnis (bin)? –

+0

Ich habe immer noch das Problem in meiner Anwendung. Ich fügte klar hinzu, oder benutzte unterhalb codes und kopiere config-Datei zum Exe-Ordner, aber noch holt es Standarddaten. Ich benutze VS2015. – Amir

+0

Ich hatte das gleiche Problem. Ich hatte die richtige Verbindungszeichenfolge in dem Projekt "Klassenbibliothek", das ich verwendet habe, und ließ die Datei "web.config" im Projekt "Web" leer. Sobald ich das auch im Web-Projekt hinzugefügt habe, hat es mir gut getan. Nur für den Fall, dass Sie mehrere Projekte in einer Lösung haben – Sugafree

Antwort

1

Versuchen Sie eine Instanz Ihrer app.config-Datei als Configuration-Objekt bekommen:

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

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

Dies umgeht die vollständig Konfigurationsdatei Maschine.

+0

Dies ist eine Klassenbibliothek (DLL) OpenExeConfig wirft und Ausnahme. Gute Idee aber. – Nick

+4

Das scheint die Maschinenkonfiguration nicht zu umgehen –

0

Sie sollten Ihre Verbindungszeichenfolge durch NAME anstelle von INDEX erhalten - das wird sicherstellen, dass Sie bekommen, was Sie verlangen.

Versuchen

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

Sie erhalten Ihre machine.config Verbindungszeichenfolge, wenn Sie es mit Namen bekommen? –

4

Wenn Verbindungszeichenfolgen in einer DLL verwenden, müssen Sie sie auf Ihre exe app.config auch hinzufügen, die exakt gleichen Namen für die Einstellung. Dann können Sie die Verbindungszeichenfolge in der .config-Datei der exe ändern, und die DLL wird sie beim Laden automatisch aufnehmen.

Dies ist wahrscheinlich die einzige Möglichkeit, um benutzerdefinierte Verbindungszeichenfolgen in der app.config-Datei zu verwenden, wenn Ihre DB-Persistenzebene in einer separaten DLL implementiert ist. Frag mich nicht mal, wie lange es gedauert hat, das zu erforschen und zu debuggen.

2

Ich weiß, das ist eine ältere Frage, aber ich hatte das gleiche Problem heute. Das Problem war, dass die Datei app.config, die ich meinem Projekt hinzugefügt hatte, nicht in das Ausgabeverzeichnis kopiert wurde. Um dies zu beheben, klicken Sie mit der rechten Maustaste auf app.config und wählen Sie Properties. Ändern Sie dann Build Action zu Content. Hoffe, das hilft!

Verwandte Themen