中的自定義.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顯示在組件服務管理單元中。 –