visual studio nupkg microsoft manager descargar create cli c# .net nuget compatibility .net-standard

c# - nupkg - nuget visual studio download



¿Qué versiones.NET deben ser compatibles con los paquetes de NuGet para maximizar su disponibilidad y funcionalidad? (5)

Solución de 2018

Basado en respuestas proporcionadas y suponiendo que no depende de las tecnologías específicas de la plataforma (como System.Drawing, ASP.NET o WPF; en cuyo caso solo tiene como objetivo la plataforma que puede y listo):

  1. netstandard1.0 - netstandard2.0 Comience con .NET Standard 1.0 y suba hasta alcanzar la funcionalidad máxima.

    Esto debería cubrir:

    • .NET Framework 4.5
    • .NET Core 1.0
    • Mono 4.6
    • Xamarin.iOS 10.0
    • Xamarin.Android 7.0
    • Windows Universal 10.0
    • Windows no Universal 8.0 (hasta .NET Standard 1.2)
    • Windows Phone 8.1 (hasta .NET Standard 1.2)
    • Windows Phone Silverlight 8.0 (hasta .NET Standard 1.0)

    Si no puede implementar la biblioteca de manera razonable dentro de los límites del estándar relativamente pequeño de .NET 1.0–1.2, es probable que se excluyan los últimos tres puntos. Si aún los necesita, vea los puntos a continuación.

    .NET Standard 1.5+ aumenta los requisitos en las versiones de los marcos y sistemas operativos, por lo que es posible que se requieran versiones de .NET Standard de objetivos múltiples para una máxima compatibilidad.

  2. portable-net40+* El siguiente punto importante es PCL obsoleto. Sus versiones de .NET Framework 4.5+ no son relevantes ya que están cubiertas en su mayoría por .NET Standard. Si desea admitir Windows Phone 8 y Windows 7 no universal, debe hacerlo a través de PCL, a menos que esté limitado por la API, en cuyo caso tendrá que agregar objetivos específicos de la plataforma.

    Si no necesita ninguna de las plataformas adicionales y .NET Framework 4.0 proporciona alguna funcionalidad adicional útil sobre .NET 3.5, puede orientarlo directamente, no a través de PCL.

    Esto debería cubrir:

    • .NET Framework 4.0
    • Windows no universal 8.0
    • Windows Phone 8.0
    • Windows Phone Silverlight 8.0
  3. net20 - net35 Si desea admitir versiones antiguas de Windows para escritorio (como Windows XP) y versiones más recientes sin actualizar de Windows (como Windows Vista + con .NET 3.0+), debe agregar soporte para los objetivos de .NET Framework de escritorio directamente. Tenga en cuenta que a partir de 2018-01-01, el .NET más bajo admitido es el 3.5 SP1, por lo que ir por debajo de eso es probablemente innecesario y probablemente limitará la API disponible para usted sin beneficios reales.

    Esto debería cubrir:

    • .NET Framework 2.0-3.5
    • Windows XP
  4. Existen otras plataformas, a saber, las específicas de Xamarin, Tizen, .NET Micro, etc. Solo se puede acceder a ellas dirigiéndose directamente a ellas.

    Esto debería cubrir:

    • Todo lo demas

TL; DR

Algo así como netstandard1.1 + portable-net40+win8 + net35 cubre todas las plataformas relevantes.

Solucion del futuro

Cuando las versiones antiguas de .NET mueren completamente, solo debe permanecer el estándar .NET. Bueno, a menos que Microsoft invente otra tecnología de unificación multiplataforma, como ya lo hizo con .NET, .NET PCL, .NET Standard ...

TL; DR

Usa el netstandard más netstandard que puedas.

TL; DR:

  • Dado: escribí una biblioteca con una funcionalidad relativamente portátil (por ejemplo, Left.Pad.©.dll ). Quiero que esté disponible a través de NuGet.

  • Requisito: si alguien quiere usar mi biblioteca en cualquier versión de cualquier plataforma en cualquier versión de cualquier sistema operativo con cualquier actualización instalada al escribir código en cualquier IDE o cualquier editor de código, debería poder hacerlo.

  • Pregunta: ¿Cuál es el conjunto mínimo de marcos objetivo de NuGet para lograrlo?

  • Pregunta extra: si hay marcos "muertos" que no deberían ser dirigidos, o alguna otra cosa que deba tenerse en cuenta al elegir los marcos objetivo, también puede mencionarlo.

Pensamientos (versión antigua):

