10

Ich habe eine Konsolenanwendung und eine Datei app.config und Connections.config erstellt. Die app.config-Datei hat eine Eigenschaft Connectionquelle mit dem Zeige Connections.configVerbindungszeichenfolge von externer Konfigurationsdatei lesen

Als ich versuchte, die Verbindungszeichenfolge in der Anwendung zu lesen, erhalte ich ein ConfigurationErrorException

Das ist meine Hauptmethode ist.

static void Main(string[] args) 
    { 
     var settings = ConfigurationManager.ConnectionStrings; 
     if (settings != null) 
     { 
      foreach (ConnectionStringSettings setting in settings) 
      { 
       Console.WriteLine(setting.ConnectionString); 
      } 
     } 
    } 

App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings configSource="Connections.config"></connectionStrings> 
</configuration> 

Connections.config

<?xml version="1.0" encoding="utf-8" ?> 
<connectionStrings> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 

Hier beobachtet Datei Datei ich zwei Dinge. Erstens: Wenn ich configSource kann ich die Verbindungszeichenfolge (werfen Exception) nicht lesen.

Zweitens: Wenn ich dieselbe Verbindungszeichenfolge in App.config-Datei und versuchte zu lesen, dann funktioniert der Code aber bekommen zwei Verbindung String (die nur eine Rück sein sollten, die leere Zeichenfolge ist) die erste Verbindungszeichenfolge ist sqlexpress Verbindungszeichenfolge wie diese

data source=.\SQLEXPRESS;Integrated Security=SSPI; 
    AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

zweite Verbindungszeichenfolge ist es leere Zeichenkette zurückkehrt (Dies wird erwartet).

Ich möchte Verbindungszeichenfolge aus externen Datei wie in meinem Szenario lesen. Wie geht das? Was fehlt mir hier?

Antwort

6

MSDN says:

enthalten keine zusätzlichen Elemente, Abschnitte oder Attribute.

Sie müssen die XML-Codierung entfernen.

bearbeiten

Außerdem müssen Sie Copy to Output Directory = Copy if newer oder Copy always die Eigenschaften Ihrer Konfigurationsdatei setzen.

enter image description here

bearbeiten 2

auf zu bauen, was Dave sagte, Sie clear Element zu Ihrer externen Datei hinzufügen. Ihre endgültige Connections.config Datei sollte genau so aussehen:

<connectionStrings> 
    <clear/> 
    <add name="Name" 
    providerName="System.Data.ProviderName" 
    connectionString="Valid Connection String;" /> 
</connectionStrings> 
+0

Erstellungsaktion ist nicht obligatorisch, Wenn Kopie zum Ausgabeverzeichnis auf * Immer kopieren * oder * Kopie, wenn neuer * gesetzt ist, wird die Build-Aktion standardmäßig auf Inhalt gesetzt. Sonst gut beantwortet - +1 –

+0

Guter Punkt, das wusste ich nicht. –

5

Ihre Verbindung.config-Datei wie unten werden soll, ohne den XML-Header

<connectionStrings> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 

Auch für die Datei korrekt in Ihrer Konsole-Anwendung zu lokalisieren gezeigt, setzen Sie bitte die kopiert Ausgabeverzeichnis-Immer kopieren oder kopieren, ob neue.

+0

XML-Header macht keinen Unterschied. Einstellungs-Kopie hat das Problem immer gelöst. Vielen Dank. – PSR

1

Die erste Verbindungszeichenfolge, die Sie erhalten, wird von der Maschine.config geerbt. Dies wird in der MSDN-Dokumentation beschrieben. http://msdn.microsoft.com/en-us/library/bf7sd233(v=vs.90).aspx

Sie können das Clear-Tag in Ihrer Konfigurationsdatei verwenden, um geerbte Verbindungszeichenfolgen zu entfernen. http://msdn.microsoft.com/en-us/library/ayb15wz8(v=vs.90).aspx

<connectionStrings> 
    <clear/> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 
0

Es gibt einen schönen Artikel über MSDN: https://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx.

Zitat aus dem Artikel:

um Verbindungszeichenfolgen in einer externen Konfigurationsdatei zu speichern, erstellen eine separate Datei, die nur den Abschnitt connection enthält. Do keine zusätzlichen Elemente, Abschnitte oder Attribute enthalten. Dieses Beispiel zeigt die Syntax für eine externe Konfigurationsdatei.

<connectionStrings> 
    <add name="Name" 
    providerName="System.Data.ProviderName" 
    connectionString="Valid Connection String;" /> 
</connectionStrings> 

hoffe, das hilft Menschen, die später in dieser Frage führen.

Verwandte Themen