specify run prod dotnet compile cli msbuild visual-studio-2017 csproj dotnet-cli

msbuild - prod - dotnet run



RelaciĆ³n entre el dotnet cli y el nuevo vs2017 msbuild (1)

Preguntas

1) Para construir una nueva biblioteca csproj netstandard desde la línea de comandos, debería llamar a dotnet cli (por ejemplo, dotnet restore dotnet build) o usar msbuild (por ejemplo msbuild ExampleNetstandard.sln).

Ambos funcionan bien ya que actualmente dotnet está construido sobre msbuild . Entonces es cuestión de gustos. También puede llamar a tareas de msbuild utilizando la CLI dotnet. ( dotnet msbuild <msbuild_arguments> )

Al principio, todo el núcleo de .NET estaba solo en dotnet y no en msbuild . Esto fue engorroso ya que muchas cosas que ya estaban construidas en msbuild no funcionaban bien con dotnet fuera de la caja (por ejemplo, Xamarin). Entonces movieron las cosas a msbuild y construyeron dotnet encima de msbuild .

dotnet tiene algunas características que no están en msbuild , como dotnet new . En mi opinión, dotnet es más fácil de usar que msbuild , así que prefiero dotnet .

Para que quede más claro, he agregado una comparación entre msbuild y msbuild al final de mi publicación.

2) Además, entiendo que hay dos versiones de msbuild, una construida en el marco completo y otra dirigida al núcleo dotnet. ¿Es esto correcto? ¿Debo usar siempre la versión dotnet?

Solo hay un msbuild. dotnet CLI está utilizando msbuild:

Dado que CLI usa MSBuild como su motor de compilación, recomendamos que estas partes de la herramienta se escriban como objetivos y tareas personalizadas de MSBuild, ya que pueden participar en el proceso de compilación general

https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility

La versión anterior de msbuild carecía del soporte de .NET Core. Tal vez esa es la otra versión;)

Estoy de acuerdo en que es confuso, ya que era muy diferente hace unos meses.

3) ¿Es dotnet cli independiente o requiere msbuild para ser instalado? Por ejemplo, cuando instala el SDK dotnet, ¿esto también instala msbuild? Si es así, ¿es diferente a la versión que se instala con vs2017?

No estaba seguro de esto, pero fue fácil de probar. He eliminado todos los msbuild.exe y todavía funcionó. Descubrí que está usando msbuild.dll en la carpeta SDK. por ejemplo, "C: / Archivos de programa / dotnet / sdk / 1.0.3 / MSBuild.dll"

Si elimina esa, hay una prueba:

msbuild.dll es en realidad msbuild.exe, como puede ver en las propiedades:

Un poco de código

Si observa el código de la CLI dotnet, puede ver que está generando comandos msbuild .

Por ejemplo, la dotnet restore RestoreCommand es creada por la clase RestoreCommand dentro de la CLI RestoreCommand .

Una versión despojada:

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(); } ... }

Puede ver que dotnet restore solo está llamando a msbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal

Si RestoreCommand en el momento de dotnet v1.0.0 RC2 , no estaba usando msbuild sino que estaba llamando a nuget directamente.

return NuGet3.Restore(args, quiet);

Mapeo entre msbuild y msbuild

Hice un mapeo entre msbuild y msbuild . No está completo, pero los comandos importantes están ahí.

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: Agregar / eliminar paquetes a csproj, también un conjunto limitado de nuget.exe, ver comparison

PS no hay tablas de rebajas en SO :(

Con el cambio de project.json al nuevo formato csproj introducido con VS2017, me cuesta entender la diferencia entre dotnet cli y el nuevo msbuild y cuándo usar uno sobre el otro.

1) Para construir una nueva biblioteca csproj netstandard desde la línea de comandos, debería llamar a dotnet cli (por ejemplo, dotnet restore dotnet build ) o usar msbuild (por ejemplo msbuild ExampleNetstandard.sln ).

2) Además, entiendo que hay dos versiones de msbuild , una construida en el marco completo y otra dirigida al dotnet core . ¿Es esto correcto? ¿Debo usar siempre la dotnet version

3) ¿Es dotnet cli independiente o requiere msbuild para ser instalado? Por ejemplo, cuando instala el SDK dotnet, ¿esto también instala msbuild? Si es así, ¿es diferente a la versión que se instala con vs2017?