簡體   English   中英

在 .NET Core 2.0 中使用 COM 對象

[英]Using COM Object in .NET Core 2.0

因此,客戶端有一個2007 年用 C 編寫COM 對象,用於驗證加密的會話 cookie。 這目前適用於舊版本的 .NET 使用以下內容。

var validate = Activator.CreateInstance(Type.GetTypeFromProgID("Company.Validate"));

新的實現將完全使用 C# 我已將驗證邏輯提取到.NETCore類庫中,我們依次在ASP.Net Core項目中引用該類庫。

  1. 我嘗試過 32 位和 64 位版本,以及 IIS 設置。

  2. 我已經反編譯了 COM 對象並引用了它,它在本地工作,但不在開發服務器上,我收到以下錯誤:

    由於以下錯誤,檢索具有 CLSID {EDC43BC6-5ECD-4501-AEB3-64A17180A13D} 的組件的 COM 類工廠失敗:80040154 類未注冊(來自 HRESULT 的異常:0x80040154 (REGDB_E_CLASSNOTREG)。

  3. COM 在本地和開發服務器上均已注冊。

  4. Activator.CreateInstance在任一環境中都不起作用。

  5. 注冊的 COM ID 和 ProgId 在本地和開發服務器上都是相同的。


問:我錯過了什么,或者這不起作用? 有沒有人在類似的挑戰中取得過任何成功? 我忽略了什么嗎?

您不能將 COM 與 .NET Core 一起使用。 COM 僅適用於 Windows,並且 .NET Core 中的所有內容都必須是跨平台的。 但是,您可以在完整框架上運行 ASP.NET Core 應用程序,然后可以使用 COM 庫。 換句話說,運行完整框架並不妨礙您仍然能夠使用 ASP.NET Core。 由於完整的框架/COM 依賴性,您只能部署到 Windows。 從技術上講,如果您計划部署到 Mac 或 Linux 之類的設備,則只需要使用 .NET Core。 否則,就堅持你所知道的。

從未創建所需的注冊表項。 我不得不為 Class、Interface 和 Type 手動添加大約 15 個鍵。 我相信這是因為 COM 從未被編組或調用(因為那不起作用),因此必須手動輸入類 ID、AppID 和注冊表映射。

我最近遇到了這個問題,試圖實例化一個 x86 coclass。 事實證明,無論實際配置什么架構,Visual Studio 都會啟動出現在系統路徑中的第一個 dotnet.exe。 就我而言,dotnet.exe 的 x86_64 變體作為主機啟動,而主機又無法創建任何 x86 coclass 實例。

嘗試手動將您的項目加載到 dotnet.exe 的適當變體中,看看這是否有幫助。

編輯:在https://github.com/dotnet/core/issues/901 上更詳細地討論了這個問題

因為我還不能發表評論......您可以使用 regsvr32 MyComLibrary.dll 為您添加所有必要的注冊表項。 請參閱https://helpdeskgeek.com/how-to/register-dll-file-in-windows/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM