【问题标题】:How to edit the ApplicationSettings section of app.config in WPF application如何在 WPF 应用程序中编辑 app.config 的 ApplicationSettings 部分
【发布时间】:2012-03-18 02:06:18
【问题描述】:

我一直在研究这个问题。但是我还没有遇到任何令人满意的解决方案。

场景是我有一个 WPF 客户端应用程序。我在项目中添加了几个 Web 引用,并且我的 Settings.Designer.cs 文件已修改,并且对服务器 url 和端口有硬编码引用。这开始反映在我的应用程序设置部分的 app.config 文件中。

用户在登录前,可以指定服务器的ServerIP和Port的设置。现在我想将这些设置保存在 app.config 中,并从那里获取服务器 IP 和端口的值,或者将其保存在其他位置并通过该 IP 和端口连接到服务器。我希望这些更改能够持续下去。

我能想到的一个解决方案是通过 XML 阅读器读取 app.config,修改文件,保存并以某种方式重新启动应用程序。

我想不出更好的方案,因为我认为不能从应用程序内部修改 ApplicationSettings 部分。

编辑:

我的 applicationSettings 部分如下所示:

<applicationSettings>
<ApplicationName.Properties.Settings>
  <setting name="Web_Service_Reference_Name1" serializeAs="String">
    <value>http://10.1.100.118:8080/AD/WebService1</value>
  </setting>
  <setting name="Web_Service_Reference_Name2" serializeAs="String">
    <value>http://10.1.100.118:8080/AD/WebService2</value>
  </setting>
</ApplicationName.Properties.Settings>
</applicationSettings>

【问题讨论】:

    标签: visual-studio-2010 c#-4.0 configuration app-config


    【解决方案1】:

    以前曾在此网站上发布过类似的问题。
    我有一个简单的解决方案,如下所示:

    public void WriteLocalValue(string localKey, string curValue) 
    { 
        Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
        KeyValueConfigurationElement k = config.AppSettings.Settings[localKey]; 
        if (k == null) 
            config.AppSettings.Settings.Add(localKey, curValue); 
        else 
            k.Value = curValue; 
        config.Save(); 
    } 
    
    public string ReadLocalValue(string localKey, string defValue) 
    { 
        string v = defValue; 
        try 
        { 
            Configuration config = ConfigurationManager.OpenExeConfiguration( Application.ExecutablePath); 
            KeyValueConfigurationElement k = config.AppSettings.Settings[localKey]; 
            if (k != null) v = (k.Value == null ? defValue : k.Value); 
                return v; 
        } 
        catch { return defValue; } 
    } 
    

    【讨论】:

    • 上面的代码从appsettings部分读取和写入值,而不是applicationSettings部分,可以通过settings部分的项目属性访问。
    • 我知道。但是 applicationSettings 对于标准 NET 方法是只读的。因此,与使用 XML 读取器/写入器编写 applicationSettings 的想法相比,这是一种便宜 的解决方法。让我们重新启动应用程序...
    • 好吧,我明白 applicationSettings 部分是只读的。但是,当我添加 Web 引用时,Visual Studio 会自动将设置名称和值添加到此部分,并在调用 Web 服务时自动选择它。它从 Settings.Designer.cs 文件 DefaultSettingValueAttribute 中获取此值。
    • applicationSettings 在设计时由 VS 修改。如果您需要在运行时更改 Web 服务的位置(URL),您可以在 Web 服务实例化之后和使用任何方法之前设置 url 属性。
    猜你喜欢
    • 2010-10-22
    • 2016-03-16
    • 2012-10-28
    • 1970-01-01
    • 2013-04-23
    • 2014-10-06
    • 2010-10-24
    • 2012-08-26
    • 2011-09-06
    相关资源
    最近更新 更多