排查 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。
在注册表的“包”部分中查找 VSPackage 的 CLSID:
HKLM\Software\Microsoft\Visual Studio\<version>\Packages
验证 SatelliteDll 子项提供的路径是否正确。
VSPackage 的行为意外
若要排查此问题,请尝试执行以下步骤中的一个或多个操作:
在代码中设置断点。
调试的起始点是构造函数和初始化方法。 还可以在要评估的区域(例如菜单命令)中设置断点。 若要启用断点,必须在调试器下运行。
在“项目”菜单上选择“属性”。
在 “属性页 ”对话框中,选择“ 调试 ”选项卡。
在 命令行参数 框中,输入 VSPackage 面向的开发环境的根后缀。 例如,若要选择实验性生成,请输入: /RootSuffix Exp。
在“调试”菜单上,选择“开始调试”或按 F5。
注意
如果要调试项目,请立即创建或加载项目的现有实例。
使用活动日志。
通过将信息写入关键点的活动日志来跟踪 VSPackage 行为。 在零售环境中运行 VSPackage 时,此方法特别有用。 有关详细信息,请参阅操作说明:使用活动日志。
使用公共符号。
若要提高调试时的可读性,可以将符号附加到调试器:
- 在 “工具/选项 ”菜单中,导航到 “调试/符号 ”对话框。
- 添加 符号文件 (.pdb) 位置:
https://msdl.microsoft.com/download/symbols
。 - 若要提高性能,请指定符号缓存文件夹,例如: C:\symbols。
缺少 VSPackage 或其依赖项之一
对于托管代码,请确保引用路径正确。
在“项目”菜单上选择“属性”。
在“属性页”对话框中选择“引用”选项卡,并确保所有路径都正确。 或者,可以使用 对象浏览器 浏览引用的对象。
对于托管代码,可以使用 Fuslogvw.exe(程序集绑定日志查看器) 显示失败的程序集加载的详细信息。
对于非托管代码,在 Visual Studio CLSID 注册表节点中找到 VSPackage 的 CLSID:
HKLM\Software\Microsoft\Visual Studio\<version>\CLSID
确保 InprocServer32 条目具有 VSPackage DLL 的正确路径。