Entwickler-Ecke

Sonstiges (.NET) - Innerhalb einer DLL die dll-eigene App.config verwenden


CopWorker1 - Mo 23.11.20 13:13
Titel: Innerhalb einer DLL die dll-eigene App.config verwenden
Hallo zusammen,

jetzt habe ich ein C# Projekt als DLL erstellt.
Das funktioniert auch erstaunlich gut.
Nur eine Hürde habe ich noch.
Steppe ich mit dem Debugger in die DLL rein, da komme ich an die Stellen an
denen ich aus der "App.config" einige Parameter auslesen will.

C#-Quelltext
1:
string str = ConfigurationManager.AppSettings.Get(strKey);                    

Leider wird hier auf die "App.config" des aktuell Programms zugegriffen und
nicht auf die "App.config" der eingebundenen DLL.

Ist die irgendwie zu beeinflussen, oder wie macht man das eleganter Weise sonst?

Vielen Dank für eure Tipps.
Grüße von CopWorker1


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mo 23.11.2020 um 15:29


jaenicke - Mo 23.11.20 15:28

Suchst du vielleicht solch ein Beispiel?
http://www.bearcanyon.com/dotnet/#AssemblySettings
Dort findest du eine AssemblySettings Klasse, die das macht.


Ralf Jansen - Mo 23.11.20 19:13

Wie der Name App der App.config schon sagt bezieht sich die eigentlich immer auf die Application/Executable. Eine Dll/Assembly hat normalerweise keine Config.
Darum sollte die erste Wahl sein die Einstellungen die du brauchst in die App.config der Applikation zu mergen.

Sollte das aus irgendeinem Grund nicht gehen und es sich nicht anbieten einfach irgendein anderes Verfahren zum speichern von Einstellungen zu benutzen (lesen von xml/json/yaml oder was es sonst noch so gibt ist unter .Net ja mal so eher kein Problem) dann hat der ConfigurationManager eine OpenExeConfiguration Methode die du benutzen kannst.


C#-Quelltext
1:
2:
var config = ConfigurationManager.OpenExeConfiguration(MyLovelyConfigPath);
string str = config.AppSettings.Setting[strKey].Value;


CopWorker1 - Di 24.11.20 10:28

Hallo zusammen,

vielen Dank für den Tipp.

So mach ich das jetzt:

C#-Quelltext
1:
2:
3:
4:
5:
6:
string strValue;
private readonly Configuration cfgDllConfig, cfgExeConfig;
cfgDllConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); //Zugriff auf "App.dll.config"
cfgExeConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  //Zugriff auf "App.exe.config"
strValue = cfgDllConfig AppSettings.Settings["KeyName"].Value;
strValue = cfgExeConfig AppSettings.Settings["KeyName"].Value;

Funktioniert wie ich mir das vorstelle.
Vielen Dank nochmals.

CopWorker1