我正在.NET 4.0中創建一個Windows服務,並通過引用服務項目來測試窗體客戶機的某些功能。如何使用configurationManager從.Net 4.0的App.config中讀取值?
服務項目有一個App.config文件和文件看起來像這樣:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<clear />
<add name="myLocalMySQLDBUsername" connectionString="username"/>
</connectionStrings>
</configuration>
當屬於該服務的函數調用:
- ConfigurationManager.ConnectionStrings( 「myLocalMySQLDBUsername」) .ConnectionString
由於我的連接字符串未加載,所以引發空引用錯誤。加載的唯一connectionStrings來自位於c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config中的machine.config文件
如果我爲服務創建應用程序作用域設置,我可以通過使用My.Settings.setting - >來獲得該設置,所以它不像App.config文件沒有被讀取。
我的問題是:爲什麼我的connectionStrings沒有從App.config文件加載?
謝謝你的幫助。
UPDATE:
而且,在這一點上,甚至周圍的工作,將不勝感激;使用app.config的唯一原因是能夠使用DpapiProtectedConfigurationProvider加密內容(內容將具有用於服務和數據庫連接的一些用戶名/密碼值)。
我試着在app.config中手動創建一個AppSettings部分,但這些設置也沒有被配置管理器(count = 0)讀取。
更新2:
每一個建議,我試圖手動打開app.config文件像這樣:
Dim exePath As String = System.IO.Path.Combine(Environment.CurrentDirectory, "ServiceName.exe")
Dim myConfig As Configuration = ConfigurationManager.OpenExeConfiguration(exePath)
因此,這裏是怪異的一部分,當我進去看看,路徑是正確的(指向我的app.config),但connectionStrings仍然從machine.config文件加載(我的connectionStrings不加載)!哎呀
更新3:
好了,所以,我想它了。從另一個項目(子項)引用項目(父項)時,即使正在使用父項的類,也會使用子項的app.config。因此,如果我將它們複製到孩子的app.config中,我可以獲取connectionStrings。當試圖手動打開它的時候,我的currentDirectory是孩子的,而不是父母(奇怪的是它沒有拋出異常 - 它不能找到配置文件......它只是默默地使用machine.config ... 好吧)。
謝謝大家的幫助!
可能是一個愚蠢的問題,但你如何部署服務和它的app.config?你在正確的目錄下有servicename.exe.config嗎? – 2011-04-10 01:13:34
我還沒有部署它......所有仍在我的本地機器上進行調試。當我部署它時,我將確定配置文件在System32文件夾(我認爲)或Windows服務默認查找文件的任何文件夾中結束。 – Dima 2011-04-10 01:24:44
變通後發佈。 – Hogan 2011-04-10 02:21:25