ConfigurationBuilder无法在azure函数

时间:2018-06-09 09:01:14

标签: c# azure azure-functions

我在VS2017中使用azure函数模板项目并选择版本 2(beta)。我发布了它没有改变它的工作。

我添加了nuget包 Microsoft.Extensions.Configuration 并编写了一条语句来初始化 ConfigurationBuilder

的实例
public static class Function1
{
    [FunctionName("Function1")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
    {
        var cb = new ConfigurationBuilder();// <<<<< added line
        log.Info("C# HTTP trigger function processed a request.");

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

        string requestBody = new StreamReader(req.Body).ReadToEnd();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

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

使用此代码,函数崩溃,500 - 内部服务器错误,我找不到任何理由。

我错过了什么吗?如何访问Azure功能(v2.0)中的配置信息

编辑: 在Compute模拟器中执行throws System.Private.CoreLib:执行函数时出现异常:Function1。 Aweton.Labs.AzureFunc1:无法加载文件或程序集&#39; Microsoft.Extensions.Configuration,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60&#39;。该系统找不到指定的文件。 System.Private.CoreLib:无法加载指定的文件。

4 个答案:

答案 0 :(得分:2)

免责声明:我认为自15.6.3起,我的Visual Studio 2017环境会通过通知服务保持最新状态。

安装程序:创建了新的Azure功能项目(添加新项目,云,Azure功能[ENTER],Azure功能v2预览(.NET标准)) 一旦VS完成恢复依赖关系,将新项目设置为解决方案中的启动点,然后按F5运行本地调试。

VS2017启动dotnet,您可以找到类似

的行

http://localhost:7071/api/Function1

将浏览器导航到URL以确保项目正常工作。 现在停止调试器。

重现行为

打开nuget包管理器并找到Microsoft.Extensions.Configuration。在撰写本文时,它具有稳定的最新版本2.1.0。将此包添加到项目中。 另外,只是为了好玩,添加System.Data.SqlClient,(最新版本4.5.0) 现在确保您的项目确实依赖于DLL。 例如,将以下内容写为方法Run;

中的第一个语句
        var cb = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
        var sc = new System.Data.SqlClient.SqlConnection();

现在再次开始调试。 (F5) 函数主机仍然正常加载,但是当您尝试刷新浏览器时,控制台窗口将报告

[10.06.2018 15:37:28] Executing 'Function1' (Reason='This function was     programmatically called via the host APIs.',     Id=6804e02c-441a-4e62-b6a4-6b02154ec7fb) 
[10.06.2018 15:37:29] Executed 'Function1' (Failed, Id=6804e02c-441a-4e62-b6a4-6b02154ec7fb)
[10.06.2018 15:37:29] System.Private.CoreLib: Exception while executing function: Function1. FunctionApp-repro: Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. System.Private.CoreLib: Could not load the specified file.

解决方法: 打开nuget包管理器和&#34;更新&#34; System.Data.SqlClient到版本4.1.0 和 Microsoft.Extensions.Configuration到版本2.0.0

答案 1 :(得分:1)

您可以访问配置文件,例如dev.settings.jsonConfigurationBuilder,指定基本路径和文件名。

public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, TraceWriter log, ExecutionContext context)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(context.FunctionAppDirectory)
            .AddJsonFile("dev.settings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

        var values = config["Values"];
        ...
    }

答案 2 :(得分:1)

这应该在最新版本的Azure Functions运行时(2.0.11888,CLI 2.0.1-beta.31)上解决。

答案 3 :(得分:0)

我遇到了同样的问题。您需要安装以下nuget软件包,这些软件包才能正常运行 您需要安装 Microsoft.Extensions.Configuration 才能首先启动

另外

  
      
  • SetBasePath()需要:      
        
    • Microsoft.Extensions.Configuration.Abstractions
    •   
  •   
  • AddJsonFile()要求:      
        
    • Microsoft.Extensions.Configuration.FileExtensions
    •   
    • Microsoft.Extensions.Configuration.Json
    •   
  •   
  • AddEnvironmentVariables()要求:      
        
    • Extensions.Configuration.EnvironmentVariables
    •   
    • ,可能还有 Microsoft.Extensions.Configuration.UserSecrets
    •   
  •   

请参考以下详细信息 https://www.koskila.net/how-to-access-azure-function-apps-settings-from-c/