首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM+组件调用其他COM+组件-“无法加载类型”

COM+组件调用其他COM+组件-“无法加载类型”
EN

Stack Overflow用户
提问于 2010-11-04 14:44:48
回答 3查看 2K关注 0票数 2

我有两个.NET程序集,它们注册为COM+组件,我正在通过一个常规控制台应用程序测试工具对它们进行测试;

代码语言:javascript
复制
Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()

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

代码语言:javascript
复制
<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=.’类型。

所有程序集也都有强名称。我无法确定为什么我可以成功地向第一个组件发出方法调用,但是当它随后尝试加载第二个组件本身时,它无法解析类型。

作为一个sidenote,如果我从我的测试工具中的"GetValue()“主体运行代码,它将按预期执行。只有在COM+组件调用其他COM+组件的领域中,问题才会出现。

更新

我认为我正在缩小这个问题的范围。看起来,COM+正在持久化,在针对它运行客户端之前,我不得不从Component窗口手动关闭COM+应用程序。以前的问题是,每次更改东西(比如将程序集添加到GAC)时,我都在测试客户端,出于某种原因,COM+仍然认为无法找到程序集。关闭应用程序,将所需的程序集添加到GAC中,并再次运行客户端,一切如愿以偿。

这对于我小小的概念客户证明来说是不错的。所以我回到我的真正的代码,并尝试了它,但现在我发现了另一个奇怪的问题。我的COM+应用程序现在似乎无法找到它们的正常项目引用。我真的不想把他们引用的所有东西都添加到GAC,所以我现在想弄清楚为什么我的非COM+引用没有被解决。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-10 15:02:50

我终于找到了解决上述问题的办法。我自己在这里回答这个问题,是为了让其他人免于痛苦,因为我一直在努力让这件事发挥作用。

YourComApplication

  • Bring

  • 转到组件服务> COM+应用程序> YourComApplication的属性窗口,然后转到“应用程序根目录”下的Activation .

  • ,提供DLL所在的路径。

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

  • --这是我以前错过的最后一步,没有它,解决方案将无法工作

另外,确保为每个COM+应用程序都有一个单独的目录。这种方法将允许基于COM+程序集的多个.NET应用程序相互调用,而无需在GAC中进行任何操作。

票数 5
EN

Stack Overflow用户

发布于 2010-11-04 15:01:04

您是否考虑过使用regasm注册程序集以便使用COM访问。我不确定,但这可能与注册程序集时传递的/codebase参数有关。值得一试。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-05-28 23:40:48

尽管您显然解决了答案中包含的步骤的问题,但如果您的PowerShell版本与要加载的程序集不兼容,则也会出现此问题。

例如,您可能有一个针对.NET框架4.5.1的程序集,但是正在运行的PowerShell版本是Version2.0。如果您将版本升级到4.0或5.0,您应该没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4097815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档