Можно ли определить <configSections> в конфигурации приложения зависимой библиотеки DLL

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

Вот мой файл конфигурации (MyTest.dll.config)

<configuration>
  <configSections>
    <section name="test" type="MyTest, Test.ConfigRead"/>
    </configSections>
    <test>
            ..Stuff here
        </test>
    <appSettings>
        <add key="uri" value="www.cnn.com"/>
    </appSettings>
</configuration>

Вот мой пример кода для доступа к тесту configSection

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();  
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config";    
Configuration applicationConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);
//Using OpenExeConfiguration doesnt help either.
//Configuration applicationConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
//Accessing test section
applicationConfig.GetSection("test");

//Accessing AppSettings works fine.
AppSettingsSection appSettings = (AppSettingsSection)applicationConfig.GetSection("appSettings");
appSettings.Settings["uri"].Value;

Как показано значение appsettings можно прочитать просто отлично. Возможно ли иметь configSections в любой другой конфигурации, кроме файла конфигурации основного приложения?

3 ответа

Это НЕ работает, как вы упомянули в вопросе.

У вас может возникнуть ощущение, что вы можете загрузить файл DLL.Config, но он не загружается приложением, но, вероятно, он работает, потому что у вас есть тот же раздел appsettings в app.config приложений. По умолчанию у каждого домена приложения есть файл конфигурации, и в основном его имя соответствует имени exe (поэтому имя будет applicationname.exe.config.

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

Теперь у вас есть две альтернативы для достижения того, чего вы хотите достичь:

Вариант 1. Вы можете поддерживать отдельные файлы конфигурации для каждого раздела ConfigurationSection.

Каждый класс, унаследованный от ConfigurationSection, имеет свойство с именем "configSource". В main application.exe.config вы можете указать пользовательский раздел, как показано ниже:

<CustomSection configSource="{relative file name}" />
<appSettings file = "relative file name" />

Таким образом, вы можете сохранить ваши разделы конфигурации разделенными на несколько файлов конфигурации, и вы все равно сможете получить к ним доступ, используя обычный синтаксис system.configuration.

Обратитесь к этому для более подробной информации.

Вариант 2: изменить exe по умолчанию

файл конфигурации по умолчанию с именем application.exe.config. Это можно изменить с помощью приведенного ниже синтаксиса

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);

Таким образом, вы можете установить любой другой XML-файл в качестве конфигурационного файла для программы.
Обратите внимание, что вам необходимо вызвать этот метод SetData перед первым вызовом классов конфигурации (т. Е. Перед тем, как система прочитает файлы конфигурации). Вы можете установить свой.dll.config в качестве файла конфигурации приложения и прочитать весь раздел конфигурации оттуда. См. Это для более подробной информации о варианте 2.

Надеюсь, что это предоставляет достаточно информации.

Вы пропускаете "." Ограничитель?

fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config"; 

добавить '.':

fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + ".config"; 

Параметры конфигурации применяются на уровне приложения (app.config, расположенного в корне приложения для.EXE, веб-корня для веб-приложений) и компьютера (machine.config, расположенного на уровне [System Root]\Microsoft.NET\Framework[CLR Version]\CONFIG),

Единственный другой используемый файл конфигурации - это файл конфигурации политики, который используется для создания политик управления версиями сборки и связан со сборкой путем использования инструмента AL. Это, очевидно, то, что вы не хотите делать.

Попробуйте объединить разделы конфигурации надстройки с разделом конфигурации текущего приложения, чтобы создать один файл конфигурации уровня приложения или же поместить их в файл machine.config.

Другие вопросы по тегам