Прочитать раздел appSettings из файла Web.config с помощью WebConfigurationManager - PullRequest
0 голосов
/ 30 августа 2018

Я занимаюсь разработкой приложения WinForm на C # и .NET Framework 4.7.

Я хочу открыть файл Web.config, прочитать его раздел appSetting и изменить его.

Чтобы открыть его, я использую это:

 System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null);

Он открывается, но, когда я пытаюсь получить ключи с:

string[] keys = config.AppSettings.Settings.AllKeys;

Я получаю нулевой массив.

Это раздел настроек приложения:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <connectionStrings>

  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="MinRemainingCodes" value="100" />
    <!-- Others keys -->
  </appSettings>

</configuration>

Возможно, проблема в том, что он не открывает файл, а в документации говорит:

Виртуальный путь к файлу конфигурации. Если ноль, корень Файл Web.config открыт.

Может быть, я не понимаю, что означает root, поскольку программа и файл Web.config находятся в одной папке.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

WebConfigurationManager.OpenWebConfiguration включает следующее описание параметра path:

Виртуальный путь к файлу конфигурации. Если ноль, корневой файл Web.config открывается.

Поскольку ваше приложение не работает под IIS как веб-сайт, открываемый Web.config на самом деле находится в самой папке установки .NET Framework (в моем случае это C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config).

WebConfigurationManager.OpenMappedWebConfiguration позволяет отображать виртуальные каталоги в физические каталоги, чтобы можно было указать виртуальный путь, сопоставленный с вашим собственным локальным каталогом. Вот код, который я использовал для этой работы:

var webConfigurationFileMap = new WebConfigurationFileMap();

webConfigurationFileMap.VirtualDirectories.Add(
    string.Empty,
    new VirtualDirectoryMapping(Directory.GetCurrentDirectory(), isAppRoot: true));

var webConfig = WebConfigurationManager.OpenMappedWebConfiguration(
    webConfigurationFileMap,
    string.Empty);

Как видите, я сопоставляю корневой виртуальный каталог (используя string.Empty) с каталогом приложения (используя Directory.GetCurrentDirectory).

0 голосов
/ 30 августа 2018

Ну, во-первых, вы используете web.config для настольного приложения. Это не звучит правильно. Попробуйте вместо этого использовать app.config. Во-вторых, WebConfigurationManager.OpenWebConfiguration открывает файл конфигурации веб-приложения

Что касается темы, для получения информации из файла конфигурации попробуйте использовать

var keys = ConfigurationManager.AppSettings.AllKeys
0 голосов
/ 30 августа 2018

OpenWebConfiguration должен получить путь к вашей веб-конфигурации, если я не ошибаюсь, и вы передаете его null.

Попробуй так:

config = WebConfigurationManager.OpenWebConfiguration("~");

Также это может вам помочь: Как изменить настройки приложения web.config во время выполнения?

...