Обработка командной строки должна быть такой же, поэтому происходит что-то еще. Когда я пытаюсь это:
class Program {
[STAThread]
static void Main(String[] args) {
Console.WriteLine("Have {0} arguments", args.Length);
for (int i = 0; i < args.Length; ++i) {
Console.WriteLine("{0}: {1}", i, args[i]);
}
}
}
и затем из разных мест я получаю 100% непротиворечивые результаты, единственный способ "объединить" аргументы - заключить их в кавычки в командной строке (которая специально предназначена для того, чтобы у вас были аргументы, содержащие пробел см. последний пример ниже):
PS C:\...\bin\Debug> .\ConsoleApplication1.exe one two three
Have 3 arguments
0: one
1: two
2: three
PS C:\...\bin\Debug> pushd ..\release
PS C:\...\bin\Release> .\ConsoleApplication1.exe one two three
Have 3 arguments
0: one
1: two
2: three
PS C:\...\bin\Release> pushd ..\..\obj\debug
PS C:\...\obj\Debug> .\ConsoleApplication1.exe one two three
Have 3 arguments
0: one
1: two
2: three
PS C:\...\obj\Debug> pushd ..\release
PS C:\...\obj\Release> .\ConsoleApplication1.exe one two three
Have 3 arguments
0: one
1: two
2: three
PS C:\...\obj\Release> .\ConsoleApplication1.exe -file test.txt
Have 2 arguments
0: -file
1: test.txt
PS C:\...\obj\Release> .\ConsoleApplication1.exe "-file test.txt"
Have 1 arguments
0: -file test.txt
Дополнительно Хотя запуск из командной строки позволяет легко увидеть, что передается, может быть трудно проверить, когда другое приложение запускает ваше. Однако такие инструменты, как Process Explorer , покажут командную строку, используемую для запуска программы (дважды щелкните процесс и посмотрите на вкладку изображения).