首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 開發 COM+ 元件完整指南:強名稱、註冊與部署實戰

     編輯:關於C語言

背景與動機

.NET 與 COM+ 互通是企業級遷移的關鍵。本文記錄從建立強名稱金鑰、實作 ServicedComponent、到使用 regsvcs 部署至 COM+ 應用程式的完整流程。

步驟 1:產生強名稱金鑰


// Visual Studio 開發人員命令提示字元
sn -k keyfile.snk

步驟 2:專案設定強名稱

在 AssemblyInfo.cs 加入:


[assembly: AssemblyKeyFile(@"E:\ClassLibrary1\keyfile.snk")]

或在專案屬性 → 簽署 → 勾選「為組件簽署」選擇 .snk 檔。

步驟 3:實作 COM+ 元件


using System;
using System.Runtime.InteropServices;
using System.EnterpriseServices;

namespace ClassLibrary1
{
    // 固定 GUID,避免每次編譯產生新 CLSID
    [Guid("539448DE-9F3B-4781-A1F6-F3C852091FC9")]
    public interface ISharpObject2
    {
        string Name { get; set; }
        void Test();
    }

    // 繼承 ServicedComponent 才能受 COM+ 管理
    public class Class1 : ServicedComponent, ISharpObject2
    {
        private string _name;

        public string Name
        {
            get => _name;
            set => _name = value;
        }

        public void Test() { /* 業務邏輯 */ }
    }
}

關鍵屬性說明

屬性用途
[Guid(...)]指定介面/類別的固定 GUID,確保版本相容
ServicedComponent基底類別,提供物件池、交易、角色型安全等 COM+ 服務
[Transaction(TransactionOption.Required)](可選)宣告交易支援
[ObjectPooling(...)](可選)啟用物件池

步驟 4:編譯與註冊


// 建置產生 ClassLibrary1.dll
// 使用 regsvcs 註冊至 COM+ 應用程式 "MyCom"
regsvcs /c ClassLibrary1.dll MyCom
  • /c:建立新的 COM+ 應用程式
  • 若應用程式已存在,可用 regsvcs ClassLibrary1.dll 直接安裝元件

步驟 5:驗證與測試

  1. 開啟「元件服務」 (comexp.msc)
  2. 展開「元件服務」→「電腦」→「我的電腦」→「COM+ 應用程式」→「MyCom」→「元件」
  3. 確認 ClassLibrary1.Class1 存在
  4. 用 VB6、VBScript 或另一個 .NET 專案(加入 COM 參考)測試呼叫

常見問題與解決

問題原因與對策
註冊失敗:Access Denied需系統管理員權限執行命令提示字元
呼叫端找不到介面確認介面為 public 且有 [Guid],專案勾選「登錄以進行 COM Interop」
交易不生效類別需標註 [Transaction],方法不可為 static
版本衝突修改介面必須變更 GUID;實作類別變更可保留 GUID 但需重新註冊

.NET 呼叫 COM+ 元件


// 加入參考:COM 標籤 → "MyCom" 或瀏覽 .tlb
using MyComLib; // 匯入產生的 Interop 組件

var obj = new Class1Class(); // RCW 包裝
obj.Name = "Test";
obj.Test();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved