Introducción de alto nivel de los cambios en las herramientas de .NET CoreHigh-level overview of changes in the .NET Core tools

En este documento se describen los cambios asociados con el traslado de project.json a MSBuild y al sistema del proyecto csproj con información sobre los cambios realizados en las capas de las herramientas de .NET Core y en la implementación de los comandos de la CLI.This document describes the changes associated with moving from project.json to MSBuild and the csproj project system with information on the changes to the layering of the .NET Core tooling and the implementation of the CLI commands. Estos cambios se han producido con la versión de .NET Core SDK 1.0 y Visual Studio 2017 de 7 de marzo de 2017 (vea el anuncio), pero se han implementado inicialmente con la versión de .NET Core SDK Preview 3.These changes occurred with the release of .NET Core SDK 1.0 and Visual Studio 2017 on March 7, 2017 (see the announcement) but were initially implemented with the release of the .NET Core SDK Preview 3.

Abandono de project.jsonMoving away from project.json

El cambio más importante en las herramientas para .NET Core es ciertamente el abandono de project.json en favor de csproj como sistema de proyectos.The biggest change in the tooling for .NET Core is certainly the move away from project.json to csproj as the project system. Las últimas versiones de las herramientas de línea de comandos no admiten archivos project.json.The latest versions of the command-line tools don't support project.json files. Esto significa que no puede utilizarse para compilar, ejecutar o publicar bibliotecas y aplicaciones basadas en project.json.That means that it cannot be used to build, run, or publish project.json based applications and libraries. Para utilizar esta versión de las herramientas, migre los proyectos existentes o inicie otros nuevos.To use this version of the tools, migrate your existing projects or start new ones.

Como parte de este proceso, el motor de compilación personalizado que se desarrolló para compilar proyectos de project.json se ha reemplazado por un motor de compilación maduro y totalmente compatible llamado MSBuild.As part of this move, the custom build engine that was developed to build project.json projects was replaced with a mature and fully capable build engine called MSBuild. MSBuild es un motor conocido en la comunidad de .NET.MSBuild is a well-known engine in the .NET community. Ha sido una tecnología clave desde la primera versión de la plataforma.It has been a key technology since the platform's first release. Puesto que debe compilar aplicaciones .NET Core, MSBuild se ha trasladado a .NET Core y puede utilizarse en cualquier plataforma donde se ejecute .NET Core.Because it needs to build .NET Core applications, MSBuild has been ported to .NET Core and can be used on any platform that .NET Core runs on. Una de las promesas principales de .NET Core es una pila de desarrollo multiplataforma, y nos hemos asegurado de que esta transición no rompa esa promesa.One of the main promises of .NET Core is that of a cross-platform development stack, and we have made sure that this move does not break that promise.

Sugerencia

Si no está familiarizado con MSBuild y quiere aprender más al respecto, puede empezar por leer el artículo Conceptos de MSBuild.If you are new to MSBuild and would like to learn more about it, you can start by reading the MSBuild concepts article.

Las capas de herramientasThe tooling layers

Con el cambio en el motor de compilación y el abandono del sistema del proyecto existente, es lógico que surjan algunas preguntas.With the change in build engine and the move away from the existing project system, some questions naturally follow. ¿Alguno de estos cambios modifica la "disposición en capas" del ecosistema de herramientas de .NET Core?Do any of these changes change the overall "layering" of the .NET Core tooling ecosystem? ¿Hay nuevos bits y componentes?Are there new bits and components?

Comencemos con un repaso rápido de la disposición en capas de Preview 2, como se muestra en la siguiente imagen:Let's start with a quick refresher on Preview 2 layering as shown in the following picture:

Arquitectura de alto nivel de herramientas de Preview 2

La disposición en capas de las herramientas en la Versión preliminar 2 es sencilla.The layering of the tools in Preview 2 is straightforward. En el fondo, la base es la CLI de .NET Core.At the bottom, the foundation is the .NET Core CLI. El resto de herramientas de mayor nivel, como Visual Studio o Visual Studio Code, dependen de la CLI, y se basan en esta, para compilar proyectos, restaurar dependencias, etc.All other, higher-level tools, such as Visual Studio or Visual Studio Code, depend and rely on the CLI to build projects, restore dependencies, and so on. Por ejemplo, si se quisiera realizar una operación de restauración con Visual Studio, se llamaría al comando dotnet restore de la CLI.For example, if Visual Studio wanted to perform a restore operation, it would call into the dotnet restore command in the CLI.

Con el paso al nuevo sistema de proyecto, el diagrama anterior cambia:With the move to the new project system, the previous diagram changes:

Arquitectura de alto nivel del SDK 1.0.0 de .NET Core

La principal diferencia es que la CLI ya no es la base; este papel es ocupado ahora por el "componente de SDK compartido".The main difference is that the CLI is not the foundational layer anymore; this role is now filled by the "shared SDK component". Este componente de SDK compartido es un conjunto de destinos y tareas asociadas que son responsables de compilar el código y publicarlo, de empaquetar paquetes NuGet, etc.This shared SDK component is a set of targets and associated tasks that are responsible for compiling code, publishing it, packing NuGet packages, and so on. El SDK de .NET Core es código abierto y está disponible en GitHub en el repositorio de SDK.The .NET Core SDK is open-source and is available on GitHub on the SDK repo.

