具有获取服务的几个常见问题:
服务未向 Visual Studio注册。
服务请求由接口类型和不通过服务类型。
请求的 VSPackage 服务未就位。
使用错误的服务提供程序。
如果请求的服务未能获得,对 GetService 的调用返回 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 服务提供程序从工具窗口内。 有关更多信息,请参见如何:使用 GetGlobalService。
如果工具窗口承载一个用户控件或其他控件容器,容器将由 windows 组件模型网站,并且不会访问任何 Visual Studio services。 您可以调用 GetGlobalService 获取 VSPackage 服务提供程序从控件容器内。 有关更多信息,请参见如何:使用 GetGlobalService。