Cuál es la diferencia between.NET Básica and.NET Tipos de proyecto de Biblioteca de clases estándar?


En Visual Studio, hay al menos 3 tipos diferentes de biblioteca de clases que puede crear:

  • Biblioteca de clases (. NET Framework)
  • Biblioteca de clases (. NET Standard)
  • Biblioteca de clases (. NET Core)

Mientras que el primero es lo que hemos estado usando durante años, un punto importante de confusión que he estado teniendo es cuándo usar los tipos de biblioteca de clases.NET Standard y. NET Core. He sido mordido por esto recientemente al intentar multi-target marco diferente versions , and creating a unit test project.

Entonces, ¿cuál es la diferencia entre Class Library (.NET Standard) y Class Library (.NET Core), por qué ambos existen, y cuándo debemos usar uno sobre el otro?

Author: Shaun Luttin, 2017-03-22

8 answers

¿Cuándo debemos usar uno sobre el otro?

La decisión es una compensación entre la compatibilidad y el acceso a la API.

Use una biblioteca estándar de.NET cuando desee aumentar el número de aplicaciones que serán compatibles con su biblioteca, y está de acuerdo con una disminución en el área de superficie de la API de. NET a la que puede acceder su biblioteca.

Use una biblioteca. NET Core cuando desee aumentar el área de superficie de la API. NET a la que puede acceder su biblioteca, y está de acuerdo con permitir solo las aplicaciones. NET Core son compatibles con su biblioteca.

Por ejemplo, una biblioteca que tenga como objetivo.NET Standard 1.3 será compatible con aplicaciones que tengan como objetivo. NET Framework 4.6,. NET Core 1.0, Universal Windows Platform 10.0 y cualquier otra plataforma que admita. NET Standard 1.3. Sin embargo, la biblioteca no tendrá acceso a algunas partes de la API de.NET. Por ejemplo, el Microsoft.NETCore.CoreCLR el paquete es compatible con. NET Core pero no con. NET Standard.

¿Qué es la diferencia entre la Biblioteca de clases (. NET Standard) y la Biblioteca de clases (. NET Core)?

La sección de frameworks basados en paquetes aquí describe la diferencia.

Compatibilidad: Las bibliotecas que se dirigen a.NET Standard se ejecutarán en cualquier tiempo de ejecución compatible con. NET Standard, como. NET Core,. NET Framework, Mono/Xamarin. Por otro lado, las bibliotecas que se dirigen a.NET Core solo pueden ejecutarse en el tiempo de ejecución de. NET Core.

Área de superficie de la API: Las bibliotecas estándar. NET vienen con todo en NETStandard.Library mientras que las bibliotecas.NET Core vienen con todo en Microsoft.NETCore.App. Este último incluye aproximadamente 20 bibliotecas adicionales, algunas de las cuales podemos agregar manualmente a nuestra biblioteca Estándar.NET (como System.Threading.Thread) y algunas de las cuales no son compatibles con el Estándar. NET (como Microsoft.NETCore.CoreCLR).

Además, las bibliotecas.NET Core especifican un tiempo de ejecución y vienen con un modelo de aplicación. Eso es importante, por ejemplo, para hacer que las bibliotecas de clases de prueba unitaria sean ejecutables.

¿Por qué ambos ¿existir?

Ignorando las bibliotecas por un momento, la razón por la que existe el Estándar.NET es por portabilidad; define un conjunto de API que las plataformas. NET acuerdan implementar. Cualquier plataforma que implemente un estándar. NET es compatible con bibliotecas que tengan como objetivo ese estándar.NET. Una de esas plataformas compatibles es. NET Core.

Volviendo a las bibliotecas, las plantillas de bibliotecas estándar.NET existen para ejecutarse en varios tiempos de ejecución (a expensas del área de superficie de la API). Obviamente, el. NET Existen plantillas de biblioteca central para acceder a más área de superficie de API (a expensas de la compatibilidad) y para especificar una plataforma en la que construir un ejecutable.

 316
Author: Shaun Luttin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-22 17:31:38

A . Net Core Class Library se basa en el Estándar . Net. Si desea implementar una biblioteca que sea portable a . Net Framework ,. Net Core y Xamarin , elija una Biblioteca estándar . Net

.Net Core, finalmente, aplicar .Neto Estándar 2 (como Xamarin y .Net Framework)

.Net Core, Xamarin y .Net Framework por lo tanto, pueden ser identificados como sabores de Estándar. Net

