#asp.net-mvc-3 #migration #razor
#asp.net-mvc-3 #миграция #razor
Вопрос:
Я действительно не знаю, что делать, я следую этой статье, в которой показано, как перенести мое приложение MVC 3 вручную .
Я выполнил все шаги, но при запуске моего приложения возникает следующая ошибка:
Ошибка сервера в приложении ‘/’.
Не удалось загрузить файл или сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Ошибка источника:
Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местоположении исключения можно определить с помощью трассировки стека исключений, приведенной ниже.
Трассировка загрузки сборки: следующая информация может быть полезной, чтобы определить, почему не удалось загрузить сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’.
WRN: ведение журнала привязки сборки отключено. Чтобы включить ведение журнала сбоев привязки сборки, установите значение реестра [HKLM Software Microsoft Fusion!Включить журнал] (DWORD) на 1. Примечание: существует некоторое снижение производительности, связанное с протоколированием сбоев привязки сборки. Чтобы отключить эту функцию, удалите значение реестра [HKLM Software Microsoft Fusion!Включить журнал].
Трассировка стека:
[FileLoadException: не удалось загрузить файл или сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)]
Microsoft.Web.Samples.Предварительный код запуска приложения.Start() 0[Исключение InvalidOperationException: метод инициализации перед запуском приложения запускается при вводе Microsoft.Web.Samples.PreApplicationStartCode выдал исключение со следующим сообщением об ошибке: не удалось загрузить файл или сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040).]
System.Web.Compilation.BuildManager.invokeprestartinitmethod(методы ICollection`1) 423
System.Web.Compilation.BuildManager.вызовprestartinitmethods() 306
System.Web.Hosting.Среда размещения.Инициализировать (ApplicationManager AppManager, IApplicationHost AppHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, исключение appDomainCreationException) 677[HttpException (0x80004005): метод инициализации перед запуском приложения запускается при вводе Microsoft.Web.Samples.PreApplicationStartCode выдал исключение со следующим сообщением об ошибке: не удалось загрузить файл или сборку ‘System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040).]
System.Web.HttpRuntime.FirstRequestInit(контекст HttpContext) 9079340 System.Web.HttpRuntime.Обеспечьте firststrequestinit(контекст 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 версии 2.0.
Ответ №1:
Используйте NuGet и добавьте пакет Microsoft.AspNet.Mvc (Microsoft Asp.Net Mvc 4). Это должно обновить ваши ссылки. См.:
Вам нужно будет обновить ссылки на сборки в вашем 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>
Просмотры/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>
Комментарии:
1. Я потерял поддержку intellisense VS 2010 на странице razor после изменений. пример; «@model MyClass» выглядит неправильно, но работает. что я должен сделать, чтобы вернуть поддержку intellisense?
2. Перейдите в меню Правка -> IntelliSense -> Обновить локальный кэш и 2) Нажмите Ctrl Shift R
3. Кроме того, мне также пришлось удалить a
<add key="webpages:Version" value="1.0.0.0"/>
, который у меня был в моей корневой конфигурации.4. Я получаю ту же проблему после выполнения шагов, упомянутых выше. Я получаю ошибки времени компиляции 1. Не удалось загрузить тип ‘System.Web.Mvc.ViewUserControl’ И 2. Не удалось загрузить тип ‘System.Web.Mvc.ViewPage И 3. Не удалось загрузить тип ‘System.Web.Mvc.ViewMasterPage, хотя эта ошибка относится только к одному из моих проектов MVC. Остальные работают нормально, и я проверил, что классы, упомянутые в приведенном выше списке, действительно существуют в коде. Хммм … это ошибка, которая должна возникать во всех моих проектах обновления, а не только в одном. Любая помощь приветствуется
Ответ №2:
Вы забыли обновить ссылки в ViewsWeb.Config
? Ссылки в нем используются для создания страниц просмотра.
Комментарии:
1. Я уже проверил это, как вы можете видеть в комментариях ниже.
Ответ №3:
Я предположил, что у вас есть веб-приложение для внутренней сети MVC3, при обновлении с MVC3 до MVC4 с помощью NuGet ваше приложение теперь ссылается на System.Web.WebPages.Razor версии 2.0.0.0, А НЕ на System.Web.WebPages.Razor версии 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>
- В папке Views есть файл web.config. Проверив этот файл, вы увидите, что он ссылается на версию 1. Замените весь файл web.config в папке Views новым файлом web.config. На всякий случай сделайте резервную копию старого файла web.config. Чтобы получить совершенно новый web.config для папки Views, вы создаете новое приложение MVC4 для интрасети. Перейдите в папку Views. Скопируйте файл Web.Config из папки Views нового приложения в папку Views неработающего приложения.
Надеюсь, это поможет!
Ответ №4:
Переустановка пакетов 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>
Ответ №5:
Выполняли ли вы глобальный поиск System.Web.WebPages.Razor, Version = 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 …
Комментарии:
1. Я просмотрел все свое решение, нет смысла ссылаться на версию 1.0. Даже отредактированные файлы .csproj и .sln ищут эту ссылку. Но я не нашел.
Ответ №6:
Проверьте web.config в папке views.
Обновить:
Этот бит выглядит подозрительным.
Microsoft.Web.Samples.Предварительный код запуска приложения
Ссылаетесь ли вы на какие-либо примеры библиотек приложений, например, MVC futures или что-то в этом роде?
Комментарии:
1. Уже проверил все, нет ничего, указывающего на версию 1.0. Смотрите Корневой Web.config в: gist.github.com/1265901
2. Я не понимаю. Я ничего не нашел в web.config с
Microsoft.Web.Samples.PreAppliaction...
использованиемElmah
,Melezes
,Mvc.Mailer
иAutoMapper
3. Я также использую эти библиотеки DLL ..
Microsoft.Web.Samples.ImageOptimizationFramework
иMicrosoft.Web.Samples.SpriteHelper
.. Но я не понимаю, как это может вызвать эту ошибку. Если это то, что является причиной этого.4. @RidermandeSousaBarbosa — Ну, очевидно, что эти dll ссылаются на Razor и запрашивают версию 1.0. Очевидно, что проблема заключается в том, что пространства имен одинаковы.
Ответ №7:
В моем приложении использовался сторонний пакет AspNetSprites-MVC и razorhelper. Переустановил этот пакет, и ошибка ссылки была исправлена.
Ответ №8:
Это еще один пакет Nuget, который вы можете использовать для обновления mvc 3 до mvc 4 https://nuget.org/packages/UpgradeMvc3ToMvc4
Ответ №9:
это очень просто, когда вы обновляетесь до MVC 4.0.0.0 , но webconfig в решении по-прежнему указывает на MVC 3.0.0.0.0. так что просто замените версию MVC 3.0.0.0.0. на 4.0.0.0.0
Сделайте то же самое с другими сборками, чтобы проверить версию сборки, проверьте свойства соответствующей сборки в ссылках в вашем проекте.