Обновление ASP.NET MVC 4 и проекта веб-API до ASP.NET MVC 5 и веб-API 2

Рик Андерсон

ASP.NET MVC 5 и веб-API 2 предоставляет множество новых функций, включая маршрутизацию атрибутов, фильтры проверки подлинности и многое другое. Дополнительные сведения см. в статье https://www.asp.net/vnext.

В этом пошаговом руководстве описаны действия, необходимые для обновления приложения до последней версии.

Примечание

Сведения о критических изменениях с MVC 4 и веб-API на следующую версию см. в ASP.NET and Web Tools заметках о выпуске Visual Studio 2013.

Эта статья написана Янгджюном Хонгом и Риком Андерсоном ( @RickAndMSFT )

Шаги обновления

  1. Создайте резервную копию проекта. В этом пошаговом руководстве потребуется внести изменения в файл проекта, конфигурацию пакета и файлы web.config.

  2. Для обновления с веб-API до веб-API 2 в global.asax измените:

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    

    значение

    GlobalConfiguration.Configure(WebApiConfig.Register);
    
  3. Убедитесь, что все пакеты, используемые в проектах, совместимы с MVC 5 и веб-API 2. В следующей таблице показаны пакеты MVC 4 и веб-API, которые необходимо изменить. Если у вас есть пакет, зависящий от одного из перечисленных ниже пакетов, обратитесь к издателям, чтобы получить более новые версии, совместимые с MVC 5 и веб-API 2. Если у вас есть исходный код для этих пакетов, их следует перекомпилировать с новыми сборками MVC 5 и веб-API 2.

    Идентификатор пакета Старая версия Новая версия
    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> Удалено
    Microsoft.AspNet.WebPages.Administration <o:p></o:p> Удалено
    Microsoft-Web-Helpers <o:p></o:p> Microsoft.AspNet.WebHelpers

    Примечание

    Microsoft-Web-Helpers заменены microsoft.AspNet.WebHelpers. Сначала необходимо удалить старый пакет, а затем установить более новый пакет.

    Между основными пакетами ASP.NET нет совместимости между версиями. Например, MVC 5 совместим только с Razor 3, а не с Razor 2.

  4. Откройте проект в Visual Studio.

  5. Удалите любой из следующих ASP.NET установленных пакетов NuGet. Их можно удалить с помощью консоли диспетчера пакетов (PMC). Чтобы открыть PMC, в меню Сервис выберите Диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. Возможно, проект не включает все эти параметры.

    1. Microsoft.AspNet.WebPages.Administration
      Этот пакет обычно добавляется при обновлении с MVC 3 до MVC 4. Чтобы удалить его, выполните следующую команду в PMC:
      Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
    2. Microsoft-Web-Helpers
      Этот пакет был переименован в Microsoft.AspNet.WebHelpers. Чтобы удалить его, выполните следующую команду в PMC:
      Uninstall-Package -Id Microsoft-Web-Helpers
    3. Microsoft.AspNet.Mvc.FixedDisplayMode
      Этот пакет содержит обходную проблему для ошибки в MVC 4, исправленной в MVC 5. Чтобы удалить его, выполните следующую команду в PMC:
      Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
  6. Обновите все ASP.NET пакетов NuGet с помощью PMC. В PMC выполните следующую команду:
    Update-Package
    Команда Update-Package без параметров обновит каждый пакет. Пакеты можно обновлять по отдельности с помощью аргумента ID. Для получения дополнительных сведений о команде update выполните команду get-help update-package .

Обновление файла web.config приложения

Не забудьте внести эти изменения в файл web.config приложения, а не в файл web.config в папке Views .

<runtime>/<assemblyBinding> Найдите раздел и внесите следующие изменения:

  1. В элементах с атрибутом имени System.Web.Mvc измените номер версии с 4.0.0.0 на 5.0.0.0. (Два изменения в этом элементе.)

  2. В элементах с атрибутами имени "System.Web.Helpers" и "System.Web.WebPages" измените номер версии с "2.0.0.0" на "3.0.0.0". Произойдет четыре изменения, по два в каждом из элементов.

    <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. <appSettings> Найдите раздел и обновите веб-страницы:версия с 2.0.0.0 до 3.0.0.0, как показано ниже:

    <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. Удалите все уровни доверия, отличные от Полный. Пример:

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

Обновление файловweb.config в папке Views

Если приложение использует области, необходимо также обновить каждый файлweb.config во вложенной папке Views каждой папки Area.

  1. Обновите все элементы, содержащие System.Web.Mvc, с версии 4.0.0.0 до версии 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. Обновите все элементы, содержащие System.Web.WebPages.Razor, с версии 2.0.0.0 до версии 3.0.0.0. Если этот раздел содержит system.Web.WebPages, обновите эти элементы с версии 2.0.0.0 до версии 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. Если вы удалили Microsoft-Web-Helpers пакет NuGet на предыдущем шаге, установите Microsoft.AspNet.WebHelpers в PMC с помощью следующей команды:
    Install-Package -Id Microsoft.AspNet.WebHelpers

  4. Если приложение использует метод User.IsInRole(), добавьте следующий код в файлWeb.config .

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

Заключительные шаги

Выполните сборку и тестирование приложения.

Удалите GUID типа проекта MVC 4 из файлов проекта.

  1. В Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите пункт Выгрузить проект.
  2. Щелкните проект правой кнопкой мыши и выберите Изменить имя_проекта.csproj.
  3. ProjectTypeGuids Найдите элемент и удалите GUID проекта MVC 4, {E3E379DF-F4C6-4180-9B81-6769533ABE47}.
  4. Сохраните и закройте открытый файл проекта.
  5. Щелкните проект правой кнопкой мыши и выберите Перезагрузить проект.