Я нашел старые сообщения, связанные с NodaTime, требующие Json.Net v4.5, но это было исправлено. Кажется, я вижу то же самое с NodaTime.Serialization.JsonNet.
Самый простой способ воспроизвести эту ошибку: добавляя и удаляя NodaTime.Serialization.JsonNet (через NugGet) в проект VS в моем решении, я получаю ошибки привязки/загрузки сборки во время выполнения для Json.Net v4.5 (у меня v 6. х) установлен. Когда я удаляю NodaTime.Serialization.JsonNet, все хорошо.
NodaTime сам по себе в порядке - просто когда я добавляю NodaTime.Serialization.JsonNet, возникает ошибка.
Кто-нибудь еще сталкивался с этой проблемой?
Еще немного информации:
Я еще больше сузил этот вопрос и изолировал проблему таким образом, что она возникает только при вызове метода WCF из среды выполнения PowerShell. NodaTime.Serialization.JsonNet отлично работает только в тестах WCF.
При вызове «ConfigureForNodaTime» ошибка:
Не удалось загрузить файл или сборку «Newtonsoft.Json, версия = 4.5.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed» или одну из ее зависимостей. Система не может найти указанный файл.
Я продолжу смотреть на это, но хотел предоставить обновление.
Дополнительная информация:
=== Pre-bind state information ===
LOG: DisplayName = Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
(Fully-specified)
LOG: Appbase = file:///S:/_Jp/DevProjCommon/__TEST/__TEST/bin/x64/Debug/
LOG: Initial PrivatePath = NULL
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: S:\_Jp\DevProjCommon\__TEST\__TEST\bin\x64\Debug\TestApp.vshost.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
LOG: Attempting download of new URL file:///S:/_Jp/DevProjCommon/__TEST/__TEST/bin/x64/Debug/Newtonsoft.Json.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
app.config (к вашему сведению):
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
Джон, Мэтт:
Когда я открыл исходный код, настройки проекта NodaTime.Serialization.JsonNet ссылаются на «C:\Program Files\Microsoft SDK\Windows Azure.NET SDK\v2.3\ref\Newtonsoft.Json.dll», v4.0.30319, 4.5. .0.0, правда
Возможно, при создании файлов проекта CS разрешается этот путь с учетом следующих настроек:
<ItemGroup Condition="'$(Portability)' == 'Desktop'">
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\lib\jsonnet\Net35\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Portability)' == 'PCL'">
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\lib\jsonnet\Portable\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
Если я обойду метод расширения «ConfigureForNodaTime» и попытаюсь добавить преобразователи NodaTime в экземпляр сериализатора во вспомогательном методе, возникнет та же ошибка. Так что, говоря конкретно, я не могу пройти мимо добавления преобразователей. Я не могу перейти к вспомогательному методу, который добавляет преобразователи, не сталкиваясь с исключением загрузки сборки.
Я также смог воспроизвести это за пределами PowerShell, в консольном приложении, которое ссылается на мою библиотеку веб-API и сборку сериализации Json.Net.
Я собираюсь добавить исходный код в свой проект (по сравнению с этим тестовым проектом) и перекомпилировать, чтобы посмотреть, решит ли это проблему.
Обновлять:
Когда я загружаю решение «Все» (источник) и пытаюсь собрать, я обнаружил предупреждение ниже. В качестве эксперимента я изменил целевую (.net) платформу на v4.5 с клиента v3.5, и предупреждение исчезло.
Первичная ссылка «Newtonsoft.Json, версия = 4.5.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed, processingArchitecture = MSIL» не может быть разрешена, поскольку она косвенно зависит от сборки .NET Framework «System.Runtime.Serialization.Formatters». .Soap, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a», которая имеет более высокую версию «4.0.0.0», чем версия «2.0.0.0» в текущей целевой платформе. NodaTime.Сериализация.JsonNet
Обновление: хотя у меня еще нет дымящегося пистолета, я могу подтвердить, что избавление от проблем с зависимостями Nuget не устранило проблему (это было в моих подозрениях). Пытаясь найти подставки для книг, я добавил в свое решение исходный код для Json.Net и NodaTime, чтобы получить больший контроль.
Успешным обходным решением было изменение целевой платформы в проектах NodaTime на .NET v4.5. v4.0 не работал, v4.5 работал. Это не «исправление» для NodaTime (которое мне действительно нравится, кстати) как таковое, поскольку одна из целей состоит в том, чтобы сделать его доступным для широкого круга приложений, которые могут не использовать последнюю версию .NET framework. Но это (я надеюсь) точка данных, которая может оказаться полезной при диагностике возможных изменений (если это необходимо для других).
Сейчас я испытываю нехватку времени, но я обязуюсь в конечном итоге найти дымящийся пистолет в моем конкретном случае на тот случай, если кто-то еще может столкнуться с ним в будущем.
С уважением, Дж.П.