.NET Standard.NET Standard

.NET Standard es una especificación formal de las API de .NET que se prevé que estén disponibles en todas las implementaciones de .NET.The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. La finalidad de .NET Standard es establecer una mayor uniformidad en el ecosistema de .NET.The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. ECMA 335 sigue estableciendo uniformidad en el comportamiento de las implementaciones de .NET, pero no hay ninguna especificación parecida para las bibliotecas de clases base (BCL) de .NET para implementaciones de la biblioteca de .NET.ECMA 335 continues to establish uniformity for .NET implementation behavior, but there's no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

.NET Standard habilita los escenarios clave siguientes:The .NET Standard enables the following key scenarios:

  • Define un conjunto uniforme de API de BCL para todas las implementaciones de .NET que se van a implementar, independientemente de la carga de trabajo.Defines uniform set of BCL APIs for all .NET implementations to implement, independent of workload.
  • Permite a los desarrolladores generar bibliotecas portátiles que se pueden usar en las implementaciones de .NET con este mismo conjunto de API.Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs.
  • Reduce o incluso elimina la compilación condicional de código fuente compartido debido a las API de .NET, solo para API de sistema operativo.Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

Las diversas implementaciones de .NET tienen como destino versiones concretas de .NET Standard.The various .NET implementations target specific versions of .NET Standard. Cada implementación de .NET anuncia la última versión más alta de .NET Standard que admite, indicación de que también es compatible con versiones anteriores.Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. Por ejemplo, .NET Framework 4.6 implementa .NET Standard 1.3, lo que significa que expone todas las API definidas en las versiones de .NET Standard de 1.0 a 1.3.For example, the .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. De forma similar, .NET Framework 4.6.1 implementa .NET Standard 1.4, mientras que .NET Core 1.0 implementa .NET Standard 1.6.Similarly, the .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET Core 1.0 implements .NET Standard 1.6.

Compatibilidad con implementaciones de .NET.NET implementation support

En la tabla siguiente se muestran las versiones de la plataforma compatibles con cada versión de .NET Standard.The following table lists the minimum platform versions that support each .NET Standard version.

.NET Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0
Núcleo de .NET.NET Core 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5.45.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0
Plataforma universal de WindowsUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299
WindowsWindows 8.08.0 8.08.0 8.18.1
Windows PhoneWindows Phone 8.18.1 8.18.1 8.18.1
Windows Phone SilverlightWindows Phone Silverlight 8.08.0

1 Las versiones que se muestran de .NET Framework se aplican a .NET Core SDK 2.0 y versiones posteriores de la herramienta. Las versiones anteriores usaban una asignación diferente para .NET Standard 1.5 y versiones posteriores. También puede descargar herramientas para .NET Core para Visual Studio 2015 si no se puede actualizar a Visual Studio 2017.1 The versions listed for .NET Framework apply to .NET Core SDK 2.0 and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017.

  • Las columnas representan las versiones de .NET Standard.The columns represent .NET Standard versions. Cada celda de encabezado es un vínculo a un documento que muestra qué API se han agregado en esa versión de .NET Standard.Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • Las filas representan las diferentes implementaciones de .NET.The rows represent the different .NET implementations.
  • El número de versión de cada celda indica la versión mínima de la implementación que necesitará para tener como destino dicha versión de .NET Standard.The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • Para ver una tabla interactiva, consulte Versiones de .NET Standard.For an interactive table, see .NET Standard versions.

Para encontrar la versión más reciente de .NET Standard que puede usar como destino, haga lo siguiente:To find the highest version of .NET Standard that you can target, do the following steps:

  1. Busque la fila en la que se indica la implementación de .NET en la que quiere realizar la ejecución.Find the row that indicates the .NET implementation you want to run on.
  2. Busque la columna de esa fila que indica la versión de derecha a izquierda.Find the column in that row that indicates your version starting from right to left.
  3. El encabezado de columna indica la versión de .NET Standard que admite el destino (y las versiones de .NET Standard inferiores también lo admitirán).The column header indicates the .NET Standard version that your target supports (and any lower .NET Standard versions will also support it).
  4. Repita este proceso para cada plataforma a la que quiera dirigirse.Repeat this process for each platform you want to target. Si tiene más de una plataforma de destino, debe elegir la versión más baja.If you have more than one target platform, you should pick the smaller version among them. Por ejemplo, si quiere ejecutar en .NET Framework 4.5 y .NET Core 1.0, la versión de .NET Standard más alta que puede usar es .NET Standard 1.1.For example, if you want to run on .NET Framework 4.5 and .NET Core 1.0, the highest .NET Standard version you can use is .NET Standard 1.1.

Versión de .NET Standard de destinoWhich .NET Standard version to target

