Не удалось загрузить файл или сборку 'System.Сеть.Mvc, Версия=3.0.0.0, Elmah.Проблема в MVC

локально-мой MVC 4, asp.net, приложение c# отлично работает на 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's 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's 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's 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's 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 или что - то еще-как я могу это исправить, не загружая все файлы?

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

спасибо.

5 ответов


у меня была такая же проблема с использованием MVC4 с Ninject, построенным для .Net 4.5

чтобы исправить это, мне пришлось добавить перенаправление привязки к моей сети.конфигурационный файл: (в конце файла, перед </configuration> tag)

  <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 вместо старой версии.


есть некоторые процедуры, используемые для устранения проблемы, и если перенаправление привязки в web.config не решит проблему, вы можете попробовать следующие шаги, чтобы исправить это:

1) в дереве обозревателя решений Visual Studio щелкните правой кнопкой мыши ссылки в веб-проекте и выберите Управление пакетами NuGet.

2) перейдите на вкладку Обзор и выберите nuget.org как источник пакета.

3) поиск и установка следующие пакеты: Ninject, Ninject.Web.Common и Ninject.MVC5.

также лучше обновить пакеты, особенно Microsoft ASP.NET MVC на вкладке Обновления управления пакетами NuGet.

надеюсь, что это помогает...


вы уверены, что используете ASP.NET MVC (просмотры контроллеров и т. д.)? или ваше веб-приложение использует ASP.NET исключительно WebAPI? Если это так, то вы должны установить только пакет ElMAH NuGet и не Elmah.В MVC.

для ASP.NET WebAPI только приложения, которые я бы рекомендовал Emah.ВНО.Веб-API пакета. Этот пакет также может быть установлен через NuGet.


на странице ошибки у меня было это:

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

надеюсь, что это помогает


добавить ниже код в интернете.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>