У меня была такая же проблема после обновления Xcode до 9.3. Я исправил проблему, просто очистив папку сборки. Вы можете сделать это с помощью Command-Option-Shift-K или в меню параметров «Продукт» -> «Очистить» (см. Скриншот)
Не ответ, но вот некоторые предыстория и пояснения Джеффри Тана, Служба поддержки сообщества Microsoft Online (07.12.2006):
Примечание: это не не кодовое поражение но по замыслу, поскольку обратная косая черта обычно используется, чтобы избежать определенных особый персонаж. Кроме того, это алгоритм такой же, как у команды Win32 функция синтаксического анализа строковых аргументов CommandLineToArgvW. См. Примечания раздел ниже: http://msdn2.microsoft.com/en-us/library/bb776391.aspx
Также ссылается на метод FX Environment.GetCommandLineArgs для дальнейшего объяснения поведения обработки косой черты.
Лично я считаю, что это занудство, и удивлен, что меня это не укусило раньше. Или, может быть, я знаю и не знаю? Однако слепая замена кавычек на косые черты не кажется мне решением. Я голосую за этот вопрос, потому что это открыло мне глаза.
Мне нравится ваша идея:
_path = args[i].Replace("\"", @"\");
Она чистая и не будет иметь никакого эффекта, если проблема не существует.
У меня было такое же разочарование. Мое решение заключалось в использовании регулярных выражений. Мой ожидаемый ввод - это список путей, некоторые из которых можно цитировать. Вышеупомянутый кладж не работает, если не указаны все последние аргументы.
// Capture quoted string or non-quoted strings followed by whitespace
string exp = @"^(?:""([^""]*)""\s*|([^""\s]+)\s*)+";
Match m = Regex.Match(Environment.CommandLine, exp);
// Expect three Groups
// group[0] = entire match
// group[1] = matches from left capturing group
// group[2] = matches from right capturing group
if (m.Groups.Count < 3)
throw new ArgumentException("A minimum of 2 arguments are required for this program");
// Sort the captures by their original postion
var captures = m.Groups[1].Captures.Cast<Capture>().Concat(
m.Groups[2].Captures.Cast<Capture>()).
OrderBy(x => x.Index).
ToArray();
// captures[0] is the executable file
if (captures.Length < 3)
throw new ArgumentException("A minimum of 2 arguments are required for this program");
Может ли кто-нибудь увидеть более эффективное регулярное выражение?