我使用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软件包是
我正在本地运行它,还没有在Azure中对其进行测试,但是我需要它在本地工作以进行测试。
从Visual Studio 2017下载的CLI也是2.0.1-beta.25
Visual Studio的Azure功能和Web作业工具版本15.10.2009.0
答案 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
。
删除旧的CLI文件夹%localappdata%\AzureFunctionsTools
。
重新启动VS并创建一个新的Azure函数。等待VS的创建对话框下载新的CLI和模板,直到我们看到更新准备就绪的提示更改。
如果过一会儿看不到更新已准备就绪(可以下载200M个文件),请再次检查%localappdata%\AzureFunctionsTools
。如果仅文件夹2.0.1-beta.25填充了内容,请尝试重复上述步骤或尝试使用update part of this answer进行手动下载,需要访问%localappdata%\AzureFunctionsTools\feed.json
来查找最新版本的下载网址(提要版本= 2.5.2现在)。