我有一个项目在 Visual Studio 中运行良好。对于使用 Visual Studio Code 的 QA 测试人员来说,它也运行良好。
长话短说,我的旧计算机被毁了,我正在尝试让该项目在新计算机上运行。当然,我遇到的第一个问题是,当我克隆项目时,我不再有 local.settings.json 文件。所以我创建了它,但我无法让应用程序识别它的存在。我与其他项目进行了比较,并对 .csproj 文件进行了修改,以确保一切都相同,但没有效果。然后我在 Startup.cs 文件中添加了一行到
.AddJsonFile("local.settings.json")
。这样做并没有使无法确定项目语言的消息消失,但它确实添加了一个新错误:“值不能为空(参数“provider”)。我还要提到的是,我之前不需要在启动中专门添加该文件。
哦,在我添加
.AddJsonFile()
行之前,它告诉我“需要‘FUNCTIONS_WORKER_RUNTIME’设置。通过添加该行,我能够将该错误替换为令人难以置信的模糊 Value cannot be null. (Parameter 'provider')
错误。
如果我尝试使用 VS Code 运行,我会添加适当的命令以让它了解该语言;但我不知道如何在 Visual Studio 中执行此操作,我不从命令行运行它,而只是单击播放。而且,无论如何,我认为这不是主要问题。
所以这是一个两个问题:
当我只是单击“播放”而不是在可以添加参数的终端中输入命令时,如何在 Visual Studio 中指定语言?
到底如何解决
Value cannot be null. (Parameter 'provider')
错误???我已经多次看到此错误,而且一直是因为我尝试更新某些 nuget 包。每次发生这种情况时,在调查之后,我总是将包恢复到之前的状态,因为我无法解决问题。这非常令人沮丧,因为我使用的包之一是过时的 Serilog 包......但我根本不知道如何克服这个错误。在不同的地方有一些关于它的线索,但在浪费了很多时间之后,这似乎是一条含糊不清的消息,而且我还没有掌握正确解决它所需的技能。所以...请帮忙!
导致此错误的原因可能有多种。
Program.cs
文件和功能代码文件对于 isolated process
是正确的。.NET
版本中受支持。host.json
正确。Runtime
在 local.settings.json
Isolated Process
:program.cs
:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
host.Run();
Function1.cs
:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace FunctionApp16
{
public class Function1
{
private readonly ILogger<Function1> _logger;
public Function1(ILogger<Function1> logger)
{
_logger = logger;
}
[Function("Function1")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
host.json
:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Inprocess
Program.cs
型号中没有Inprocess
文件,并且用于Inprocess
的软件包可能会有所不同。确保检查使用了正确的软件包。using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace FunctionApp17
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
}
local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
OUTPUT
: