2011-10-11 64 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。