代码之家  ›  专栏  ›  技术社区  ›  Oliver Hanappi

如何在不调试Visual Studio的情况下启动单个项目?

  •  58
  • Oliver Hanappi  · 技术社区  · 15 年前

    我的解决方案包含多个可以启动的项目。有时我希望在不使用解决方案启动项目设置的情况下启动单个项目。当我右键单击项目时,可以导航到“调试”->启动新实例,该实例使用调试器启动应用程序。

    但是我想在不使用调试器的情况下启动一个新实例。这有可能吗?

    14 回复  |  直到 6 年前
        1
  •  17
  •   MRG    15 年前

    如果您对永久性解决方案感兴趣,那么我已经为这个任务编写了一个小宏。 它执行以下操作:

    1. 获取当前选定的项目(如果选择了多个项目,则将使用第一个选定的项目。)
    2. 保存当前启动项目
    3. 将当前选定的项目设置为启动项目,并在“不调试而启动”模式下运行当前选定的项目。
    4. 将初始启动项目还原为启动项目。

    下面是我编写的宏以及如何执行宏的过程。

    如何编写宏: 首先,您需要转到Visual Studio工具-->宏-->宏资源管理器。一旦你得到了右键点击MyMacros并创建一个新的模块(我称之为collapseall)。

    现在编辑新模块(双击它)删除其中的内容并将这些内容粘贴到其中。

    Sub RunSelectedWithoutDebug()
                Dim Projs As Array
                Dim Proj As Project
                Projs = DTE.ActiveSolutionProjects()
                If (Projs.Length > 0) Then
                    Proj = Projs.GetValue(0)
                    Dim Prop As EnvDTE.Property
                    Prop = DTE.Solution.Properties.Item("StartupProject")
                    Dim PrevStartup As Object
                    PrevStartup = Prop.Value
                    Prop.Value = Proj.Name
                    DTE.ExecuteCommand("Debug.StartWithoutDebugging")
                    Prop.Value = PrevStartup
                End If
            End Sub
    

    如何将宏绑定到键盘快捷方式: 为此,您需要转到“工具”->选项-->环境”->键盘。从列表框中选择包含所有默认vs元素的宏(记住它将像mymacros.module1.runselectedwithoutdebug一样存在),然后为其指定热键组合或和弦并保存。

    注: 第四步是创建一个问题,并产生一个恼人的消息框,说: 必须停止生成以更改解决方案属性。停止生成?确定或取消。我以前打过OK。如果宏将当前选定的项目设置为启动项目时没有任何问题,请注释宏的最后一行。 prop.value=prevstartup,在行首加',此时消息框不会出现。

    我正在研究它,并将在我解决它后发布更新的宏(如果我可以:)

        2
  •  15
  •   xhafan    7 年前

    添加 VSCommands 扩展到Visual Studio中,右键单击项目->调试->不调试而启动

        3
  •  12
  •   Srekel    9 年前

    也许这是vs 2015中的新功能,但不需要添加自定义宏-您可以在可以添加的内容列表中找到不调试菜单项的“开始”。

    转到“工具”->自定义,按照下面的图像操作。

    Hit Add Command Here you can find the menu item

        4
  •  8
  •   Alex Dresko    15 年前

    我只是把这个宏放在一起。这是我在InterWeb上找到的几个片段的组合。如果项目被配置为运行默认项目输出,它将找到并运行该输出。如果它被配置为运行特定的程序,它将运行该程序。这个宏也不会编译您的应用程序,所以您需要确保它是在运行宏之前编译的。同时,该宏不存在上述Mahin宏中提到的问题。

    Sub RunActiveProjectOutput()
        Dim Projs As Array
        Dim Proj As Project
        Projs = DTE.ActiveSolutionProjects()
        If (Projs.Length > 0) Then
            Proj = Projs.GetValue(0)
    
            Dim action = DirectCast(Proj.ConfigurationManager.ActiveConfiguration.Properties.Item("StartAction").Value, Integer)
    
            If (action = 1) Then
                Dim app = Proj.ConfigurationManager.ActiveConfiguration.Properties.Item("StartProgram").Value
                Dim args = Proj.ConfigurationManager.ActiveConfiguration.Properties.Item("StartArguments").Value
                System.Diagnostics.Process.Start(app, args)
            Else
                Dim fullPath = Proj.Properties.Item("FullPath").Value.ToString()
                Dim outputPath = Proj.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString()
                Dim outputDir = System.IO.Path.Combine(fullPath, outputPath)
                Dim outputFileName = Proj.Properties.Item("OutputFileName").Value.ToString()
                Dim assemblyPath = System.IO.Path.Combine(outputDir, outputFileName)
                System.Diagnostics.Process.Start(assemblyPath)
            End If
        End If
    End Sub
    
        5
  •  4
  •   Micz    14 年前

    这是去的路 解决与Mahin宏相关的问题

    问题描述:第四步是创建一个问题并生成一个恼人的消息框,该消息框说:必须停止生成以更改解决方案属性。停止生成?好的,或者取消。

    Public Module Custom
        Private WithEvents t As Timers.Timer
    
        Private Prop As EnvDTE.Property
        Private PrevStartup As Object
    
        Private Sub StartTimer()
            t = New Timers.Timer
            t.Interval = 0.05
            t.Start()
        End Sub
    
        Sub t_Elapsed(ByVal ee As Object, ByVal dd As Timers.ElapsedEventArgs) Handles t.Elapsed
            If DTE.Solution.SolutionBuild.BuildState <> vsBuildState.vsBuildStateInProgress Then
                t.Stop()
                Prop.Value = PrevStartup
            End If
        End Sub
    
        Sub RunSelectedWithoutDebug()
            Dim Projs As Array
            Dim Proj As Project
            Projs = DTE.ActiveSolutionProjects()
            If (Projs.Length > 0) Then
                Proj = Projs.GetValue(0)
                Prop = DTE.Solution.Properties.Item("StartupProject")
    
                PrevStartup = Prop.Value
                Prop.Value = Proj.Name
                DTE.ExecuteCommand("Debug.StartWithoutDebugging")
                StartTimer()
            End If
        End Sub
    End Module
    

    享受!

        6
  •  3
  •   CodingWithSpike    15 年前

    我一直在做同样的事情。这看起来像是VS团队的一个监督,您可以从解决方案级别的调试开始,也可以不从解决方案级别的调试开始,但只能从项目级别的调试开始。

    我注意到的一件事是,如果右键单击工具栏并选择“自定义”,在操作弹出窗口中,转到类别“项目”。在这里,有一个“运行”和“运行选定”的命令。有趣的是,我把它们都添加到了我的项目上下文菜单和主按钮栏中,而这些项似乎 总是 被禁用。

    同样有趣的是,在可自定义命令列表中找不到项目上下文菜单的“debug start new instance”命令。我浏览了几乎所有的类别,却找不到。

    希望有人能想出一个好办法…那真是太方便了!

        7
  •  2
  •   Aamir    15 年前

    右键单击该项目并将其设置为启动项目。

    点击CTRL+F5

        8
  •  2
  •   Robban    15 年前

    简而言之,没有。

    您可以做的是将一个键绑定到“设置为启动项目”,然后绑定另一个键以在不调试的情况下启动。然后你必须按下2个键来启动这个项目而不进行调试,但至少比使用鼠标更快…

        9
  •  2
  •   Shimmy Weitzhandler 500 - Internal Server Error    8 年前

    使用 启动而不调试 在调试菜单下,或

    Ctrl键 + F5

    或者可以修改项目的web.config文件:

    <compilation debug="false"/>
    
        10
  •  1
  •   CodingBarfield    15 年前

    我通常直接启动可执行文件。如果我需要一个不需要调试模式的解决方案,我通常会将它们添加到任务栏上的“快速启动”菜单中。

        11
  •  1
  •   Jim O'Keefe    7 年前

    这很快:项目设置为启动项目当前选择。然后,无论选择哪一个项目,都将在调试启动而不调试/ctrl-f5下运行。 https://blogs.msdn.microsoft.com/saraford/2005/11/29/how-to-set-your-current-project-to-always-be-the-startup-project/

        12
  •  0
  •   Joe Phillips    6 年前

    有人做了一个插件。目前还没有真正处理aspnetcore项目,但是:

    https://marketplace.visualstudio.com/items?temName=vurdalak1.startwithoutdebugging

        13
  •  0
  •   Richard    6 年前

    右键单击解决方案,选择“属性”。选择多个启动项目。每个项目的组合框允许您决定在不调试的情况下启动哪些项目。

        14
  •  -1
  •   Kirk Broadhurst    15 年前
    1. 将所需项目设置为启动项目(如每个人建议的那样)
    2. 关闭解决方案配置管理器中所有其他项目的“生成”
    3. 启动而不调试。