如何在 Visual Studio 2015 年创建的 VSIX 中调试 Visual Studio 包
How to debug a Visual Studio Package in a VSIX created in Visual Studio 2015
我无法在最简单的 VSIX 项目中调试最简单的 VS 包。
重现步骤:
创建 VSIX 项目:文件/新建/项目/可扩展性/VSIX 项目
添加Visual Studio包:右键单击解决方案资源管理器中的项目节点和select 添加/新项目/可扩展性/Visual Studio包裹
打开新建的包文件(VSPackage1.cs
),在Initialize()
的第一行第68行打断点,base.Initialize()
按F5
开始调试
这将启动一个 Visual Studio 2015 的实验实例,安装了软件包(在 工具/扩展和更新... 中确认),但断点被禁用:
以上步骤来自新创建的 VSIX 项目的入门指南 (index.html
),因此应该有效。
附加信息:
- 解决方案配置是Debug,平台是Any CPU
- 项目的 Debug 属性自动将 Start external program 设置为
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe
并将 Command line arguments 设置为 /rootsuffix Exp
- 我将 Copy Debug Symbols to Output Directory 设置为
True
,之后 projectname.pdb
文件正确出现在 bin\Debug
bin\Debug\projectname.vsix
文件包含 projectname.pdb
- 该项目包含在 Assets 中
source.extension.vsixmanifest
和 Type=Microsoft.VisualStudio.VsPackage
- 我尝试将项目添加到 Assets 中
source.extension.vsixmanifest
和 Type=Microsoft.VisualStudio.MefComponent
中,但这似乎没什么用。在此之后的第一个 运行 中,断点似乎已启用,但未命中。在第 2 个和随后的 运行 秒,断点在 运行 期间返回到禁用状态。
- 我尝试更改清单中的版本,但我发现有任何影响。
- 我尝试 运行 单独连接实验实例,并使用调试器附加到它,但它的行为方式与直接使用
F5
启动时的方式相同,没有任何区别。
- 我尝试在
Initialize
方法中添加 Console.WriteLine
语句,但在 Output
window. 中找不到调试文本
- 我尝试了 x86 平台而不是 Any CPU,但结果相同。
- 一位同事遵循了相同的步骤并得到了相同的结果,所以它可能不是我的电脑特有的。 (我邀请任何人按照相同的步骤来证明我错了,或者发现我步骤中的错误。)
所有这些似乎都表明 VS 包没有得到初始化,尽管它显然已安装。我错过了什么?如果相关,here's the source code of the VS Package, and here 是整个虚拟项目。
如果您需要更多信息,请告诉我。
VSPackages are loaded into Visual Studio only when their functionality
is required. For example, a VSPackage is loaded when Visual Studio
uses a project factory or a service that the VSPackage implements.
This feature is called delayed loading, which is used whenever
possible to improve performance.
要在 VS 启动时自动加载包,通常将 Provider AutoLoad 属性添加到主包 class。
有关详细信息,请参阅 Loading VSPackages 文档。
在这里补充一下其他答案,OP实际问题的解决方案是:
忽略该消息,不要担心。这些符号现在 未加载,但它们将在准备好命中断点时加载。
我无法在最简单的 VSIX 项目中调试最简单的 VS 包。
重现步骤:
创建 VSIX 项目:文件/新建/项目/可扩展性/VSIX 项目
添加Visual Studio包:右键单击解决方案资源管理器中的项目节点和select 添加/新项目/可扩展性/Visual Studio包裹
打开新建的包文件(
VSPackage1.cs
),在Initialize()
的第一行第68行打断点,base.Initialize()
按
F5
开始调试
这将启动一个 Visual Studio 2015 的实验实例,安装了软件包(在 工具/扩展和更新... 中确认),但断点被禁用:
以上步骤来自新创建的 VSIX 项目的入门指南 (index.html
),因此应该有效。
附加信息:
- 解决方案配置是Debug,平台是Any CPU
- 项目的 Debug 属性自动将 Start external program 设置为
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe
并将 Command line arguments 设置为/rootsuffix Exp
- 我将 Copy Debug Symbols to Output Directory 设置为
True
,之后projectname.pdb
文件正确出现在bin\Debug
bin\Debug\projectname.vsix
文件包含projectname.pdb
- 该项目包含在 Assets 中
source.extension.vsixmanifest
和Type=Microsoft.VisualStudio.VsPackage
- 我尝试将项目添加到 Assets 中
source.extension.vsixmanifest
和Type=Microsoft.VisualStudio.MefComponent
中,但这似乎没什么用。在此之后的第一个 运行 中,断点似乎已启用,但未命中。在第 2 个和随后的 运行 秒,断点在 运行 期间返回到禁用状态。 - 我尝试更改清单中的版本,但我发现有任何影响。
- 我尝试 运行 单独连接实验实例,并使用调试器附加到它,但它的行为方式与直接使用
F5
启动时的方式相同,没有任何区别。 - 我尝试在
Initialize
方法中添加Console.WriteLine
语句,但在Output
window. 中找不到调试文本
- 我尝试了 x86 平台而不是 Any CPU,但结果相同。
- 一位同事遵循了相同的步骤并得到了相同的结果,所以它可能不是我的电脑特有的。 (我邀请任何人按照相同的步骤来证明我错了,或者发现我步骤中的错误。)
所有这些似乎都表明 VS 包没有得到初始化,尽管它显然已安装。我错过了什么?如果相关,here's the source code of the VS Package, and here 是整个虚拟项目。
如果您需要更多信息,请告诉我。
VSPackages are loaded into Visual Studio only when their functionality is required. For example, a VSPackage is loaded when Visual Studio uses a project factory or a service that the VSPackage implements. This feature is called delayed loading, which is used whenever possible to improve performance.
要在 VS 启动时自动加载包,通常将 Provider AutoLoad 属性添加到主包 class。
有关详细信息,请参阅 Loading VSPackages 文档。
在这里补充一下其他答案,OP实际问题的解决方案是:
忽略该消息,不要担心。这些符号现在 未加载,但它们将在准备好命中断点时加载。