Jak uruchomić program z argumentami podczas debugowania?

Chcę debugować program w Visual Studio 2008. Problem polega na tym, że kończy się, jeśli nie otrzyma argumentów. Jest to z głównej metody:

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);
}

Nie chcę tego komentować, a potem wracać podczas kompilacji. Jak uruchomić program z argumentami podczas debugowania? Jest ustawiony jako projekt startowy.

Author: senshin, 2011-01-25

6 answers

Przejdź do Project-><Projectname> Properties. Następnie kliknij kartę Debug i wypełnij swoje argumenty w polu tekstowym o nazwie Command line arguments.

 175
Author: Øyvind Bråthen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-25 08:02:21

Sugerowałbym użycie dyrektyw Jak poniżej:

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

            Console.WriteLine(args[0]);
        }
Powodzenia!
 54
Author: Homam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 08:08:06

Sugerowałbym użycie testów jednostkowych.

W aplikacji wykonaj następujące przełączniki w Program.cs:

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

I to samo dla static Main(string[] args).

Lub alternatywnie użyć Friend Assemblies dodając

[assembly: InternalsVisibleTo("TestAssembly")]

Do twojego AssemblyInfo.cs.

Następnie utwórz projekt testu jednostkowego i test, który wygląda trochę tak:

[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);
        }
    }
}

W ten sposób możesz, w sposób automatyczny, przetestować wiele wejść argumentów bez konieczności edycji kodu lub zmiany ustawienia menu co czas sprawdzić coś innego.

 5
Author: dav_i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-12 11:50:46

Przyszedłem na tę stronę, ponieważ mam poufne informacje w parametrach wiersza poleceń i nie chciałem, aby były przechowywane w repozytorium kodu. Używałem systemowych zmiennych środowiskowych do przechowywania wartości, które mogą być ustawiane na każdej maszynie kompilacyjnej lub rozwojowej w razie potrzeby dla każdego celu. Rozszerzenie zmiennych środowiskowych działa świetnie w procesach wsadowych powłoki, ale nie w Visual Studio.

Opcje Startowe Visual Studio:

Opcje Startowe Visual Studio

Jednak Wizualne Studio nie zwróci wartości zmiennej, ale nazwę zmiennej.

przykład problemu:

Przykład błędu w Visual Studio

Moim ostatecznym rozwiązaniem po wypróbowaniu kilku tutaj na S. O. było napisanie szybkiego wyszukiwania zmiennej środowiskowej w moim procesorze argumentów. Dodałem sprawdzanie % w wartości zmiennej przychodzącej, a jeśli zostanie znaleziona, wyszukaj zmienną środowiskową i zastąp wartość. Działa to w Visual Studio i w moim środowisku budowania.

foreach (string thisParameter in args)
            {
                if (thisParameter.Contains("="))
                {
                    string parameter = thisParameter.Substring(0, thisParameter.IndexOf("="));
                    string value = thisParameter.Substring(thisParameter.IndexOf("=") + 1);

                    if (value.Contains("%"))
                    {   //Workaround for VS not expanding variables in debug
                        value = Environment.GetEnvironmentVariable(value.Replace("%", ""));
                    }

To pozwala mi używać tej samej składni w przykładowych plikach wsadowych oraz w debugowaniu za pomocą programu Visual Studio. Brak informacji o koncie lub adresów URL zapisanych w GIT.

przykład użycia W Serii

Przykład Pliku Wsadowego

 3
Author: Billy Willoughby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-18 13:55:24

Dla Visual Studio Code :

  • Otwórz launch.json plik
  • Dodaj args do swojej konfiguracji:

"args": ["jakiś argument", "Inny"],

 1
Author: Alamakanambra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-10 10:57:07

Dla aplikacji konsoli. NET Core można to zrobić na dwa sposoby - z launchsettings.json lub menu Właściwości.

Launchsettings.json

Tutaj wpisz opis obrazka

Lub kliknij prawym przyciskiem myszy projekt > Właściwości > karta debugowania po lewej stronie

Patrz "Argumenty Aplikacji:"

  • to jest "" (spacja) rozdzielone, nie ma potrzeby stosowania przecinków. zacznij pisać. każda spacja "" będzie reprezentować nowy parametr wejściowy.
  • (wszelkie zmiany, które tu wprowadzicie, znajdą odzwierciedlenie w launchsettings.plik json...)

Tutaj wpisz opis obrazka

 0
Author: Robert Green MBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-14 05:01:53