Newtonsoft 11.0.0.0无法加载Azure Function App 2.0

Can*_*vas 6 c# azure json.net nuget azure-functions

我使用Azure Http Trigger创建了一个开箱即用的Azure功能应用程序.这给了我下面的代码.我所更新的是我正在将HttpRequest主体转换为我的Helper类.

这是代码

public static class TriggerTest
{
    [FunctionName("TriggerTest")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
    {

        log.Info("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = new StreamReader(req.Body).ReadToEnd();

        Helper data = JsonConvert.DeserializeObject<Helper>(requestBody);

        name = name ?? data?.value;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

public class Helper
{
    public string value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它编译正常,但随后控制台被垃圾邮件与下面

发生了ScriptHost错误

System.Private.CoreLib:执行函数时的异常:TriggerTest.TestingAzure.FunctionApp:无法加载文件或程序集'Newtonsoft.Json,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'.无法找到或加载特定文件(HRESULT异常:0x80131621).System.Private.CoreLib:无法加载文件或程序集'Newtonsoft.Json,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'

所有Nuget软件包都引用了Newtonsoft 11.0.2,这是Microsoft.NET.Sdk.Functions引用的内容.该项目是.NET Standard 2.0项目.我引用的Nuget包是

  • Microsoft.ApplicationInsights v2.7.2
  • Microsoft.Azure.WebJobs.Extensions v3.0.0.-beta8
  • Microsoft.Azure.WebJobs.Extensions.Http v3.0.0-beta8
  • Microsoft.Azure.WebJobs.ServiceBus v3.0.0.-beta5
  • Microsoft-NET-Sdk-Functions v1.0.19 NETStandard,Library v2.0.3
  • Newtonsoft.Json v11.0.2

我在本地运行它并且还没有在Azure中测试它,但是我需要它在本地工作以进行测试.

从Visual Studio 2017下载的CLI也是2.0.1-beta.25

Visual Studio的Azure功能和Web作业工具是15.10.2009.0版

Jer*_*Liu 1

对于 v2 函数,Function sdk 1.0.19(>=1.0.14) 默认引用 Newtonsoft.Jon v11.0.2。该错误是由您的 VS 使用的 CLI 引起的。2.0.1-beta.25太旧了,VS中最新的是2.0.1-beta.38

解决方案是确保下载成功。另外,Microsoft.Azure.WebJobs.ServiceBus应该是3.0.0-beta8

  1. 删除旧的 CLI 文件夹%localappdata%\AzureFunctionsTools

  2. 重新启动 VS 并创建新的 Azure 函数。在创建对话框中等待 VS 下载新的 CLI 和模板,直到我们看到提示更改为“更新已准备就绪”。

    在此输入图像描述

    在此输入图像描述

  3. 如果一段时间后(您这边需要下载 200M 文件)没有看到更新已准备好,请%localappdata%\AzureFunctionsTools再次检查。如果只有文件夹 2.0.1-beta.25 充满了内容,请尝试重复上述步骤或手动更新此答案的部分内容,需要访问%localappdata%\AzureFunctionsTools\feed.json找到最新版本的下载网址(feed version=2.5.2 对现在)。