Подтвердить что ты не робот

Перенос моего приложения MVC 3 в MVC 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.237

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

4b9b3361

Ответ 1

Используйте 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:

Изменить Razor с 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

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

Ответ 3

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

Есть два места для исправления:

  • В корневом 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>
  • В папке "Представления" имеется файл web.config. Проверяя этот файл, вы увидите, что он ссылается на версию 1. Заменить весь файл web.config в папке Views с новым файлом web.config. Сделайте резервную копию старого файла web.config на всякий случай. Чтобы получить новый web.config для папки Views, вы создаете новое приложение MVC4 для интрасети. Перейдите в папку "Представления". Скопируйте файл Web.Config из папки Views нового приложения в папку Views сломанного приложения.

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

Ответ 4

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


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

Ответ 5

Повторная установка пакетов 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>

Ответ 6

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

UPDATE:

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

Microsoft.Web.Samples.PreApplicationStartCode

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

Ответ 7

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

Ответ 9

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

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