2011-10-18 36 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和上面提到的那个。 –