Не удалось загрузить файл или сборку "System.Web.Mvc, Version = 3.0.0.0, проблема Elmah.MVC
Локально - мое приложение MVC 4, asp.net, С# отлично работает в IIS 8/Windows 8.
При развертывании в Windows Server 2008 я получаю эту ошибку:
Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
и
[FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
Elmah.Mvc.Bootstrap.Initialize() +0
[InvalidOperationException: The pre-application start initialization method Initialize on type Elmah.Mvc.Bootstrap threw an exception with the following error message: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).]
System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +12881963
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +12881672
System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath) +240
System.Web.Compilation.BuildManager.ExecutePreAppStart() +152
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1151
[HttpException (0x80004005): The pre-application start initialization method Initialize on type Elmah.Mvc.Bootstrap threw an exception with the following error message: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881108
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722297
Это происходит, если я выбираю "Только файлы, необходимые для запуска этого приложения", из раскрывающегося списка "Элементы для развертывания" в свойствах проекта/в пакете/публикации в Интернете.
Если я выбираю "все файлы в этом проекте", он отлично работает.
Я думаю, Elmah полагается на более старую версию MVC или что-то в этом роде - как я могу исправить это, не загружая все файлы?
Каков наилучший способ решения таких ситуаций?
Спасибо.
Ответы
Ответ 1
У меня была такая же проблема с использованием MVC4 с Ninject, созданным для .Net 4.5
Чтобы исправить это, мне пришлось добавить перенаправление привязки к моему файлу Web.config:
(в конце файла, непосредственно перед тегом </configuration>
)
<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="1.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>
<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>
</assemblyBinding>
</runtime>
Это заставляет веб-сервер использовать System.Web.Mvc 4.0.0.0
вместо старой версии.
Ответ 2
Существуют некоторые процедуры, используемые для исправления проблемы, и если перенаправление привязки в web.config
не решит проблему, вы можете попробовать выполнить следующие шаги:
1) В дереве Visual Studio Solution Explorer щелкните правой кнопкой мыши на References под вашим веб-проектом и выберите Управление пакетами NuGet.
2) Перейдите на вкладку "Обзор" и выберите nuget.org
качестве источника пакета.
3) Найдите и установите следующие пакеты: Ninject
, Ninject.Web.Common
и Ninject.MVC5
.
Также лучше обновить пакеты, в частности Microsoft ASP.NET MVC
на вкладке "Обновления" в управлении пакетами NuGet.
Надеюсь это поможет...
Ответ 3
<dependentAssembly>
***<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0"*** newVersion="5.2.7.0" />
</dependentAssembly>
Проверьте правильные версии есть
Ответ 4
Вы уверены, что используете ASP.NET MVC (контроллеры просмотров и т.д.)? или является вашим веб-приложением исключительно с помощью ASP.NET WebAPI? Если это так, вы должны установить пакет ElMAH NuGet и не Elmah.MVC.
Только для приложений ASP.NET WebAPI я бы рекомендовал пакет Emah.Contrib.WebAPI. Этот пакет также можно установить через NuGet.
Ответ 5
На странице с ошибкой у меня было следующее:
LOG: Перенаправление, обнаруженное в файле конфигурации приложения: 5.1.0.0 было перенаправлено на 5.2.3.0.
Поэтому мне пришлось изменить эту строку в файле web.config на версию 5.1.0.0, и она сработала!
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.1.0.0" />
<!--<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> Older line -->
</dependentAssembly>
Я думаю, что это связано с проблемой версии, когда я загрузил код из TFS
Надеюсь, что это поможет
Ответ 6
Добавьте ниже код в web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>