2011-10-18 65 views
1

我正在爲另一個COM + dll編寫一個C#COM +插件。它有一個非常簡單的界面,我已經成功地測試在下降。我使用「組件服務」部分,因爲舊的系統做部分是因爲它覺得不對勁組件服務COM + C#一些不太正確的東西?

問題我已經是當我註冊遺留DLL屬性中的路徑的dll是實際的dll,也很好用。

當我登記我的路徑的dll降mscoree.dll中沒有我的DLL,它似乎擊中,錯過我是否有我的dll添加到GAC爲?我試過將代碼自動添加到緩存中,但它不起作用?

此外,因爲我正在使用我的COM +調用的WCF調用,所以我遇到了配置dll當前位置的問題,它似乎是在C:\ Windows \ system32 \ dllhost.exe中查找設置。配置

我想要它是一邊看實際的DLL?我錯過了什麼嗎?

+0

順便說一句,請參閱http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts –

回答

3

COM/COM +是一種非託管技術。它對.NET託管代碼一無所知,所以直接在COM註冊表中註冊.NET程序集可能無法工作。 mscoree.dll是.NET宿主庫,用於加載託管運行時並將非託管接口呈現給COM註冊表所需的COM。當您的程序集實現的COM coclass實例被激活時,COM +首先加載mscoree,然後mscoree必須加載您的程序集以將您的實現掛接到mscoree呈現給COM +的COM可調用包裝器。

凡mscoree查找程序集,以加載它取決於你如何註冊它。它遵循.NET Fusion加載器的正常路徑探測規則,這意味着它通常會查看GAC,除非您在註冊期間指定了代碼庫(例如,使用regasm命令行參數/codebase)。

託管代碼的配置設置受AppDomain的限制,默認情況下,AppDomain的配置文件名是通過將後綴.config添加到承載AppDomain的進程的可執行文件的路徑中獲取的。您的組件託管在COM +中,因此將在進程中執行,該進程是DllHost.exe的一個實例。因此,默認情況下,組件的AppDomain的配置文件將爲DllHost.exe.config。但是,如果爲COM +應用程序指定應用程序根目錄,則會將AppDomain查找其配置的位置更改爲[COM+ Application Root Directory]\[COM+ Application Name].config

+1

好的,謝謝你的幫助。我設置了應用程序路徑(這是在COM應用程序級別),我也按照這裏的說明操作:http://blogs.msdn.com/b/ajit/archive/2008/06/18/how-to-use- application-root-directory-option-to-configure-application-config-for-a-specific-com-application.aspx,但它仍然會用於配置的dllhost。有什麼建議麼? –

+1

破解它。我被混淆了。你需要一個清單和一個配置文件,它們(出現)需要被命名爲application.config/manifest,而這實際上是應用程序這個詞,而不是你的應用程序的名稱。 –

+0

信貸,這是因爲儘管我使用了以下站點:http://vasters.com/clemensv/CommentView,guid,0615b3cc-0fbf-4cf5-9d49-ae95b50f7e8d.aspx和http://msdn.microsoft.com/en -us/library/windows/desktop/ms685134(v = vs.85).aspx和上面提到的那個。 –