Я понимаю, что ядро asp.net имеет новую конфигурационную систему, которая довольно гибкая и великолепная. Но есть вещи, которые мне нравятся в системе конфигурации на основе web.config из.net 4.x. Например, можно помещать комментарии в файл web.config, так как это xml файл. И это для меня стоит придерживаться xml, а не идти с блестящим новым подходом json. [ Обновление: теперь я понимаю, что подход json также поддерживает комментарии в файле.]
Итак, если у меня есть базовый веб-проект Asp.Net, который нацелен на полную структуру, мне кажется, что я должен использовать подход System.Configuration.ConfigurationManager.AppSettings[key]
для получения настройки.
Но когда я пытаюсь, значение всегда возвращается null (по крайней мере, с помощью IIS express, использующего VS2015).
Он должен работать правильно? Какие-нибудь мысли о том, что я могу смотреть?
Web.config
<configuration>
<appSettings>
<add key="SomeSetting" value="true"/>
</appSettings>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
Код для доступа к настройке:
string key = "SomeSetting";
string setting = ConfigurationManager.AppSettings[key];
if (setting == null)
throw new Exception("The required configuration key " + key + " is missing. ");
ОБНОВИТЬ
После дальнейших исследований я теперь понимаю, почему это не работает, но я до сих пор не нашел способа исправить это. Коренной причиной является то, что ConfigurationManager ищет информацию о конфигурации в другом файле, а не в файле web.config.
Это можно увидеть, посмотрев свойство AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
. В моем случае вместо того, чтобы указывать на website_folder\web.config
он вместо этого указывает на website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Config
где site_folder - это путь к папке, содержащей мой сайт.
Документация и intellisense говорят, что AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
является настраиваемым свойством, но когда я пытаюсь, я нахожу, что этот параметр не меняет его значение. Очень странно.
Поэтому, хотя теперь я вижу, в чем проблема, я не могу найти способ ее исправить.