Как передать многозначные аргументы, содержащие запятые, в свойство в инструменте командной строки 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*]*\"
Другие вопросы по тегам