为啥这个类库 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 文件夹
web.config 覆盖 app.config ...为啥?