2008-11-22 8 views
9

J'ai une DLL .NET qui doit lire les paramètres de configuration de son fichier de configuration. Habituellement, le fichier de configuration est placé dans le même répertoire que la DLL. Mais comment puis-je lire le fichier de configuration si la DLL est GAC'ed, parce que je peux mettre seulement les DLL dans le GAC, et pas ses fichiers de configuration.Fichiers de configuration pour les assemblages dans GAC

Répondre

13

L'utilisateur doit-il configurer la DLL? Si c'est le cas, la DLL doit utiliser les paramètres de configuration du fichier app.config, et non sa propre configuration. Le fichier app.config doit être stocké dans le même répertoire que l'application. Si non, alors vous pourriez aller de deux façons différentes. Vous pouvez apporter des modifications au fichier machine.config afin que votre DLL puisse les trouver. Je ne ferais pas ça. Vous pouvez également stocker la configuration dans une classe de paramètres. Ceux-ci peuvent être remplacés via la configuration, mais vos valeurs par défaut seront définies dans le code généré pour la classe de paramètres via les attributs et donc l'absence d'un fichier de configuration n'affectera pas votre Dll lorsque les valeurs par défaut sont nécessaires.

12

Je suis d'accord avec tvanfosson la DLL Gac'ed lira à partir du chemin de l'application. Mais vous pouvez également informer le dll qui est le chemin de cette façon:

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 avait une bonne réponse mais je pense que ceci est une réponse plus appropriée. – Keith

1

Vous pouvez utiliser AppDomain.CurrentDomain.BaseDirectory depuis la DLL ne sera pas exécutée par lui-même, vous avez juste besoin d'obtenir Executable répertoire de fichiers.

Quelque chose comme:

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

Désolé puisque c'est la première fois que je réponds ici ... le code n'est pas bien formaté :( –

Questions connexes