Al elegir una versión de .NET Standard, debe tener en cuenta lo siguiente:When choosing a .NET Standard version, you should consider this trade-off:

  • Cuanto mayor sea la versión, más API tendrá disponibles.The higher the version, the more APIs are available to you.
  • Cuanto menor sea la versión, más plataformas la implementarán.The lower the version, the more platforms implement it.

En general, se recomienda elegir como destino la versión menor de .NET Standard posible.In general, we recommend you to target the lowest version of .NET Standard possible. Así, después de buscar la versión de .NET Standard superior que puede elegir como destino, siga estos pasos:So, after you find the highest .NET Standard version you can target, follow these steps:

  1. Diríjase a la siguiente versión menor de .NET Standard y cree el proyecto.Target the next lower version of .NET Standard and build your project.
  2. Si el proyecto se crea correctamente, repita el paso 1.If your project builds successfully, repeat step 1. De lo contrario, vuelva a dirigirse a la siguiente versión mayor, que es la que debe usar.Otherwise, retarget to the next higher version and that's the version you should use.

Sin embargo, el establecimiento como destino de las versiones inferiores de .NET Standard introduce diferentes dependencias de compatibilidad.However, targeting lower .NET Standard versions introduces a number of support dependencies. Si el proyecto establece como destino .NET Standard 1.x, le recomendamos que también establezca .NET Standard 2.0 como destino.If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. Esto simplifica el gráfico de dependencias para los usuarios de la biblioteca que se ejecutan en los marcos compatibles de .NET Standard 2.0 y reduce el número de paquetes que necesitan descargar.This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible frameworks, and it reduces the number of packages they need to download.

Reglas de control de versiones de .NET Standard.NET Standard versioning rules

Hay dos reglas de control de versiones principales:There are two primary versioning rules:

  • Adición: las versiones de .NET Standard son círculos lógicamente concéntricos: las versiones superiores incorporan todas las API de las versiones anteriores.Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. No hay ningún cambio importante entre versiones.There are no breaking changes between versions.
  • Inmutable: una vez publicadas, las versiones de .NET Standard se congelan.Immutable: Once shipped, .NET Standard versions are frozen. Las nuevas API primero están disponibles en implementaciones de .NET concretas, como .NET Core.New APIs first become available in specific .NET implementations, such as .NET Core. Si el consejo de revisión de .NET Standard cree que las nuevas API deben estar disponibles para todas las implementaciones de .NET, se agregan en una nueva versión de .NET Standard.If the .NET Standard review board believes the new APIs should be available for all .NET implementations, they're added in a new .NET Standard version.

EspecificaciónSpecification

La especificación de .NET Standard es un conjunto estandarizado de API.The .NET Standard specification is a standardized set of APIs. La especificación se mantiene mediante implementadores de .NET, específicamente Microsoft (que incluye .NET Framework, .NET Core y Mono) y Unity.The specification is maintained by .NET implementors, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity. Se usa un proceso de comentarios públicos como parte del establecimiento de las versiones nuevas de .NET Standard a través de GitHub.A public feedback process is used as part of establishing new .NET Standard versions through GitHub.

Artefactos oficialesOfficial artifacts

La especificación oficial es un conjunto de archivos .cs que definen las API que forman parte del estándar.The official specification is a set of .cs files that define the APIs that are part of the standard. El directorio ref en el repositorio dotnet/standard define las API de .NET Standard.The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

El metapaquete NETStandard.Library (código fuente) describe el conjunto de bibliotecas que definen (en parte) una o varias versiones de .NET Standard.The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

Un componente determinado, como System.Runtime, describe lo siguiente:A given component, like System.Runtime, describes:

  • Parte de .NET Standard (solo su ámbito).Part of .NET Standard (just its scope).
  • Varias versiones de .NET Standard para ese ámbito.Multiple versions of .NET Standard, for that scope.

Se proporcionan artefactos derivados para permitir una lectura más cómoda y habilitar ciertos escenarios de desarrollo (por ejemplo, el uso de un compilador).Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

Representación de paquetesPackage representation

El principal vehículo de distribución de los ensamblados de referencia de .NET Standard son los paquetes NuGet.The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Las implementaciones se entregarán de diversas formas, adecuadas para cada implementación de .NET.Implementations are delivered in a variety of ways, appropriate for each .NET implementation.

Los paquetes NuGet tienen como destino uno o varios marcos.NuGet packages target one or more frameworks. Los paquetes de .NET Standard tienen como destino el marco de trabajo ".NET Standard".The .NET Standard packages target the ".NET Standard" framework. Puede establecer como destino el marco de .NET Standard mediante el TFM compacto netstandard (por ejemplo, netstandard1.4).You can target the .NET Standard framework using the netstandard compact TFM (for example, netstandard1.4). Las bibliotecas diseñadas para ejecutarse en varios entornos de ejecución deben tener como destino este marco de trabajo.Libraries that are intended to run on multiple runtimes should target this framework. Para obtener el conjunto más amplio de API, indique netstandard2.0 como destino, puesto que el número de API disponibles se ha doblado entre .NET Standard 1.6 y 2.0.For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

