Ответ 1
Этот алгоритм является общим и исходит из относительно авторитетного источника (блоги MSDN).
Вопрос. Учитывая имя файла и произвольный список строк, существует ли канонический способ создания единой командной строки, так что Environment.GetCommandLineArgs (и С# void main(String[] args)
/VB Sub Main(args() As String)
) вернет тот же список строк?
Фон: способ, которым .NET разбивает командную строку на аргументы, удивительно сложный, например:
Если знак двойной кавычки следует за двумя или четным числом обратных косых черт, каждая последующая обратная косая черта заменяется одной обратной косой чертой, а знак двойной кавычки удаляется. Если знак двойной кавычки следует за нечетным числом обратных косых черт, включая только одну, каждая предыдущая пара заменяется одной обратной косой чертой, а оставшаяся обратная косая черта удаляется; однако в этом случае знак двойной кавычки не удаляется.
Многие пробовали простой "поместить каждый аргумент в двойные кавычки и избежать существующих двойных кавычек" и сбой, как только один из аргументов содержит обратную косую черту. В этой статье возникли различные вопросы по StackOverflow, например:
Этот алгоритм является общим и исходит из относительно авторитетного источника (блоги MSDN).
Несколько лет назад Microsoft объявила, что собирается выпустить синтаксический анализатор командной строки на CodePlex (вместо System.Shell.CommandLine, который должен был поставляться с .NET Framework 4). Я не уверен, действительно ли они это сделали. Если вы хотите, чтобы синтаксический анализатор, разработанный сотрудником Microsoft, просмотрел cmdline. Также вы можете искать анализы командной строки в CodePlex.
Вы также можете попробовать Mono.Options, который достаточно мощный.