2010-08-12 112 views
1

通過將配置數據放入web.config中,我可以在幾個Web應用程序中使用Castle Windsor。Windows服務無法訪問app.config中的Castle Windsor配置數據

因此,當我決定在Windows服務中使用它時,我認爲它會很小。我的app.config文件如下所示:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,Castle.Windsor" /> 
    </configSections> 
    ...various other stuff... 
    <castle> 
    <components> 
     ...component listings... 
    </components> 
    </castle> 
</configuration> 

我創建我的容器是這樣的:

WindsorContainer windsorContainer = new WindsorContainer(new XmlInterpreter()); 

但是瘋狂,當應用程序運行時,我得到

Could not find section 'castle' in the configuration file associated with this domain. 
    at Castle.Core.Resource.ConfigResource..ctor(String sectionName) 
    at Castle.Core.Resource.ConfigResource..ctor() 
    at Castle.Windsor.Configuration.Interpreters.AbstractInterpreter..ctor() 
    at Castle.Windsor.Configuration.Interpreters.XmlInterpreter..ctor() 
    ...application stack trace... 

我'有點朦朧。任何人有任何提示?

乾杯

大衛

回答

1

我似乎回想起一些關於app.config文件和windows服務的內容。由於實際「運行」您的服務的應用程序是svchost.exe,並且該exe文件存在於%windir%\ system32中,這就是您配置文件所需的位置。試着把它放在那裏(%windir%\ system32),看看會發生什麼。

+0

該應用從app.config中讀取其他配置數據就好了,但Castle有可能在您提到的位置查找。我會檢查一下並看看。 – David 2010-08-13 08:55:51

+0

我現在有另一個錯誤,哈哈!我認爲這意味着你的建議奏效了。你已經回答了我的問題,但這是我無法接受的解決方法,因此我將考慮其他配置選項。 – David 2010-08-13 09:24:10

+0

我通過將windsor配置文件的位置傳遞給XmlInterpreter的構造函數(請參閱代碼)來解決此問題。 – David 2011-06-30 12:12:53

0

那麼,讓我們擊中了明顯。可執行文件將使用myprog.exe.config進行配置。應該將app.config複製到該文件名並使用.exe放在輸出文件夾中。你有服務可執行文件的那個文件嗎?

+0

檢查.......... – David 2010-08-12 16:10:39

+0

爲什麼評論的最小字符數限制?這個網站很精神。 – David 2010-08-12 16:10:57

+0

該文件是否具有城堡部分(輸出目錄中用於運行服務的部分)。你可能會遇到一些奇怪的合併問題... – 2010-08-12 22:38:01

相關問題