Перенос настроек в другой конфигурационный файл
-
03-07-2019 - |
Вопрос
Можно ли переместить ApplicationSettings в другой конфигурационный файл, как это возможно с помощью ConnectionStrings или AppSettings?
Когда я создаю настройки для своего веб-приложения с помощью конструктора, я получаю раздел ApplicationSettings в моем web.config, такой как:
<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
Этот вопрос не был отмечен как ответ в течение достаточно долгого времени. Ну, под ответом marc_s есть комментарии, которые объясняют, что это невозможно. Я не хотел отмечать ответ marc_s как принятый ответ, потому что в комментариях говорится совсем не то, что ответ. Так что ответ таков: к сожалению, это невозможно.
Другие советы
Ваааа, опоздал на этот вопрос, но я только что ударился головой об стену над этим вопросом Оказывается, вы можете сделать это, но не для всего узла applicationSettings, вы должны делать каждый дочерний узел applicationSettings отдельно. Я получил волшебную информацию из нижней части MSDN SectionInformation.ConfigSource article.
содержимое app.config / web.config
<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>
Да, конечно, это возможно!Любая конфигурационная секция в любом из ваших конфигурационных файлов может быть "экстернализована" с помощью атрибута configSource="otherConfigFile.config".
Было бы еще лучше, если бы я мог принудительно использовать класс Settings AppSettings, а не ApplicationSettings.
Чтобы сделать это, вам нужно отказаться от использования приятных визуальных классов "Настроек" в .NET и напрямую использовать ConfigurationManager.Таким образом, вы можете ввести свои настройки в <appSettings> и прочитать их с помощью ConfigurationManager.AppSettings["ключевое имя"].
Марк
Если бы это был мой проект, я бы избавился от applicationSettings и переместил бы все в раздел appSettings. Значение applicationSettings заключается в том, что значения могут быть строго типизированы и доступны для Intellisense. Ни один из них не особенно выгоден для вашей ситуации. Конечно, этот большой удар по переносу всего не стоит, если вы все еще создаете настройки с помощью дизайнера.
Хм ... я знаю, что это возможно, потому что я знаю, что мы делали это на предыдущей работе. Я точно не помню, как именно. Я считаю, что у нас был родительский проект, который мы использовали для наследования настроек, и был ручной шаг, посредством которого, если мы вносили изменения в applicationSettings в подпроекте, нам нужно было вручную скопировать изменения в родительский проект (но тогда они были унаследованы всеми дочерними проектами).
Извините за отсутствие конкретики; Я не был тем, кто реализовал решение, и со временем оно стало для меня неясным. Однако я помню, что мы смогли это сделать, и я думаю, что мои воспоминания точны относительно того, как мы это делали.