71 votes

Comment démarrer un projet unique sans déboguer dans Visual Studio ?

Ma solution contient plusieurs projets qui peuvent être lancés. Parfois, j'aimerais démarrer un seul projet sans utiliser les paramètres de démarrage des projets de ma solution. Lorsque je fais un clic droit sur le projet, je peux naviguer vers Debug->Start New Instance, qui démarre l'application avec le débogueur.

Mais je voudrais démarrer une nouvelle instance sans débogueur. Est-ce possible ?

6 votes

J'ai lancé une pétition pour que cette fonctionnalité soit ajoutée à Visual Studio sur leur forum UserVoice. Obtenir des votes sur cette fonctionnalité est peut-être la meilleure chance de la voir implémentée. visualstudio.uservoice.com/forums/121579-visual-studio/

17voto

Mahin Points 2534

Si vous êtes intéressé par une solution permanente, j'ai écrit une petite macro pour cette tâche. Elle fait les choses suivantes :

  1. Obtient le projet sélectionné actuel (il utilisera le premier projet sélectionné, si vous avez sélectionné plusieurs projets).
  2. Sauvegarde le projet de démarrage en cours
  3. Définit le projet sélectionné actuel comme projet de démarrage et exécute le projet sélectionné actuel en mode "Démarrage sans débogage".
  4. Restaure le projet de démarrage initial comme projet de démarrage.

Vous trouverez ci-dessous la Macro que j'ai écrite et la procédure à suivre pour la réaliser.

Comment écrire Macro : La première chose à faire est d'aller dans Visual Studio Tools --> Macros --> Macro Explorer. Une fois que vous avez obtenu cela, faites un clic droit sur MyMacros et créez un nouveau module (je l'ai appelé CollapseAll).

Maintenant, éditez le nouveau module (double-cliquez dessus), effacez tout ce qui s'y trouve et collez-y ces éléments.

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

Comment lier une macro à un raccourci clavier : Pour ce faire, vous devez aller dans Outils-->Options-->Environnement-->Clavier. Choisissez votre macro dans la liste de la boîte avec tous les éléments VS par défaut (rappelez-vous qu'elle sera là comme MyMacros.Module1.RunSelectedWithoutDebug), puis assignez-lui une combinaison de touches ou un accord et enregistrez.

Note : La quatrième étape crée un problème et génère une boîte de message ennuyeuse disant : Le build doit être arrêté pour modifier la propriété de la solution. Arrêter la construction ? Ok ou Annuler. J'avais l'habitude de cliquer sur Ok pour le moment. Si vous n'avez pas de problème si la macro définit le projet sélectionné actuel comme projet de démarrage, veuillez commenter la dernière ligne de la macro Prop.Value = PrevStartup en mettant ' au début de la ligne. Maintenant la boîte de message n'apparaîtra pas.

Je me penche sur la question et je posterai la macro mise à jour une fois que j'aurai résolu le problème (si je peux :) ).

1 votes

Dommage que les macros soient terminées.

17voto

xhafan Points 544

Ajouter VSCommandes dans Visual Studio, cliquez avec le bouton droit de la souris sur un projet -> Debug -> Démarrer sans débogage

1 votes

Malheureusement, il n'est pas disponible pour VS 2008 :(

1 votes

Le développement de l'extension VSCommands pour VS2015 semble abandonné.

8voto

Alex Dresko Points 1604

Je viens de mettre en place cette macro. C'est une combinaison de plusieurs snippets que j'ai trouvé sur l'interweb. Si le projet est configuré pour exécuter la sortie par défaut du projet, il la trouvera et l'exécutera. S'il est configuré pour exécuter un programme spécifique, il l'exécutera. Cette macro ne compilera PAS non plus votre application, vous devrez donc vous assurer qu'elle a été compilée avant d'exécuter la macro. En même temps, cette macro ne souffre pas du problème mentionné dans la macro de Mahin ci-dessus.

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

0 votes

Super ! J'aime le fait qu'il n'essaie pas de changer le projet de démarrage (ce qui ne fonctionne pas si vous êtes déjà en train de déboguer).

0 votes

Cette dose ne fonctionne pas avec les projets MVC pour une raison quelconque. Il lance NUnit pour moi. Avez-vous une idée de la façon dont je peux le faire fonctionner ?

0 votes

@unknownt Pourriez-vous essayer de déboguer la macro pour déterminer le chemin emprunté ? Fournissez également les valeurs des variables associées à ce chemin.

4voto

Micz Points 41

Voici le moyen de résoudre le problème lié à la macro de Mahin

Description du problème : La quatrième étape crée un problème et génère une boîte de message ennuyeuse disant : La construction doit être arrêtée pour changer la propriété de la solution. Arrêter la construction ? Ok ou Annuler.

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

Profitez-en !

3voto

rahul Points 84185

Utilisez Démarrer sans déboguer dans le menu Debug, ou

Ctrl + F5

ou vous pouvez modifier le fichier web.config du projet :

<compilation debug="false"/>

6 votes

Cela va permettre de lancer tous les projets, pas seulement un.

1 votes

@MarkSeemann En fait, il va commencer. uniquement le projet qui a été défini comme StartUp .

2 votes

@informatik01 mais nous avons plusieurs projets en cours de démarrage et nous voulons en exécuter un de temps en temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X