3

我正在玩弄 .NET 的配置支持(ConfigurationManager 类和相关的支持类)。我想编写一个应用程序,一旦安装:

  • 在 foo.exe.config(在程序文件中)中有默认设置。
  • 用户稍后可以使用应该保留的非默认值覆盖设置。
  • 用户的偏好应该保留在用户的配置文件中,因为他不应该对 Program Files 目录具有写权限。

应用程序在设置时应使用用户的首选项,否则使用默认值。

看起来这应该很容易——这是一种非常常见的模式。但是我在这方面的尝试遇到了障碍,我想知道我是否采取了正确的方法。

以下代码产生运行时异常“ConfigurationSection 属性在锁定时无法编辑”。

using System;
using System.Configuration;

namespace DemoAppSettingsProblem
{
    class Program
    {
        static void Main(string[] args)
        {
            Configuration userConfig =
                ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
            if ( userConfig.AppSettings.Settings["foo"] != null )
                userConfig.AppSettings.Settings.Remove("foo");

            userConfig.AppSettings.Settings.Add("foo", "The string is foo.");

            userConfig.Save(ConfigurationSaveMode.Modified);    // exception!
        }
    }
}

问题是 .NET 定义的<appSettings>部分是用默认声明的allowExeDefinition=MachineToApplication(请参阅 Microsoft 的 Irena Kennedy 的这篇好文章)。这禁止将该部分写入用户的配置文件(本地或漫游)。

所以,我假设我需要定义我自己的部分,使用allowExeDefinition=MachineToLocalUser. 但据我从 MSDN 文档中得知,这意味着我需要创建自己的配置类,从ConfigurationSection. 那里的例子让我的工作比我预期的要多,这通常会引发我做错事的警钟。

做到这一点真的有那么难吗?.NET 是否提供了一种简单的方法来支持这一点,还是我应该完全采用不同的方法?

4

2 回答 2

2

我已经使用了设置功能,它会为您将用户设置写入应用程序配置......

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

于 2009-05-06T20:34:56.250 回答
1

假设您使用的是 .NET 2.0 或更高版本,您是否检查过“设置”文件?这些存储在您的 app.config 中 - 应用程序设置<applicationSettings>分段,<userSettings> 中的用户可定义设置,顺便说一下allowExeDefinition=MachineToLocalUser您提到的设置。

也许这可能是一种方法?这些用户设置是一种已定义的类型,如果需要(“mySettings”),您绝对可以在不同的名称下重复使用。

马克

于 2009-05-06T20:32:03.993 回答