Guía de .NET Core.NET Core Guide

Consulte los tutoriales de introducción para aprender a crear una aplicación .NET Core sencilla.Check out the "Getting Started" tutorials to learn how to create a simple .NET Core application. En unos minutos su primera aplicación estará lista y funcionando.It only takes a few minutes to get your first app up and running.

.NET Core es una plataforma de desarrollo de uso general de cuyo mantenimiento se encargan Microsoft y la comunidad .NET en GitHub..NET Core is a general purpose development platform maintained by Microsoft and the .NET community on GitHub. Es multiplataforma, admite Windows, macOS y Linux y puede usarse en escenarios de dispositivo, nube, IoT e incrustados.It is cross-platform, supporting Windows, macOS and Linux, and can be used in device, cloud, and embedded/IoT scenarios.

Las siguientes características definen mejor a .NET Core:The following characteristics best define .NET Core:

  • Implementación flexible: se puede incluir en la aplicación o se puede instalar de forma paralela a nivel de usuario o de equipo.Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide.
  • Multiplataforma: se ejecuta en Windows, macOS y Linux; se puede portar a otros sistemas operativos.Cross-platform: Runs on Windows, macOS and Linux; can be ported to other operating systems. Los sistemas operativos (SO), CPU y escenarios de aplicaciones admitidos proporcionados por Microsoft, otras empresas e individuos, crecerán con el tiempoThe supported Operating Systems (OS), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.
  • Herramientas de línea de comandos: todos los escenarios de producto pueden ejecutarse en la línea de comandos.Command-line tools: All product scenarios can be exercised at the command-line.
  • Compatible: .NET Core es compatible con .NET Framework, Xamarin y Mono, mediante .NET Standard.Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard.
  • Código abierto: la plataforma .NET Core es de código abierto, con licencias de MIT y Apache 2.Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. Documentación con licencia de CC-BY.Documentation is licensed under CC-BY. .NET Core es un proyecto de .NET Foundation..NET Core is a .NET Foundation project.
  • Compatible con Microsoft: .NET Core incluye compatibilidad con Microsoft, como se indica en .NET Core Support (Compatibilidad de .NET Core).Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support

ComposiciónComposition