Para preparar sus aplicaciones para el futuro para compartir y reutilizar código , prefiere implementar bibliotecas estándar.Net.

Microsoft también recomienda usar . NET Standard en lugar de Portable Class Libraries.

Para citar a MSDN como fuente autorizada, . Net Standard pretende ser Una Biblioteca para Gobernarlos a Todos. Como las imágenes valen más que mil palabras, lo siguiente hará que las cosas muy claras:

1. Su escenario de aplicación actual (fragmentado)

Al igual que la mayoría de nosotros, es probable que esté en la situación a continuación: (. Net Framework, Xamarin y ahora aplicaciones con sabor a. Net Core)

introduzca la descripción de la imagen aquí

2. Lo que la biblioteca Estándar. Net le permitirá (compatibilidad entre marcos)

La implementación de una biblioteca estándar. Net permite compartir código entre todos estos diferentes sabores:

Una Biblioteca para Gobernarlos a Todos

Para los impacientes:

  1. . NET Standard resuelve el problema de compartir código para los desarrolladores de. NET en todas las plataformas al traer todas las API que espera y ama en los entornos que necesita: aplicaciones de escritorio, aplicaciones móviles y juegos y servicios en la nube:
  2. . NET Standard es un conjunto de API que todas las plataformas. NET tienen que implementar. Esto unifica el. NET las plataformas y evitan la fragmentación futura.
  3. . NET Standard 2.0 será implementado por . NET Framework ,. Núcleo NETO , y Xamarin . Para . NET Core , esto agregará muchas de las API existentes que han sido solicitados.
  4. . NET Standard 2.0 incluye una cuña de compatibilidad para los binarios . NET Framework, lo que aumenta significativamente el conjunto de bibliotecas a las que puede hacer referencia desde su Estándar. NET biblioteca.
  5. Estándar. NET reemplazará Portable Class Libraries (PCLs) como el historia de herramientas para construir bibliotecas. NET multiplataforma.

Para obtener una tabla que ayude a comprender cuál es la versión más alta del estándar.NET a la que puede dirigirse, en función de las plataformas. NET en las que pretende ejecutarse, diríjase aquí.

Fuentes: MSDN: Introducción del estándar. Net

 202
Author: user919426,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-25 05:25:47

Así que la respuesta corta sería:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)
 61
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 18:31:13

. net Framework y . Net Core son dos implementaciones diferentes del tiempo de ejecución de. Net. Tanto Core como Framework (pero especialmente Framework) tienen diferentes perfiles que incluyen selecciones más grandes o más pequeñas (o simplemente diferentes) de las muchas API y ensamblados que Microsoft ha creado para.Net, dependiendo de dónde estén instalados y en qué perfil. Por ejemplo, hay algunas API diferentes disponibles en las aplicaciones Universales de Windows que en el perfil" normal " de Windows. Incluso en Windows, es posible que tenga el perfil "Cliente" frente al perfil "Completo". Además, hay otras implementaciones (como Mono) que tienen sus propios conjuntos de bibliotecas.

. net Standard es una especificación para la que deben estar disponibles conjuntos de bibliotecas y ensamblados de API. Una aplicación escrita para. Net Standard 1.0 debería ser capaz de compilar y ejecutar con cualquier versión de Framework, Core, Mono, etc, que anuncie soporte para la colección de bibliotecas. Net Standard 1.0. Similar es cierto para. Net Estándar 1.1, 1.5, 1.6, 2.0, etc. Siempre y cuando el tiempo de ejecución proporcione soporte para esa versión de Standard, puede compilar y ejecutar allí.

Un proyecto dirigido a una versión del estándar no podrá hacer uso de características que no estén incluidas en esa revisión del estándar. Esto no significa que no pueda tomar dependencias en otros ensamblados o API publicadas por otros proveedores (es decir, elementos en NuGet). Pero significa que cualquier dependencia que tome también debe incluir soporte para su versión de. Net Standard. . Net Standard está evolucionando rápidamente, pero todavía es lo suficientemente nuevo, y se preocupa lo suficiente por algunos de los perfiles de tiempo de ejecución más pequeños, que esta limitación puede sentirse sofocante.

Por otro lado, una aplicación dirigida al Estándar debería ser capaz de ser utilizada en más situaciones de despliegue, ya que en teoría puede ejecutarse con Core, Framework, Mono, etc. Para un proyecto de biblioteca de clases que busca una amplia distribución, esa es una promesa atractiva. Para un proyecto de biblioteca de clases utilizado principalmente para fines internos, puede no ser tan preocupante.

