2016-07-29 26 views
0

In unserem Projekt haben wir einen benutzerdefinierten Konfigurationsabschnitt definiert, der ordnungsgemäß funktioniert, wenn in dem Projekt verwiesen wird. Jetzt versuchen wir, denselben Konfigurationsabschnitt aus einer DLL zu referenzieren, die als Referenz hinzugefügt wird. Aus dem Code in dieser DLL können wir problemlos auf ConfigurationManager.AppSettings zugreifen, erhalten aber Fehler beim Zugriff auf den Konfigurationseintrag.Laden benutzerdefinierter Konfigurationsabschnitt von DLL-Referenz

Web.config Code

<section name="mailManager" type="FullNamespace, NameSpace" /> 

<mailManager prop1="propVal1"> 
    <prop2 key1="keyVal1" key2="keyVal2" key3="keyVal3" /> 
    <prop3 key1="keyVal1" key2="keyVal2" /> 
</mailManager> 

in der DLL, die es wirft den folgenden Fehler verweist, wenn Sie den Konfigurationsabschnitt erhalten versuchen. Dieser Abschnitt existiert sowohl in der Lösung für die DLL- als auch die Hauptlösungscodebasis.

var mailManagerConfigSection = ConfigurationManager.GetSection("mailManager") as EmailManagerConfigSection; 

Der Fehler, den wir bekommen, ist Fehler CS0433: Der Typ 'EmailManagerConfigSection' existiert in beiden 'namespace1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' und ‚namespace2, Version = 1.0.0.0 , Kultur = neutral, PublicKeyToken = null '.

Die DLL-Referenz existiert in demselben Verzeichnis, in dem der Hauptcode ausgeführt wird. Gibt es trotzdem, dass die DLL auf den EmailManagerConfigSection-Hauptverweis verweist, der die Werte hat und nicht, was lokal für die DLL ist, die null ist? Wir möchten keine dll.config-Datei einführen.

Antwort

1

Konfigurationsabschnitte müssen definiert, geladen und von einer ausführbaren Datei referenziert werden, nicht von einer DLL.

Sie können für die Konfigurationsdatei in dem DLL-Projekt in Ihrem Lösungsraum, den Quellcode halten, sondern überall dort, wo die Kompilierung der DLL die Datei config legt, die app.config für die Host ausführbaren (das verweist auf die dll) muss diese Datei deklarieren und spezifizieren in ihrer app.config [ApplicationName.Exe.config] Fügen Sie einfach das passende <ConfigSections><section> Element und tatsächliche Abschnitt Element für die Konfiguration in die ausführbaren Dateien app.config des Hosts.

+0

Dank Charles, als ich sah die ConfigurationManager.AppSettings ["AsVal"] Einträge bekommen, so war ich hoffnungsvoll, dass ich so etwas ähnliches konnte, aber ich kann verstehen, warum das nicht möglich ist. Schätze deine Zeit. –

+0

kein Problem, froh zu helfen! –