2011-04-20 76 views
3

我有一個.net組件庫(dll),我已經成功地用COM包裝(使用regasm)。 .net組件需要配置信息。COM包裝.Net dll配置文件

在.Net世界中,這很容易通過app.config解決。我可以採取這個DLL的具體設置,並將它們添加到一個web.config或exe.config,以便當該DLL在程序或Web上使用時,它可以訪問必要的配置信息。

所以我的問題是,當通過COM調用(通過ASP頁面,甚至VBScript),我可以和如何使用配置文件?理想情況下,我寧願不硬編碼某些項目。

回答

2
+1

如果你「擁有」什麼讀取配置,要求它從你得到的對象中讀取它的配置(而不是來自ConfigurationManager的默認配置),但是如果它是從ConfigurationManager.AppSettings讀取的第三方組件,它不會替換配置(或缺乏),這是AppDomain開始時讀取的。 – nitzmahone 2011-04-20 22:23:26

+0

這是一個好點馬特。 @rifferte,上述解決方案只適用於您可以修改COM封裝的dll代碼。 – 2011-04-21 00:02:01

+0

我可以修改COM包裝的代碼,所以這是我將採取的方向。謝謝! – rifferte 2011-04-21 19:41:06

0

COM對象的調用者/創建者是否知道配置文件的位置?如在,會暴露一個「負載(路徑)」類型的功能做的伎倆,或者你的意思是不同的?

1

的問題是,默認COM激活,您的管理組件在默認的AppDomain,從託管.exe文件(例如,如果你正在運行繼承它的配置名稱運行在cscript.exe中,它希望找到cscript.exe旁邊的cscript.exe.config,您不擁有它)。解決這個問題的最簡單方法是創建一個託管填充程序,它可以創建一個新的AppDomain,然後在那裏加載程序集,指定要在AppDomainSetup對象中使用的XXX.dll.config文件,然後創建並返回該對象新的AppDomain。這基本上意味着您需要創建一個小的託管工廠對象,以確保.NET已啓動並正在運行,並且已創建新的AppDomain(如果在同一進程中創建第二個對象,最好只使用一次 - 使用現有的域),然後返回託管對象託管在正確的位置。如果你願意編寫一個完全實現COM類工廠的非託管填充程序,但是這樣會更先進一些,你可以使這個過程變得完全透明......