El metapaquete NETStandard.Library hace referencia al conjunto completo de paquetes NuGet que definen .NET Standard.The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. La manera más común de establecer como destino netstandard consiste en hacer referencia a este metapaquete.The most common way to target netstandard is by referencing this metapackage. Describe y proporciona acceso a las aproximadamente 40 bibliotecas de .NET y las API asociadas que definen .NET Standard.It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. Puede hacer referencia a paquetes adicionales que tienen como destino netstandard para obtener acceso a otras API.You can reference additional packages that target netstandard to get access to additional APIs.

Control de versionesVersioning

La especificación no es única, sino que se trata de un conjunto de API con versiones lineales y con un crecimiento incremental.The specification is not singular, but an incrementally growing and linearly versioned set of APIs. La primera versión del estándar establece un conjunto básico de API.The first version of the standard establishes a baseline set of APIs. Las versiones posteriores agregan API y heredan las API definidas por las versiones anteriores.Subsequent versions add APIs and inherit APIs defined by previous versions. No se ha establecido ninguna disposición para quitar API del estándar.There is no established provision for removing APIs from the standard.

.NET Standard no es específico de ninguna implementación de .NET ni coincide con el esquema de control de versiones de ningún entorno de ejecución..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.

Las API agregadas a cualquier implementación (por ejemplo, .NET Framework, .NET Core y Mono) pueden considerarse candidatas para agregarse a la especificación, sobre todo si se consideran fundamentales por su naturaleza.APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature. Las nuevas versiones de .NET Standard se crean en función de las versiones de la implementación de .NET, lo que permite establecer como destino nuevas API desde una PCL de .NET Standard.New versions of .NET Standard are created based on .NET implementation releases, enabling you to target new APIs from a .NET Standard PCL. Los mecanismos de control de versiones se describen con más detalle en .NET Core Versioning (Control de versiones de .NET Core).The versioning mechanics are described in more detail in .NET Core Versioning.

El control de versiones de .NET Standard es importante para su uso..NET Standard versioning is important for usage. Dada una versión de .NET Standard, puede usar bibliotecas que tengan como destino esa misma versión o una inferior.Given a .NET Standard version, you can use libraries that target that same or lower version. En el enfoque siguiente se describe el flujo de trabajo para el uso de PCL de .NET Standard específicas para tener como destino .NET Standard.The following approach describes the workflow for using .NET Standard PCLs, specific to .NET Standard targeting.

  • Seleccione una versión de .NET Standard para usarla para la PCL.Select a .NET Standard version to use for your PCL.
  • Use bibliotecas que dependan de la misma versión de .NET Standard o de una inferior.Use libraries that depend on the same .NET Standard version or lower.
  • Si encuentra una biblioteca que depende de una versión superior de .NET Standard, deberá adoptar la misma versión o bien optar por no usar esa biblioteca.If you find a library that depends on a higher .NET Standard version, you either need to adopt that same version or decide not to use that library.

.NET Standard como destinoTargeting .NET Standard

Puede compilar bibliotecas estándar de .NET mediante una combinación del marco netstandard y el metapaquete NETStandard.Library.You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage. Puede ver ejemplos de .NET Standard como destino con herramientas de .NET Core.You can see examples of targeting the .NET Standard with .NET Core tools.

Modo de compatibilidad de .NET Framework.NET Framework compatibility mode

A partir de .NET Standard 2.0 se ha introducido el modo de compatibilidad de .NET Framework.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Este modo de compatibilidad permite que los proyectos de .NET Standard hagan referencia a bibliotecas de .NET Framework como si estuviesen compiladas para .NET Standard.This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. Las referencias a bibliotecas de .NET Framework no funcionan para todos los proyectos, por ejemplo, en bibliotecas que usan API de Windows Presentation Foundation (WPF).Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

Para obtener más información, consulte Modo de compatibilidad de .NET Framework.For more information, see .NET Framework compatibility mode.

Bibliotecas de .NET standard y Visual Studio.NET Standard libraries and Visual Studio

Para crear bibliotecas de .NET Standard en Visual Studio, asegúrese de tener la versión 15.3 de Visual Studio 2017 o una posterior instalada en Windows, o la versión 7.1 de Visual Studio para Mac o una posterior instalada en macOS.In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

