Visual Studio扩展:从装饰品获取包

时间:2018-09-17 06:25:08

标签: c# visual-studio visual-studio-extensions

我正在开发由以下组成的Visual Studio扩展:

  1. 菜单和一系列命令
  2. 工具窗口
  3. 一个或多个textview装饰
  4. AysncPackage的自定义实现

现在,虽然“工具”窗口和命令通过扩展的AsyncPackage进行接线或具有句柄,但我不知道是如何从一个或多个AsyncPackage中获得同一个AsyncPackage的句柄我的文字装饰更多。

例如,我的“工具窗口”扩展了ToolWindowPane,它通过Package的ProvideToolWindow属性连接到Package。我的命令是在Package本身内部构造的,因此将句柄传递给AsyncPackage非常简单。

我无法解决的是如何在我的任何TextAdornments中获得对此AsyncPackage的引用。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

这是一个棘手的问题!您必须获取IVsShell才能基于与Package关联的GUID检索软件包,然后将其转换为您的界面(或IPackage的基本界面)

 private IMyPackageInterface _myPackage;

 //let's get our hands on that package
var vsShell = (IVsShell) ServiceProvider.GlobalProvider.GetService(typeof(IVsShell));
if (vsShell == null)
{
    throw new NullReferenceException();
}

if (vsShell.IsPackageLoaded(PackageGuid, out var myPossiblePackage) 
    == Microsoft.VisualStudio.VSConstants.S_OK) { 
_myPackage = (IMyPackageInterface)myPossiblePackage;