Questions
1) Pour la construction d'un nouveau csproj netstandard bibliothèque à partir de la ligne de commande, devrais-je appeler le dotnet cli (par exemple dotnet restaurer dotnet construire) ou utiliser msbuild (par exemple msbuild ExampleNetstandard.sln).
Les deux beaux-comme actuellement, dotnet
est construit au sommet d' msbuild
. C'est donc une question de goût. Vous pouvez aussi appeler msbuild tâches en utilisant dotnet CLI. (dotnet msbuild <msbuild_arguments>
)
Au début, tous les .NET essentiel était seulement en dotnet
et non pas en msbuild
. C'était lourd comme beaucoup de choses qui a déjà été construit sur msbuild
ne fonctionnait pas bien avec dotnet
de la zone (par exemple, Xamarin). Donc, ils ont déplacé les choses à l' msbuild
et de construire dotnet
sur le haut de l' msbuild
.
dotnet
a certaines fonctionnalités qui ne sont pas en msbuild
, comme dotnet new
. À mon avis, dotnet
est plus facile à utiliser que msbuild
, donc je préfère dotnet
.
Pour rendre cela plus clair, j'ai ajouté une comparaison entre msbuild
et dotnet
à la fin de mon post.
2) Aussi, ma compréhension est qu'il existe deux versions de msbuild, on a construit sur la totalité du cadre et l'autre ciblant dotnet de base. Est-ce correct? Dois-je toujours utiliser la version dotnet
Il y a un seul msbuild. dotnet interface de ligne de commande à l'aide de msbuild:
Depuis la CLI utilise MSBuild que son moteur de construction, nous recommandons que ces parties de l'outil être écrit comme la coutume MSBuild des objectifs et des tâches, car ils peuvent alors participer à l'ensemble du processus de construction
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
L'ancienne version de l' msbuild
a été dépourvues de la .NET de soutien de Base. Peut-être que c'est l'autre version ;)
Je suis d'accord c'est source de confusion, car il était très différent il y a quelques mois.
3) Est dotnet cli autonome ou nécessite-t-il msbuild pour être installé?. Par exemple, lorsque vous installez le dotnet SDK est-ce à installer msbuild ainsi? Si oui, est-ce différent de la version qui est installé avec vs2017?
Je n'étais pas sûr de cela, mais il était facile de test. J'ai supprimé toutes les msbuild.exe et il fonctionnait toujours. Trouvé, c'est à l'aide de la msbuild.dll dans le répertoire du SDK.
par exemple, "C:\Program Files\dotnet\sdk\1.0.3\MSBuild.dll"
Si vous supprimer un, il est une preuve:
msbuild.dll est en fait msbuild.exe comme vous pouvez le voir dans les propriétés:
Un peu de code
Si vous regardez dans le code de la dotnet CLI, vous pouvez le voir, c'est de générer msbuild
`commandes.
Par exemple dotnet restore
, est créé par l' RestoreCommand
classe à l'intérieur de dotnet CLI.
Une dépouillé version:
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();
}
...
}
Vous pouvez voir dotnet restore
est juste appelant msbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal
Si vous cochez RestoreCommand
du temps d' dotnet v1.0.0 RC2
, il n'était pas à l'aide de msbuild
mais appelait nuget
directement.
return NuGet3.Restore(args, quiet);
Correspondance entre dotnet
et msbuild
J'ai fait une correspondance entre l' dotnet
et msbuild
. Il n'est pas complet, mais les commandes importantes sont là.
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: Ajout/suppression de paquets de csproj, aussi limitée nuget.exe, voir la comparaison
PS pas de démarques des tables dans la :(