.NET Core consta de las siguientes partes:.NET Core is composed of the following parts:

  • Un entorno de ejecución .NET, que proporciona un sistema de tipos, la carga de ensamblados, un colector de elementos no utilizados, interoperabilidad nativa y otros servicios básicos.A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
  • Un conjunto de bibliotecas de marco, que proporciona tipos de datos primitivos, tipos de composición de aplicaciones y utilidades fundamentales.A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
  • Un conjunto de herramientas de SDK y compiladores de lenguaje (Roslyn y F#) que habilitan la experiencia de desarrollo base y están disponibles en el SDK de .NET Core.A set of SDK tools and language compilers (Roslyn and F#) that enable the base developer experience, available in the .NET Core SDK.
  • El host de aplicación 'dotnet', que se usa para iniciar aplicaciones .NET Core.The 'dotnet' app host, which is used to launch .NET Core apps. Selecciona el entorno de tiempo de ejecución y lo hospeda, proporciona una directiva de carga de ensamblados e inicia la aplicación.It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. El mismo host también se usa para iniciar las herramientas del SDK de la misma manera.The same host is also used to launch SDK tools in much the same way.

LenguajesLanguages

Los lenguajes C#, Visual Basic y F # pueden usarse para escribir aplicaciones y bibliotecas para .NET Core.The C#, Visual Basic, and F# languages can be used to write applications and libraries for .NET Core. Los compiladores se ejecutan en .NET Core, lo que permite desarrollar para .NET Core en cualquier lugar donde se ejecute.The compilers run on .NET Core, enabling you to develop for .NET Core anywhere it runs. En general, no usará los compiladores directamente, sino de forma indirecta, mediante las herramientas del SDK.In general, you will not use the compilers directly, but indirectly using the SDK tools.

Los compiladores de C# , Visual Basic y F # y las herramientas de .NET Core están integrados o se pueden integrar en varios editores de texto e IDE, como Visual Studio, Visual Studio Code, Sublime Text y Vim, lo que convierte el desarrollo con .NET Core en una opción en su entorno de codificación y SO favoritos.The C#, Visual Basic, and F# compilers and the .NET Core tools are or can be integrated into several text editors and IDEs, including Visual Studio, Visual Studio Code, Sublime Text and Vim, making .NET Core development an option in your favorite coding environment and OS. Esta integración se proporciona, en parte, gracias a la buena gente del proyecto OmniSharp e Ionide.This integration is provided, in part, by the good folks of the OmniSharp project and Ionide.

API y compatibilidad de .NET.NET APIs and Compatibility

.NET Core puede considerarse una versión multiplataforma de .NET Framework, en la capa de las bibliotecas de clases base (BCL) de .NET Framework..NET Core can be thought of as a cross-platform version of the .NET Framework, at the layer of the .NET Framework Base Class Libraries (BCL). Implementa la especificación de .NET Standard.It implements the .NET Standard specification. .NET Core proporciona un conjunto de las API que están disponibles en .NET Framework o Mono/Xamarin..NET Core provides a subset of the APIs that are available in the .NET Framework or Mono/Xamarin. En algunos casos, los tipos no están completamente implementados (algunos miembros no están disponibles o se han movido).In some cases, types are not fully implemented (some members are not available or have been moved).

Consulte el mapa de ruta de .NET Core para aprender más sobre la API de .NET Core.Look at the .NET Core roadmap to learn more about the .NET Core API roadmap.

Relación con .NET StandardRelationship to .NET Standard

.NET Standard es una especificación de API que describe el conjunto coherente de API de .NET que los desarrolladores pueden esperar en cada implementación de .NET.The .NET Standard is an API spec that describes the consistent set of .NET APIs that developers can expect in each .NET implementation. Las implementaciones de .NET necesitan implementar esta especificación para ser consideradas compatibles con .NET Standard y para admitir las bibliotecas que tienen como destino .NET Standard..NET implementations need to implement this spec in order to be considered .NET Standard-compliant and to support libraries that target .NET Standard.

.NET Core implementa .NET Standard y, por tanto, admite las bibliotecas de .NET Standard..NET Core implements .NET Standard, and therefore supports .NET Standard libraries.

Cargas de trabajoWorkloads

Por sí mismo, .NET Core incluye un único modelo de aplicación, aplicaciones de consola, que resulta útil para herramientas, servicios locales y juegos basados en texto.By itself, .NET Core includes a single application model -- console apps -- which is useful for tools, local services and text-based games. Se han generado modelos de aplicación adicionales sobre .NET Core para ampliar su funcionalidad, como:Additional application models have been built on top of .NET Core to extend its functionality, such as:

Código abiertoOpen Source

.NET Core es código abierto (licencia MIT) y fue presentado a .NET Foundation por Microsoft en 2014..NET Core is open source (MIT license) and was contributed to the .NET Foundation by Microsoft in 2014. Ahora es uno de los proyectos más activos de .NET Foundation.It is now one of the most active .NET Foundation projects. Todos los individuos y organizaciones pueden adoptarlo libremente, con cualquier fin: personal, académico o comercial.It can be freely adopted by individuals and companies, including for personal, academic or commercial purposes. Varias empresas usan .NET Core como parte de aplicaciones, herramientas, nuevas plataformas y servicios de hospedaje.Multiple companies use .NET Core as part of apps, tools, new platforms and hosting services. Algunas de estas empresas realizan contribuciones significativas a .NET Core en GitHub y proporcionan una guía sobre la dirección del producto como parte del Technical Steering Group de .NET Foundation.Some of these companies make significant contributions to .NET Core on GitHub and provide guidance on the product direction as part of the .NET Foundation Technical Steering Group.

AdquisiciónAcquisition

.NET Core se distribuye de dos formas: como paquetes en NuGet.org y como distribuciones independientes..NET Core is distributed in two main ways, as packages on NuGet.org and as standalone distributions.

DistribucionesDistributions

Puede descargar .NET Core en la página .NET Core Getting Started (Introducción a .NET Core).You can download .NET Core at the .NET Core Getting Started page.

  • La distribución de Microsoft .NET Core incluye el entorno de tiempo de ejecución de CoreCLR, las bibliotecas asociadas, un host de aplicaciones de consola y el iniciador de aplicaciones dotnet.The Microsoft .NET Core distribution includes the CoreCLR runtime, associated libraries, a console application host and the dotnet app launcher. Se describe en el metapaquete Microsoft.NETCore.App.It is described by the Microsoft.NETCore.App metapackage.
  • La distribución del SDK de Microsoft .NET Core incluye .NET Core y un conjunto de herramientas para restaurar paquetes NuGet y compilar y crear aplicaciones.The Microsoft .NET Core SDK distribution includes .NET Core and a set of tools for restoring NuGet packages and compiling and building apps.

Normalmente primero se instala el SDK de .NET Core para comenzar con el desarrollo de .NET Core.Typically, you will first install the .NET Core SDK to get started with .NET Core development. Puede elegir instalar compilaciones adicionales de .NET Core (quizás versiones preliminares).You may choose to install additional .NET Core (perhaps pre-release) builds.

PaquetesPackages

  • Los paquetes de .NET Core contienen el entorno de tiempo de ejecución y las bibliotecas de .NET Core (ensamblados e implementaciones de referencia)..NET Core Packages contain the .NET Core runtime and libraries (reference assemblies and implementations). Por ejemplo, System.Net.Http.For example, System.Net.Http.
  • Los metapaquetes de .NET Core describen diversas capas y modelos de aplicaciones mediante la referencia al conjunto adecuado de paquetes de bibliotecas con versiones..NET Core Metapackages describe various layers and app-models by referencing the appropriate set of versioned library packages.

ArquitecturaArchitecture

.NET Core es una implementación .NET multiplataforma..NET Core is a cross-platform .NET implementation. Las principales inquietudes específicas de la arquitectura .NET Core están relacionadas con la provisión de implementaciones específicas de la plataforma para plataformas compatibles.The primary architectural concerns unique to .NET Core are related to providing platform-specific implementations for supported platforms.

EntornosEnvironments

Microsoft admite .NET Core en Windows, macOS y Linux..NET Core is supported by Microsoft on Windows, macOS and Linux. En Linux, Microsoft admite principalmente la ejecución de .NET Core en las familias de distribución Red Hat Enterprise Linux (RHEL) y Debian.On Linux, Microsoft primarily supports .NET Core running on Red Hat Enterprise Linux (RHEL) and Debian distribution families.

.NET Core admite actualmente CPU X64..NET Core currently supports X64 CPUs. En Windows, también se admite X86.On Windows, X86 is also supported. ARM64 y ARM32 están en curso.ARM64 and ARM32 are in progress.

El mapa de ruta de .NET Core proporciona información más detallada sobre la carga de trabajo y los planes y la compatibilidad del entorno de SO y CPU.The .NET Core Roadmap provides more detailed information on workload and OS and CPU environment support and plans.

Otras empresas o grupos pueden admitir .NET Core en otros tipos de aplicaciones y entornos.Other companies or groups may support .NET Core for other app types and environment.

Diseñado para adaptabilidadDesigned for Adaptability

.NET Core se ha creado como un producto muy similar, pero único, en relación con otros productos .NET..NET Core has been built as a very similar but unique product relative to other .NET products. Se ha diseñado para permitir una amplia adaptabilidad a nuevas plataformas, para nuevas cargas de trabajo y con nuevas cadenas de herramientas de compilador.It has been designed to enable broad adaptability to new platforms, for new workloads and with new compiler toolchains. Tiene varios puertos de CPU y SO en curso y se puede portar a muchos más.It has several OS and CPU ports in progress and may be ported to many more. Por ejemplo, el proyecto LLILC, es uno de los primeros prototipos de compilación nativa para .NET Core mediante el compilador LLVM.An example is the LLILC project, which is an early prototype of native compilation for .NET Core via the LLVM compiler.

El producto se divide en varias partes, lo que permite que las distintas partes se adapten a nuevas plataformas en programaciones diferentes.The product is broken into several pieces, enabling the various parts to be adapted to new platforms on different schedules. El entorno de tiempo de ejecución y las bibliotecas fundamentales específicas de la plataforma se deben portar como una unidad.The runtime and platform-specific foundational libraries must be ported as a unit. Las bibliotecas independientes de la plataforma deben funcionar, por diseño, en todas las plataformas, tal y como están.Platform-agnostic libraries should work as-is on all platforms, by construction. Hay una tendencia del proyecto a reducir las implementaciones específicas de la plataforma con el fin de aumentar la eficiencia del desarrollador, donde se prefiere el código C# independiente de la plataforma siempre que se pueda implementar un algoritmo o una API de esa forma completa o parcialmente.There is a project bias to reducing platform-specific implementations to increase developer efficiency, preferring platform-neutral C# code whenever an algorithm or API can be implemented in-full or in-part that way.

Le gente se pregunta cómo se implementa .NET Core para que se admita en varios sistemas operativos.People commonly ask how .NET Core is implemented in order to support multiple operating systems. Normalmente preguntan si hay otras implementaciones o si se usa compilación condicional.They typically ask if there are separate implementations or if conditional compilation is used. Son las dos cosas, con una fuerte tendencia hacia la compilación condicional.It's both, with a strong bias towards conditional compilation.

En el gráfico siguiente puede ver que la gran mayoría de CoreFX es código independiente de la plataforma que se comparte en todas las plataformas.You can see in the chart below that the vast majority of CoreFX is platform-neutral code that is shared across all platforms. El código independiente de la plataforma se puede implementar como un solo ensamblado portátil que se usa en todas las plataformas.Platform-neutral code can be implemented as a single portable assembly that is used on all platforms.

CoreFX: líneas de código por plataforma

Las implementaciones de Windows y Unix son de tamaño similar.Windows and Unix implementations are similar in size. Windows tiene una implementación mayor ya que CoreFX implementa algunas características que son exclusivas de Windows, como Microsoft.Win32.Registry pero aún no implementa ningún concepto exclusivo de Unix.Windows has a larger implementation since CoreFX implements some Windows-only features, such as Microsoft.Win32.Registry but does not yet implement any Unix-only concepts. Verá que la mayoría de las implementaciones de Linux y macOS se comparten en una implementación de Unix, mientras que las implementaciones específicas de macOS y Linux son bastante similares en tamaño.You will also see that the majority of the Linux and macOS implementations are shared across a Unix implementation, while the Linux- and macOS-specific implementations are roughly similar in size.

Hay una mezcla de bibliotecas específicas de la plataforma e independiente de la plataforma en .NET Core.There are a mix of platform-specific and platform-neutral libraries in .NET Core. Puede ver el patrón en algunos ejemplos:You can see the pattern in a few examples:

Comparación con otras implementaciones de .NETComparisons to other .NET implementations

Quizás es más fácil comprender la naturaleza de .NET Core si se compara con las implementaciones de .NET existentes.It is perhaps easiest to understand the size and shape of .NET Core by comparing it to existing .NET implementations.

Comparación con .NET FrameworkComparison with .NET Framework

Microsoft presentó la plataforma .NET en el año 2000, y a partir de ese momento ha ido evolucionando..NET was first announced by Microsoft in 2000 and then evolved from there. .NET Framework ha sido la principal implementación de .NET producida por Microsoft durante ese lapso de 15 años.The .NET Framework has been the primary .NET implementation produced by Microsoft during that 15+ year span.

Las principales diferencias entre .NET Core y .NET Framework son:The major differences between .NET Core and the .NET Framework:

  • Modelos de aplicación: .NET Core no admite todos los modelos de aplicación de .NET Framework, en parte porque muchos de ellos se basan en tecnologías de Windows, como WPF (basado en DirectX).App-models -- .NET Core does not support all the .NET Framework app-models, in part because many of them are built on Windows technologies, such as WPF (built on top of DirectX). La consola y los modelos de aplicación de ASP.NET Core se admiten tanto en .NET Core como en .NET Framework.The console and ASP.NET Core app-models are supported by both .NET Core and .NET Framework.
  • API: .NET Core contiene muchas de las mismas API, pero menos, que .NET Framework, y con una factorización diferente (los nombres de ensamblado son diferentes; la forma de los tipo difiere en casos principales).APIs -- .NET Core contains many of the same, but fewer, APIs as the .NET Framework, and with a different factoring (assembly names are different; type shape differs in key cases). Estas diferencias actualmente suelen requerir cambios en el origen del puerto a .NET Core.These differences currently typically require changes to port source to .NET Core. .NET Core implementa la API de .NET Standard, que con el tiempo crecerá para incluir más de la API de BCL de .NET Framework..NET Core implements the .NET Standard API, which will grow to include more of the .NET Framework BCL API over time.
  • Subsistemas: .NET Core implementa un subconjunto de los subsistemas de .NET Framework, de cara a una implementación y un modelo de programación más sencillos.Subsystems -- .NET Core implements a subset of the subsystems in the .NET Framework, with the goal of a simpler implementation and programming model. Por ejemplo, no se admite seguridad de acceso del código (CAS), aunque se admite la reflexión.For example, Code Access Security (CAS) is not supported, while reflection is supported.
  • Plataformas: .NET Framework admite Windows y Windows Server, mientras que .NET Core también es compatible con macOS y Linux.Platforms -- The .NET Framework supports Windows and Windows Server while .NET Core also supports macOS and Linux.
  • Código abierto: .NET Core es código abierto, mientras que un subconjunto de .NET Framework de solo lectura es código abierto.Open Source -- .NET Core is open source, while a read-only subset of the .NET Framework is open source.

Aunque .NET Core es única y tiene diferencias significativas con .NET Framework y otras implementaciones de .NET, permite compartir código fácilmente mediante técnicas de uso compartido de origen o binarias.While .NET Core is unique and has significant differences to the .NET Framework and other .NET implementations, it is straightforward to share code, using either source or binary sharing techniques.

Comparación con MonoComparison with Mono

Mono es la implementación .NET original multiplataforma y de código abierto implementación .NET, que se envió por primera vez en 2004.Mono is the original cross-platform and open source .NET implementation, first shipping in 2004. Se puede considerar un clon de la comunidad de .NET Framework.It can be thought of as a community clone of the .NET Framework. El equipo de proyecto de Mono se basó en los estándares de .NET abiertos (en particular, ECMA 335) publicados por Microsoft para proporcionar una implementación compatible.The Mono project team relied on the open .NET standards (notably ECMA 335) published by Microsoft in order to provide a compatible implementation.

Las principales diferencias entre .NET Core y Mono:The major differences between .NET Core and Mono:

  • Modelos de aplicación: Mono admite un subconjunto de los modelos de aplicación de .NET Framework (por ejemplo, Windows Forms) y algunos adicionales (por ejemplo, Xamarin.iOS) mediante el producto de Xamarin.App-models -- Mono supports a subset of the .NET Framework app-models (for example, Windows Forms) and some additional ones (for example, Xamarin.iOS) through the Xamarin product. .NET Core no admite estos..NET Core doesn't support these.
  • API: Mono admite un gran subconjunto de las API de .NET Framework, con los mismos nombres de ensamblado y factorización.APIs -- Mono supports a large subset of the .NET Framework APIs, using the same assembly names and factoring.
  • PlataformasMono admite muchas plataformas y CPU.Platforms -- Mono supports many platforms and CPUs.
  • Código abiertoMono y .NET Core usan la licencia MIT y son proyectos de .NET Foundation.Open Source -- Mono and .NET Core both use the MIT license and are .NET Foundation projects.
  • Enfoque: el foco principal de Mono en los últimos años es plataformas móviles, aunque .NET Core se centra en las cargas de trabajo de la nube.Focus -- The primary focus of Mono in recent years is mobile platforms, while .NET Core is focused on cloud workloads.