70

Voglio eseguire il debug di un programma in Visual Studio 2008. Il problema è che si chiude se non ottiene argomenti. Questo è il metodo principale:Come si avvia un programma con argomenti durante il debug?

if (args == null || args.Length != 2 || args[0].ToUpper().Trim() != "RM") 
{ 
    Console.WriteLine("RM must be executed by the RSM."); 
    Console.WriteLine("Press any key to exit program..."); 
    Console.Read(); 
    Environment.Exit(-1); 
} 

Non voglio commentarlo e quindi rientrare durante la compilazione. Come posso avviare il programma con argomenti durante il debug? È impostato come Progetto di avvio.

+0

possibile duplicato di [Passaggio dei parametri della riga di comando con Visual Studio C#] (http://stackoverflow.com/questions/6475887/passing-command-line-parameters-with-visual-studio-c-sharp) – horns

+2

Possibile duplicato di [Debugging con i parametri della riga di comando in Visual Studio] (http://stackoverflow.com/questions/298708/debugging-with-command-line-parameters-in-visual-studio) –

risposta

130

Vai a Project-><Projectname> Properties. Quindi fare clic sulla scheda Debug e inserire gli argomenti nella casella di testo denominata Command line arguments.

+0

Gli argomenti possono (devono?) essere compilato nello spazio 'Command line arguments' separato (come si farebbe, usando la riga di comando). Non sono sicuro se ci sono altri modi, ma forse puoi aggiungerlo alla tua risposta. – d4Rk

+1

Ho cercato questa risposta per una settimana! Grazie! – bird2920

+0

Non dimenticare i segni del discorso attorno agli argomenti del comando contenenti spazi, che mi hanno catturato. – Dale

44

Io suggerirei di usare il directives come la seguente:

 static void Main(string[] args) 
     { 
#if DEBUG 
      args = new[] { "A" }; 
#endif 

      Console.WriteLine(args[0]); 
     } 

Buona fortuna!

+2

Entrambe le buone risposte, mi piacciono di più solo perché è più facile cambiare o fare riferimento (anche se non è necessariamente una seccatura che passa attraverso le proprietà: p, forse un clic extra del mouse o così) –

+0

Verificherò. Grazie. –

+3

Omho questa risposta è LA risposta. È un lavoro noioso modificare le impostazioni del progetto ogni volta che si desidera eseguire il debug con un nuovo set di parametri della riga di comando. Quando è scritto in questo modo, puoi semplicemente annotare tutti i casi di test che vuoi controllare e semplicemente attivare i commenti su ciascuno per attivarlo.Molto più veloce e si rivela particolarmente utile se sei improvvisamente di fronte a un Visual Studio in una lingua diversa (non quella con cui sei abituato a lavorare), che è esattamente il mio caso e sebbene conosca la lingua, la traduzione è terribile e anche un madrelingua non può affrontarlo correttamente. : D – rbaleksandar

4

Il mio suggerimento sarebbe quello di utilizzare Test unitari.

nell'applicazione utilizzata non i seguenti parametri in Program.cs:

#if DEBUG 
    public class Program 
#else 
    class Program 
#endif 

e lo stesso per static Main(string[] args).

, oppure utilizzare Friend Assemblies aggiungendo

[assembly: InternalsVisibleTo("TestAssembly")] 

al vostro AssemblyInfo.cs.

quindi creare un progetto di test di unità e di un test che sembra un po 'in questo modo:

[TestClass] 
public class TestApplication 
{ 
    [TestMethod] 
    public void TestMyArgument() 
    { 
     using (var sw = new StringWriter()) 
     { 
      Console.SetOut(sw); // this makes any Console.Writes etc go to sw 

      Program.Main(new[] { "argument" }); 

      var result = sw.ToString(); 

      Assert.AreEqual("expected", result); 
     } 
    } 
} 

questo modo è possibile, in modo automatizzato, testare più ingressi di argomenti senza dover modificare il codice o il cambiamento un'impostazione di menu ogni volta che si desidera controllare qualcosa di diverso.