Конфиг файлы для сборок в GAC - PullRequest
10 голосов
/ 22 ноября 2008

У меня есть .NET dll, которая должна прочитать настройки своего конфигурационного файла. Обычно файл конфигурации находится в том же каталоге, что и DLL. Но как мне прочитать файл конфигурации, если DLL-библиотека GAC, потому что я могу поместить только библиотеки DLL в GAC, а не его файлы конфигурации.

Ответы [ 3 ]

13 голосов
/ 22 ноября 2008

Нужно ли пользователю настраивать Dll? Если это так, то DLL должна использовать параметры конфигурации из файла app.config, а не свою собственную конфигурацию. Файл app.config должен храниться в том же каталоге, что и приложение. Если нет, то вы можете пойти несколькими путями. Вы можете внести изменения в файл machine.config, чтобы ваш Dll мог найти их там. Я бы не стал этого делать. Кроме того, вы можете сохранить конфигурацию в классе настроек. Они могут быть переопределены через конфигурацию, но ваши значения по умолчанию будут установлены в сгенерированном коде для класса настроек через атрибуты, и поэтому отсутствие файла конфигурации не повлияет на вашу Dll, когда все значения по умолчанию являются необходимыми.

12 голосов
/ 22 ноября 2008

Я согласен с tvanfosson, что Gac'ed dll будет читать по пути приложения. Но вы также можете сообщить 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;
1 голос
/ 02 декабря 2013

Вы можете использовать AppDomain.CurrentDomain.BaseDirectory, поскольку библиотека DLL не будет выполняться сама по себе, вам просто нужно получить каталог исполняемых файлов, который его вызывает

Что-то вроде:

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

Здесь мой исполняемый файл находится в папке bin\Debug, а внутри папки у меня есть папка с именем Config, где у меня есть файл конфигурации xml config.xml. Таким образом, sFileName предоставит вам относительный путь к файлу конфигурации как \bin\Debug\Config\config.xml

...