我有一个旧的 .net 2005 网站,它有一些 asp 页面并且在访问 .net dll 时遇到对象引用问题。维护任务交给了我,原来的开发人员无处可寻:(我已经从 .Net 开始,所以我并不真正掌握处理这种 dll hell 般的问题。
下面的箭头是我正在讨好的地方 “(0x80131500) 对象引用未设置到对象的实例。”
Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
Dim machineBuilding
--->>> If objCommon.IsMachineAccount(strLogin, machineBuilding) Then
我已经按照这些步骤操作了:
- regasm/tbl/codebase mycomdll.dll
- gacutil/i mycomdll.dll
- 复制mycomdll.dll到System32目录
- 从控制台执行 issreset
- 如果您的 dll 是在 framework 2.0 中创建的,请在 system32 目录中创建一个“dllhost.exe.config”文件并将其放入:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
<requiredRuntime version="v2.0.50727"/>
</startup>
</configuration>
6.- 使用 issreset 命令重启 IIS
还有这些:
- 在项目属性下 一种。在\application\assembly 信息下 一世。选中“使程序集可见”。 b. build 中 一世。检查“注册 Com Interop”
- 请勿签名。
- 确保 IUSR 对该文件具有完全权限。
- 通过 iisreset 重新启动 IIS 以刷新所有缓存。
并且仍然没有成功运行该应用程序。还有更多想法要检查或做什么吗?谢谢!
埃米尔
最佳答案
HRESULT 值非常相关。请注意 0x80131500 中的“设施代码”,13 表示错误源是托管代码。你已经得到了 1500 的友好翻译。
换句话说,托管代码抛出一个异常并且没有被处理。这当然并不少见,托管代码通常会抛出异常。特别是你触发的 NullReferenceException。调试这不是那么容易,因为您在非托管进程中运行托管代码。不太确定 IIS 的正确程序是什么,通常是使用工具 + 附加到进程完成的。解决这个问题的最佳方法是隔离代码,编写一些单元测试。
除此之外,我认为 MachineBuilding 变量是 NRE 的一个很好的候选者。你没有初始化它。
顺便说一句:它与注册无关。这会产生一种非常不同的错误。
关于.net - 从经典 ASP 页面使用 .NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467475/