Compartir vía


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

por Rick Anderson

ASP.NET MVC 5 y Web API 2 aportan multitud de nuevas características, incluido el enrutamiento de atributos, los filtros de autenticación y mucho más. Consulte https://www.asp.net/vnext para obtener más detalles.

En este tutorial se le guiará con los pasos necesarios para actualizar la aplicación a la versión más reciente.

Nota:

Vea Notas de la versión de ASP.NET and Web Tools para Visual Studio 2013 para obtener información sobre los cambios importantes de MVC 4 y Web API a la siguiente versión.

Este artículo fue escrito por Youngjune Hong y Rick Anderson ( @RickAndMSFT )

Pasos de actualización

  1. Haga una copia de seguridad del proyecto. En este tutorial tendrá que realizar cambios en el archivo del proyecto, la configuración del paquete y los archivos web.config.

  2. Para actualizar de Web API a Web API 2, en global.asax, cambie lo siguiente:

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    

    to

    GlobalConfiguration.Configure(WebApiConfig.Register);
    
  3. Asegúrese de que todos los paquetes que usan los proyectos son compatibles con MVC 5 y Web API 2. En la tabla siguiente se muestran los paquetes relacionados con MVC 4 y Web API que debe cambiar. Si tiene un paquete que depende de uno de los paquetes enumerados a continuación, póngase en contacto con los publicadores para obtener las versiones más recientes compatibles con MVC 5 y Web API 2. Si tiene el código fuente de esos paquetes, debe volver a compilarlos con los nuevos ensamblados de MVC 5 y Web API 2.

    Id. de paquete Versión anterior Nueva versión
    Microsoft.AspNet.Razor 2.0.x.x 3.0.0
    Microsoft.AspNet.WebPages 2.0.x.x 3.0.0
    Microsoft.AspNet.WebPages.WebData 2.0.x.x 3.0.0
    Microsoft.AspNet.WebPages.OAuth 2.0.x.x 3.0.0
    Microsoft.AspNet.Mvc 4.0.x.x 5.0.0
    Microsoft.AspNet.Mvc.Facebook 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.Core 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.SelfHost 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.Client 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.OData 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.WebHost 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.Tracing 4.0.x.x 5.0.0
    Microsoft.AspNet.WebApi.HelpPage 4.0.x.x 5.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 <o:p></o:p> Quitado
    Microsoft.AspNet.WebPages.Administration <o:p></o:p> Quitado
    Microsoft-Web-Helpers <o:p></o:p> Microsoft.AspNet.WebHelpers

    Nota:

    Microsoft-Web-Helpers se ha reemplazado por Microsoft.AspNet.WebHelpers. Primero debe quitar el paquete antiguo y, después, instalar el paquete más reciente.

    No hay compatibilidad entre versiones entre los paquetes de ASP.NET principales. Por ejemplo, MVC 5 solo es compatible con Razor 3 y no con Razor 2.

  4. Abra el proyecto en Visual Studio.

  5. Quite cualquiera de los siguientes paquetes NuGet ASP.NET que estén instalados. Los quitará mediante la consola de Administrador de paquetes (PMC). Para abrir PMC, seleccione el menú Herramientas, luego Administrador de paquetes NuGet y, después, Consola del administrador de paquetes. Es posible que el proyecto no incluya todos estos elementos.

    1. Microsoft.AspNet.WebPages.Administration
      Este paquete se agrega normalmente al actualizar de MVC 3 a MVC 4. Para quitarlo, ejecute el comando siguiente en PMC:
      Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
    2. Microsoft-Web-Helpers
      El nombre de este paquete se ha cambiado a Microsoft.AspNet.WebHelpers. Para quitarlo, ejecute el comando siguiente en PMC:
      Uninstall-Package -Id Microsoft-Web-Helpers
    3. Microsoft.AspNet.Mvc.FixedDisplayMode
      Este paquete contiene una solución alternativa para un error en MVC 4 que se ha corregido en MVC 5. Para quitarlo, ejecute el comando siguiente en PMC:
      Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
  6. Actualice todos los paquetes NuGet de ASP.NET mediante PMC. En la Consola del administrador de paquetes, ejecute el comando siguiente:
    Update-Package
    El comando Update-Package sin parámetros actualizará todos los paquetes. Puede actualizar los paquetes individualmente mediante el argumento ID. Para más información sobre el comando de actualización, ejecute get-help update-package.

Actualización del archivo web.config de la aplicación

Asegúrese de realizar estos cambios en el archivo web.config de la aplicación, no en el archivo web.config de la carpeta Views.

Busque la sección <runtime>/<assemblyBinding> y realice los siguientes cambios:

  1. En los elementos con el atributo name "System.Web.Mvc", cambie 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 name "System.Web.Helpers" y "System.Web.WebPages" cambian el número de versión de "2.0.0.0" a "3.0.0.0". Se producirán cuatro cambios, dos en cada uno de los elementos.

    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <!--Two elements removed for Clarity -->
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <!--WebGrease element removed for Clarity -->
      </assemblyBinding
    
  3. Busque la sección <appSettings> y actualice 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. Quite los niveles de confianza distintos de Full. Por ejemplo:

    <securityPolicy>
       <!--<trustLevel name="Medium"  policyFile="web_mediumtrust.config"/>-->
    </securityPolicy>
    

Actualización de los archivos web.config en la carpeta Views

Si la aplicación usa áreas, también tendrá que actualizar cada archivo web.config de la subcarpeta Views de cada carpeta Area.

  1. Actualice todos los elementos que contienen "System.Web.Mvc" de la versión "4.0.0.0" a la versión "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" />
          <!--Elements removed for Clarity.-->
        </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. Actualice todos los elementos que contienen "System.Web.WebPages.Razor" de la versión "2.0.0.0" a la versión "3.0.0.0". Si esta sección contiene elementos "System.Web.WebPages", actualícelos de la versión "2.0.0.0" a la versión"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 ha quitado el paquete NuGet Microsoft-Web-Helpers en un paso anterior, instale Microsoft.AspNet.WebHelpers con el siguiente comando en PMC:
    Install-Package -Id Microsoft.AspNet.WebHelpers

  4. Si la aplicación usa el método User.IsInRole(), agregue lo siguiente al archivo Web.config.

    <system.webServer>
        <modules>
          <remove name="RoleManager" />
        </modules>
      </system.webServer>
    

Pasos finales

Compile y pruebe la aplicación.

Quite el GUID del tipo de proyecto MVC 4 de los archivos del proyecto.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y luego seleccione Descargar proyecto.
  2. Haga clic con el botón derecho en el proyecto y seleccione Editar NombreDelProyecto.csproj.
  3. Busque el elemento ProjectTypeGuids y, después, quite el GUID del proyecto de MVC 4, {E3E379DF-F4C6-4180-9B81-6769533ABE47}.
  4. Guarde y cierre el archivo del proyecto abierto.
  5. Haga clic con el botón derecho en el proyecto y seleccione Recargar proyecto.