排查 VSPackages 问题

适用于: Visualstudio

本文介绍 VSPackage 的常见问题和故障排除提示。

VSPackage 阻止 Visual Studio 启动

在此方案中,通过在命令提示符处输入 devenv.exe /safemode ,在安全模式下启动 Visual Studio。 在此过程中,除了 Visual Studio 附带的 VSPackage 之外,不会加载 VSPackage。

未加载 VSPackage

若要排查此问题,请尝试执行以下步骤中的一个或多个操作:

  • 确保使用的是注册要在其中运行 VSPackage 的注册表根目录,通常是实验性注册表根目录。 有关详细信息,请参阅 实验实例

  • 如果 VSPackage 的目标是在实验性注册表根目录中运行,请确保运行 Visual Studio 的实验版本。

    若要运行实验版本,请打开 Visual Studio 命令提示符,然后输入 devenv /rootsuffix exp

  • 检查 VSPackage 注册表项。 有关详细信息,请参阅 注册 VSPackages 和管理 VSPackages

  • 打开无法加载 VSPackage 的 Visual Studio 实例的 “输出 ”窗口。 有关 VSPackage 加载失败的原因的信息可能会显示在该窗口中。

    注意

    如果要从 Visual Studio 集成开发环境 (IDE) 启动 Visual Studio 实验版,请检查这两个版本的 “输出 ”窗口。

  • 检查活动日志。 有关详细信息,请参阅 如何:使用活动日志

  • 有关 IDE 引发的异常的详细信息,请选择“调试”菜单上的“异常”以启用异常。 在“异常”对话框中,选择需要更多信息的异常类型。

未注册 VSPackage

确保 VSPackage 程序集位于受信任位置。 RegPkg 无法在不受信任或部分受信任的位置(例如默认 .NET 安全配置中的网络共享)中注册程序集。 尽管每当用户在不受信任的位置创建项目时都会出现警告,但 “不再显示此消息 ”复选框可能会阻止此警告再次出现。

命令不可见,或者在选择命令时生成错误

若要解决此问题,请尝试以下步骤:

  • 通过在 Visual Studio 命令提示符处输入 devenv /rootsuffix Exp /setup ,合并新的或更改的菜单命令以及 IDE 中已有的命令。

  • 确保 Visual Studio 可以找到 VSPackage 的 UI.dll。

    1. 在注册表的“包”部分中找到 VSPackage 的 CLSID:

      HKLM\Software\Microsoft\Visual Studio\<version>\Packages

    2. 验证 SatelliteDll 子项提供的路径是否正确。

VSPackage 行为意外

若要排查此问题,请尝试执行以下步骤中的一个或多个操作:

  • 在代码中设置断点。

    调试的良好起点是构造函数和初始化方法。 还可以在要评估的区域(如菜单命令)中设置断点。 若要启用断点,必须在调试器下运行。

    1. 在“ 项目 ”菜单上,选择“ 属性”。

    2. 在“ 属性页 ”对话框中,选择“ 调试 ”选项卡。

    3. “命令行参数 ”框中,输入 VSPackage 面向的开发环境的根后缀。 例如,若要选择实验生成,请输入: /RootSuffix Exp

    4. “调试” 菜单上,选择“ 开始调试” 或按 F5。

      注意

      如果要调试项目,请立即创建或加载项目的现有实例。

  • 使用活动日志。

    通过在关键点将信息写入活动日志来跟踪 VSPackage 行为。 在零售环境中运行 VSPackage 时,此方法特别有用。 有关详细信息,请参阅 如何:使用活动日志

  • 使用公共符号。

    若要提高调试时的可读性,可以将符号附加到调试器:

    1. “工具/选项” 菜单中,导航到 “调试/符号 ”对话框。
    2. 添加 符号文件 (.pdb) 位置https://msdl.microsoft.com/download/symbols
    3. 若要提高性能,请指定符号缓存文件夹,例如: C:\symbols

缺少 VSPackage 或其依赖项之一

  • 对于托管代码,请确保引用路径正确。

    1. 在“ 项目 ”菜单上,选择“ 属性”。

    2. 选择“属性页”对话框中的“引用”选项卡,确保所有路径都正确。 或者,可以使用 对象浏览器 浏览引用的对象。

      对于托管代码,可以使用 Fuslogvw.exe (程序集绑定日志查看器) 来显示失败的程序集加载的详细信息。

  • 对于非托管代码,请在 Visual Studio CLSID 注册表节点中找到 VSPackage 的 CLSID:

    HKLM\Software\Microsoft\Visual Studio\<version>\CLSID

    确保 InprocServer32 条目具有 VSPackage DLL 的正确路径。

References