我正在为另一个COM + dll写一个C#COM +。它有一个非常简单的界面,我已成功测试了下降。
我正在使用'组件服务',部分原因是旧系统做了,部分是因为它感觉正确。
我遇到的问题是当我注册遗留dll时,属性中dll的路径是ACTUAL dll,它也可以正常工作。
当我在dll的路径中注册我的drop是mscoree.dll而不是我的dll时,我是否必须将我的dll添加到GAC似乎有点错过?我已经尝试过将代码自动添加到缓存中,但它不起作用?
此外,因为我正在使用我的COM +调用WCF调用,我遇到了一个问题,配置DLL当前在哪里,它似乎在C:\ Windows \ system32 \ dllhost.exe.config中寻找设置
我想要的是它与实际的dll一起看?我错过了什么吗?
答案 0 :(得分: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
。