изменение или обновление app.config во время выполнения в проектах wpf - PullRequest
1 голос
/ 10 ноября 2011

Как перезаписать файл конфигурации во время выполнения.У меня есть четыре файла конфигурации для DEV, TEST, UAT, PROD.Исходя из выбора пользователя, мне нужно полностью переписать файл конфигурации по умолчанию одним из файлов конфигурации, определенных для выбора.Эти конфигурационные файлы не только имеют раздел appsettings, но также имеют сложные секции cutom и подэлементы с множеством атрибутов.Мне нужно перезаписать и обновить разделы динамически во время выполнения.Я знаю, что есть очень много статей по редактированию разделов appsettings.Но я хочу полностью перезаписать весь файл.Ваша помощь в VB.net приветствуется.

У меня есть пользовательские разделы:

1 Ответ

1 голос
/ 10 ноября 2011

Используя ClickOnce, я не верю, что вы можете или должны изменять файлы в папке установки, потому что она доступна только для чтения ... Поэтому у вас есть выбор: пойти с установкой MSI и выполнить специальную операцию установки для переключения всоответствующий файл конфигурации или . Создайте несколько пользовательских элементов конфигурации для инкапсуляции ваших различных сред.

В нашем приложении мы сделали последнее.У нас есть что-то вроде следующего пользовательского раздела конфигурации в нашем главном app.config.

<myApp defaultEnvironmentName="prod">    
  <environments>
    <add name="prod" title="Production" description="Full production environment" injectionContainers="prod">
        ...
        <!-- Add custom elements the affect your environment -->
        ... 
    </add>
    <add name="qa" title="Quality Assurance" description="Full production environment except running off our mock database" injectionContainers="prod qa">
        ...
        <!-- Add custom elements the affect your environment -->
        ... 
    </add>
  </environments>
</myApp>

... <!-- Other elements that are common to all environments --> ...

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

Когда нам требуется доступ к чему-то, что варьируется в зависимости от среды, мы напрямую обращаемся к пользовательскойСвойство CurrentEnvironment раздела конфигурации, в котором использовались вышеупомянутые настройки для его обработки:

var title = MyAppSection.Configured.CurrentEnvironment.Title;

Обратите внимание, что здесь MyAppSection.Configured - это просто экземпляр-одиночка, который загружается на основе ConfigurationManager.GetSection(...).

Я понимаю, что перспектива загрузки кода конфигурации - это последнее, что вам нужно, но это позволит вам четко определить и изолировать переменные среды в файлах конфигурации.

...