¿Cómo se apunte en múltiples direcciones una biblioteca de clases .NET Core con csproj?

Cuando .NET Core aún utiliza el formato project.json , puede crear una biblioteca de clases que se dirija a múltiples marcos (por ejemplo, net451, netcoreapp1.0).

Ahora que el formato del proyecto oficial es csproj usando MSBuild, ¿cómo se especifican los marcos múltiples para apuntar? Intento buscar esto desde la configuración del proyecto en VS2017, pero solo puedo orientarme a un único marco desde .NET Core frameworks (ni siquiera muestra las otras versiones completas de .NET Framework que tengo instaladas) :

enter image description here

Necesita agregar s al TargetFramework predeterminado y básicamente cambiarlo a TargetFrameworks . Luego mencionas el Moniker con un ; separador.

También puede colocar las referencias del paquete Nuget en un ItemGroup condicional manualmente o usando VS Nuget Package Manager.

Aquí es cómo debe verse su .csproj:

   netstandard1.6;net452    1.12.0     1.1.0    

Otra solución que hago actualmente debido a la falta de documentación es que creo un proyecto en VS2015 y formulo el proyecto.json usando la documentación disponible y intellisense, luego abro la solución en VS2017 y uso la actualización incorporada. Luego miraré el archivo csproj para descubrir cómo hacer que esa configuración suceda.

Segmentación múltiple de objectives más esotéricos sin un Moniker :

Microsoft:

PCLs no son recomendados +

Aunque las PCL son compatibles, los autores del paquete deberían admitir netstandard en su lugar. .NET Platform Standard es una evolución de las PCL y representa la portabilidad binaria en todas las plataformas, utilizando un solo moniker que no está vinculado a una estática como los monikers portátiles a + b + c.

Si desea orientar un perfil portátil, no tiene un apodo predefinido, por lo que Portable Profiles tampoco puede inferir TargetFrameworkIdentifier , TargetFrameworkVersion y TargetFrameworkProfile . Además, una constante de comstackción no se define automáticamente. Finalmente, debe agregar todas las referencias de ensamblaje. Ninguna se proporciona de manera predeterminada.

Este ejemplo a continuación se toma de un proyecto que utilizó la palabra clave dynamic por lo que también necesitaba el ensamblado Microsoft.CSharp , por lo que puede ver cómo se hace referencia a diferentes objectives.

   netstandard1.5;net40;portable40-net45+sl5+win8+wp8   .NETPortable v4.0 Profile158 $(DefineConstants);PORTABLE158                

Puede editar manualmente el archivo .csproj para esto y establecer la TargetFrameworks (no TargetFramework ).

 net451;netstandard1.4 

Por ejemplo, consulte EFCore.csproj : https://github.com/aspnet/EntityFrameworkCore/blob/951e4826a38ad5499b9b3ec6645e47c825fa842a/src/EFCore/EFCore.csproj

De hecho, seleccioné Class Library (.NET Core).

Esa no es la plantilla de proyecto que desea si su biblioteca necesita trabajar en múltiples objectives de plataforma. Con esta plantilla de proyecto, su biblioteca solo puede usarse en un proyecto que se dirija a .NETCore. El enfoque de la biblioteca PCL fue retirado, ahora debe elegir .NETStandard.

Para hacerlo, inicie el proyecto con la plantilla del proyecto “Class Library (.NET Standard)”. Ahora tiene la opción de elegir la versión .NETStandard. La grilla de compatibilidad actual está aquí .

Con suerte mantendrán ese artículo vinculado actualizado. Esto está cambiando, .NETStandard 2.0 fue clavado pero aún no se envía. Dirigido al segundo trimestre de 2017, probablemente a finales de la spring, actualmente se ve como el 97% hecho. Oí a los diseñadores decir que no se recomienda usar 1.5 o 1.6, no es lo suficientemente compatible con 2.0