Используя 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(...)
.
Я понимаю, что перспектива загрузки кода конфигурации - это последнее, что вам нужно, но это позволит вам четко определить и изолировать переменные среды в файлах конфигурации.