2012-01-25 76 views
1

我剛剛繼承了一個非常古老的ASP.NET 2.0 Web應用程序。web.config與.dll中的app.config

在應用程序中它有幾個支持類庫項目。在DataAccess類庫中,是一個名爲ConnString1的連接字符串的app.config(和setting.settings文件)。

我始終認爲,一個.DLL不能擁有的app.config/setting.settings文件(或者至少可以包括他們,但他們不會被使用),所以這是令人困惑我。

web.config中也有一個名爲ConnString1在同一服務器登錄憑據的連接字符串,但不同的服務器名稱。

當我運行從Visual Studio調試應用程序,它使用的是位於在app.config /設置文件的連接字符串,而不是在web.config/machine.config中定義的。

我以爲.DLLs不會這樣做,但使用web.config呢?

然而,當我推在釋放模式這種應用對我們的生產服務器(測試網站),這似乎是使用在web.config中正確的連接字符串。

任何人都可以解釋這一點嗎?

回答

2

有些事情讓你覺得配置文件是該DLL的一部分被使用 - 與應用程序(入口點)配置文件(yourapp.exe.config或web.config )。也許該conn字符串在某處被硬編碼以用於調試模式,例如,通過「#if DEBUG」預處理器指令使用條件編譯(所以,可能在您的解決方案中搜索「#if DEBUG」以查看是否發生這種特定事件)。

MSDN article about app settings

看到黃色的「注意」部分中的「在設計時創建應用程序設置」:「由於不存在類庫沒有配置文件的模式,應用程序設置不辦理類庫項目。」

1

所有配置設置必須在可執行配置文件中指定。對於Windows和控制檯應用程序它是app.config,對於web項目它是web.config。

庫可以指定配置設置,但你必須以可執行文件的配置文件設置複製的應用程序能夠讀取它們。

2

我發現了問題:

在上面的例子中,我使用在web.config/machine.config中設置應用程序的連接字符串。

如果連接字符串沒有在web.config中定義,則默認爲machine.config。如果連接字符串未在machine.config中定義,它將使用.dll中找到的app.config設置。

重要的是要注意,將連接字符串放置在machine.config中,它必須在正確的Framework/CONFIG中定義。

在我的開發機器上,連接字符串未在web.config中定義,但在環境中定義。config,但是在Framework64/CONFIG中 - 但是,應用程序是以32位編譯的,因此,使用Framework/CONFIG的原因沒有在其中定義連接字符串,並導致它默認爲app.config在類庫中。

我希望能解釋一下嗎?

+1

很高興找到它。下一步應該是與所涉及的各種人員舉行會議,並向他們解釋連接字符串不屬於機器或環境配置文件。 – NotMe

+1

我不認爲這是事實。將連接字符串放在machine.config中意味着您可以通過dev - > test - > production來升級您的應用程序(及其配置文件),而無需在每一步都手動修改配置。 – Jason

+0

正確。我們處於有20個不同網站的環境中。由於列級別加密,它們都使用相同的連接字符串(只允許一個登錄名在數據庫級別對列進行加密/解密)。把這個連接字符串放在machine.config中比較容易,然後每個季度都要在web.config中修改它(這是我們的安全標準所要求的)。 – Sean

相關問題