appSettings vs applicationSettings: устарели ли appSettings?
У меня возникли вопросы по поводу двух способов хранения настроек в файле web.config.
AppSettings: Смотрите в web.config:
<appSettings>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</appSettings>
Использование в коде:
ConfigurationManager.AppSettings["key1"];
ApplicationSettings/Свойства (автоматически сгенерированы при использовании вкладки 'свойства' в проекте).
Смотрите в web.config:
<applicationSettings>
<Projectname.Properties.Settings>
<setting name="TestEnvironment" serializeAs="String">
<value>True</value>
</setting>
</Projectname.Properties.Settings>
</applicationSettings>
Использование в коде:
Properties.Settings.Default.TestEnvironment
В чем разница между этими двумя способами хранения настроек в web.config?
Насколько я вижу, недостатком appSettings является необходимость самостоятельно редактировать web.config, и appSettings не имеют строгой типизации, тогда как ApplicationSettings имеют.
Оба варианта могут использоваться в проекте веб-развертывания.
На мой взгляд, для appSettings нет никакого смысла. Я что-то упускаю? Какой из этих вариантов считается исторически более старым?
3 ответ(ов)
ApplicationSettings
являются пространственно именованными, что позволяет двум различным сборкам иметь свои собственные настройки с именем "timeout" без возникновения конфликтов. Кроме того, ApplicationSettings
являются необязательными, так как значение по умолчанию определяется с помощью атрибута, заданного непосредственно в коде для каждой настройки.
На что я обратил внимание, так это то, что значения AppSettings могут быть использованы через встроенные теги <%$ AppSettings: имя %>
в страницах aspx. Однако, кажется, нет аналогичного способа получить значения ApplicationSettings с помощью встроенных тегов.
Если вам нужно использовать значения из ApplicationSettings в вашем коде, вы можете попробовать следующий вариант: получайте их в коде C# и передавайте в качестве параметров в ваши страницы. Например:
string mySetting = ConfigurationManager.AppSettings["MySetting"];
Таким образом, вы сможете использовать значения ApplicationSettings, но придется немного изменить свой подход. Надеюсь, это поможет!
Я бы хотел добавить, что GUI IIS 8.0 (и предыдущих версий) не позволяет редактировать секцию <applicationSettings>
(она невидима, то есть кажется, что параметры невозможно настроить), в то время как <appSettings>
редактируемы в IIS 8.0.
Было бы неплохо, если бы VS2012/IIS 8.0 использовали одну и ту же систему настройки GUI, но, похоже, что продукты не синхронизированы в этом плане. Так или иначе, вам, возможно, придется редактировать настройки приложения с помощью блокнота.
Строки подключения отображаются в обоих интерфейсах, но если вы используете <applicationSettings>
в IIS, они включают полный путь (Namespace.Properties.Settings.ConnectionStringName).
Если папка не существует, создайте её
Запрос прерван: Не удалось создать безопасный канал SSL/TLS
Таймаут при использовании Linq-to-SQL
Как запустить модульные тесты на платформе x64?
В чем разница между двумя подходами маршрутизации на основе атрибутов: HttpGet("") и Route("")?