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;
如果要疑難排解服務
請檢查系統登錄,以查看是否已正確註冊服務。 如需詳細資訊,請參閱 註冊服務。
當您呼叫 GetService 時,請使用的服務型別和介面類型。 當要求服務,以從Visual Studio, Package的型別中擷取的 GUID。 如果下列情況,也不會找到服務:
介面型別會傳遞至 GetService,而非服務類型。
沒有 GUID 是明確地指派給介面。 因此,系統會建立物件所需的預設 GUID。
請務必在設置 VSPackage 要求的服務。 Visual Studio之後它建構和呼叫之前,站台,VSPackage Initialize。
如果您需要的服務是 VSPackage 建構函式的程式碼,請將它移至初始化方法。
請務必使用正確的服務提供者。
並非所有的服務提供者是相同的項目。 服務提供者的Visual Studio傳遞至工具視窗不同於 [將傳遞至 VSPackage 的那一個。 工具視窗的服務提供者所知STrackSelection,但是不知道SVsRunningDocumentTable。 您可以呼叫GetGlobalService用於工具視窗中取得的 VSPackage 服務提供者。 如需詳細資訊,請參閱 How to: 使用 GetGlobalService。
如果工具視窗裝載使用者控制項或任何其他控制項的容器,容器會設置 Windows 元件模型,而且並不會存取任何Visual Studio服務。 您可以呼叫GetGlobalService以取得 VSPackage 服務提供者從控制項容器內。 如需詳細資訊,請參閱 How to: 使用 GetGlobalService。