the specified parsed not netcore microsoft framework found could aspnetcore app alternatively all .net visual-studio entity-framework nuget .net-core

.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.

https://docs.microsoft.com/en-us/dotnet/core/tools/csproj


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 de 1.0.5 instalado, el tiempo de ejecución de 1.0.5 se usará automáticamente.
    • Si no configura RuntimeFrameworkVersion y se RuntimeFrameworkVersion 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.
  • RuntimeFrameworkVersion también es el tiempo de ejecución mínimo que cargará la aplicación; si lo configura en 1.0.4 y trata de ejecutarse en una máquina que solo tiene 1.0.3 instalada, la aplicación no se iniciará a menos que edite el archivo runtimeconfig.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 de preview1 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.