Si solo necesita consumir bibliotecas de .NET Standard 2.0 en sus proyectos, también puede hacerlo en Visual Studio 2015.If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. Sin embargo, necesitará tener el cliente 3.6 de NuGet o uno posterior instalado.However, you need NuGet client 3.6 or higher installed. Puede descargar el cliente de NuGet para Visual Studio 2015 desde la página de descargas de NuGet.You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

Comparación con las bibliotecas de clases portátilesComparison to Portable Class Libraries

.NET Standard es el reemplazo de las bibliotecas de clases portátiles (PCL)..NET Standard is the replacement for Portable Class Libraries (PCL). .NET Standard mejora la experiencia de creación de bibliotecas portátiles, ya que mantiene una BCL estándar y establece como resultado una mayor uniformidad en las implementaciones de .NET.The .NET Standard improves on the experience of creating portable libraries by curating a standard BCL and establishing greater uniformity across .NET implementations as a result. Una biblioteca que tiene como destino .NET Standard es una PCL o "PCL basada en .NET Standard".A library that targets .NET Standard is a PCL or a ".NET Standard-based PCL". Las PCL existentes son "PCL basadas en perfiles".Existing PCLs are "profile-based PCLs".

.NET Standard y los perfiles de PCL se crearon con propósitos parecidos, pero también presentan algunas diferencias clave..NET Standard and PCL profiles were created for similar purposes but also differ in key ways.

Similitudes:Similarities:

  • Definen las API que se pueden usar para compartir código binario.Define APIs that can be used for binary code sharing.

Diferencias:Differences:

  • .NET Standard es un conjunto mantenido de API, mientras que los perfiles de PCL se definen por las intersecciones de las plataformas existentes..NET Standard is a curated set of APIs, while PCL profiles are defined by intersections of existing platforms.
  • .NET Standard tiene versiones lineales, al contrario de los perfiles de PCL..NET Standard linearly versions, while PCL profiles do not.
  • Los perfiles de PCL representan plataformas de Microsoft, mientras que .NET Standard es independiente de la plataforma.PCL profiles represents Microsoft platforms while the .NET Standard is platform-agnostic.

Compatibilidad con PCLPCL compatibility

.NET Standard es compatible con un subconjunto de perfiles de PCL..NET Standard is compatible with a subset of PCL profiles. .NET Standard 1.0, 1.1 y 1.2 se superponen con un conjunto de perfiles de PCL..NET Standard 1.0, 1.1 and 1.2 each overlap with a set of PCL profiles. Esta superposición se ha creado por dos motivos:This overlap was created for two reasons:

  • Habilitar las PCL basadas en .NET Standard para hacer referencia a PCL basadas en perfiles.Enable .NET Standard-based PCLs to reference profile-based PCLs.
  • Habilitar las PCL basadas en perfiles para empaquetarlas como PCL basadas en .NET Standard.Enable profile-based PCLs to be packaged as .NET Standard-based PCLs.

Se proporciona compatibilidad con PCL basada en perfiles mediante el paquete NuGet Microsoft.NETCore.Portable.Compatibility.Profile-based PCL compatibility is provided by the Microsoft.NETCore.Portable.Compatibility NuGet package. Esta dependencia es necesaria cuando se hace referencia a paquetes NuGet que contienen PCL basadas en perfiles.This dependency is required when referencing NuGet packages that contain profile-based PCLs.

Las PCL basadas en perfiles empaquetadas como netstandard son más fáciles de consumir que las PCL basadas en perfiles empaquetadas normalmente.Profile-based PCLs packaged as netstandard are easier to consume than typically packaged profile-based PCLs. El empaquetado de netstandard es compatible con los usuarios existentes.netstandard packaging is compatible with existing users.

Puede ver el conjunto de perfiles de PCL que son compatibles con .NET Standard:You can see the set of PCL profiles that are compatible with the .NET Standard:

Perfil de PCLPCL Profile .NET Standard.NET Standard Plataformas de PCLPCL Platforms
Profile7Profile7 1.11.1 .NET Framework 4.5, Windows 8.NET Framework 4.5, Windows 8
Profile31Profile31 1.01.0 Windows 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone Silverlight 8.1
Profile32Profile32 1.21.2 Windows 8.1, Windows Phone 8.1Windows 8.1, Windows Phone 8.1
Profile44Profile44 1.21.2 .NET Framework 4.5.1, Windows 8.1.NET Framework 4.5.1, Windows 8.1
Profile49Profile49 1.01.0 .NET Framework 4.5, Windows Phone Silverlight 8.NET Framework 4.5, Windows Phone Silverlight 8
Profile78Profile78 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84Profile84 1.01.0 Windows Phone 8.1, Windows Phone Silverlight 8.1Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111Profile111 1.11.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1.NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151Profile151 1.21.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157Profile157 1.01.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259Profile259 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

Vea tambiénSee also