将app.config配置部分重定位到AppData文件夹

时间:2016-04-04 10:25:43

标签: c# .net winforms configuration app-config

我有一个 Windows窗体应用程序,它连接到典型configuration\system.serviceModel\client\endpoint节点下的app.config中配置的Web服务,如下所示:

  <system.serviceModel>
    <bindings>
      ...
    </bindings>
    <client>
      <endpoint address="http://blahblah/service.asmx" ... />
    </client>
  </system.serviceModel>

此应用程序通常用于相当锁定的Windows系统,因此需要管理员权限(通常通过UAC)来修改安装应用程序的Program Files目录中的任何文件。对大多数配置来说都没问题,因为它不应该是用户可配置的。

我想将端点配置重定位到用户的app数据文件夹,以便以后修改,安装后,无需任何管理员干预。

我知道我可以使用system.serviceModel下的client元素的configSource属性指向一个单独的配置文件,但这似乎不支持绝对路径(更不用说理想的appdata环境变量),因此似乎不是指向appdata的选项。

因此,我的问题是,如何将此配置块重新定位到用户的appdata文件夹中的外部文件,在该文件中可以修改它而无需后续管理员干预,同时将其余配置安全地保存在程序文件安装文件夹中?

1 个答案:

答案 0 :(得分:1)

您需要将<client>部分“外部化”,如下所示:

  • <client>部分的内容移至新文件,例如`〜/ App_Data文件/配置/ Client.config“:

    <client>
        <endpoint address="http://blahblah/service.asmx" ... />
    </client>
    
  • 修改我们现有的配置以指向该外部化配置文件:

    <system.serviceModel>
        <bindings>
        ...
        </bindings>
        <client configSource="/App_Data/Config/Client.config" />
    </system.serviceModel>
    

现在,您可以修改该外部文件中的客户端设置,而无需再触摸主web.config文件。

请注意:更改web.config时也会自动导致IIS应用程序池重新启动(从而重新加载新配置),当您修改时,不再这种情况这样的外化配置文件。因此,您需要显式回收IIS应用程序池以从配置文件中重新加载新设置

相关问题