VS 2015. Establecer el marco de destino correcto para el proyecto web ASP.NET 5

Creé un nuevo proyecto ASP.NET 5 MVC en Visual Studio 2015. En el asistente de creación de proyectos, he elegido mostrar las plantillas para .NET Framework 4.6 y luego, en la siguiente pantalla, seleccionar “Aplicación web” de ASP.NET 5 Vista previa Plantillas.

Sin embargo, después de la creación, parece que el proyecto enumeraba solo “dnx451” y “dnxcore50” en la sección “frameworks” de project.json:

"frameworks": { "dnx451": { }, "dnxcore50": { } }, 

Intenté cambiar “dnx451” por “dnx46”. El proyecto se construyó bien, pero cuando traté de ejecutarlo, recibí el siguiente mensaje de error:

El marco de destino del tiempo de ejecución actual no es compatible con ‘…’.

Marco de destino actual en tiempo de ejecución: ‘DNX, Version = v4.5.1 (dnx451)’ Tipo: CLR Arquitectura: x86 Versión: 1.0.0-beta5

¿Cómo es posible cambiar ese “marco objective” para el proyecto ASP.NET 5?

Aquí está mi global.json ahora:

 { "projects": [ "src", "test", "wrap" ], "sdk": { "version": "1.0.0-beta5", "runtime": "clr", "architecture": "x86" } } 

pero en realidad no importa lo que se enumera allí. Ya he probado diferentes comstackciones de 1.0.0-beta5 y la última 1.0.0-beta6

El problema es que DNX sabe que su proyecto tiene como objective dnx46 pero IIS no lo está :). Entonces, IIS está comenzando como .NET 4.5.1 (por defecto) y tratando de cargar su proyecto que no es compatible con 4.5.1.

En una versión futura de VS Tooling, vamos a hacer un mejor trabajo para detectar eso, pero hasta entonces, las cosas son un poco difíciles para las aplicaciones web que desean apuntar a las versiones .NET anteriores 4.5.1. Por ahora, sugiero que solo use dnx451 hasta ese momento (si no está dependiendo de la funcionalidad de .NET 4.5.2 / 4.6), pero le daré algunas instrucciones a continuación sobre cómo hacer que esto funcione hoy si necesita usar 4.5. 2 o más.

Nota: dnx452 y dnx46 son totalmente compatibles con las aplicaciones de consola y con servidores que no sean IIS (como Kestrel o WebListener). Básicamente, cualquier cosa que pueda dnx.exe utilizando el arranque nativo dnx.exe funciona con dnx451 y dnx46 pero los otros entornos de alojamiento (IIS, IIS Express) necesitan sugerencias adicionales para iniciar el marco correcto.

Para que esto funcione hoy, debe establecer una variable de entorno DNX_IIS_RUNTIME_FRAMEWORK en la infraestructura de destino que desea usar. Puede hacerlo en la página Propiedades del proyecto para la aplicación web, en la pestaña Depuración. Simplemente elija el perfil de IIS Express y agregue la variable de entorno de la siguiente manera:

Iniciar perfil

Vamos a agregar esto a los Problemas conocidos , porque parece que lo hemos perdido, y como dije antes, vamos a mejorar la experiencia predeterminada en VS, por lo que no es necesario :).

 "DNX_IIS_RUNTIME_FRAMEWORK" : "DNX46" 

El valor es sensible a mayúsculas