2016-05-17 2 views
1

Пытается обновиться до Newtonsoft.Json версии 8, и я продолжаю получать «Не удалось загрузить файл или сборку» Newtonsoft.Json, Version = 6.0.0.0. Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed ' или одной из его зависимостей. Определение манифеста локализованной сборки не соответствует ссылке на сборку ».Newtonsoft.Json Assembly Conflict - DLL Hell

Нигде мой проект (или любой проект в моем решении) больше не ссылается на версию 6. Я просмотрел интернет и стек обмена, но ни одно из предложений не сработало. У меня есть перечисленные в моем файле web.config:

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> 
</dependentAssembly> 

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

Я полностью расстроен. Если у вас есть какие-то предложения, кроме тех, что уже упоминались во всем Интернете, я был бы рад услышать это.

Я пробовал Fusion (не помогло).

EDIT:

журнала Fusion Ошибка

*** Assembly Binder Log Entry (5/17/2016 @ 1:48:49 PM) *** 

The operation failed. 
Bind result: hr = 0x80131040. No description available. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\WINDOWS\SysWOW64\inetsrv\w3wp.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: DisplayName = Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
(Fully-specified) 
LOG: Appbase = file:///C:/Development/MyApp/Main/Services/MyAppInternal/MY.MyApp.Services.REST/ 
LOG: Initial PrivatePath = C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\bin 
LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\68a38e3a 
LOG: Cache Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\68a38e3a 
LOG: AppName = fd029416 
Calling assembly : MY.MyApp.Services.REST, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\web.config 
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
LOG: GAC Lookup was unsuccessful. 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/68a38e3a/fd029416/Newtonsoft.Json.DLL. 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/68a38e3a/fd029416/Newtonsoft.Json/Newtonsoft.Json.DLL. 
LOG: Attempting download of new URL file:///C:/Development/MyApp/Main/Services/MyAppInternal/MY.MyApp.Services.REST/bin/Newtonsoft.Json.DLL. 
LOG: Assembly download was successful. Attempting setup of file: C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\bin\Newtonsoft.Json.dll 
LOG: Entering download cache setup phase. 
LOG: Assembly Name is: Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
WRN: Comparing the assembly name resulted in the mismatch: Major Version 
ERR: The assembly reference did not match the assembly definition found. 
ERR: Setup failed with hr = 0x80131040. 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 

*** Assembly Binder Log Entry (5/17/2016 @ 1:48:49 PM) *** 

The operation failed. 
Bind result: hr = 0x80131040. No description available. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\WINDOWS\SysWOW64\inetsrv\w3wp.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: DisplayName = Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
(Fully-specified) 
LOG: Appbase = file:///C:/Development/MyApp/Main/Services/MyAppInternal/MY.MyApp.Services.REST/ 
LOG: Initial PrivatePath = C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\bin 
LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\68a38e3a 
LOG: Cache Base = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\68a38e3a 
LOG: AppName = fd029416 
Calling assembly : MY.MyApp.Services.REST, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\web.config 
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
LOG: GAC Lookup was unsuccessful. 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/68a38e3a/fd029416/Newtonsoft.Json.DLL. 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/68a38e3a/fd029416/Newtonsoft.Json/Newtonsoft.Json.DLL. 
LOG: Attempting download of new URL file:///C:/Development/MyApp/Main/Services/MyAppInternal/MY.MyApp.Services.REST/bin/Newtonsoft.Json.DLL. 
LOG: Assembly download was successful. Attempting setup of file: C:\Development\MyApp\Main\Services\MyAppInternal\MY.MyApp.Services.REST\bin\Newtonsoft.Json.dll 
LOG: Entering download cache setup phase. 
LOG: Assembly Name is: Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed 
WRN: Comparing the assembly name resulted in the mismatch: Major Version 
ERR: The assembly reference did not match the assembly definition found. 
ERR: Setup failed with hr = 0x80131040. 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 

EDIT:

Я прошел через каждый файл проекта в моем решении, и они все ссылки Newtonsoft.Json следующим образом:

<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> 
    <HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> 
    <Private>True</Private> 
</Reference> 
+1

Вы просматривали файл конфигурации из других сред, чтобы убедиться, что он включает в себя переадресацию привязки? – mason

+0

Ошибка сообщает вам все, что вам нужно знать: какая-то сборка в вашем приложении, либо с переадресацией, либо без нее, по-прежнему связана с версией 6. Посмотрите «Main» (ветвь в исходном управлении?), Используйте Find в файлах, используя внешний редактор, используйте журнал Fusion для определения вызывающей сборки, которая запрашивает версию 6. Другой способ также может заключаться в том, что какая-то ссылка тянет в версии 6 (потому что она не была обновлена ​​до 8) и эта версия 6 заканчивается в вашем каталоге bin, в результате чего ваша основная сборка не сможет загрузить свою ссылку. – CodeCaster

+0

Да, и я даже сделал «Get-Project -All | Add-BindingRedirect» в консоли диспетчера пакетов. Я уничтожил все и вернул его, удалил ящик, сделал чистый, сделал перестройку. –

ответ

0

Ну, не ответ, который я искал, но он решил мою проблему. Я вернул Newtonsoft.Json к версии 6. Это избавило от ошибки времени выполнения. Я действительно не мог позволить себе тратить больше времени на устранение проблемы, которая не должна была быть проблемой.

Выполняя все мои проблемы, я обнаружил, что многие из моих зависимостей сторонних разработчиков полагаются на Newtonsoft.Json (в разных версиях). WebApi 2.2 нуждается в версии 6. Некоторые другие хотят версии 5.

Это сочетание требований к версии было причиной того, что была создана bindingRedirect. Поэтому моя проблема действительно связана с тем, что bindingRedirect не работает так, как было разработано.

Смежные вопросы