微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Azure函数Newtonsoft.Json加载错误

这真让我抓狂.我使用Newtonsoft.Json获取Azure函数的加载错误.

这是一个.netstandard2.0项目,我安装了11.0.2版本.我已经浏览了网页,其他大多数人都使用旧版本的Microsoft.NET.Sdk.Functions:1.0.13但我使用的是1.0.14

请参阅下面的项目文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AzureFunctionsversion>v2</AzureFunctionsversion>
    <RootNamespace>modoapi</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <packagereference Include="Autofac" Version="4.2.1" />
    <packagereference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta5" />
    <packagereference Include="Microsoft.Azure.WebJobs.ServiceBus" Version="3.0.0-beta5" />
    <packagereference Include="Microsoft.NET.Sdk.Functions" Version="1.0.14" />
    <packagereference Include="Newtonsoft.Json" Version="11.0.2" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <copyToOutputDirectory>PreserveNewest</copyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <copyToOutputDirectory>PreserveNewest</copyToOutputDirectory>
      <copyToPublishDirectory>Never</copyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

我查看了我的项目的所有依赖项,他们都指向Newtonsoft.Json 11.0.2.

文件存在于我的输出bin文件夹中.我已经清理了解决方案.已更新至最新的VS和Azure功能以及WebJobs工具15.0.40608.0

功能应用程序启动正常,但是当我向队列添加消息以调用触发器时,我在控制台中收到以下错误.

[12/07/2018 10:56:36] Executed ‘ExecuteWorkItem’ (Failed,
Id=6d87f5e9-c331-4934-a3f3-b9bebf756b54) [12/07/2018 10:56:36]
System.Private.CoreLib: Exception while executing function:
ExecuteWorkItem. test-api: Could not load file or assembly
‘Newtonsoft.Json, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=30ad4fe6b2a6aeed’. Could not find or load a specific
file. (Exception from HRESULT: 0x80131621). System.Private.CoreLib:
Could not load file or assembly ‘Newtonsoft.Json, Version=11.0.0.0,
Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed’.

这是我的功能的签名

public static class ExecuteWorkItem
{
    [FunctionName("ExecuteWorkItem")]
    public static async Task Run(
        [QueueTrigger("work-item")]string queueItem,
        TraceWriter log,
        ExecutionContext executionContext,
        [Inject(typeof(IWorkItemEngine))]IWorkItemEngine workItemEngine,
        [Table("ResultData", Connection = "AzureWebJobsstorage")] CloudTable resultTable,
        [Table("SimulationNodeData", Connection = "AzureWebJobsstorage")] CloudTable simulationNodeTable)
    {}

任何想法现在都会非常感激,唯一似乎有类似问题的人就是这个人:Go to the bottom of his post

他没有回复他的查询,他在Mac环境中,而我在Windows 10上.

任何帮助将非常感激.

提前致谢

解决方法:

对于v2函数,函数sdk 1.0.14认引用Newtonsoft.Jon v11.0.2,不需要显式引用它,与Microsoft.Azure.WebJobs相同.问题是关于VS使用的功能核心工具(CLI).

在本地调试时检查此行的CLI输出.

Starting Host (HostId=xx, InstanceId=xxx, Version=2.0.11651.0, ...)

如果您完全看到Version = 2.0.11651.0,则表示您的VS正在使用旧版本的CLI.

实际上,最新版本的Azure功能和Web作业工具(在VS菜单上,工具>扩展和更新)是15.0.40617.0.此版本使用最新的CLI(主机版本2.0.11888),其中v11 Json.Net得到了很好的支持.更新此扩展可能会解决您的问题.

似乎Visual Studio for Mac仍然利用旧的CLI(主机版本2.0.11651),Mac用户可以下载新的功能核心工具using Homebrew并在内容根路径中运行func start.或者switch update channel将他们的VS更新为最新/预览版本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