3

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

在下面的箭头上,我遇到了“(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. 在项目属性下 a. 在 \application\assembly 信息下 i。选中“使程序集 Com-Visible”。湾。在构建 i。勾选“注册 Com Interop”</li>
  2. 不要签名。
  3. 确保 IUSR 对该文件具有完全权限。
  4. 通过 iisreset 重新启动 IIS 以刷新所有缓存。

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

埃米尔

4

3 回答 3

2

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

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

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

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

于 2010-08-12T14:58:31.963 回答
0

The problem was the application is looking for a file that contains database hostname.

于 2010-09-01T02:34:32.967 回答
0

我有一个类似于你的解决方案,但它早已不复存在。然而,我仍然有一些关于它的信息,我注意到我的 regasm 声明是不同的。

regasm mycomdll.dll /tlb :mycomdll.tlb

你的引用 tbl 而不是 tlb - 也许这就是问题所在?

我还认为您应该仔细检查参数值,然后通过快速而肮脏的 .NET 客户端使用这些参数值调用该方法,以查看该方法是否引发错误。

我还想确认我的经典 ASP 代码与您的匹配...

set obj = server.CreateObject("mycomdll.myclass")
...
call obj.method(false)
...
myvar = obj.method2(param1, param2, param3)
于 2010-08-12T12:42:58.843 回答