Cómo actualizar un proyecto ASP.NET MVC 4 y Web API a ASP.NET MVC 5 y Web API 2

ASP.NET MVC 5 y Web API 2 traen varias características nuevas, como ruteo por atributos, filtros de autenticación, y más. Para una lista completa ir a http://www.asp.net/vnext.

En esta guía veremos cómo actualizar a esta última versión.

Pasos de la actualización

  1. Respalda tu proyecto. Esta guía requiere que hagas cambios en el archivo de proyecto, la configuración de paquetes, y los archivos web.config.
  2. Para actualizar de Web API a Web API 2, en el global.asax cambiar de:
    WebApiConfig.Register(GlobalConfiguration.Configuration);

    a:

    GlobalConfiguration.Configure(WebApiConfig.Register);
  3. Asegúrate que todos los paquetes que usan tus proyectos sean compatibles con MVC 5 y Web API 2. La siguiente tabla muestra los paquetes relacionados con MVC 4 y Web API que necesitan cambiarse. Si tienes un paquete que tenga dependencia de uno de los paquetes listados abajo, consulta a quien lo publicó para obtener la última versión que sea compatible con MVC 5 y Web API 2. Si tienes el código fuente de esos paquetes, deberías recompilarlos con los nuevos assemblies de MVC 5 y Web API 2.
    Package Id Versión antigua Versión nueva
    Microsoft.AspNet.Razor 2.0.x.x 3.0.0.0
    Microsoft.AspNet.WebPages 2.0.x.x 3.0.0.0
    Microsoft.AspNet.WebPages.WebData 2.0.x.x 3.0.0.0
    Microsoft.AspNet.WebPages.OAuth 2.0.x.x 3.0.0.0
    Microsoft.AspNet.Mvc 4.0.x.x 5.0.0.0
    Microsoft.AspNet.Mvc.Facebook 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.Core 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.SelfHost 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.Client 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.OData 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.WebHost 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.Tracing 4.0.x.x 5.0.0.0
    Microsoft.AspNet.WebApi.HelpPage 4.0.x.x 5.0.0.0
    Microsoft.Net.Http 2.0.x. 2.2.x.
    Microsoft.Data.OData 5.2.x. 5.6.x.
    System.Spatial 5.2.x. 5.6.x.
    Microsoft.Data.Edm 5.2.x. 5.6.x.
    Microsoft.AspNet.Mvc.FixedDisplayModes Removido
    Microsoft.AspNet.WebPages.Administration Removido
    Microsoft-Web-Helpers Microsoft.AspNet.WebHelpers
  4. Abre tu proyecto en Visual Studio 2013.
  5. Remueve todos los siguientes paquetes de NuGet que estén instalados. Los removerás usando el Package Manager Console (PMC). Puede que tu proyecto no incluya todos los paquetes.
    1. Microsoft.AspNet.WebPages.Administration
      Este paquete generalmente se incluye cuando se actualiza de MVC 3 a MVC 4. Para removerlo, ejecutar el siguiente comando en el PMC:
      Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
    2. Microsoft-Web-Helpers
      Este paquete ha sido renombrado como Microsoft.AspNet.WebHelpers. Para removerlo, ejecutar el siguiente comando en el PMC:
      Uninstall-Package -Id Microsoft-Web-Helpers
    3. Microsoft.AspNet.Mvc.FixedDisplayMode
      Este paquete contiene una solución alternativa a un problema de MVC 4 que ya fue corregido en MVC 5. Para removerlo, ejecutar el siguiente comando en el PMC:
      Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayMode
  6. Actualiza todos los paquetes de NuGet usando el PMC. En el PMC ejecuta el siguiente comando:
    Update-Package
    El comando Update-Package sin parámetros actualizará todos los paquetes. Puedes actualizar los paquetes individuales usando el argumento ID. Para más información sobre el comando, ejecutar get-help update-package.

Actualizar el archivo web.config de la aplicación

Asegúrate de hacer los cambios en archivo web.config de la aplicación y no en el archivo web.config de la carpeta Views.

Ubica la sección <runtime>/<assemblyBinding>, y haz los siguientes cambios:

  1. En los elementos con el atributo nombre de “System.Web.Mvc”, cambia el número de versión de “4.0.0.0” a “5.0.0.0”. (Dos cambios en ese elemento).
  2. En los elementos con el atributo nombre de “System.Web.Helpers” y de “System.Web.WebPages”, cambia el número de versión de “2.0.0.0” a “3.0.0.0”. Ocurrirán cuatro cambios, dos en cada elemento.
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
  3. Ubica la sección <appSettings> y actualiza webpages:Version de 2.0.0.0 a 3.0.0.0 como se muestra a continuación:
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="PreserveLoginUrl" value="true" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
  4. Remueve todo nivel de confianza que no sea Full. Por ejemplo:
    <securityPolicy>
      <!--<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>-->
    </securityPolicy>

Actualiza el archivo web.config de la carpeta Views

Si tu aplicación también usa areas, tendrás que actualizar cada web.config dentro de las subcarpetas Views de cada carpeta de Area.

    1. Actualiza todos los elementos que contengan «System.Web.Mvc» de la versión «4.0.0.0» a la «5.0.0.0».
      <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
          <namespaces>
            <add namespace="System.Web.Mvc" />
            <!--Elementos removidos para mayor claridad.-->
          </namespaces>
        </pages>
      </system.web.webPages.razor>

       

         -->
         <pages
             validateRequest="false"
             pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
             pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
             userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
           <controls>
             <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
           </controls>
         </pages>
       </system.web>
    2. Actualiza todos los elementos que contengan «System.Web.WebPages.Razor» de la versión «2.0.0.0» a la «3.0.0.0». Si la sección contiene «System.Web.WebPages», actualizar estos elementos de la versión «2.0.0.0» a la «3.0.0.0».
      <configuration>
         <configSections>
           <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
             <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
             <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
           </sectionGroup>
         </configSections>
    3. Si removiste el paquete de NuGet Microsoft-Web-Helpers en el paso anterior, instala Microsoft.AspNet.WebHelpers con el siguiente comando en el PMC:
      Install-Package -Id Microsoft.AspNet.WebHelpers
    4. Si tu aplicación usa el método User.IsInRole(), agrega lo siguiente en el archivo web.config:
      <system.webServer>
        <modules>
          <remove name="RoleManager" />
        </modules>
      </system.webServer>

Pasos finales

Compila y prueba la aplicación.

Remueve el GUID de proyecto MVC 4 de los archivos de proyecto:

      1. En el Solution Explorer, haz click derecho sobre el nombre del proyecto y selecciona Unload Project.
      2. Haz click derecho en el proyecto y selecciona Edit NombreProyecto.csproj.
      3. Localizar el elemento ProjectTypeGuids y remover el GUID de proyecto MVC 4, {E3E379DF-F4C6-4180-9B81-6769533ABE47}.
      4. Guarda los cambios y cierra el archivo.
      5. Haz click derecho sobre el proyecto y selecciona Reload Project.

@gjbellmann

Fuente: ASP.NET

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.