Миграция моего приложения MVC 3 в MVC 4 - PullRequest
21 голосов
/ 06 октября 2011

Я действительно не знаю, что делать, я следую этой статье , которая показывает, как вручную перенести приложение MVC 3.

Я выполнил все шаги , но при запуске моего приложения возникает следующая ошибка:

Ошибка сервера в приложении '/'.

Не удалось загрузить файл или сборку 'System.Web.WebPages.Razor, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку 'System.Web.WebPages.Razor, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение.Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка загрузки сборки: следующая информация может быть полезна для определения причины сборки 'System.Web.WebPages.Razor, Version= 1.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'не удалось загрузить.

WRN: регистрация привязки сборки отключена.Чтобы включить ведение журнала ошибок привязки сборки, установите для параметра реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) значение 1. Примечание. С журналированием ошибок привязки сборки связано некоторое снижение производительности.Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Трассировка стека:

[FileLoadException: Не удалось загрузить файл или сборку 'System.Web.WebPages.Razor, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)]
Microsoft.Web.Samples.PreApplicationStartCode.Start () + 0

[InvalidOperationException: метод инициализации запуска перед применением Запустите тип Microsoft.Web.Samples.PreApplicationStartCodeвызвала исключительную ситуацию со следующим сообщением об ошибке: Не удалось загрузить файл или сборку 'System.Web.WebPages.Razor, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35' или одну из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040).]
System.Web.Compilation.BuildManager.InvokePreStartInitMethods (методы ICollection`1) + 423
System.Web.Compilation.BuildManager.CallPreStartInitMethods 1033 ().Web.Hosting.HostingEnvironment.Initialize (ApplicationManager AppManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel PolicyLevel, исключение appDomainCreationException) + 677

[HttpException (0x80004005): Способ предварительной инициализации приложения запуска Запуск от типаMicrosoft.Web.Samples.PreApplicationStartCode вызвало исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку 'System.Web.WebPages.Razor, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей,Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040).]
System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +9079340System.Web.HttpRuntime.EnsureFirstRequestInit (контекст HttpContext) +97 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr, контекст HttpContext) + 256

Информация о версии: Microsoft .NET Framework Framework: версия: Microsoft .NET FrameworkASP.NET версия: 4.0.30319.237

Я просмотрел код, но не вижу ссылки на System.Web.WebPages.Razor только в версии 1.0 версии 2.0.

Ответы [ 9 ]

36 голосов
/ 23 августа 2012

Используйте NuGet и добавьте пакет Microsoft.AspNet.Mvc (Microsoft Asp.Net Mvc 4). Это должно обновить ваши ссылки. См:

https://nuget.org/packages/Microsoft.AspNet.Mvc

Вам потребуется обновить ссылки на сборки в вашем файле web.config.

Удалить из корня web.config:

<assemblies>
  <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>

Добавить в корень web.config:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Views / Web.Config:

Изменить бритву с 1.0.0.0 на 2.0.0.0:

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>
2 голосов
/ 28 февраля 2013

Я предполагал, что у вас есть веб-приложение MVC3 Intranet, при обновлении с MVC3 до MVC4 с использованием NuGet ваше приложение теперь ссылается на System.Web.WebPages.Razor версии 2.0.0.0, а не System.Web.WebPages.Razor версии 1.0.0.0 , Вот мой способ разрешения ссылки.

Есть два места, которые нужно исправить:

  1. В корне web.config,

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        . . .
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        . . .
      </assemblies>
    </compilation>
    

изменить версию = 1 .0.0.0 на версию = 2 .0.0.0

Итак, ваша новая ссылка будет выглядеть так:

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        . . .
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        . . .
      </assemblies>
    </compilation>
  1. В папке Views находится файл web.config. Изучив этот файл, вы увидите, что он ссылается на версию 1. Замените весь файл web.config в папке Views новым файлом web.config . Сделайте резервную копию старого файла web.config, на всякий случай. Чтобы получить новый файл web.config для папки Views, вы создаете новое приложение MVC4 для интрасети. Перейдите в папку Views. Скопируйте файл Web.Config из папки Views нового приложения в папку Views сломанного приложения.

Надеюсь, это поможет!

2 голосов
/ 06 октября 2011

Вы забыли обновить ссылки в Views\Web.Config? Ссылки в нем используются для построения страниц просмотра.

1 голос
/ 13 марта 2012

Переустановка пакетов AspNetSprite, как предложено выше, не решает проблему для меня. Но добавление этих строк в раздел runtime \ assemblyBinding корневого файла web.config работает:

    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
1 голос
/ 06 октября 2011

Вы искали в глобальном масштабе System.Web.WebPages.Razor, версия = 1.0.0.0 во всем решении? Вы по-прежнему ссылаетесь на System.Web.WebPages.Razor (версия 1.0.0.0)? Вы ссылаетесь System.Web.WebPages.Razor Версия 2.0.0.0?


[Обновление] Я наконец столкнулся с той же проблемой. Похоже, что один из установленных и удаленных пакетов NuGet не полностью удалил ссылку на System.Web.Razor, которую он использовал. Очистка решения не помогла, потому что DLL не использовалась напрямую веб-приложением. Я наконец заставил его работать, вручную удалив весь каталог bin ...

0 голосов
/ 19 марта 2015

это очень просто, когда вы обновляете до MVC 4.0.0.0, но webconfig в решении все еще указывает на MVC 3.0.0.0.0. поэтому просто замените версию 3.0.0.0.0 MVC. на 4.0.0.0.0

Сделайте то же самое с другими сборками, чтобы проверить версию сборки, проверьте свойства соответствующей сборки в ссылках в вашем проекте.

0 голосов
/ 10 июля 2013

Это еще один пакет Nuget, который вы можете использовать для обновления mvc 3 до mvc 4 https://nuget.org/packages/UpgradeMvc3ToMvc4

0 голосов
/ 06 октября 2011

Мое приложение использовало сторонний пакет, AspNetSprites-MvcAndRazorHelper.Переустановил этот пакет и ошибка ссылки была исправлена.

0 голосов
/ 06 октября 2011

Проверьте web.config внутри вашей папки просмотров.

UPDATE:

Этот бит выглядит подозрительно.

Microsoft.Web.Samples.PreApplicationStartCode

Вы ссылаетесь на какие-либо примеры библиотек приложений, такие как MVC-фьючерсы или что-то в этом роде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...