为什么我的应用程序不会读取我的MyApplication.dll.config文件?

时间:2010-10-01 03:35:39

标签: c# .net application-settings

我正在尝试使用我正在处理的C#.NET项目的应用程序设置。但我似乎无法让它返回除默认值之外的任何东西。通过项目属性,我添加了一个设置DBConnectionString,并将其值设置为我想要使用的连接字符串。其范围设置为“应用程序”。

这样做会创建许多文件,包括Settings.settings,Settings.Designer.CS和app.conifg。据我所知,两个Settings。*文件定义了一个派生自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为另一个应用程序编写插件。所以我的项目是DLL而不是EXE。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:-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文件以检索信息。

如果你的连接字符串永远不会改变,那么一定要使用Settings文件。否则,使用配置文件,让主​​项目的开发人员确定用。填充连接字符串的内容。