有些地方不太对

本文关键字:方不太 | 更新日期: 2023-09-27 18:11:46

我正在为另一个COM+ dll编写一个c# COM+ drop in。它有一个非常简单的界面,我已经成功地测试了drop in。

我正在使用"组件服务",一方面是因为旧系统是这样做的,另一方面是因为它感觉很好。

我遇到的问题是,当我注册遗留dll时,属性中dll的路径是实际的dll,它也只是工作。

当我在dll的路径中注册我的drop是mscoree.dll而不是我的dll时,似乎命中和错过了我是否必须将我的dll添加到GAC?我已经尝试代码将其添加到自动缓存,但它不工作?

此外,由于我正在使用WCF调用我的COM+调用,我遇到了一个问题,即配置dll目前在哪里,它似乎正在寻找C:'Windows'system32'dllhost.exe.config

中的设置

我想让它看起来沿着实际的dll?我错过什么了吗?

有些地方不太对

com +是一种非托管技术。它对。net托管代码一无所知,因此直接在COM注册表中注册。net程序集可能无法工作。dll是。net托管库,它加载托管运行时,并向COM注册表要求的COM提供非托管接口。当您的程序集实现的COM协类的实例被激活时,COM+首先加载mscoree,然后mscoree必须加载您的程序集以将您的实现连接到mscoree呈现给COM+的COM可调用包装器。

mscoree在哪里查找程序集以便加载它取决于您如何注册它。它遵循。net Fusion加载器的正常路径探测规则,这意味着它通常会在GAC中查找,除非你在注册期间指定了一个代码库(例如使用regasm命令行参数/codebase)。

托管代码的配置设置范围为AppDomain,默认情况下,AppDomain的配置文件名通过在承载AppDomain的进程的可执行文件路径后添加后缀.config获得。您的组件托管在COM+中,因此将在进程中执行,该进程是DllHost.exe的实例。因此,默认情况下,组件的AppDomain的配置文件将是DllHost.exe.config。但是,如果您为COM+应用程序指定一个应用程序根目录,这将更改AppDomain查找其配置的位置为[COM+ Application Root Directory]'[COM+ Application Name].config