如何解决“值不能为空。(参数'provider')”和“无法从文件确定项目语言。”

问题描述 投票:0回答:1

我有一个项目在 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 中执行此操作,我不从命令行运行它,而只是单击播放。而且,无论如何,我认为这不是主要问题。

所以这是一个两个问题:

  1. 当我只是单击“播放”而不是在可以添加参数的终端中输入命令时,如何在 Visual Studio 中指定语言?

  2. 到底如何解决

    Value cannot be null. (Parameter 'provider')
    错误???我已经多次看到此错误,而且一直是因为我尝试更新某些 nuget 包。每次发生这种情况时,在调查之后,我总是将包恢复到之前的状态,因为我无法解决问题。这非常令人沮丧,因为我使用的包之一是过时的 Serilog 包......但我根本不知道如何克服这个错误。在不同的地方有一些关于它的线索,但在浪费了很多时间之后,这似乎是一条含糊不清的消息,而且我还没有掌握正确解决它所需的技能。所以...请帮忙!

c# visual-studio azure-functions
1个回答
0
投票

导致此错误的原因可能有多种。

  • 确保您的
    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

作为参考,请检查此文档 作为参考,请检查此SO 链接

© www.soinside.com 2019 - 2024. All rights reserved.