【发布时间】:2010-11-04 14:44:48
【问题描述】:
我有两个注册为 COM+ 组件的 .NET 程序集,我正在通过常规控制台应用程序测试工具对其进行测试;
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;
无法加载类型“MySecondComponent”、...、Version=...、Culture=neutral、PublicKeyToken=...'
所有程序集也都是强命名的。我不知道为什么我可以成功触发对第一个组件的方法调用,但是当它尝试随后加载第二个组件本身时,它无法解析类型。
作为旁注,如果我从测试工具中的“GetValue()”主体运行代码,它会按预期执行。这个问题似乎只有在事情进入 COM+ 组件调用其他 COM+ 组件的领域时才会出现。
更新
我想我现在正在缩小问题的范围。看来 COM+ 正在持久化进程中的某些东西,我必须先从“组件服务”窗口手动关闭 COM+ 应用程序,然后再针对它运行我的客户端。之前的问题是我每次更改某些内容(例如将程序集添加到 GAC)时都在测试客户端,并且由于某种原因 COM+ 仍然认为无法找到该程序集。关闭应用程序,将所需的程序集添加到 GAC 并再次运行客户端按预期工作。
这对我的小型概念验证客户来说很好。所以我回到我的真实代码并尝试了它,但现在我遇到了另一个奇怪的问题。我的 COM+ 应用程序现在似乎无法找到它们的正常项目引用。我真的不想继续添加他们引用 GAC 的所有内容,所以我现在正试图找出为什么我的正常的非 COM+ 引用没有得到解决。
【问题讨论】:
-
寻找 InnerException。我猜它找不到程序集。
-
@Hans Passant:嗨,Hans - 不幸的是,InnerException 为空。我很高兴相信它找不到程序集,但我很困惑为什么找不到。我也尝试将所有内容添加到 GAC,但没有任何乐趣。我也试过用 regasm /codebase 注册,但还是一样的错误。
-
嗯,不是那样的。没有更好的信息就没有线索。