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


68

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

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


6
我已提交请愿书,以将此功能添加到Visual Studio的UserVoice论坛中。对此功能进行投票可能是看到此功能的最佳机会。visualstudio.uservoice.com/forums/121579-visual-studio/…–
jpierson

Answers:


18

如果您对永久解决方案感兴趣,那么我已经为该任务编写了一个小宏。它做以下事情:

  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。如果宏将当前选定的项目设置为Startup项目没有任何问题,请在行的开头加上',注释宏Prop.Value = PrevStartup的最后一行。现在,消息框不会出现。

我正在研究它,一旦解决了它就会发布更新的宏(如果可以的话:))


1
糟糕的宏结束了。
Shimmy Weitzhandler '17

20

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

转到工具->自定义,然后按照下面的图片操作。

点击添加命令 在这里您可以找到菜单项


很好的答案,尤其是Visual Studio 2015的VSCommands似乎还没有此功能。同样,以这种方式添加新命令也不是特定于2015年的,因为它也存在于先前版本中。
杰里

51
问题在于它总是启动StartUp项目,而不是上下文菜单下的项目。
Yegor,2016年

10
..认真的程序员在想什么?我为什么要在每个项目中添加一个始终仅激活启动项目的按钮,超出了我的范围...
Francesco Dondi

1
这特别令人讨厌,因为“启动新实例”实际上在上下文菜单下启动了项目,但是在“调试”中启动了该项目。
Ishmael

不幸的是,这不是@Yegor所说的正确答案。
user1146657 '19


8

我只是把这个宏放在一起。它是我在互联网上发现的几个片段的组合。如果将项目配置为运行默认项目输出,它将找到并运行该项目。如果配置为运行特定程序,它将运行该程序。此宏也不会编译您的应用程序,因此您需要在运行宏之前确保已对其进行了编译。同时,此宏不会遇到上面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

大!我喜欢这样的事实,它不会尝试切换启动项目(如果您已经在调试,它将无法运行)
朱利安·多明格斯

由于某些原因,这不适用于MVC项目。它为我启动了NUnit。您对我如何使其工作有任何想法吗?
unkownt 2011年

@unknownt您可以尝试调试宏以确定采用哪种路径吗?还提供与该路径关联的变量的值。
亚历克斯·德雷斯科

@unkownt此宏依赖于内置于可执行文件中的C#项目的特定属性。任何其他项目类型(ASP.NET/Azure/Silverlight/您拥有什么)都将无法正常工作,而使其正常工作(例如,在启动ASP时手动完成VS的所有工作)将非常重要.NET应用-启动相应的网络服务器,浏览器等。)
Omer Raviv,2012年

4

我一直在尝试做同样的事情。似乎是VS团队的疏忽,您可以在解决方案级别开始或不进行调试,但只能在项目级别进行调试。

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

同样有趣的是,在可自定义命令列表中找不到项目上下文菜单的“调试|启动新实例”命令。我浏览了几乎所有类别,但找不到。

希望有人想出一个好方法来做到这一点……这真的很方便!


感谢分享。我还考虑过添加运行。我正在谈论2017年!
Shimmy Weitzhandler,2017年

4

这是解决与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

请享用 !


3

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

Ctrl+F5

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

<compilation debug="false"/>

6
那将启动所有项目,而不仅仅是一个项目。
Mark Seemann

1
@MarkSeemann实际上,它将启动设置为StartUp的项目。
informatik01

2
@ informatik01,但是我们有多个项目启动,并且想运行其中一个。
Shimmy Weitzhandler,2017年

@Shimmy Em,尝试右键单击解决方案(即不在项目上),然后选择“设置启动项目...”。将会打开一个模态窗口,具有不同的设置。尝试尝试可用的选项,也许会对您有所帮助。PS我看到此设置的Visual Studio版本是2015 Community Edition。
informatik01 2007年

2
@ informatik01,nops。这将更改永久设置。我正在寻找一个简单的命令,无需调试即可启动一个项目。就像Alt+ F5(启动单个项目的新实例)一样,但是无需调试。
Shimmy Weitzhandler,2017年


2

简而言之,没有。

您可以做的是将一个键绑定到“设置为启动项目”,然后绑定另一个键以启动而不进行调试。然后,您必须按2个键才能启动该项目而不进行调试,但至少比使用鼠标要快...


2

右键单击解决方案,选择“属性”。选择多个启动项目。每个项目的组合框使您可以决定启动哪些项目而无需调试。


1

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

按Ctrl + F5


4
但是,如果您的默认启动项目实际上是您使用最多的项目,而您却很少需要启动其他项目,那将是最痛苦的事情。
2015年

1

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


是的,但是整个问题是,如果不调试尚未选择为启动项目的项目,我们就无法启动。
Francesco Dondi

2
然后,您将如何启动ASP.NET Core项目?
Shimmy Weitzhandler,2017年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.