1

我有一个使用 app.config 的 Windows 窗体应用程序 VS 2008 - C#。

在执行时,在我的应用程序的菜单选项中,我想编辑 app.config 的值,保存并重新启动应用程序。

任何示例源代码,任何好的模式和实践?

编辑:

在 MSDN 论坛中,Jean Paul VA:

  1. 创建一个测试 Windows 窗体应用程序并将 app.config 添加到其中。

  2. 添加对 System.configuration 的引用

  3. 在 appSettings 中添加一个名为“font”的键,其值为“Verdana”

  4. 在表单上放置一个按钮,然后单击它添加修改代码。

        System.Configuration.Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
        configuration.AppSettings.Settings.Remove("font");
        configuration.AppSettings.Settings.Add("font", "Calibri");
    
        configuration.Save(ConfigurationSaveMode.Modified);
    
        ConfigurationManager.RefreshSection("appSettings");
    

你怎么想的 ?

4

4 回答 4

1

我认为您实际上不能在运行时写入配置文件-它很可能是只读的,但是,可能有一种方法可以通过重写文件(根据需要进行适当的更改)并基本上替换现有的,然后,进一步,重新启动应用程序以加载新值(我非常怀疑这是可取的,并且个人不会尝试检测这个问题)。

您也可以考虑将应用程序设置存储在设置文件中,以这种方式轻松操作。

要使用设置,首先假设您有一个 Settings.settings 文件(如果没有,则创建一个:添加项目->设置文件),然后我们配置了一个名为MyUnicornsName; 为了进行更改并将其持久化,您只需执行以下操作:

Settings.Default.MyUnicornsName = "Lucifers Spawn";
Settings.Default.Save();

同样,要读取设置:

ATextDisplayControl.Text = Settings.Default.MyUnicornsName

如果您不知道,Visual Studio 会在您打开/双击 IDE 中的设置文件时打开设置编辑器;使用此界面,您可以添加和编辑初始设置及其值,并且string不是唯一受支持的值,可以使用所有原语,据我所知,也可以使用任何可序列化的值。

于 2011-01-13T12:28:38.990 回答
0

您是否有任何理由不能使用通常的自动生成的 Properties.Settings 将更改的数据存储在设置文件中?一件很棒的事情是您知道您要更改的内容,因此您甚至不必重新启动应用程序!

在 C# 中使用设置

设置的运行时访问非常简单:

this.BackColor = Properties.Settings.Default.myColor;

(没有简单的修改 app.config 本身的好模式 b/c 它被设计为在这种情况下是只读的,具有专家用户设置。)

于 2011-01-13T12:30:23.987 回答
0

使用 Project->Properties->Settings 来处理这些事情。

于 2011-01-13T12:31:21.580 回答
0

实际上 App.config 中的属性是只读的,所以你不能这样做。

但是有一个窍门…………………………………………

在 Settings.cs 文件中创建一个公开的函数或方法,以便可以使用Properties.settings

并编写以下代码..

    public void ChangeProperty(string propertyname, string value)
    {
        this[propertyname] = value;
    }

请记住将属性名称的确切字符串传递给方法。或者更好地为设置创建一个 Writeonly 属性。

更新

这是设置为属性的代码,我以连接字符串为例,打赌它可以是任何东西。请记住存储的属性是Object类型,因此您可以创建特定于该类型的属性..

    public string MyCustomConnectionstring
    {
        set
        {
            //replace the string with your connection string otr what ever setting you want to change
            this["myConnectionString"] = value;
        }
    }

现在您可以轻松地使用此属性在运行时更改 ConnectionString...

于 2011-01-13T12:42:13.943 回答