当我的Azure WebJob处理程序启动时,我得到以下异常:
先。fileloadeexception未处理。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed
FusionLog====预绑定状态信息=== LOG: DisplayName =Newtonsoft。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed (full -specified) LOG: Appbase = . LOGfile:///C:/Programming/ConnellCampaigns/src/UploadProcessor/bin/Debug/net46/win7-x64/日志:Initial PrivatePath = NULLMicrosoft.Azure.WebJobs。主机,版本=1.1.2.0,文化=中性,都31 bf3856ad364e35。=== LOG:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C: 程序 ConnellCampaigns src UploadProcessor bin 调试 net46 win7-x64 UploadProcessor.exe.Config日志:使用主机配置文件:日志:使用机器配置文件从C:Windows Microsoft.NET Framework64 v4.0.30319 config machine.config。日志:重定向发现在应用程序配置文件:6.0.0.0重定向到6.0.0.0。日志:Post-policy reference: Newtonsoft。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed日志:尝试下载新的URL文件:///C:/编程/ConnellCampaigns/src/UploadProcessor/bin/调试/net46/win7-x64/Newtonsoft.Json.DLL。WRN:比较程序集名称导致不匹配:重要版本ERR:未能完成程序集的安装(hr = 0x80131040)。调查终止。HResult=-2146234304 Message=无法加载文件或程序集"Newtonsoft。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed'或其依赖项之一。的定位程序集的清单定义与程序集不匹配参考。(Exception from HRESULT: 0x80131040)
= Microsoft.Azure.WebJobs来源。主机加:在Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter1.<EnqueueAsync>d__0.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder
. 1.Start[TStateMachine](TStateMachine&stateMachine)在Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter 1. enqueueasync (Tmessage, CancellationTokenMicrosoft.Azure.WebJobs.Host.Loggers.PersistentQueueLogger.LogHostStartedAsync (HostStartedMessagemessage, CancellationTokenMicrosoft.Azure.WebJobs.Host.Executors.JobHostContextFactory.LogHostStartedAsync (IFunctionIndex函数索引,HostOutputMessageIHostInstanceLogger logger, CancellationToken CancellationToken在Microsoft.Azure.WebJobs.Host.Executors.JobHostContextFactory.d__b.MoveNext ()——抛出异常的前一个位置的堆栈跟踪结束——System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.Azure.WebJobs.Host.Executors.JobHostContextFactory.d__0.MoveNext ()——抛出异常的前一个位置的堆栈跟踪结束——System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.Azure.WebJobs.JobHost.d__f.MoveNext ()——抛出异常的前一个位置的堆栈跟踪结束——System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.Azure.WebJobs.JobHost.d__0.MoveNext ()——抛出异常的前一个位置的堆栈跟踪结束——System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.Azure.WebJobs.JobHost.Start ()在Microsoft.Azure.WebJobs.JobHost.RunAndBlock ()在UploadProcessor.Program。Main(String[] args) in C:ProgrammingConnellCampaignssrcUploadProcessorProgram.cs:line 25InnerException:
只有当我在project.json中指定NewtonSoft的JSON程序集的最新版本- 9.0.1时,才会发生这种情况。
我可以通过指定库的最后一个v6版本(6.0.8)来消除错误。但是这会引入依赖警告。
我不明白为什么Microsoft.Azure.WebJobs.Host坚持使用旧版本的库。它的nuget页面说它兼容任何版本>= 6.0.8
如何解决这个问题?
你上面发布的异常跟踪说明你在应用程序配置文件中有一个绑定重定向:
应用程序配置文件中的重定向:6.0.0.0重定向到6.0.0.0.
尝试将其更改为重定向到实际使用的程序集版本:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
</assemblyBinding>
重要提示:绑定重定向使用程序集版本,而不是文件版本。对于Json。Net 9.0。X,这将是9.0.0.0。如果您尝试使用文件版本作为重定向的newVersion,则重定向将无法工作,因为它与实际程序集的程序集版本不匹配。