【发布时间】:2010-12-15 22:53:20
【问题描述】:
我在尝试实例化在经典 ASP 应用程序中暴露给 COM 的 C# .NET 类时遇到问题。我已经使用 tlbexp 生成了一个 typelib 并在 Component Services 中注册了它;现在尝试这样创建对象时:
Server.CreateObject("The.Class.Name")
我收到错误:
服务器对象错误 'ASP 0177 : 80131534'
Server.CreateObject 失败
我在网上搜索了有关此错误的信息,发现了很多讨论但没有解决方案。错误代码 0x80131534 显然意味着“COR_E_TYPEINITIALIZATION,类型无法初始化”,这表明问题出在构造函数中。相关类的构造函数将私有字段设置为来自同一程序集的另一个类的实例,然后从 XML 文件中读取一些配置设置。此行为经过单元测试,我已检查该文件是否存在;我看不到任何其他可能闯入其中的东西。
其他几点可能有用也可能没用:
- 引用 DLL 的测试 .NET 项目可以很好地实例化该类;然而,一个引用 TLB 的测试 VB6 项目因同样的错误而崩溃。 DLL 和 TLB 都在同一个位置。
- 此应用程序在 Windows XP Professional SP3 和 IIS 5.1 上本地运行。
- .NET 程序集是使用 .NET Framework 2.0 构建的,尽管计算机上安装了 3.5。
我知道其他人在他们的构建中没有遇到这个错误,所以我相信这可能是环境问题。欢迎任何建议,因为我一直在努力解决这个问题。
提前致谢。
【问题讨论】:
-
你是如何注册 DLL 的?
-
我在组件服务下有一个应用程序文件夹,其中包含此应用程序的所有 COM 组件。我通过管理控制台手动将组件安装到那里(右键单击,新建,组件,安装新组件,选择 .TLB)
-
C# 库是您编写的,还是您找到并尝试使用的?
-
不,我不是亲自编写的,尽管我可以访问源代码。我实际上已经设法让问题消失了,尽管我认为这不是一个很好的解决方案并且没有揭示问题。我使用 regsvcs /i 注册 DLL 并将其复制到 \System32。这解决了问题。然后我从 \System32 中删除了该副本,该应用程序现在可以正常运行,使用正确位置的那个。不过,我不知道这里发生了什么!
标签: .net com asp-classic interop