我在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:无法加载指定的文件。
答案 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.json
,ConfigurationBuilder
,指定基本路径和文件名。
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/