Azure Webjob与NewtonSoft不兼容

时间:2016-10-11 21:48:42

标签: json.net azure-webjobs azure-webjobssdk

我的Azure WebJob处理程序启动时出现以下异常:

  

System.IO.FileLoadException未处理FileName = Newtonsoft.Json,   Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed
  FusionLog ====预绑定状态信息===日志:DisplayName =   Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed(完全指定)LOG:Appbase =   文件:/// C:/程序/ ConnellCampaigns / src目录/ UploadProcessor /斌/调试/ net46 / WIN7-64 /   日志:初始PrivatePath = NULL调用程序集:   Microsoft.Azure.WebJobs.Host,Version = 1.1.2.0,Culture = neutral,   公钥= 31bf3856ad364e35。   ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:   C:\程序\ ConnellCampaigns的\ src \ UploadProcessor \ BIN \调试\ net46 \ win7的-64 \ UploadProcessor.exe.Config   日志:使用主机配置文件:日志:使用机器配置   来自的文件   C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config中。   日志:在应用程序配置文件中找到重定向:6.0.0.0   重定向到6.0.0.0。日志:政策后参考:Newtonsoft.Json,   Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed日志:   试图下载新的URL   文件:/// C:/Programming/ConnellCampaigns/src/UploadProcessor/bin/Debug/net46/win7-x64/Newtonsoft.Json.DLL。   警告:比较程序集名称导致不匹配:重大   版本错误:无法完成装配设置(hr = 0x80131040)。   探测终止。

     

HResult = -2146234304消息=无法加载文件或程序集   ' Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,   公钥= 30ad4fe6b2a6aeed'或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (HRESULT的例外情况:0x80131040)
  Source = Microsoft.Azure.WebJobs.Host StackTrace:          在Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter 1.<EnqueueAsync>d__0.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder 1.启动[TStateMachine](TStateMachine&amp;   的statemachine)          在Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter`1.EnqueueAsync(T   message,CancellationToken cancellationToken)          在Microsoft.Azure.WebJobs.Host.Loggers.PersistentQueueLogger.LogHostStartedAsync(HostStartedMessage)   message,CancellationToken cancellationToken)          在Microsoft.Azure.WebJobs.Host.Executors.JobHostContextFactory.LogHostStartedAsync(IFunctionIndex)   functionIndex,HostOutputMessage hostOutputMessage,   IHostInstanceLogger记录器,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()          在C:\ Programming \ ConnellCampaigns \ src \ UploadProcessor \ Program.cs中的UploadProcessor.Program.Main(String [] args):第25行   的InnerException:

只有在project.json中指定NewtonSoft的JSON程序集的最新版本 - 9.0.1时才会发生这种情况。

我可以通过指定库的最后一个v6问题(6.0.8)来消除错误。但这引入了依赖性警告。

我不明白为什么Microsoft.Azure.WebJobs.Host坚持使用旧版本的库。它的nuget页面说它与任何版本&gt; = 6.0.8兼容。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您在上面发布的异常跟踪表明您的应用程序配置文件中有绑定重定向:

  

在应用程序配置文件中找到重定向: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,重定向将无法工作,因为它不匹配实际程序集的程序集版本。