覆盖dll配置

时间:2013-02-27 09:38:04

标签: c# app-config

我有一个类库,带有域对象(基于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使用的默认Settings类,因为 它编译设置:D和我不能不重新编译就改变它们......
  • 我已经在项目中使用了不同型号的app设置类 1.1,但我认为3.5已经增长到足够的并拥有自己的对象 工作..

那么,为什么不工作?我怎样才能使它发挥作用?

谢谢

1 个答案:

答案 0 :(得分:1)

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

<强>更新

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

您可以使用内置的“设置”类轻松完成此操作。默认情况下,只能在装配体中访问“设置”,内部密封的部分类设置(在 Settings.Designer.cs 中)。如果将其更改为 public sealed ,您将能够从任何程序集访问“设置”,接下来要将设置保留为“应用程序范围”而不是“用户范围”。完成这两项后,您可以毫无问题地检索和保存。