.net - 从经典 ASP 页面使用 .NET 程序集

标签 .net iis asp-classic regasm gacutil

我有一个旧的 .net 2005 网站,它有一些 asp 页面并且在访问 .net dll 时遇到对象引用问题。维护任务交给了我,原来的开发人员无处可寻:(我已经从 .Net 开始,所以我并不真正掌握处理这种 dll hell 般的问题。

下面的箭头是我正在讨好的地方 “(0x80131500) 对象引用未设置到对象的实例。”

Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
  Dim machineBuilding
--->>>  If objCommon.IsMachineAccount(strLogin, machineBuilding) Then

我已经按照这些步骤操作了:

  1. regasm/tbl/codebase mycomdll.dll
  2. gacutil/i mycomdll.dll
  3. 复制mycomdll.dll到System32目录
  4. 从控制台执行 issreset
  5. 如果您的 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

还有这些:

  1. 在项目属性下 一种。在\application\assembly 信息下 一世。选中“使程序集可见”。 b. build 中 一世。检查“注册 Com Interop”
  2. 请勿签名。
  3. 确保 IUSR 对该文件具有完全权限。
  4. 通过 iisreset 重新启动 IIS 以刷新所有缓存。

并且仍然没有成功运行该应用程序。还有更多想法要检查或做什么吗?谢谢!

埃米尔

最佳答案

HRESULT 值非常相关。请注意 0x80131500 中的“设施代码”,13 表示错误源是托管代码。你已经得到了 1500 的友好翻译。

换句话说,托管代码抛出一个异常并且没有被处理。这当然并不少见,托管代码通常会抛出异常。特别是你触发的 NullReferenceException。调试这不是那么容易,因为您在非托管进程中运行托管代码。不太确定 IIS 的正确程序是什么,通常是使用工具 + 附加到进程完成的。解决这个问题的最佳方法是隔离代码,编写一些单元测试。

除此之外,我认为 MachineBuilding 变量是 NRE 的一个很好的候选者。你没有初始化它。

顺便说一句:它与注册无关。这会产生一种非常不同的错误。

关于.net - 从经典 ASP 页面使用 .NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467475/

相关文章:

.net - ASP.NET 将 CORS header 添加到 ashx 文件处理程序

ASP.NET Cookie BUG - 多个 cookie 随机重复?

ASP.net 这是预编译工具生成的标记文件,不要删除

javascript - 下拉菜单中的 OnClick() 事件

c# - 简单注入(inject)器注册并执行内部CommandHandler

c# - 如何使用反射调用带有 ref/out 参数的方法

c# - 如何将 BouncyCaSTLe X509Certificate 转换为 X509Certificate2?

c# - 如何在 MVC 应用程序中在午夜刷新数据?

asp-classic - 使用 ADODB.Stream 保存 POST 二进制数据

javascript - 使用 ASP 通过表单上传文件