How to: 服務進行疑難排解
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
有幾個常見的問題,當您嘗試將取得的服務時,可能會發生︰
服務未向Visual Studio。
服務要求的介面型別,而不是由服務類型。
無法決定位置 VSPackage 服務要求。
使用錯誤的服務提供者。
如果所要求的服務無法取得,呼叫GetService會傳回 null。 您應該一律測試為 null 之後要求的服務︰
IVsActivityLog log =
GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;
疑難排解服務問題
檢查系統登錄,以查看是否已正確註冊服務。 如需詳細資訊,請參閱登錄服務。
下列.reg 檔案片段顯示如何可能登錄 SVsTextManager 服務︰
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}] @="{F5E7E720-1401-11d1-883B-0000F87579D2}" "Name"="SVsTextManager"
在上述範例中,版本號碼是版Visual Studio、 12.0 或 14.0,例如 {F5E7E71D-1401-11d1-883B-0000F87579D2} 的索引鍵是 SVsTextManager,服務的服務識別碼 (SID),且預設值 {F5E7E720-1401-11d1-883B-0000F87579D2} 封裝文字管理員 VSPackage,提供服務的 GUID。
當您呼叫 GetService 時,請使用服務型別和介面類型。 要求的服務時Visual Studio,封裝擷取類型的 GUID。 如果下列條件存在,將無法找到服務︰
介面型別給 GetService,而不是服務類型。
GUID 不明確指派給介面。 因此,系統會建立物件所需的預設 GUID。
請確定已設置 VSPackage 服務要求。 Visual Studio之後建構該項目,以及呼叫之前,站台 VSPackage初始化。
如果您需要服務 VSPackage 建構函式中的程式碼,請將它移至 Initialize 方法。
請務必使用正確的服務提供者。
並非所有的服務提供者是相同的。 服務提供者,Visual Studio傳遞至工具視窗與傳遞到 VSPackage。 工具視窗服務提供者知道STrackSelection,但不知道SVsRunningDocumentTable。 您可以呼叫GetGlobalService VSPackage 服務提供者,從取得工具視窗內。
如果工具視窗裝載使用者控制項或任何其他控制項容器,容器會設置在 Windows 元件模型,將無法存取任何Visual Studio服務。 您可以呼叫GetGlobalService取得 VSPackage 服務提供者從控制項容器中的。