中的自定义.net程序集我一直在为此工作了几天,并取得了进展,但它仍然不能按我需要的方式工作。经典的ASP-错误0177:80004003
首先,这个项目将采用经典的asp(vbscript)编写并转换为.NET框架的现有大型站点(超过至少200多个文件的100,000多行代码)。
现有的代码大部分都使用VBScript类,我的计划是模拟十几个已经定义到.NET程序集中的类,它们都是新的.NET版本和现有的经典版本ASP页面可以使用 - 通过COM +。
我已经做了第一类定义,在.NET中复制,它在我的Test.ashx页面上的开发服务器(当我浏览页面时,我得到预期的输出)工作。但是我从调用set obj = server.CreateObject("MyLibrary.MyClass")
的行上的Test.asp页面Server object error 'ASP 0177 : 80004003'
收到一个错误调用它。
我已经通过regasm注册的自定义DLL这样regasm "C:\inetpub\siteroot\bin\MyLibrary.dll" /tlb /codebase
,它似乎正常工作(与定义的方法预计库出现在服务器的组件服务,一切似乎罚款。
我的直觉告诉我,它是一个32位/ 64位问题或权限问题,我已经尝试了许多不同的事情,这些日子太多无法重新计数,但任何建议将不胜感激
注意:
- 服务器运行Windows Server 2012 R2
- 我使用PowerShell将自定义dll添加到GAC。
- 我正在使用regasm的32位版本。我尝试了64位版本,但是当这样做时,双方(.NET和Classic)都会出错。
- 该网站使用的IIS应用程序池启用了32位,显然必须保持这种方式,因为该站点使用了其他第三方COM对象。
- ComClass项目的属性
- 编译:注册COM互操作被选中。目标CPU是“任何CPU”
- 应用:目标框架设置为.NET框架4.5
- 应用:设置为类库
- 应用应用型,装配信息:请组装COM可见检查
- 我添加在主站点项目由项目ComClass编译MyLibrary.dll一个参考
的.vb文件的该第一类的顶部被如下
Imports System
Imports System.Web
Imports System.Web.HttpContext
Imports System.String
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Runtime.InteropServices
Imports System.EnterpriseServices
<Assembly: ApplicationName("MyLibrary")>
<Assembly: ApplicationActivation(ActivationOption.Server)>
<Assembly: ApplicationAccessControl(False, AccessChecksLevel:=AccessChecksLevelOption.ApplicationComponent)>
<ComClass(MyClass.ClassId, MyClass.InterfaceId, MyClass.EventsId), ProgId("MyLibrary.MyClass")>
Public Class MyClass
Inherits ServicedComponent
[GUIDS]
[subs and functions ... ]
我终于找到了一个asp错误代码的参考列表,它说80004003是一个“无效的指针”,它表明名称没有正确设置。 –
BTW:在Windows脚本宿主中运行.vbs文件时出现同样的错误。 64位版本提供无效指针错误。 32位版本提供了无法创建ActiveX对象。 –
我发现的其他东西是组件服务管理单元,当浏览自定义类库应用程序并查看包含的“组件”时,只列出了一个类。构建DLL的项目实际上有两个类(在VS中,我可以使用MyLibrary.MyClass或MyLibrary.ComClass) - 但在regasm完成后,只有MyClass显示在组件服务管理单元中。 –