排查 VSPackage 的问题

适用于: Visual Studio

本文介绍 VSPackage 的常见问题和疑难解答提示

VSPackage 使 Visual Studio 从开始

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

未加载 VSPackage

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

  • 请确保使用注册 VSPackage 以运行 VSPackage 的注册表根,通常是实验性注册表根。 有关详细信息,请参阅试验实例

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

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

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

  • 打开无法加载 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 的正确路径。

参考