c# - sintaxis - Migre a.NET Core desde una aplicación web ASP.NET 4.5 MVC
sintaxis razor mvc 5 (3)
Me acaban de asignar una tarea con un poco de tecnología con la que no estoy familiarizado: nuestra encantadora aplicación web ASP.NET MVC de windows debe convertirse para ser utilizada en un entorno Linux.
Trabajo en salud y tenemos datos de usuario que no se pueden perder en absoluto o que los jefes rodarán (los nuestros o los de ellos).
Normalmente no soy un chico de C # / ASP.NET, aunque puedo adaptarme a la tarea. He estado leyendo los documentos oficiales @ http://docs.asp.net/en/latest/getting-started/installing-on-linux.html y puedo ver que esta tarea en efecto significa "apuntar a .NET CORE (o mono) marco ''.
He buscado en Google y no hay una manera fácil de migrar de facto: parece que solo aprende la nueva configuración modular con las configuraciones introducidas en project.json y listo. Antes de intentar hacer esto manualmente, ¿hay alguna información sobre la que me puedan aconsejar? ¿Algunos procesos sistemáticos a seguir? Tal vez algunos "errores" que debería haber leído de antemano?
El proyecto utiliza NHibernate y Autofac para DI - parece bastante estándar. Solo quería saber cuánta lectura / experimentación tomaría esto para que se ejecute en un servidor Linux, en última instancia, eso es lo que cuenta.
Creo que estás mezclando preocupaciones aquí. Su declaración de problema inicial es que tiene una aplicación MVC actualmente ejecutándose en Windows que necesita ejecutarse en Linux. Eso en sí mismo no es un problema. Luego continúa diciendo que lo investigó y llegó a la conclusión de que necesita instalar ASP.Net 5 (núcleo) para usar su sitio en Linux, lo cual es falso.
Los proyectos ASP.Net MVC se ejecutarán bien en Mono .
Mono es una implementación de código abierto de .NET Framework de Microsoft basada en los estándares ECMA para C # y Common Language Runtime.
Dicho esto, Mono es una implementación de código abierto. ASP.Net 5 es una oferta oficial de Microsoft, pero no es directamente compatible con la base de código existente. También se ejecuta en la parte superior de Mono.
Debe evaluar sus requisitos con su gerente de proyecto para determinar si el uso de Mono es aceptable; En algunos campos sensibles (por ejemplo, Cuidado de la Salud), el Código Abierto no es ampliamente aceptado. Prepárese para explicar que, si bien Mono Framework es de código abierto, su aplicación que se ejecuta dentro de Mono Framework no lo es. En general, sin embargo, las organizaciones que están adoptando Linux están usando más software de código abierto de lo que creen, ya sea que lo quieran o no.
En pocas palabras, definitivamente puede ejecutar su aplicación MVC en Linux sin muchos cambios en la base de código utilizando Mono Framework. Si el uso de la distribución oficial de Microsoft ASP.Net 5 Linux es un requisito del proyecto, de todos modos estará reescribiendo una parte significativa de su aplicación, incluso antes de preocuparse por Linux vs. Windows.
Además, otro apéndice a tener en cuenta es que ASP.Net 5 es casi totalmente Open Source de Microsoft, por lo que el argumento en contra del uso de Mono puede ser discutible, aunque probablemente sea una preocupación mencionada.
Sé que esta es una vieja pregunta, pero necesito actualizar, supongo. Debido a que algunas de las aplicaciones de producción migran asp.net mvc a asp.net core. Recojo un poco de migración paso a paso. Espero que sea de utilidad.
Sí, es posible.
1) Cree una nueva aplicación web ASP.NET Core vacía con el mismo nombre que el proyecto anterior. Así que el espacio de nombres será coincidente.
2) Instale los paquetes de Microsoft.AspNetCore.Mvc
y Microsoft.AspNetCore.StaticFiles
NuGet. El tiempo de ejecución de ASP.NET es modular, y usted debe optar explícitamente para servir archivos estáticos
3) Abra el archivo .csproj y agregue un objetivo PrepareForPublish
: por ejemplo
<Exec Command="bower install" />
</Target>
4) Abra el archivo Startup.cs y cambie el código para que coincida con lo siguiente:
namespace WebApp1
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
5) Agregue una carpeta de Controladores. Luego agregue la clase de controlador MVC con el nombre HomeController.cs a la carpeta de Controladores.
- Agregar una carpeta de vistas.
- Agregar una carpeta de Vistas / Inicio.
- Agregue un Index.cshtml, página de vista MVC a la carpeta Vistas / Inicio.
Para la mitad de la prueba por favor haga lo siguiente
Reemplace el contenido del archivo Views / Home / Index.cshtml con lo siguiente:
<h1>Hello world!</h1>
6) Funcionalidad de migración desde el proyecto MVC de ASP.NET. Tendremos que mover lo siguiente:
- contenido del lado del cliente (CSS, fuentes y scripts)
- controladores
- puntos de vista
- modelos
- agrupamiento
- filtros
- Iniciar / cerrar sesión, identidad
7) Copie cada uno de los métodos del ASP.NET MVC OldController a NewController
8) Copie los archivos de vista About.cshtml
, Contact.cshtml
e Index.cshtml
Razor del proyecto MVC de ASP.NET en el proyecto Core de ASP.NET.
9) Ejecute la aplicación Core de ASP.NET y pruebe cada método.
10) Para contenido estático Agregue un archivo de configuración de Bower llamado bower.json
a la raíz del proyecto (haga clic con el botón derecho en el proyecto y luego en Agregar> Nuevo elemento> Archivo de configuración de Bower). Agrega Bootstrap y jQuery al archivo
11) Copie el archivo favicon.ico del antiguo proyecto MVC a la carpeta wwwroot en el proyecto ASP.NET Core.
12) Copie el archivo _ViewStart.cshtml
de la carpeta Vistas del antiguo proyecto ASP.NET MVC en la carpeta Vistas del proyecto ASP.NET Core. El archivo _ViewStart.cshtml
no ha cambiado en ASP.NET Core MVC.
13) Crea una vista / carpeta compartida.
14) Copie el archivo _Layout.cshtml
de la carpeta Views / Shared del antiguo ASP.NET MVC en la carpeta Views / Shared del proyecto ASP.NET Core.
15) Cambie algunas características antiguas en la vista de la navaja con noticias como las siguientes
- Reemplace
@Styles.Render("~/Content/css")
con un elemento<link>
para cargarbootstrap.css
- Elimine
@Scripts.Render("~/bundles/modernizr")
. Comente la línea@Html.Partial("_LoginPartial")
(rodee la línea con@*...*@)
. - Reemplace
@Scripts.Render("~/bundles/jquery")
con un elemento<script>
. - Reemplace
@Scripts.Render("~/bundles/bootstrap")
con un elemento<script>
.
La respuesta a continuación está desactualizada, pero describe una solución de trabajo para actualizar una aplicación .Net 4.5 MVC al marco .Net Core. .Net Core está listo para la producción
El Core CLR y BCL no están listos para la producción. Período. Al menos no todavía y probablemente no durante seis meses a un año. El apoyo a la dependencia es aún más desconocido en este momento. Autofac no tiene una biblioteca compatible con clr. ¿Lo harán? Ese es un lugar para comenzar a investigar. Cuando van ellos Podría ser un tiempo y ese es un requisito del proyecto que está fuera de su control.
Incluso para trabajos no productivos .NET Core es todavía muy temprano. La respuesta simple sería decirle a su jefe que espere seis meses y vea cómo todo tiembla en lugar de potencialmente quemar cientos de horas de trabajo o código de preproducción. Por supuesto, es probable que se ignore, así que aquí es cómo procedería hoy si tuviera que hacerlo.
Hay un par de cambios juntos en tu pregunta. Está buscando migrar de ASP.NET 4.5 a ASP.NET 5. También está buscando apuntar a un nuevo marco. Por último, está planeando ejecutar la solución en un nuevo entorno. Cada uno de estos se puede manejar de forma independiente (aunque algunos no antes que otros), por lo que esa es la ruta que tomaría.
Fase 0) No hay versiones soportadas por DNX de .Net framework antes de 4.5.1. Utilizará DNVM para seleccionar un DNX para apuntar. No puede apuntar a lo que no está disponible, así que si su proyecto está apuntando a algo antes de la actualización 4.5.1, verifique que no haya cambios de ruptura. Si hay arreglos y mantener condebase compatible con 4.5.1 o posterior.
Fase 1) DNVM y DNX son compatibles tanto con el .Net Framework (4.5.1+) "completo" existente como con .Net Core (5.0). Puede ser tentador saltar directamente a ASP.NET 5 que se ejecuta en .Net Core 5, pero eso sería un error. Dado que .Net Core requiere un proyecto basado en dnx y los proyectos basados en dnx también son compatibles con .Net 4.5.1 (o posterior), el primer paso sería cambiar a la nueva estructura de proyecto introducida por asp.net 5. Probablemente se requiera cierta experimentación. y la documentación es espartana en este punto. El objetivo sería su aplicación existente (asp.net 4.5 ejecutándose en .net framework 4.5.1 ejecutándose en dnx. No hay asistentes de migración de proyectos, por lo que comenzará a partir de un nuevo proyecto dnx (use asp.net 5 "vacío" Plantilla) y copiando en su código existente. Esto puede parecer un cambio menor, pero rompe ese estrecho acoplamiento de la aplicación a un marco instalado en el host de Windows únicamente. Una vez que tenga la base de código ejecutándose en un entorno dnx, tendrá las bases preparadas para orientarse a otros entornos.
Fase 2) Migrar a asp.net 5 (MVC 6). Seguirá apuntando al marco .net "completo" y ejecutándose en Windows. .Net Core no (y nunca lo hará) es compatible con la versión existente de asp.net de su proyecto (4.5). Sin embargo, asp.net 5 es compatible tanto con el marco completo (4.x) como con el núcleo (5). Esto le brinda la posibilidad de actualizar a asp.net 5 sin cambiar a .net core. El objetivo al final de la fase 2 es la aplicación web (funcional) que utiliza asp.net 5 y se ejecuta en .net 4.x en dnx. Sí, todavía en Windows, pero nos estamos acercando a la compatibilidad entre plataformas.
Fase 3) Haga una lista de inventario de las referencias y dependencias de BCL existentes que no son compatibles con el núcleo .net. Refactorizar las referencias BCL existentes que no son compatibles con el núcleo .net. Recuerde. .Net core es un subconjunto del marco completo, por lo que puede tener suerte y todos los códigos existentes se encuentran con ese subconjunto, pero si no es así, debe encontrar una manera de lograr la misma funcionalidad con el subconjunto disponible en .net core.
Para las dependencias (es decir, Autofac) es muy probable que necesite una actualización y puede haber cambios importantes que deben resolverse. El objetivo y el final de la fase 3 es la aplicación web de la fase 2 pero sin dependencias que sean incompatibles con el núcleo bcl. El factor más importante fuera de su control son los paquetes de terceros. Si autofac no libera un paquete compatible con clr del núcleo, entonces está bloqueado (o tendrá que considerar el uso de una alternativa).
Fase 4) El final de la fase 3 significa que tiene una pila compatible con el núcleo .net, pero aún tiene como objetivo el marco completo. Ahora, finalmente, cambiará el destino al núcleo clr (dnvm admite múltiples tiempos de ejecución de lado a lado = dnx). Todavía desplegaría a Windows en este punto, una variable a la vez. Al final de la Fase 4, tiene la aplicación web ejecutándose en .net core alojado en un entorno Windows.
Fase 5) . Ahora puedes trabajar en resolver cualquier dependencia de Windows. Como mínimo, para migrar fuera de IIS, asegúrese de que el manejo de la ruta se realice de manera neutral para el sistema operativo, y no hay llamadas a recursos específicos de Windows (como el registro). El núcleo clr y bcl deberían ser más maduros para este punto, por lo que no está intentando apuntar a un objetivo en movimiento.
Intentar hacerlo todo de una vez es, en mi opinión, una receta para el desastre. Con tantos cambios paralelos, comenzará con una solución no funcional y probablemente seguirá sin funcionar. Si lo toma en fases, puede migrar la solución hacia un objetivo compatible cruzado y al mismo tiempo tener resultados funcionales en cada paso del camino.