8

我的理解是,.NET 并没有真正为 DLL “做”配置文件 - 只有主可执行文件或 Web 应用程序获取配置文件,并且可执行文件/Web 应用程序引用的所有 DLL 都从该文件中读取。

但是在 VS2008 中,如果您将 Web 引用添加到类库 (DLL) 项目中,它会在项目中添加一个 Settings.Settings 文件和一个 app.config 文件。它们包含 Web 参考的主要 URL。

那么这些文件是干什么用的呢?DLL 无法在没有帮助的情况下读取它们,对吧?

编辑:app.config 和 Settings.Settings 的内容似乎有所不同:单独更改(例如)DLL 项目的 app.config 文件中的 Web 参考 URL 没有区别,但是如果您编辑 URL在 app.config 中,然后打开 Settings.Settings 文件,您在 app.config 中所做的更改会被复制到 Settings.Settings 中。然后,DLL 在运行时获取新值。它是如何做到的?

编辑:我在这里的部分困惑是因为我不太清楚 Settings.Settings 和 app.config 之间的区别以及它们之间的关系,所以也许人们也可以帮助解决这个问题。

4

3 回答 3

6

DLL 无法读取它们,但它们强烈提示您的 DLL 的使用者他们可能想要包含在真实的设置/配置文件中的内容

编辑

响应 OP 的评论 - 如果在运行时不存在正确名称的设置,则设置中最后编辑的任何内容都将编译到代码中作为默认值。所以这就是为什么它有效。

于 2009-10-21T08:56:21.883 回答
6

Visual Studio 必须在某处添加这些东西,但它不知道您要将其放入哪个应用程序中。您可以通过执行以下操作访问 DLL 的配置:

var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config");

唯一一次我发现这很有用是当我编写一个插件作为 DLL 用于 3rd 方应用程序并希望我的 DLL 是可配置的(我怀疑这不是大多数人经常做的事情)。

通常,尽管您只需将所需的配置部分移动到 app.config 或 web.config 中。

编辑- 关于您的更新,这是有道理的。Settings.settings 应用程序范围的设置来自应用程序的 app.config 文件。对于应用程序范围的设置,它实际上只是一个表示这些设置的强类型类。

于 2009-10-21T08:58:14.313 回答
-2

可以从 DLL 中的配置文件中读取。只需将 app.config 文件添加到 DLL 项目,并确保从 DLL 中读取配置设置。部署后,您的配置文件需要具有名称“MyDLL.dll.config”(假设您的 DLL 名为“MyDLL.dll”)并且与 DLL 位于同一文件夹中。

以下代码应从我的 dll 返回我的连接字符串:

return ConfigurationManager.AppSettings["ConnectionString"];

于 2009-10-21T09:02:10.607 回答