Вопросов
1) Чтобы создать новую библиотеку csproj netstandard из командной строки, следует ли мне вызывать dotnet cli (например, dotnet restore dotnet build) или использовать msbuild (например, msbuild ExampleNetstandard.sln).
Оба работают нормально, поскольку в настоящее время dotnet
построены поверх msbuild
. Так что дело вкуса. Вы также можете вызывать задачи msbuild с помощью интерфейса командной строки dotnet. ( dotnet msbuild <msbuild_arguments>
)
Вначале все, что связано с ядром .NET, было только внутри, dotnet
а не внутри msbuild
. Это было громоздко, поскольку многие вещи, которые уже были созданы, msbuild
не работали хорошо dotnet
из коробки (например, Xamarin). Итак, они переместили материал msbuild
и надстроили dotnet
его msbuild
.
dotnet
есть некоторые функции, которых нет msbuild
, например dotnet new
. На мой взгляд, dotnet
проще в использовании msbuild
, поэтому я предпочитаю dotnet
.
Чтобы было понятнее, я добавил сравнение между msbuild
и dotnet
в конце моего сообщения.
2) Кроме того, насколько я понимаю, существует две версии msbuild: одна построена на полной платформе, а другая нацелена на ядро dotnet. Это верно? Должен ли я всегда использовать версию dotnet
Есть только один msbuild. dotnet CLI использует msbuild:
Поскольку CLI использует MSBuild в качестве механизма сборки, мы рекомендуем, чтобы эти части инструмента были написаны как пользовательские цели и задачи MSBuild, поскольку они могут затем участвовать в общем процессе сборки.
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
В более старой версии не msbuild
было поддержки .NET Core. Может это другая версия;)
Я согласен, это сбивает с толку, так как несколько месяцев назад все было по-другому.
3) Является ли dotnet cli автономным или требуется установка msbuild ?. Например, при установке пакета SDK для dotnet это также устанавливает msbuild? Если да, отличается ли эта версия от версии, установленной с vs2017?
Я не был уверен в этом, но это было легко проверить. Я удалил весь файл msbuild.exe, и он все еще работал. Выяснилось, что он использует msbuild.dll в папке SDK. например, "C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ MSBuild.dll"
Если вы удалите его, будет доказательство:
msbuild.dll на самом деле является msbuild.exe, как вы можете видеть в свойствах:
Какой-то код
Если вы посмотрите на код интерфейса командной строки dotnet, вы увидите, что он генерирует msbuild
команды.
Например dotnet restore
, создается RestoreCommand
классом внутри интерфейса командной строки dotnet .
Урезанная версия:
public class RestoreCommand : MSBuildForwardingApp
{
...
public static RestoreCommand FromArgs(string[] args, string msbuildPath = null)
{
var result = parser.ParseFrom("dotnet restore", args);
...
var msbuildArgs = new List<string>
{
"/NoLogo",
"/t:Restore",
"/ConsoleLoggerParameters:Verbosity=Minimal"
};
...
return new RestoreCommand(msbuildArgs, msbuildPath);
}
public static int Run(string[] args)
{
RestoreCommand cmd;
try
{
cmd = FromArgs(args);
}
catch (CommandCreationException e)
{
return e.ExitCode;
}
return cmd.Execute();
}
...
}
Вы можете видеть dotnet restore
, просто звонитmsbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal
Если вы проверяете RestoreCommand
времяdotnet v1.0.0 RC2
, он не использовал, msbuild
а звонил nuget
напрямую.
return NuGet3.Restore(args, quiet);
Сопоставление между dotnet
иmsbuild
Я сделал сопоставление между dotnet
и msbuild
. Он не полный, но важные команды есть.
Dotnet | Msbuild | Remarks
-----------------------|--------------------------------------------|---------------------------------
Add | |
-----------------------|--------------------------------------------|---------------------------------
Build | /t:Build |
-----------------------|--------------------------------------------|---------------------------------
Build --no-incremental | /t:Rebuild |
-----------------------|--------------------------------------------|---------------------------------
Clean | /t:clean |
-----------------------|--------------------------------------------|---------------------------------
Complete | |
-----------------------|--------------------------------------------|---------------------------------
Help | | Help!
-----------------------|--------------------------------------------|---------------------------------
List | |
-----------------------|--------------------------------------------|---------------------------------
Migrate | - |
-----------------------|--------------------------------------------|---------------------------------
Msbuild | | Forwarding all
-----------------------|--------------------------------------------|---------------------------------
New | |
-----------------------|--------------------------------------------|---------------------------------
Nuget | | *
-----------------------|--------------------------------------------|---------------------------------
Pack | /t:pack |
-----------------------|--------------------------------------------|---------------------------------
Publish | /t:publish |
-----------------------|--------------------------------------------|---------------------------------
Remove | |
-----------------------|--------------------------------------------|---------------------------------
Restore | /NoLogo /t:Restore |
/ConsoleLoggerParameters:Verbosity=Minimal |
-----------------------|--------------------------------------------|---------------------------------
Run | /nologo /verbosity:quiet |
/p:Configuration= /p:TargetFramework |
-----------------------|--------------------------------------------|---------------------------------
Sln | | Not in msbuild
-----------------------|--------------------------------------------|---------------------------------
Store | /t:ComposeStore |
-----------------------|--------------------------------------------|---------------------------------
Test | /t:VSTest /v:quiet /nologo |
-----------------------|--------------------------------------------|---------------------------------
Vstest | | Forwarding to vstest.console.dll
*
dotnet nuget: добавление / удаление пакетов в csproj, также ограниченный набор nuget.exe, см. сравнение
PS нет таблиц уценки в SO :(
msbuild
не восстанавливает пакеты NuGet, поэтому я не думаю, что вы можете сказать «оба в порядке», не добавив немного контекста. Остальные детали выглядят неплохо.