Nota

Un "destino" es un término de MSBuild que indica una operación con nombre que puede invocar MSBuild.A "target" is an MSBuild term that indicates a named operation that MSBuild can invoke. Normalmente está unido a una o varias tareas que ejecutan alguna lógica que se supone que debe hacer el destino.It is usually coupled with one or more tasks that execute some logic that the target is supposed to do. MSBuild admite muchos destinos predefinidos, como Copy o Execute; también permite a los usuarios escribir sus propias tareas mediante código administrado y definir destinos para ejecutar esas tareas.MSBuild supports many ready-made targets such as Copy or Execute; it also allows users to write their own tasks using managed code and define targets to execute those tasks. Para obtener más información, consulte Tareas de MSBuild.For more information, see MSBuild tasks.

Todos los conjuntos de herramientas consumen ahora el componente de SDK compartido y sus destinos, incluida la CLI.All the toolsets now consume the shared SDK component and its targets, CLI included. Por ejemplo, Visual Studio 2019 no llama al comando dotnet restore para restaurar las dependencias de los proyectos de .NET Core.For example, Visual Studio 2019 doesn't call into the dotnet restore command to restore dependencies for .NET Core projects. En su lugar, usa el destino "Restauración" directamente.Instead, it uses the "Restore" target directly. Como son destinos de MSBuild, también puede usar MSBuild sin procesar para ejecutarlos mediante el comando dotnet msbuild.Since these are MSBuild targets, you can also use raw MSBuild to execute them using the dotnet msbuild command.

Comandos de la CLICLI commands

El componente de SDK compartido implica que la mayoría de los comandos de la CLI existentes se han vuelto a implementar como tareas y destinos de MSBuild.The shared SDK component means that the majority of existing CLI commands have been reimplemented as MSBuild tasks and targets. ¿Qué significa esto para los comandos de la CLI y el uso del conjunto de herramientas?What does this mean for the CLI commands and your usage of the toolset?

Desde una perspectiva del uso, no cambia la forma de usar la CLI.From a usage perspective, it doesn't change the way you use the CLI. La CLI sigue teniendo los comandos principales que existían en la versión preliminar 2 de .NET Core 1.0:The CLI still has the core commands that existed in the .NET Core 1.0 Preview 2 release:

  • new
  • restore
  • run
  • build
  • publish
  • test
  • pack

Estos comandos todavía hacen lo que se espera que hagan (crear un nuevo proyecto, compilarlo, publicarlo, empaquetarlo, etc.).These commands still do what you expect them to do (new up a project, build it, publish it, pack it, and so on). Se puede consultar la pantalla de ayuda del comando (mediante dotnet <command> --help) o la documentación de este sitio para familiarizarse con su comportamiento.You can consult either the command's help screen (using dotnet <command> --help) or documentation on this site to get familiar with their behavior.

Desde una perspectiva de la ejecución, los comandos de la CLI toman sus parámetros y construyen una llamada a MSBuild "sin procesar" que establece las propiedades necesarias y ejecuta el destino deseado.From an execution perspective, the CLI commands take their parameters and construct a call to "raw" MSBuild that sets the needed properties and runs the desired target. Para ilustrar mejor esto, considere el siguiente comando:To better illustrate this, consider the following command:

dotnet publish -o pub -c Release

Este comando publica una aplicación en una carpeta pub mediante la configuración de "Versión".This command publishes an application into a pub folder using the "Release" configuration. Internamente, este comando se traduce en la siguiente invocación de MSBuild:Internally, this command gets translated into the following MSBuild invocation:

dotnet msbuild -t:Publish -p:OutputPath=pub -p:Configuration=Release

Las excepciones destacadas a esta regla son los comandos new y run.Notable exceptions to this rule are the new and run commands. No se han implementado como destinos de MSBuild.They have not been implemented as MSBuild targets.

Restauración implícitaImplicit restore

No es necesario ejecutar dotnet restore porque lo ejecutan implícitamente todos los comandos que necesitan que se produzca una restauración, como dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish y dotnet pack.You don't have to run dotnet restore because it's run implicitly by all commands that require a restore to occur, such as dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish, and dotnet pack. Para deshabilitar la restauración implícita, use la opción --no-restore.To disable implicit restore, use the --no-restore option.

El comando dotnet restore sigue siendo válido en algunos escenarios donde tiene sentido realizar una restauración explícita, como las compilaciones de integración continua en Azure DevOps Services o en los sistemas de compilación que necesitan controlar explícitamente cuándo se produce la restauración.The dotnet restore command is still useful in certain scenarios where explicitly restoring makes sense, such as continuous integration builds in Azure DevOps Services or in build systems that need to explicitly control when the restore occurs.

Para obtener información sobre cómo administrar fuentes de NuGet, vea la documentación de dotnet restore.For information about how to manage NuGet feeds, see the dotnet restore documentation.