Я ни в коем случае не эксперт MSBuild, но я считаю, что это сложнее, чем сказать, что NuGet интегрирован с MSBuild. Я не верю, что MSBuild 15 обладает встроенными знаниями NuGet, даже целью восстановления, что можно подтвердить, создав пустой файл проекта MSBuild <Project></Project>
. Запустите msbuild /t:restore
и увидите сообщение об ошибке, в котором говорится, что нет целевого восстановления.
Следовательно, цель восстановления на самом деле не встроена в msbuild.exe, а определена в файле целей, который использует ваш проект. Поэтому для определения цели пакета необходимо импортировать другой целевой файл.
С менее теоретической, более практичной, точки зрения, файлы csproj «старого» стиля (которые импортируют Microsoft.Common.CSharp.targets
или что-то в этом роде) не определяют цель пакета, но новые проекты в стиле SDK делают .
Поэтому, чтобы иметь возможность упаковать из msbuild, вам нужно перейти на проекты в стиле SDK. Некоторые люди ошибочно полагают, что для использования проектов в стиле SDK необходимо настроить таргетинг на .NET Core, что неверно. Проекты в стиле SDK стали доступны одновременно с .NET Core, а для проектов .NET Core нужны проекты в стиле SDK, но вы все равно можете ориентироваться на .NET Framework.