我期待创建一个Visual Studio AddIn,它可以帮助我启动自己的调试过程.我想保持原始的基于F5的调试完好无损,因此我不想拦截该调用并需要单独的AddIn.
有什么建议
最简单的方法是使用插件捕获系统事件/宏.在这些事件中覆盖vs所做的事情真的很容易.使用标准Visual Studio命令(如F5)时,将自动触发所有事件.这包括所有标准的可视工作室快捷键,菜单和工具栏按钮.
创建一个新的vs addin项目,它将自动添加代码以附加OnBeforeCommandEvent.在vb中,事件处理程序将类似于下面的代码.
Friend Sub OnBeforeCommandEvent(sGuid As String, ID As Integer, CustomIn As Object, CustomOut As Object, ByRef CancelDefault As Boolean)
Run Code Online (Sandbox Code Playgroud)
该活动将通过您的sGuid和ID.您可以将这两个项解析为宏字符串名称(sCommandName),如下所示: -
Dim objCommand As EnvDTE.Command
Try
objCommand = _applicationObject.Commands.Item(sGuid, ID)
Catch ex As Exception
'unknown guids can be ignored
Exit Sub
End Try
If objCommand Is Nothing Then Exit Sub
Dim sCommandName As String
sCommandName = objCommand.Name
Run Code Online (Sandbox Code Playgroud)
注:该_applicationObject加载项启动时传递到您的代码.一个新的插件项目将自动为该OnConnection事件包含以下代码,第一个参数_applicationObject如上所示.
OnConnection(ByVal application As Object
Run Code Online (Sandbox Code Playgroud)
获得sCommandName变量后,它将包含Visual Studio宏的名称,例如Debug.Start.
要覆盖这些Debug.Start函数,您需要添加一些自己的代码,并记住在退出处理程序之前设置CancelDefault为True.
当您设置CancelDefault为true时,Visual Studio将不会运行标准宏,这意味着您可以在按下F5时运行自己的调试器.
这些是在构建过程中使用的Visual Studio宏名称.您可以根据需要覆盖任意数量或数量.我已将它们分组到相关功能中,但您可以任意组合处理它们.
Select Case sCommandName
Case "Debug.Start", _
"Debug.StartWithoutDebugging"
System.Windows.Forms.MessageBox.Show("You clicked F5, we are overriding the debug process")
CancelDefault=true
Exit Sub
Case "ClassViewContextMenus.ClassViewProject.Rebuild", _
"ClassViewContextMenus.ClassViewProject.Build", _
"Build.RebuildOnlyProject", _
"Build.RebuildSelection", _
"Build.BuildOnlyProject", _
"Build.BuildSelection"
Case "Build.RebuildSolution", _
"Build.BuildSolution"
Case "ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance", _
"ClassViewContextMenus.ClassViewProject.Debug.StepIntonewinstance"
Case "Build.CleanSelection", _
"Build.CleanSolution", _
"ClassViewContextMenus.ClassViewProject.Clean"
Case "Build.SolutionConfigurations"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |