Я хотел бы иметь разную степень детализации для проекта msbuild, вызываемого из командной строки, и тех, которые вызываются задачей MSBuild из проекта. Например:
Внутри my.proj:
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
В командной строке:
msbuild /v:d my.proj
теперь, когда задача MSBuild строит файлы .csproj, она также делает это с подробным описанием. Однако я бы хотел построить его с минимальным количеством подробностей.
Я знаю, что можно вызвать msbuild вручную следующим образом:
<Target Name=Foo>
<Exec Command="msbuild /v:m a.csproj"/>
<Exec Command="msbuild /v:m b.csproj"/>
<Exec Command="msbuild /v:m c.csproj"/>
</Target>
или на практике
<Target Name=Foo>
<Exec Command="msbuild /v:m %(Projectlist.Identity)"/>
</Target>
, и это, конечно, работает хорошо, но тогда я больше не могу получить функциональность переключателя BuildInParallel
( Я не думаю, что можно вызвать msbuild из командной строки с несколькими проектами без их включения в решение?)
Обновление
Я выбрал вариант Ludwo: в основном создать настраиваемый регистратор, который содержит два ConsoleLogger в качестве члена . Один из них имеет подробность, передаваемую в командной строке, другой - «минимальный». Регистратор регистрирует все события и передает их одному из регистраторов в зависимости от того, создается файл csproj в данный момент или нет. Вывод выглядит как обычно, за исключением того, что он не включает тысячи строк из файлов csproj.