2011-10-11 55 views
2

我有一个产生三个独立的DLL一个三层的web应用程序:为什么app.config的值为null?

  • Web.UI.dll
  • Web.Application.dll
  • Web.DAL.dll

两个Web.Application.dllWeb.DAL.dll有他们自己的app.configs。我需要访问web.config中的特定设置。我正在使用以下代码:

[CacheUtil.cs] 
string cacheName = ConfigurationManager.AppSettings.Get("CacheName"); 

我已验证此设置是否存在。那么,为什么当我运行时,我得到NULL? CacheName是否需要存在于所有的.config文件中?

这里是web.config中的设置:

<appSettings> 
    <add key="CacheName" value="staging"/> 

仅供参考,CacheUtil是一个单就是懒在第一次访问初始化。第一次访问发生在DAL.dll项目中。

谢谢!

回答

4

只有web.config正在读取。其他配置文件(Web.Application.dll.configWeb.DAL.config)分别为而不是

配置不附加到库;只有到最终可执行正在运行(在AppName.exe.configweb.config

项目在Visual Studio中产生一个EXE可以具有app.config文件,并且该文件被生成时特殊处理;它被重命名为ProgramName.exe.config并被复制到输出目录。在类库或Web应用程序项目中的app.config将不起作用。

+0

嗯,好奇。在调试模式下它看起来很好,但在发布之后不会。那么,app.configs是没有意义的? –

+0

'app.config'是为产生EXE的项目而设计的。部分构建过程是将其重命名为'ProgramName.exe.config'并复制到输出目录。 Web应用程序是不同的 - 它们不是寻找'ProgramName.exe.config',而是寻找'web.config'。在类库项目中有'app.config'文件是没有意义的,不需要将其中包含的值复制到适当的配置文件中。 –

1

试试这个:

cachename = ConfigurationManager.AppSettings["CacheName"]; 

这是在假设你正试图读出AppSettings项目的app.config文件中。除非使用其他逻辑,否则不能从另一个项目读取配置,但它不会通过ConfigurationManager类。它必须是正常的I/O。

相关问题