gpt4 book ai didi

c# - 组件服务 COM+ C# 不太对劲?

转载 作者:行者123 更新时间:2023-12-04 06:10:49 25 4
gpt4 key购买 nike

我正在为另一个 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 并排看?我错过了什么吗?

最佳答案

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

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

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

关于c# - 组件服务 COM+ C# 不太对劲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com