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

Не удалось загрузить файл или сборку "System.Web.Mvc". Как использовать правильную ссылку?

У меня есть приложение, построенное на веб-формах ASP.NET, которое также поддерживает MVC 5. В моем проекте были включены MVC 5 API-контроллеры, для которых мне пришлось обновить Json с версии 4.5 до 7.0. После внесения этих изменений при запуске приложения я получаю следующую ошибку:

Не удалось загрузить файл или сборку "System.Web.Mvc" или один из зависимостей. Установленное определение манифеста сборки не сопоставить ссылку на сборку. (Исключение из HRESULT: 0x80131040)

Я проверил ссылку для System.Web.Mvc. В версии времени запуска диалогового окна свойств v4.0.30319 и версии 5.0.0.0. В web.config сборки устанавливаются следующим образом:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="AntiXssLibrary" publicKeyToken="d127efab8a9c114f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <!--<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>-->
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
</assemblyBinding>

Полный журнал ошибок показан ниже:

=== Информация о состоянии предварительной привязки === LOG: DisplayName = System.Web.Mvc(Partial) WRN: информация о частичной привязке была предоставлена ​​для сборка: WRN: Название сборки: System.Web.Mvc | Идентификатор домена: 2 WRN: A частичное связывание происходит, когда отображается только часть отображаемого имени сборки. предоставлена. WRN: Это может привести к неправильному загрузке связующего сборка. WRN: рекомендуется предоставить полностью определенный текстовый идентичность для сборки, WRN: состоит из простого имени, версии, культуры и токена открытого ключа. WRN: см. Технический документ http://go.microsoft.com/fwlink/?LinkId=109270 для получения дополнительной информации и общие решения этой проблемы. LOG: Appbase = file:///C:/Пользователи/Ahmed/Documents/Visual Studio 2013/Проекты/MediaSoft/Project/С#/YuClone/YuClone/LOG: Начальная PrivatePath = C:\Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\С#\YuClone\YuClone\bin Вызов сборка: (Неизвестно). === LOG: Это связывание начинается с контекста нагрузки по умолчанию. LOG: Использование файла конфигурации приложения: C:\Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\С#\YuClone\YuClone\web.config LOG: Использование файла конфигурации хоста: C:\Users\Ahmed\Documents\IISExpress\config\aspnet.config LOG: Использование файл конфигурации машины из C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config. LOG: Политика не применяется к ссылке в настоящее время (закрытая, пользовательская, частичная или привязка к местоположению). LOG: Попытка загрузка нового URL-адреса file:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL. LOG: Попытка загрузка нового URL-адреса file:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL. ЖУРНАЛ: Попытка загрузки нового файла URL:///C:/Users/Ahmed/Documents/Visual студия 2013/Проекты/MediaSoft/Проект/С#/YuClone/YuClone/бен/System.Web.Mvc.DLL. LOG: Использование файла конфигурации приложения: C:\Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\С#\YuClone\YuClone\web.config LOG: Использование файла конфигурации хоста: C:\Users\Ahmed\Documents\IISExpress\config\aspnet.config LOG: Использование файл конфигурации машины из C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config. LOG: перенаправление, найденное в файле конфигурации приложения: 5.0.0.0 перенаправлен на 5.2.3.0. LOG: Послеполитическая ссылка: System.Web.Mvc, Версия = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 LOG: Попытка загрузки нового URL-адреса file:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL. LOG: Попытка загрузка нового URL-адреса file:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL. ЖУРНАЛ: Попытка загрузки нового файла URL:///C:/Users/Ahmed/Documents/Visual студия 2013/Проекты/MediaSoft/Проект/С#/YuClone/YuClone/бен/System.Web.Mvc.DLL. WRN: сравнение названия сборки привело к несоответствию: незначительные Версия ERR: не удалось завершить настройку сборки (hr = 0x80131040). Исследование прекращено.

Ниже приведена Трассировка стека

[FileLoadException: не удалось загрузить файл или сборку "System.Web.Mvc" или одной из его зависимостей. Установленное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)]

[FileLoadException: не удалось загрузить файл или сборку. System.Web.Mvc, Версия = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одной из его зависимостей. Установленное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)] System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & ​​амп; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +36
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, сборка доказательствSecurity, RuntimeAssembly reqAssembly, StackCrawlMark & ​​амп; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, Boolean forIntrospection) +21 System.Reflection.Assembly.Load(String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38

[ConfigurationErrorsException: не удалось загрузить файл или сборку 'System.Web.Mvc, Версия = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +738
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +217 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +130
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +170
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +92 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean & isRefAssemblyLoaded) +290
System.Web.Compilation.BuildManager.ExecutePreAppStart() +157
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +531

[HttpException (0x80004005): не удалось загрузить файл или сборку 'System.Web.Mvc, Версия = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(контекст HttpContext) +9924184 System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, контекст HttpContext) +261

Как обновить версию System.Web.Mvc, чтобы указать на правильную сборку?

4b9b3361

Ответ 1

Ошибка была вызвана неправильной привязкой. Я изменил:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

к

  <dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.0.0.0" />

и теперь он работает.

Ответ 2

В моем случае я решил, изменив элементы PageControls и assemblyBinding на config, чтобы соответствовать текущей версии `System.Web.Mvc, которая является 5.2.4.0

PageControls

В разделе PageControls замените версию всех вхождений сборки "System.Web.Mvc" для вашей текущей версии.:

 <pages controlRenderingCompatibilityVersion="4.0" validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"/>
  </controls>

assemblyBinding

На карте элементов assemblyBinding отображаются все предыдущие версии сборки текущей версии, например:

 <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
  </dependentAssembly>

Этот элемент используется любым пакетом ссылок в старой версии.

Как проверить текущую версию "System.Web.Mvc"

Текущую версию System.Web.Mvc можно увидеть на вкладке свойств, выбрав сборку из ссылок на проект, например:

введите описание изображения здесь

Примечание. Я отвечаю на вопрос 2 года, поэтому причины возникновения этой ошибки теперь могут быть разными.