2008-11-22 4 views
9

Ich habe eine .NET-DLL, die ihre Konfigurationseinstellungen aus ihrer Konfigurationsdatei lesen muss. Normalerweise befindet sich die Konfigurationsdatei im selben Verzeichnis wie die DLL. Aber wie lese ich die Konfigurationsdatei, wenn die DLL GAC'ed ist, weil ich nur die DLLs in den GAC setzen kann, und nicht seine Konfigurationsdateien.Config-Dateien für Assemblys in GAC

Antwort

13

Muss der Benutzer die Dll konfigurieren? Wenn dies der Fall ist, sollte die DLL Konfigurationseinstellungen aus der app.config-Datei verwenden, nicht ihre eigene Konfiguration. Die app.config-Datei sollte im selben Verzeichnis wie die Anwendung gespeichert werden. Wenn nicht, dann könntest du ein paar verschiedene Wege gehen. Sie können Änderungen an der Datei machine.config vornehmen, damit Ihre DLL sie dort finden kann. Ich würde das nicht tun. Alternativ können Sie die Konfiguration in einer Einstellungsklasse speichern. Diese können über die Konfiguration überschrieben werden, aber Ihre Standardeinstellungen werden im generierten Code für die Einstellungsklasse über Attribute festgelegt, und das Fehlen einer Konfigurationsdatei wirkt sich nicht auf Ihre DLL aus, wenn nur die Standardwerte erforderlich sind.

12

Ich stimme mit tvanfosson der Gac'ed dll wird aus dem Pfad der Anwendung lesen. Aber man könnte auch die DLL informieren, die den Weg auf diese Weise:

System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = "THE PATH TO THE CONFIG"; 
System.Configuration.Configuration cfg = 
System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None); 

string thevalue=cfg.AppSettings.Settings[variable].Value; 
+0

tvanfosson hatte eine gute Antwort, aber ich denke, das ist eine geeignetere Antwort. – Keith

1

Sie können Executable müssen Verwendung von AppDomain.CurrentDomain.BaseDirectory, da die DLL machen wird nicht von selbst ausgeführt werden, die Sie gerade erhalten Dateiverzeichnis.

Etwas wie:

var appDomain = AppDomain.CurrentDomain.BaseDirectory; 
string sFileName = appDomain.Replace("\\bin\\Debug", ""); 
sFileName = sFileName + "Config\\config.xml"; 
+0

Sorry, da es das erste Mal ist, dass ich hier antworte..der Code ist nicht gut formatiert :( –

Verwandte Themen