Неправильный файл App.config загружается - PullRequest
4 голосов
/ 23 января 2009

У меня есть библиотека классов .NET 3.5, которую я создал, которая читает файл App.config для значений, которые ему нужны. Он может просто получить значения конфигурации, когда я тестирую его в Visual Studio. Чтобы проверить это, я просто изменяю проект на консольное приложение и выполняю вызов метода.

У меня есть необходимость вызывать эту библиотеку классов из многих других программ .NET, и я хочу, чтобы библиотека классов была самодостаточной (я должен иметь возможность вызывать ее из любой другой программы, и она должна использовать свой собственный файл конфигурации , не знаю ни о каком вызывающем конфигурационном файле и т. д.).

Я могу добавить ссылку на dll (поскольку я все еще в разработке, я использую VS 2008, еще ничего не бросил в GAC), но файл App.config, который читает библиотека классов, взят из приложения вызывающей программы. .config, а не App.config библиотеки классов.

Файл библиотеки классов DLL имеет свой конфигурационный файл в том же каталоге, поэтому он должен быть в состоянии найти его просто отлично, а вызывающее приложение называется по-другому. Я использую стандартные пары значений ключей в файле App.config (например, имя файла конфигурации myClassLibrary.dll.config) и получаю значения с помощью следующей строки кода:

String myVal = ConfigurationSettings.AppSettings["myConfigSetting"];

Кто-нибудь знает, как это исправить?

Ответы [ 4 ]

5 голосов
/ 23 января 2009

Домен приложения в C # может иметь только один файл app.config уровня сборки. Смотрите здесь на MSDN . Исполняемый файл всегда запускает домен приложений и по умолчанию ищет файл конфигурации с именем: EXECUTABLE_NAME.config Например, SampleApp01.exe будет искать файл SampleApp01.exe.config в качестве файла конфигурации.

1 голос
/ 31 января 2009

вы можете поместить свои конфиги в файл machine.config в папке framework, таким образом вы можете использовать вашу конфигурацию глобально во всех приложениях .Net, работающих на этом компьютере,

0 голосов
/ 26 августа 2009

Я не могу найти способ избежать получения app.config для вызывающего dll / exe и т. Д. Единственный способ, который я нашел, - это использовать жестко закодированный путь и загрузить его таким образом. Вот код, который я использую для этого:

using System.Configuration;
...
public static KeyValueConfigurationCollection getAppSettingsFromAppConfig(String appConfigPath) {
    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = appConfigPath;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    AppSettingsSection section = config.AppSettings;
    KeyValueConfigurationCollection appsettings = section.Settings;
    return appsettings;
}

Затем у вас есть коллекция KeyValueConfigurationElement, которую вы можете использовать .Value, чтобы получить строку из файла конфигурации с помощью.

0 голосов
/ 23 января 2009

Я считаю, что app.config всегда будет использоваться исполняемым файлом. Просто поместите его в этот каталог.

Они сделали бы это, чтобы обеспечить совместное использование dll и не иметь общего файла .config.

Возможно, вы сможете создать ссылку из исполняемого файла .config

<appSettings configSource="\lib\app.config">

Или измените его имя, я не понимаю, как вы можете иметь оба файла app.config в одном и том же каталоге ... не имеют ли они одинаковое имя?

<appSettings configSource="\lib.app.config">
...