El Estándar. Net también puede ser útil en situaciones en las que el equipo de SysAdmin desea ASP.Net en Windows a ASP.Net para. Net Core en Linux por razones filosóficas o de costo, pero el equipo de desarrollo quiere seguir trabajando contra.Net Framework en Visual Studio en Windows.

 46
Author: Joel Coehoorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-05 15:15:06

. NET Standard: Piense en ello como una gran biblioteca estándar. Al usar esto como una dependencia, solo puede crear bibliotecas (.DLLs), no ejecutables. Una biblioteca hecha con. NET standard como dependencia se puede agregar a un Xamarin.Androide, un Xamarin.iOS, un proyecto. NET Core Windows / OSX / Linux.

. NET Core: Piénsalo como la continuación del antiguo. NET framework, solo que es opensource y algunas cosas aún no están implementadas y otras quedaron obsoletas. Extiende el estándar. NET con extra funciones, pero solo se ejecuta en escritorios. Al agregar esto como una dependencia, puede hacer aplicaciones ejecutables en Windows, Linux y OSX. (Aunque la consola solo por ahora, no GUI). Así que. NET Core =. NET Estándar + cosas específicas de escritorio.
También UWP lo utiliza y el nuevo ASP.NET core también lo usa como dependencia.

 6
Author: sydd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-26 03:45:45

. Net Standard existe principalmente para mejorar el uso compartido de código y hacer que las API disponibles en cada implementación de. Net sean más consistentes.

Mientras creamos Bibliotecas podemos tener target as.Net Estándar 2.0 para que la biblioteca creada sea compatible con diferentes versiones de. Net Framework incluyendo. Net Core, Mono..

 5
Author: ARP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-15 15:50:43

. NET Framework y. NET Core son ambos frameworks.

. NET Estándar es estándar (en otras palabras, especificación).

Puede hacer un proyecto ejecutable (como la aplicación de consola, o ASP.NET aplicación) con. NET Framework y. NET Core, pero no con. NET Standard.

Con.NET Standard solo se puede hacer un proyecto de biblioteca de clases que no se puede ejecutar de forma independiente y que debe ser referenciado por otro proyecto ejecutable de. NET Core o. NET Framework.

 4
Author: bside,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-08 12:58:32

Espero que esto ayude a entender la relación entre.NET Standard API surface y otras plataformas. NET. Cada interfaz representa un marco de trabajo de destino y los métodos representan grupos de API disponibles en ese marco de trabajo de destino.

namespace Analogy
{
  // .NET Standard

interface INetStandard10
{
    void Primitives();
    void Reflection();
    void Tasks();
    void Xml();
    void Collections();
    void Linq();
}

interface INetStandard11 : INetStandard10
{
    void ConcurrentCollections();
    void LinqParallel();
    void Compression();
    void HttpClient();
}

interface INetStandard12 : INetStandard11
{
    void ThreadingTimer();
}

interface INetStandard13 : INetStandard12
{
    //.NET Standard 1.3 specific APIs
}

// And so on ...


// .NET Framework 

interface INetFramework45 : INetStandard11
{
    void FileSystem();
    void Console();
    void ThreadPool();
    void Crypto();
    void WebSockets();
    void Process();
    void Drawing();
    void SystemWeb();
    void WPF();
    void WindowsForms();
    void WCF();
}

interface INetFramework451 : INetFramework45, INetStandard12
{
    // .NET Framework 4.5.1 specific APIs
}

interface INetFramework452 : INetFramework451, INetStandard12
{
    // .NET Framework 4.5.2 specific APIs
}

interface INetFramework46 : INetFramework452, INetStandard13
{
    // .NET Framework 4.6 specific APIs
}

interface INetFramework461 : INetFramework46, INetStandard14
{
    // .NET Framework 4.6.1 specific APIs
}

interface INetFramework462 : INetFramework461, INetStandard15
{
    // .NET Framework 4.6.2 specific APIs
}

// .NET Core
interface INetCoreApp10 : INetStandard15
{
    // TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
    void GPS();
    void Xaml();
}

// Xamarin 
interface IXamarinIOS : INetStandard15
{
    void AppleAPIs();
}

interface IXamarinAndroid : INetStandard15
{
    void GoogleAPIs();
}    
// Future platform

interface ISomeFuturePlatform : INetStandard13
{
    // A future platform chooses to implement a specific .NET Standard version.
    // All libraries that target that version are instantly compatible with this new
    // platform
}
}

Fuente

 1
Author: Mahbubur Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-01 13:28:49