为啥这个类库 dll 没有从 app.config 获取信息

Posted

技术标签:

【中文标题】为啥这个类库 dll 没有从 app.config 获取信息【英文标题】:Why is this class library dll not getting information from app.config为什么这个类库 dll 没有从 app.config 获取信息 【发布时间】:2011-02-26 03:48:59 【问题描述】:

我正在开发一个自定义 HttpHandler,为此我编写了一个 C# 类库并编译为 DLL。

作为其中的一部分,我有一些我不想在应用程序中硬编码的目录位置,所以我试图将它放在我以前使用过的 app.config 中。

在此之前,只需构建 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Share" value="C:\...\"/>
  </appSettings>
</configuration>

然后在如下代码中获取它:

var shareDirectory = ConfigurationManager.AppSettings["Share"];

但是当我编译它并将它放在 web 服务的 bin 文件夹中时,shareDirectory 一直为空,可能是因为它找不到 app.config。那么如何确保包括在内,这样我就不必对我的目录位置进行硬编码?我注意到它基本上在编译后我们会得到 assembly.dll 和 assembly.dll.config 这是 app.config 文件,所以它肯定在 bin 文件夹中!

【问题讨论】:

【参考方案1】:

您可能混淆了类库的范围。

请记住,您的配置,无论是 web.config 还是 app.config,都是 HOSTING 应用程序中存在的配置。在这种情况下,您的托管应用程序是 WebService,当然由 IIS 托管,因此您的配置文件是 web.config。

如果您有一个控制台应用程序以某种方式使用了该类库(尽管可能不在 http 处理程序上下文中),那么配置将是控制台应用程序中的 app.config,而不是您的类库中的 app.config。

【讨论】:

【参考方案2】:

那是因为你的 web 服务使用了web.config

【讨论】:

【参考方案3】:

您需要将配置放在 web.config 文件中,而不是在 assembly.dll.config 中:.NET 不会(按设计)读取 assembly.dll.config 文件。

【讨论】:

以上是关于为啥这个类库 dll 没有从 app.config 获取信息的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹

从类库项目中的 App.config 中读取

web.config 覆盖 app.config ...为啥?

将 app.config 与类库一起使用

从.Net到vb6的Web服务的DLL - 如何设置app.config

将 app.config 重命名为 dllname.dll.config