Как передать многозначные аргументы, содержащие запятые, в свойство в инструменте командной строки dotnet?
Я хочу запустить команду, которая включает следующее:
dotnet test /p:Exclude=\"*Test*,*Requirement*\"
Вышеупомянутая команда не является полной, но ее достаточно, чтобы вызвать ошибку парсинга. Я использую пакет NuGet Coverlet в своем проекте C# и хочу исключить все проекты, соответствующие этим именам.
Я читал здесь и здесь, что заключение аргументов в \"экранированные кавычки \" должно сработать, но это не работает. Я получил:
MSBUILD : error MSB1006: Property is not valid.
Switch: *Requirement*\
Использование обычных неэкранированных кавычек дает такое же сообщение об ошибке:
dotnet test /p:Exclude="*Test*,*Requirement*"
Экранирование запятой дает то же сообщение об ошибке:
dotnet test /p:Exclude=*Test*\,*Requirement*
ПРИМЕЧАНИЕ. Приведенный выше пример может быть неправильным синтаксисом Coverlet. Пока это не имеет значения. Я просто хочу иметь возможность передавать список значений, разделенных запятыми, в один параметр. В нынешнем виде dotnet отвергает мой синтаксис задолго до того, как он достигнет Coverlet.
Я запускаю команды из PowerShell.
2 ответа
Оказывается, в PowerShell %2c
интерпретируется как запятая. Итак, я могу напечатать это:
dotnet test /p:Exclude=*Test*%2c*Requirement*
Или попробуйте это, он исключит любой проект, который начинается с ProjectX, и любой проект, в котором есть Test.
dotnet test /p:Exclude=\"[ProjectX.*]*,[*Test*]*\"