Newtonsoft 11.0.0.0无法在Azure Function App 2.0上加载

时间:2018-09-07 11:39:38

标签: c# azure json.net nuget azure-functions

我使用Azure Http触发器创建了一个现成的Azure Function应用。这给了我下面的代码。我更新的只是将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; }
}

当我尝试运行它时,它可以正常编译,但是控制台显示以下内容

  

发生ScriptHost错误

     

System.Private.CoreLib:执行函数时发生异常:   TriggerTest。 TestingAzure.FunctionApp:无法加载文件或程序集   ‘Newtonsoft.Json,版本= 11.0.0.0,文化=中性,   PublicKeyToken = 30ad4fe6b2a6aeed”。找不到或加载特定的   文件(HRESULT的异常:0x80131621)。 System.Private.CoreLib:   无法加载文件或程序集“ Newtonsoft.Json,版本= 11.0.0.0,   文化=中性,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函数v1.0.19 NETStandard,库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

1 个答案:

答案 0 :(得分: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和模板,直到我们看到更新准备就绪的提示更改。

    enter image description here

    enter image description here

  3. 如果过一会儿看不到更新已准备就绪(可以下载200M个文件),请再次检查%localappdata%\AzureFunctionsTools。如果仅文件夹2.0.1-beta.25填充了内容,请尝试重复上述步骤或尝试使用update part of this answer进行手动下载,需要访问%localappdata%\AzureFunctionsTools\feed.json来查找最新版本的下载网址(提要版本= 2.5.2现在)。