чтобы получить строку из файла конфигурации с.

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

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

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

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

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

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

Ответы на вопрос(4)

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

 Mario22 янв. 2009 г., 23:38
Файл конфигурации существует с правильным именем, но по какой-то причине, когда вызывается библиотека классов, он не находит его, а использует вызывающий файл app.config.
 David25 авг. 2009 г., 22:53
Это конфликт. «ConfigurationSettings» будет искать только файл конфигурации для сборки, которая запустила домен приложения. Он никогда не будет смотреть на файл конфигурации вашей отдельной сборки.

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

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

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

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

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

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

<appSettings configSource="\lib.app.config">
 Mario22 янв. 2009 г., 23:48
То, что я хочу сделать, это иметь возможность вызывать эту автономную библиотеку классов (все настроены и готовы к работе из своего собственного файла конфигурации) из нескольких приложений без изменения файла конфигурации каждого вызывающего приложения. Ключевое слово здесь автономно.
 Mario22 янв. 2009 г., 23:37
библиотека классов отделена от вызывающего приложения, поэтому нет. Я могу посмотреть файл конфигурации, открыть его и проверить правильность всех настроек.
 Hamish Smith22 янв. 2009 г., 23:32
не будут ли они оба переименованы в assemblyname.config при сборке сборки?
 Glennular22 янв. 2009 г., 23:42
если вы не хотите связывать файлы, вы можете добавить значения из вашего assembly.config в ваш exe.app.config
 Glennular22 янв. 2009 г., 23:38
выглядит как ваш правильный. Я привык к файлам web.config, должен был пойти проверить.

ll / 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 чтобы получить строку из файла конфигурации с.

Ваш ответ на вопрос