Не удается загрузить сборку 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>
My 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 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, и это 4-я встречаемость одной и той же точной ошибки с другой сборкой каждый раз, так как я начал новый пустой проект с Web Api
отмеченным. И я установил пакет z4a-foundation-scaffold-auth
в свой проект. Я определенно буду признателен за некоторые объяснения моих пробелов в знаниях здесь!
EDIT: используется ILDASM.exe для просмотра сборки Microsoft.Owin.Cors
. Найдено в нем определение System.Web.Cors v5.0.0.0
. Думаю, теперь мой вопрос - как исправить это?
Ответы
Ответ 1
Выключается System.Web.Cors.dll не из пакета Microsoft.AspNet.WebApi.Cors
. Он исходит из пакета Microsoft.AspNet.Cors
.
Install-Package Microsoft.AspNet.Cors -Version 5.0.0
Это разрешило немедленную ошибку.
Если у вас есть сценарий, в котором вам нужны две разные версии System.Web.Cors.dll, я бы предложил это решение:
- Используя диспетчер пакетов, измените версию
Microsoft.AspNet.Cors
на версию, которая Microsoft.Owin.Cors
запрашивает в определении манифеста.
- Используя командную команду разработчика для Visual Studio (запустите как admin), перейдите к папке пакета для новой версии
Microsoft.AspNet.Cors
, где находится * System.Web.Cors.dll **.
- Выполните следующую команду:
gacutil -i System.Web.Cors.dll
.
- Вернитесь в диспетчер пакетов и измените
Microsoft.AspNet.Cors
на версию, которую вы изначально хотели.
Этот метод просто вытаскивает нужную версию DLL файла в папку "Пакеты решений". Затем вы используете gacutil.exe
, чтобы добавить эту версию .dll в свой глобальный кэш сборок. Visual Studio исследует нужные версии .dll сначала в GAC, а затем в вашем локальном проекте.
Ответ 2
запустите эту команду в PM (менеджер пакетов)
Установочный пакет Microsoft.AspNet.Cors -Version 5.2.3.0