我发现与NodaTime相关的旧帖子需要Json.Net v4.5,但这是固定的。我似乎看到与NodaTime.Serialization.JsonNet一样的事情。可能的NodaTime.Serialization.JsonNet需要Json.NET v 4.5 bug?
最简单的重现此错误的方法:通过添加和删除NodaTime.Serialization.JsonNet(通过NugGet)到我的解决方案中的VS项目,我得到Json.Net v4.5的运行时程序集绑定/加载错误(I已安装v 6.x)。当我删除NodaTime.Serialization.JsonNet时,一切都很好。
NodaTime本身就很好 - 它只是当我添加NodaTime.Serialization.JsonNet时发生错误。
是否有其他人遇到过这个问题?
一些详细信息:
我已经进一步缩小下来,并且将问题使得其仅当WCF方法是从PowerShell运行时内调用发生。 NodaTime.Serialization.JsonNet在仅WCF测试中工作得很好。
在调用“ConfigureForNodaTime”时,错误是:
无法加载文件或程序集“Newtonsoft.Json,版本= 4.5.0.0,文化=中性 公钥= 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 SDKs \ Windows Azure.NET SDK \ v2.3 \ ref \ Newtonsoft.Json.dll',v4.0.30319,4.5.0.0,True
建设解决给定的这条道路,这些设置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之外重现这一点,在控制台应用程序中引用我的web api库和Json.Net序列化程序集。
我打算将源代码添加到我的项目(与此测试项目相比)并重新编译以查看是否可以解决此问题。
更新:
当我打开“所有”的解决方案(源),并尝试建立我发现下面的警告。作为一个实验,我从v3.5客户端将目标(.net)框架更改为v4.5,警告消失了。
无法解析主要引用“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed,processorArchitecture = MSIL”,因为它对.NET Framework程序集“System.Runtime .Serialization.Formatters.Soap,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“,它具有比当前目标框架中的版本”2.0.0.0“更高的版本”4.0.0.0“。 NodaTime.Serialization.JsonNet
更新: 虽然我还没有确凿的证据,我可以证实,摆脱的依赖的NuGet问题自己并没有缓解这个问题(即一个是在我的怀疑)。为了找到书夹,我将Json.Net和NodaTime的源代码添加到了我的解决方案中,以获得更好的控制。
成功的解决方法是将NodaTime项目上的目标框架更改为.NET v4.5。 v4.0没有工作,v4.5没有。这对于NodaTime来说并不是一个“修复”(我真的很喜欢,因为它本身),因为其中一个目标是使其可用于广泛的应用程序,可能不会使用最新的.NET框架版本。但是(我希望)一个数据点可能对诊断可能的变化(如果需要的话)有用。
我现在处于相当的时间压力之下,但我会承诺最终在我的特殊情况下找到吸烟枪,以防其他人在将来遇到它。
向那,JP
如果没有看到错误信息,很难确切地说出错。 NuGet包只需要Json.NET> = 4.5.11,所以我希望它可以工作。你可以在一个微小的控制台应用程序中重现吗? –
嗨,乔恩,你好吗,先生! – ivnext
我无法在控制台应用程序中重现该问题,至少尚未。 这是一个相当复杂的应用程序(PowerShell二进制模块,WCF客户端等)。我进一步缩小了它的范围:执行'ConfigureForNodaTime'语句时发生异常。 这比我原来的评论更具体。 :)如果我注释掉该声明,则不会发生错误。 谢谢! -JP – ivnext