在wpf项目中运行时更改或更新app.config

在wpf项目中运行时更改或更新app.config,wpf,vb.net,wcf,clickonce,Wpf,Vb.net,Wcf,Clickonce,如何在运行时覆盖配置文件。我有四个用于DEV、TEST、UAT和PROD的配置文件。根据用户选择,我需要使用一个特定于选择的配置文件完全覆盖默认配置文件。这些配置文件不仅具有appsettings部分,而且还具有复杂的cutom部分和具有许多属性的子元素。我需要在运行时动态覆盖和刷新节。我知道有很多关于编辑appsettings部分的文章。但我想完全覆盖整个文件。感谢您在VB.net中的帮助 我有自定义部分:使用ClickOnce,我认为您不能或不应该更改安装文件夹中的文件,因为它是只读的。。。

如何在运行时覆盖配置文件。我有四个用于DEV、TEST、UAT和PROD的配置文件。根据用户选择,我需要使用一个特定于选择的配置文件完全覆盖默认配置文件。这些配置文件不仅具有appsettings部分,而且还具有复杂的cutom部分和具有许多属性的子元素。我需要在运行时动态覆盖和刷新节。我知道有很多关于编辑appsettings部分的文章。但我想完全覆盖整个文件。感谢您在VB.net中的帮助


我有自定义部分:

使用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 --> ...
注意,这里,
MyAppSection.Configured
只是一个基于
ConfigurationManager.GetSection(…)
加载的单例实例


我意识到可能会有一船配置代码是您最不希望看到的,但它可以让您在配置文件中清楚地定义和隔离环境变量。

使用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 --> ...
注意,这里,
MyAppSection.Configured
只是一个基于
ConfigurationManager.GetSection(…)
加载的单例实例

我意识到,可能会有一船配置代码是您最不希望看到的,但它可以让您在配置文件中清楚地定义和隔离环境变量