Перемещение настроек в другой файл конфигурации - PullRequest
10 голосов
/ 04 мая 2009

Возможно ли переместить applicationSettings в другой файл конфигурации, как это возможно с connectionStrings или appSettings?

Когда я создаю Настройки для своего веб-приложения с помощью дизайнера, в моем файле web.config появляется раздел applicationSettings, например:

  <applicationSettings>
    <TestWebApplication.Properties.Settings>
      <setting name="AnotherSetting" serializeAs="String">
        <value>Another setting value</value>
      </setting>
    </TestWebApplication.Properties.Settings>
  </applicationSettings>

Я бы хотел переместить их в другой файл, например appSettings:

<appSettings configSource="config\appsettings.config"/>

Я работаю с проектом, который имеет множество настроек, доступ к которым осуществляется через класс, созданный с помощью designer, и web.config крайне сложно поддерживать между несколькими средами. Было бы еще лучше, если бы я мог заставить класс Settings использовать appSettings, а не applicationSettings.

Возможно ли это?

Заранее спасибо за помощь.

Ответы [ 5 ]

25 голосов
/ 07 декабря 2009

Ваааа, опоздал на этот вопрос, но я только что бился головой об стену из-за этого. Оказывается, вы можете сделать это, но не для всего узла applicationSettings, вы должны делать каждый дочерний узел applicationSettings отдельно. Я получил волшебную информацию из нижней части MSDN SectionInformation.ConfigSource статьи.

app.config / web.config content

<applicationSettings>
    <TestWebApplication.Properties.Settings configSource="externalfile.config" />
</applicationSettings>

содержимое externalfile.config:

<TestWebApplication.Properties.Settings>
    <setting name="AnotherSetting" serializeAs="String">
        <value>Another setting value</value>
    </setting>
</TestWebApplication.Properties.Settings>
2 голосов
/ 05 мая 2009

Да, конечно, это возможно! Любой ConfigurationSection в любом из ваших файлов конфигурации может быть «выведен» с помощью атрибута configSource = "otherConfigFile.config".

Было бы еще лучше, если бы я мог заставить класс настроек использовать Настройки приложения, а не настройки приложения.

Чтобы сделать это, вам необходимо отказаться от использования визуальных классов «Настройки» в .NET и использовать ConfigurationManager напрямую. Таким образом, вы можете поместить свои настройки в и прочитать их, используя ConfigurationManager.AppSettings ["keyname"].

Марк

1 голос
/ 05 мая 2009

Если бы это был мой проект, я бы избавился от applicationSettings и переместил бы все в раздел appSettings. Значение applicationSettings заключается в том, что значения могут быть строго типизированы и доступны для Intellisense. Ни один из них не особенно выгоден для вашей ситуации. Конечно, этот большой хит в переносе всего не стоит, если вы все еще создаете настройки с помощью дизайнера.

0 голосов
/ 11 октября 2009

Этот вопрос не был отмечен как ответ в течение достаточно долгого времени. Ну, под ответом marc_s есть комментарии, которые объясняют, что это невозможно. Я не хотел отмечать ответ marc_s как принятый ответ, потому что в комментариях говорится совсем не то, что ответ. Поэтому ответ таков: к сожалению, это невозможно.

0 голосов
/ 05 мая 2009

Хм ... Я знаю, что это возможно, потому что я знаю, что мы делали это на предыдущей работе. Я точно не помню, как именно. Я считаю, что у нас был родительский проект, который мы использовали для наследования настроек, и был ручной шаг, посредством которого, если мы вносили изменения в applicationSettings в подпроекте, нам нужно было вручную скопировать изменения в родительский проект ( тогда они были унаследованы всеми дочерними проектами).

Извините за отсутствие конкретики; Я не был тем, кто реализовал решение, и со временем оно стало для меня неясным. Однако я помню, что мы смогли это сделать, и я думаю, что мои воспоминания точны относительно того, как мы это делали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...