2010-10-01 101 views
2

我正在尝试使用应用程序设置和我正在处理的C#.NET项目。但我似乎无法让它返回除默认值以外的其他任何内容。通过项目属性,我添加了一个设置DBConnectionString,并将其值设置为我想要使用的连接字符串。其范围设置为“应用程序”。为什么我的应用程序不能读取MyApplication.dll.config文件?

这样做会创建许多文件,包括Settings.settings,Settings.Designer.CS和app.conifg。从我所了解的两个设置。*文件定义了一个定制的Settings类,其来自ApplicationSettingsBase。然后,Settings类具有可用于设置和检索每个设置的自定义类型安全属性。 app.config文件是一个存储实际设置值的XML文件。

当我建立我的项目时,它看起来像app.config文件被复制到MyApplication.dll.config目标目录。我的程序运行良好,并且能够使用默认的连接字符串。

接下来我尝试编辑MyApplicaiton.dll.config文件来更改连接字符串。我再次运行我的程序,但它继续使用默认值。我注意到在我的Settings.Designer文件中有一个DefaultSettingValueAttribute与原始的默认字符串。我尝试删除此属性,但后来当我试图检索连接字符串设置它只是返回null。

这是我用来读取连接字符串的代码。

string conn = Properties.Settings.Default.DbConnectionString 

我在做什么错?我怎样才能让它返回设置文件中的值而不是默认值?


更新:

对不起,我应该提到这一点。我实际上是通过公共API为另一个应用程序编写插件。所以我的项目是一个不是EXE的DLL。

+0

你在哪里使用这条线?在DLL或应用程序? – Yogesh 2010-10-01 04:16:45

回答

3

您无法从*.dll.config文件中读取设置。如果您的图书馆需要任何特殊设置,您需要将它们放入您的app.configweb.config文件中。

编辑:你可以在主应用程序或Web配置文件中包含外部配置文件。详情请看here

This问题讨论了如何管理大型项目的配置文件。

+0

查看我的更新 – 2010-10-01 03:58:53

+1

如果您无法从* .dll.config中读取设置,那么它们有什么意义? – 2010-10-01 03:59:27

+0

@Eric也是如此。你尝试过log4net吗?您必须将log4net配置设置放入您的应用程序或Web配置文件中。 – TheVillageIdiot 2010-10-01 03:59:51

-1

设置文件和.config文件是不同的东西(我不知道为什么VS创建设置文件时自动添加.config。)。但是,设置文件被编译到一个类中,并且像你说的那样被引用。如果你使用.NET反射器反编译DLL,Settings类将会在那里。它用于保存常量值或外部资源。例如:错误消息字符串,图标或图像。

配置文件适用于频繁更改或环境(dev,test,prod)之间更改的设置。对于连接字符串,您应该使用配置文件的<connectionStrings>部分。该属性可以使用System.Configuration.ConfigurationManager [“connectionStringName”]引用。

但是,从您的原始文章看来,您的.dll文件将用于较大的项目(无论是Web项目的.exe文件)。有一点需要注意的是,所有的项目只使用一个.config文件。这就是主项目的配置文件。网站web.config文件和exe的使用XXX.XXX.XXX.exe.config(如您所见,* .exe.config文件被重命名为app.config文件的副本)。 DLL没有可用的配置文件。所有的dll都会查看主项目的.config文件来检索信息。

如果您的连接字符串永远不会改变,那么请务必使用设置文件。否则,使用配置文件并让主项目的开发人员确定填充连接字符串的内容。

+1

-1。他们没有什么不同。 Settings文件只是app.config/web.config文件中'userSettings'下特殊配置部分的包装类。您在设置编辑器中看到的所有设置实际上都保存在相应的配置文件中。 – Yogesh 2010-10-01 05:11:15

相关问题