Прочитать раздел appSettings из файла Web.config с помощью WebConfigurationManager
Я занимаюсь разработкой приложения WinForm на C# и.NET Framework 4.7.
Я хочу открыть файл Web.config, прочитать его раздел appSetting и изменить его.
Чтобы открыть его, я использую это:
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null);
Он открывает его, но, когда я пытаюсь получить ключи с:
string[] keys = config.AppSettings.Settings.AllKeys;
Я получаю нулевой массив.
Это раздел appSetting:
<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 ответа
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
).
Предполагается, что OpenWebConfiguration получит путь к вашей веб-конфигурации, если я не ошибаюсь, и вы передаете его null
,
Попробуйте вот так:
config = WebConfigurationManager.OpenWebConfiguration("~");
Также это может вам помочь: как вы изменяете настройки web.config app во время выполнения?
Ну, во-первых, вы используете web.config для настольного приложения. Это не звучит правильно. Попробуйте вместо этого использовать app.config. Во-вторых, WebConfigurationManager.OpenWebConfiguration открывает файл конфигурации веб-приложения.
Что касается темы, для получения информации из файла конфигурации попробуйте использовать
var keys = ConfigurationManager.AppSettings.AllKeys