У меня есть .NET dll, которому необходимо прочитать настройки конфигурации из своего конфигурационного файла. Обычно файл конфигурации помещается в тот же каталог, что и DLL. Но как я могу прочитать конфигурационный файл, если DLL является GAC'ed, потому что я могу поместить только DLL в GAC, а не его конфигурационные файлы.Конфигурационные файлы для сборок в GAC
ответ
Нужно ли пользователю настраивать Dll? Если это так, DLL должна использовать настройки конфигурации из файла app.config, а не собственную конфигурацию. Файл app.config должен храниться в том же каталоге, что и приложение. Если нет, то вы можете пойти несколькими разными способами. Вы можете внести изменения в файл machine.config, чтобы ваша Dll могла их найти. Я бы этого не сделал. Кроме того, вы можете сохранить конфигурацию в классе настроек. Их можно переопределить с помощью конфигурации, но ваши настройки по умолчанию будут установлены в сгенерированном коде для класса настроек через атрибуты, и поэтому отсутствие файла конфигурации не повлияет на вашу Dll, когда все значения по умолчанию являются обязательными.
Я согласен с tvanfosson, что dll Gac'ed будет читать по пути приложения. Но вы могли бы также сообщить DLL, которая является путь таким образом:
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;
Вы можете использовать AppDomain.CurrentDomain.BaseDirectory с DLL не будет выполняться сама по себе вам просто нужно, чтобы получить исполняемый файл каталог файлов.
Что-то вроде:
var appDomain = AppDomain.CurrentDomain.BaseDirectory;
string sFileName = appDomain.Replace("\\bin\\Debug", "");
sFileName = sFileName + "Config\\config.xml";
Извините, потому что это первый раз, когда я отвечаю здесь. Код он не хорошо отформатирован :( – 2013-12-02 11:44:07
tvanfosson был хороший ответ, но я думаю, что это более подходящий ответ. – Keith 2011-06-08 19:14:17