it-roy-ru.com

Не удается загрузить сборку System.Web.Cors после вызова Microsoft.Owin.Cors

Когда я проверяю ссылку сборки System.Web.Cors в обозревателе решений, Version это 5.2.3.0 . Свойство Specific Version имеет значение False. Путь к локальной папке проекта bin. При проверке свойств .dll из проводника, версия продукта и версия файла. также 5.2.3 .

Мой Web.config

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

Мой packages.config (я думаю, что проблемная сборка - это Microsoft.AspNet.WebApi.Cors, но я включил еще одну здесь с похожим названием):

<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />

В этой строке выдается ошибка Startup.cs

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

Вот полная ошибка:

System.IO.FileLoadException was unhandled by user code
  FileName=System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  FusionLog==== Pre-bind state information ===
LOG: DisplayName = System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///P:/project-z4a/project-z4a/
LOG: Initial PrivatePath = P:\project-z4a\project-z4a\bin
Calling Assembly : Microsoft.Owin.Cors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: P:\project-z4a\project-z4a\web.config
LOG: Using Host configuration file: D:\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///P:/project-z4a/project-z4a/bin/System.Web.Cors.DLL.
WRN: Comparing the Assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of Assembly (hr = 0x80131040). Probing terminated.

  HResult=-2146234304
  Message=Could not load file or Assembly 'System.Web.Cors, Version=5.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)
  Source=Microsoft.Owin.Cors
  StackTrace:
       at Microsoft.Owin.Cors.CorsOptions.get_AllowAll()
       at z4a_dsa.Startup.Configuration(IAppBuilder app) in P:\project-z4a\project-z4a\Startup.cs:line 23
  InnerException: 

Итак, я вижу, что он ожидает v5.0.0.0, но я не могу видеть, где, и почему он звонит для этой версии.

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

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, затем Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, затем Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • Понизил Microsoft.AspNet.WebApi.Cors до v5.0.0.0 через окно диспетчера пакетов.

Я еще не являюсь экспертом в .NET, и это четвертое появление одной и той же ошибки каждый раз с разной сборкой, так как я запустил новый пустой проект с проверкой Web Api. И я установил пакет z4a-foundation-scaffold-auth в свой проект. Я определенно буду признателен за некоторые объяснения моих пробелов в знаниях здесь!

EDIT: Использовал ILDASM.exe для просмотра сборки Microsoft.Owin.Cors. Нашел его указанным System.Web.Cors v5.0.0.0 в своем определении манифеста. Я думаю, мой вопрос сейчас, как это исправить?

18
Caleb Faruki

Оказывается, System.Web.Cors.dll не входит в пакет Microsoft.AspNet.WebApi.Cors. Это происходит из пакета Microsoft.AspNet.Cors.

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

Это решило немедленную ошибку.

Если у вас есть сценарий, в котором вам нужны две разные версии System.Web.Cors.dll, я бы предложил следующее решение:

  1. Используя диспетчер пакетов, измените версию Microsoft.AspNet.Cors на версию, которую Microsoft.Owin.Cors запрашивает в своем определении манифеста.
  2. Используя командную строку разработчика для Visual Studio (запустите от имени администратора), перейдите в папку с пакетом для нового версии Microsoft.AspNet.Cors, где находится * System.Web.Cors.dll **.
  3. Выполните следующую команду: gacutil -i System.Web.Cors.dll.
  4. Вернитесь к диспетчеру пакетов и измените Microsoft.AspNet.Cors на ту версию, которую вы изначально хотели.

Этот метод просто загружает нужную версию DLL-файла в папку пакетов вашего решения. Затем вы используете gacutil.exe для добавления этой версии .dll в глобальный кэш сборок. Visual Studio сначала ищет нужные версии DLL в GAC, а затем в локальном проекте.

26
Caleb Faruki

запустите эту команду в PM (менеджер пакетов)

Пакет установки Microsoft.AspNet.Cors - Версия 5.2.3.0

2
virender