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

Не удалось загрузить файл или сборку "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 или что-то в этом роде - как я могу исправить это, не загружая все файлы?

Каков наилучший способ решения таких ситуаций?

Спасибо.

4b9b3361

Ответ 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>