1

我有一个类库,带有域对象(基于 linq 的对象,在 .net 4.0 中)。我想让这个库为它自己的 app.config 使用连接字符串。

有一些问题:遵循设置使用的模型:ApplicationSettingsBase,我创建了一个应该从 app.config 读取设置的包装器。

但是,与模型不同,我提供默认值。问题是应该从 app.config 加载数据的属性

  internal sealed class ApplicationSettings : ApplicationSettingsBase
    {
    // other properties

        [SpecialSetting( SpecialSetting.ConnectionString )]
       [global::System.Configuration.DefaultSettingValueAttribute("Server=.;Database=RFPLUSSTD;User Id=SYSADM;Password=SYSADM;")]
        public string MainConnectionString
    {
    get { return (string)this["MainConnectionString"]; }
    }

// 其他属性 }

in app.config:
<connectionStrings>
<add name="MainConnectionString"
connectionString="..."
providerName="System.Data.SqlClient" />
</connectionStrings>

现在,这不起作用...我尝试将 conn 字符串的名称设置为完全限定的名称,例如 namespace.class.property,但可以使用。

  • 我不想使用 dbml 使用的默认设置类,因为它会编译设置:D 并且如果不重新编译就无法更改它们...
  • 我已经在 1.1 的项目中使用了不同模型的应用程序设置类,但我认为 3.5 已经发展得足够好并且有自己的对象,那行得通..

那么,为什么不工作,我怎样才能让它工作?

谢谢

4

1 回答 1

1

您需要确保您在文件系统中具有进行更改的权限。我希望你已经考虑过了。如果您确定更改了配置文件并且它只带来了默认设置,则可能是从输出 bin 文件夹中加载配置文件,而不是在项目根目录中。如果您确定修改失败,请发布错误消息。

更新:

嗨,杰克,我认为您的代码的主要问题是它每次都在创建 ApplicationSettings 类的新实例,如果设置在用户范围内,您将获得空值,然后每次都会导致默认值。

您可以使用内置的 Settings 类轻松完成此操作。默认情况下,只能在程序集中访问设置,内部密封的部分类设置(在Settings.Designer.cs中)。如果您将其更改为公开密封,您将能够从任何程序集访问设置,接下来您必须将设置保留为应用程序范围而不是用户范围。一旦你完成了这两个,你可以毫无问题地检索和保存。

于 2013-02-27T14:02:04.603 回答