0

appSettings vs applicationSettings: устарели ли appSettings?

14

У меня возникли вопросы по поводу двух способов хранения настроек в файле 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 ответ(ов)

0

ApplicationSettings являются пространственно именованными, что позволяет двум различным сборкам иметь свои собственные настройки с именем "timeout" без возникновения конфликтов. Кроме того, ApplicationSettings являются необязательными, так как значение по умолчанию определяется с помощью атрибута, заданного непосредственно в коде для каждой настройки.

0

На что я обратил внимание, так это то, что значения AppSettings могут быть использованы через встроенные теги <%$ AppSettings: имя %> в страницах aspx. Однако, кажется, нет аналогичного способа получить значения ApplicationSettings с помощью встроенных тегов.

Если вам нужно использовать значения из ApplicationSettings в вашем коде, вы можете попробовать следующий вариант: получайте их в коде C# и передавайте в качестве параметров в ваши страницы. Например:

string mySetting = ConfigurationManager.AppSettings["MySetting"];

Таким образом, вы сможете использовать значения ApplicationSettings, но придется немного изменить свой подход. Надеюсь, это поможет!

0

Я бы хотел добавить, что GUI IIS 8.0 (и предыдущих версий) не позволяет редактировать секцию <applicationSettings> (она невидима, то есть кажется, что параметры невозможно настроить), в то время как <appSettings> редактируемы в IIS 8.0.

Было бы неплохо, если бы VS2012/IIS 8.0 использовали одну и ту же систему настройки GUI, но, похоже, что продукты не синхронизированы в этом плане. Так или иначе, вам, возможно, придется редактировать настройки приложения с помощью блокнота.

Строки подключения отображаются в обоих интерфейсах, но если вы используете <applicationSettings> в IIS, они включают полный путь (Namespace.Properties.Settings.ConnectionStringName).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь