Cuando .NET Core todavía usaba el project.json
formato, podía crear una biblioteca de clases dirigida a varios marcos (por ejemplo, net451, netcoreapp1.0).
Ahora que el formato del proyecto oficial está csproj
usando MSBuild, ¿cómo se especifican varios marcos para apuntar? Estoy tratando de buscar estas cosas en la configuración del proyecto en VS2017, pero yo soy capaz sólo de apuntar a un único marco de los marcos .NET Core (que ni siquiera tiene una lista de las otras versiones completas de .NET Framework, que yo no he instalado) :
Respuestas:
Necesita editar manualmente el archivo del proyecto y agregar s al TargetFramework predeterminado y básicamente cambiarlo a TargetFrameworks . Luego mencionas el apodo con un ;separador.
También puede poner las referencias del paquete Nuget en un ItemGroup condicional manualmente o usando VS Nuget Package Manager.
Así es como debería verse su .csproj:
Otra solución alternativa que hago en estos días debido a la falta de documentación es que creo un proyecto en VS2015 y formo el project.json usando la documentación disponible e intellisense, luego abro la solución en VS2017 y uso la actualización incorporada. Luego miraré el archivo csproj para averiguar cómo hacer que suceda esa configuración.
Orientación múltiple a objetivos más esotéricos sin un Moniker :
Microsoft:
Si desea dirigirse a un perfil portátil que no tiene predefinido apodo de manera Perfiles portátiles también no puede inferir
TargetFrameworkIdentifier
,TargetFrameworkVersion
yTargetFrameworkProfile
. Además, una constante del compilador no se define automáticamente. Finalmente, debe agregar todas las referencias de ensamblaje, ninguna se proporciona por defecto.Este ejemplo a continuación se tomó de un proyecto que usó la
dynamic
palabra clave, por lo que también necesitaba elMicrosoft.CSharp
ensamblaje, por lo que puede ver cómo son las referencias para diferentes objetivos.fuente
Puede editar manualmente el
.csproj
archivo para esto y establecerTargetFrameworks
(noTargetFramework
) la propiedad.Por ejemplo, consulte
EFCore.csproj
: https://github.com/aspnet/EntityFrameworkCore/blob/951e4826a38ad5499b9b3ec6645e47c825fa842a/src/EFCore/EFCore.csprojfuente
Esa no es la plantilla de proyecto que desea si su biblioteca necesita trabajar en múltiples plataformas. Con esta plantilla de proyecto, su biblioteca solo se puede usar en un proyecto que tenga como objetivo .NETCore. El enfoque de la biblioteca PCL se retiró, ahora debe elegir un .NETStandard.
Para ello, inicie el proyecto con la plantilla de proyecto "Biblioteca de clases (.NET Standard)". Ahora tiene la opción de elegir la versión .NETStandard. La cuadrícula de compatibilidad actual está aquí .
Con suerte, mantendrán actualizado ese artículo vinculado. Esto está en proceso de cambio, .NETStandard 2.0 se definió pero aún no se envía. Apuntado para el segundo trimestre de 2017, probablemente a finales de la primavera, actualmente muestra un 97% hecho. Escuché a los diseñadores decir que no se recomienda usar 1.5 o 1.6, no es lo suficientemente compatible con 2.0
fuente
project.json
que podría especificar dependencias específicas para un marco de destino.Hice una guía para principiantes sobre el marco de red de orientación múltiple y netcore que comienza con la solución simple de 1 línea y luego lo guía a través de cada una de las complicaciones.
El enfoque más simple es hacer que un objetivo netcore o netstandard funcione primero. Luego edite el archivo csproj y siga estos pasos para los otros destinos.
<Reference />s
para System. * Dlls para cualquier objetivo de netframework simplemente leyendo lo que dicen que falta en los mensajes de error de compilación.<PackageReference />s
en los casos en que no sean las mismas para cada destino. El truco más fácil es volver temporalmente a la orientación única para que la GUI maneje las referencias de Nuget correctamente por usted.fuente