Visual Studio AddIn

1 add-in visual-studio-2010

我期待创建一个Visual Studio AddIn,它可以帮助我启动自己的调试过程.我想保持原始的基于F5的调试完好无损,因此我不想拦截该调用并需要单独的AddIn.

有什么建议

Vis*_*cro 5

最简单的方法是使用插件捕获系统事件/宏.在这些事件中覆盖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函数,您需要添加一些自己的代码,并记住在退出处理程序之前设置CancelDefaultTrue.

当您设置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)