C# 覆盖dll配置

C# 覆盖dll配置,c#,app-config,C#,App Config,我有一个类库,包含域对象(基于linq的对象,在.net中) 4.0). 我希望此库为其自己的app.config使用连接字符串 存在一些问题: 按照设置使用的模型:ApplicationSettingsBase,我创建了一个 应该从app.config读取设置的包装器 但是,与模型不同,我提供了默认值。 问题是应该从app.config加载数据的属性 internal sealed class ApplicationSettings : ApplicationSettingsBase

我有一个类库,包含域对象(基于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"]; }
    }
//其他属性 }

app.config中的
现在,这不起作用了。。。 我试图将conn字符串的名称设置为完全限定的名称,如 namespace.class.property,但不可用

  • 我不想使用dbml使用的默认设置类,因为 它编译了设置:D,我不能在不重新编译的情况下更改它们
  • 我已经在中的一个项目中使用了不同型号的应用程序设置类 1.1,但我认为3.5已经足够成熟,并且有了自己的目标,那就是 工作
那么,为什么它不起作用,我怎样才能使它起作用呢


谢谢

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

更新:

嗨,Jack,我认为您的代码的主要问题是,它每次都在创建ApplicationSettings类的新实例,如果设置在用户范围内,您将拥有null值,然后每次都会得到默认值


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

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

更新:

嗨,Jack,我认为您的代码的主要问题是,它每次都在创建ApplicationSettings类的新实例,如果设置在用户范围内,您将拥有null值,然后每次都会得到默认值


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

哪个项目正在加载连接字符串,它是如何加载的?另外,您到底是如何修改项目A中的连接字符串的?您可能需要提供更多详细信息。如果这是一个使用类似实体框架的项目,您会发现在实例化datacontext时有不同的构造函数来设置连接字符串。是的,它是一个asp.net应用程序,B project使用ConnString.Settings文件来设置默认的连接字符串,但它是编译的,A项目无法再修改连接字符串。您可以通过查看此视频了解Project在哪个位置加载连接字符串以及如何加载连接字符串?另外,您到底是如何修改项目A中的连接字符串的?您可能需要提供更多详细信息。如果这是一个使用类似实体框架的项目,您会发现在实例化datacontext时有不同的构造函数来设置连接字符串。是的,它是一个asp.net应用程序,B project使用ConnString.Settings文件来设置默认的连接字符串,但它是编译的,A项目无法再修改connString。您可以通过查看此视频了解一些情况,确定它具有足够的权限。配置文件位于bin文件夹根目录中,运行应用时,它显示默认connString,而不是我的配置它与内部密封的部分类设置无关更改为公共。确定,它具有足够的权限。配置文件位于bin文件夹根目录中,运行应用程序时,它将显示默认的connString,而不是my config。它与内部密封的部分类设置无关。更改为public。
in app.config:
<connectionStrings>
<add name="MainConnectionString"
connectionString="..."
providerName="System.Data.SqlClient" />
</connectionStrings>