gpt4 book ai didi

.net - COM+ 组件调用其他 COM+ 组件 - "Cannot load type"

转载 作者:行者123 更新时间:2023-12-02 08:57:02 27 4
gpt4 key购买 nike

我有两个 .NET 程序集,它们注册为 COM+ 组件,并且我正在从常规控制台应用程序测试工具中测试它们;

Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()

方法调用执行成功。这是MyFirstComponent的定义;

<ProgId("MyFirstComponent")> _
<Guid("...")> _
<ClassInterface(ClassInterfaceType.None)> _
<Transaction(TransactionOption.Supported)> _
Public Class MyFirstComponent
Inherits ServicedComponent
Implements IMyFirstComponent

Public Function GetValue() As Boolean Implements IMyFirstComponent.GetValue
Dim objSecond As New MySecondComponent() 'COM+ initialisation
Dim RC As Boolean = objSecond.GetValue()
Return RC
End Function

End Class

在初始化 MySecondComponent 时,我收到带有以下消息的 RemotingException;

Cannot load type 'MySecondComponent', ..., Version=..., Culture=neutral, PublicKeyToken=...'

所有程序集也都具有强命名。我无法弄清楚为什么我可以成功地触发对第一个组件的方法调用,但是当它尝试随后加载第二个组件本身时,它无法解析类型。

作为旁注,如果我在测试工具中运行“GetValue()”主体中的代码,它将按预期执行。似乎只有当事情进入 COM+ 组件调用其他 COM+ 组件的领域时,问题才会突然出现。

更新

我想我现在正在缩小问题范围。看来 COM+ 正在持久保存进程中的某些内容,因此我必须在运行客户端之前从“组件服务”窗口手动关闭 COM+ 应用程序。之前的问题是,每次我更改某些内容(例如将程序集添加到 GAC)时,我都会测试客户端,并且由于某种原因 COM+ 仍然认为无法找到程序集。关闭应用程序、将所需的程序集添加到 GAC 并再次运行客户端,结果按预期进行。

这对于我的小型概念验证客户来说很好。所以我回到我的真实代码并尝试了一下,但现在我遇到了另一个奇怪的问题。我的 COM+ 应用程序现在似乎无法找到其正常的项目引用。我真的不想继续添加他们引用 GAC 的所有内容,因此我现在正在尝试找出为什么我的正常非 COM+ 引用没有得到解决。

最佳答案

我终于找到了解决上述问题的方法。我自己在这里回答这个问题是为了避免其他人在我尝试让它发挥作用时所经历的痛苦。

  • 转至组件服务 > COM+ 应用程序 > YourComApplication

  • 打开 YourComApplication 的属性窗口并转到“激活”选项卡。

  • 在“应用程序根目录”下,提供 DLL 所在的路径。

  • 为您的 COM+ 应用程序创建一个“application.manifest”文件,并将其放在与上面相同的目录中。示例文件如下所示;

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
</assembly>
  • 这最后一步是我之前错过的,如果没有它,该解决方案将无法工作

此外,请确保每个 COM+ 应用程序都有一个单独的目录。这种方法将允许您让多个基于 .NET 程序集的 COM+ 应用程序相互调用,而无需在 GAC 中添加任何内容。

关于.net - COM+ 组件调用其他 COM+ 组件 - "Cannot load type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4097815/

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