.net - parsed - the specified framework microsoft netcore app version 2.1 was not found
¿Cuál es la diferencia entre<TargetFramework> y<RuntimeFrameworkVersion>? (2)
Tengo el siguiente código en un archivo csproj
:
<TargetFramework>netcoreapp1.0</TargetFramework>
En el administrador de paquetes de NuGet, dice que tengo Microsoft.NETCore.App versión 1.0.5
Ahora digamos que tengo el siguiente código en el mismo archivo csproj
:
<TargetFramework>netcoreapp1.0</TargetFramework>
<RuntimeFrameworkVersion>1.1.4</RuntimeFrameworkVersion>
El administrador de paquetes de NuGet ahora dirá que tengo Microsoft.NETCore.App versión 1.1.4
Básicamente, estoy tratando de usar el último marco antes de .NETCore 2.0 (tengo algunos problemas de EF cuando hice la conversión) que sería .NETCore 1.1.4 pero los múltiples atributos del marco en csproj
me hacen csproj
qué etiqueta usar. No he podido encontrar ningún recurso que distinga claramente las diferencias entre los dos.
Desde los documentos, debe usar runtimeframeworkversion solamente
Si necesita una versión específica del tiempo de ejecución cuando se dirige a .NET Core, debe usar la propiedad en su proyecto (por ejemplo, 1.0.4) en lugar de hacer referencia al paquete meta.
TargetFramework
utiliza TargetFramework para resolver dependencias y determinar los activos que se utilizarán para compilar y construir la aplicación. (Entre bambalinas, entran en juego algunas propiedades más, como TargetFrameworkMoniker
y TargetFrameworkVersion
pero el SDK lo TargetFramework
a un TargetFramework
más TargetFramework
para los marcos que conoce).
RuntimeFrameworkVersion
es específico de .NET Core / netcoreapp
. El SDK inyectará una dependencia en Microsoft.NETCore.App
para la versión en la que RuntimeFrameworkVersion
está configurado o usa la última versión que conoce para .NET Core <2.0. La versión resuelta se escribe luego en el archivo runtimeconfig.json
para que el runtimeconfig.json
la runtimeconfig.json
del runtimeconfig.json
de .NET Core resuelva la versión de la infraestructura compartida para cargar (=> .NET Core 1.1.4 tiempo de ejecución, por ejemplo).
La razón por la que puede usar 1.1.*
Para netcoreapp1.0
es porque el paquete NuGet en realidad contiene los activos necesarios para crear aplicaciones .NET Core 1.0. *. Sin embargo, las herramientas no lo saben, por lo que obtendrás una aplicación .NET Core 1.0, pero el marco 1.1 la cargará porque eso es lo que termina en el archivo runtimeconfig.json
.
La diferencia importante es:
- Solo importa para los ejecutables independientes la versión de
Microsoft.NETCore.App
se utiliza.- Este paquete incluirá el marco completo con la versión deseada al realizar una publicación autocontenida (por ejemplo,
dotnet publish -r win7-x64
) - Cuando ejecuta una aplicación creada para
1.0.3
pero tiene el tiempo de ejecución de1.0.5
instalado, el tiempo de ejecución de1.0.5
se usará automáticamente. - Si no configura
RuntimeFrameworkVersion
y seRuntimeFrameworkVersion
una nueva versión del SDK que conoce las nuevas versiones de parches de .NET Core, usará la versión más nueva automáticamente. Si configura la versión explícitamente, es posible que no esté actualizado sin editar el archivo del proyecto.
- Este paquete incluirá el marco completo con la versión deseada al realizar una publicación autocontenida (por ejemplo,
-
RuntimeFrameworkVersion
también es el tiempo de ejecución mínimo que cargará la aplicación; si lo configura en1.0.4
y trata de ejecutarse en una máquina que solo tiene1.0.3
instalada, la aplicación no se iniciará a menos que edite el archivoruntimeconfig.json
. -
RuntimeFrameworkVersion
se puede configurar en una versión flotante, que es útil cuando se dirigen a versiones de vista previa o compilaciones diarias, por ejemplo,2.1.0-preview1-*
se resolvería con la versión más nueva depreview1
disponible en las fuentes NuGet configuradas.
Aparte de estos, solo hay algunas razones para compilar con una versión superior de Microsoft.NETCore.App
, como una DiaSymReader
compilación para el componente DiaSymReader
.
En .NET Core 2.0, la versión de RuntimeFrameworkVersion
siempre será 2.0.0
para "aplicaciones portátiles" (no autocontenidas) porque la implementación del marco ya no es proporcionada por las dependencias de Microsoft.NETCore.App
y este paquete NuGet Solo se utiliza para proporcionar ensamblajes de referencia para la compilación.