Los paquetes de NuGet son compatibles con múltiples versiones y perfiles de .NET Framework , por ejemplo, un paquete puede proporcionar versiones de net20, net30, net35, net40, net45, sl3, sl4, sl5, etc. Sin embargo, asumiendo que no siempre hay diferencias en la funcionalidad de un paquete , proporcionar muchas versiones sería una pérdida de tiempo de compilación y tamaño del paquete y causará una complejidad innecesaria. Por otro lado, proporcionar un paquete solo para la versión más baja de Framework soportada podría causar la funcionalidad faltante, por ejemplo .NET 4 admite la ejecución en paralelo de varias versiones de CLR en el proceso, pero las versiones anteriores no lo hacen, por lo que esta característica se perderá si solo se proporciona una versión para .NET 3.5 (no estoy seguro; nunca la he usado y no conozco los detalles). Si se proporciona una versión PCL, la lógica es simple, supongo: simplemente excluya las versiones que cubre PCL.


Debes apuntar a .net framework 2.0 y superior. La decisión debe basarse en la plataforma en la que se ejecutará la aplicación en producción. .net 2.0 viene incluido en el servidor de Windows 2008 (SP2 y en adelante) y la gente todavía lo usa ampliamente en producción. Ref https://en.wikipedia.org/wiki/.NET_Framework


Dirigirse a .Net Standard le daría a su paquete nuget el lujo de ser empleado en .NET framework, .NET core, mono, Xamarin, Universal Windows Platform y proyectos de Windows Phone.

Vea lo siguiente tomado de esta answer

Para decidir a qué versión de estándar .Net debe dirigirse, use la siguiente tabla:

docs.microsoft.com/en-us/dotnet/standard/net-standard

Mirando la tabla anterior, recomendaría ir con .Net standard 1.0 si le importa Windows Phone Silverlight o .Net standard si no lo hace.

Además, en la medida en que noté que mucha gente que eligió .net core está usando .net core 2.0, por lo que es posible que desee crear una versión de nuget separada para ellos con .net standard 2.0.

Acerca de la segunda parte de su pregunta, incluso si un marco específico está muerto, eso no significa que desaparezca al instante, se seguiría utilizando durante varios años antes de que esté completamente muerto, simplemente pasar a diferentes opciones lleva tiempo.

Otra cosa que tomaría en consideración son las bibliotecas usadas comúnmente, como Masstransit , EPPlus , y las IOC usadas comúnmente, etc. Tomaría una mirada general de los marcos que soportan y seguiría porque muchos proyectos en curso podrían ser impulsados tales bibliotecas


En el momento de escribir, la forma más sencilla es crear un proyecto .NET Standard 1.1 . Es compatible

  • .NET Core 1.0 y superior
  • .NET Framework 4.5 y superior
  • Mono, Xamarin, Windows Phone y more...

Así que casi todas las plataformas modernas. Si quieres soportar plataformas más antiguas, ej. .NET Framework 3.0, agregue esto como una "carpeta" separada en NuGet. De esta manera, las nuevas aplicaciones .NET Core aún pueden usar su paquete.

Más información

.NET Standard actúa como un reemplazo para PCL . El .NET Framework más bajo al que puede orientarse con PCL es 4.0, que no es mucho más bajo que 4.5 con .NET Standard 1.1 (por lo tanto, no hará que su paquete sea mucho más accesible).

PCL tampoco parece ser compatible con .NET Core, mientras que .NET Standard casi es compatible con todas las plataformas: docs.microsoft.com/en-us/dotnet/standard/net-standard

También tenga en cuenta que, según Microsoft, solo se admite actualmente .NET Framework 3.5 SP1 y .NET Framework> = 4.5.2 . Todas las demás versiones de .NET Framework ya llegaron al final de su vida útil y no recibirán ninguna actualización. Windows Phone también está muerto y Silverlight no está llegando a ningún lado también.

Como mencionó @Lex Li en los comentarios, .NET Standard 1.1 tiene una superficie API muy baja, lo que significa que quizás falten algunas API importantes. Debido a eso, la mayoría de los paquetes de NuGet utilizan una versión estándar de .NET superior. Se recomienda utilizar la versión estándar .NET más baja posible.

Así que con .NET Standard 1.1, admitirá una gran mayoría de los marcos modernos. Lamentablemente, no pude encontrar ninguna estadística de distribución de .NET Framework ...

Si realmente desea que su paquete esté disponible para todas las plataformas , eche un vistazo a las posibles plataformas de destino para NuGet . Creo que necesita al menos net11 y netstandard1.0 , tal vez agregue algún soporte Silverlight y .NET MicroFramework ...


Si desea que se use, no solo Windows - .NET Standard es el camino a seguir. El objetivo más reciente es que la pregunta de qué bibliotecas usar viene temprano en un proyecto y rara vez se vuelve a visitar y los nuevos proyectos tienden a usar versiones recientes de marcos y bibliotecas.

Puede encontrar fácilmente cuotas de mercado recientes de dispositivos de usuario basadas en el uso de Internet.

Vea los números, las plataformas de selección que desea alcanzar y haga una referencia cruzada con las versiones de .NET disponibles en ellas.