共用方式為


How to: 疑難排解服務問題

有幾個常見的問題,以取得服務:

  • 服務未註冊於Visual Studio。

  • 介面型別而不是服務型別,會要求服務。

  • 要求服務的 VSPackage 不已決定位置。

  • 使用錯誤的服務提供者。

如果要求的服務無法取得,呼叫GetService ,則傳回 null。 您一定要測試的 null 之後要求的服務:

Dim log As IVsActivityLog = TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
If log Is Nothing Then 
    Return 
End If
IVsActivityLog log = GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

如果要疑難排解服務

  1. 請檢查系統登錄,以查看是否已正確註冊服務。 如需詳細資訊,請參閱 註冊服務

  2. 當您呼叫 GetService 時,請使用的服務型別和介面類型。 當要求服務,以從Visual Studio, Package的型別中擷取的 GUID。 如果下列情況,也不會找到服務:

    1. 介面型別會傳遞至 GetService,而非服務類型。

    2. 沒有 GUID 是明確地指派給介面。 因此,系統會建立物件所需的預設 GUID。

  3. 請務必在設置 VSPackage 要求的服務。 Visual Studio之後它建構和呼叫之前,站台,VSPackage Initialize

    如果您需要的服務是 VSPackage 建構函式的程式碼,請將它移至初始化方法。

  4. 請務必使用正確的服務提供者。

    並非所有的服務提供者是相同的項目。 服務提供者的Visual Studio傳遞至工具視窗不同於 [將傳遞至 VSPackage 的那一個。 工具視窗的服務提供者所知STrackSelection,但是不知道SVsRunningDocumentTable。 您可以呼叫GetGlobalService用於工具視窗中取得的 VSPackage 服務提供者。 如需詳細資訊,請參閱 How to: 使用 GetGlobalService

    如果工具視窗裝載使用者控制項或任何其他控制項的容器,容器會設置 Windows 元件模型,而且並不會存取任何Visual Studio服務。 您可以呼叫GetGlobalService以取得 VSPackage 服務提供者從控制項容器內。 如需詳細資訊,請參閱 How to: 使用 GetGlobalService

請參閱

概念

可用的服務清單

服務的基本資訊

其他資源

服務