我有一个Azure Functions项目,我在C#中使用Visual Studio 2017 15.3预览编写。函数项目包含两个单独的函数,这两个函数都是定时器触发的。我有一些appsettings,我在appsettings.json文件中指定,该文件设置为复制到构建时的输出目录。
当我发布Azure Functions项目时,这两个功能将显示在Azure门户中,但是由于无法访问应用程序设置,因此会失败。现在我知道我可以在应用程序设置刀片中指定设置,但我想使用appsettings.json,这应该可以根据这个github问题:https://github.com/Azure/azure-functions-cli/issues/33
此SO答案包含有关使其正常运行的一些信息Azure Functions - using appsettings.json。现在问题出在" Azure将尝试在appsettings.json文件中查找您正在处理的函数的根文件夹。"我的函数项目包含以下文件结构:
-appsettings.json
-Function_function1.cs
-Function_function2.cs
-host.json
构建和部署项目时,我最终得到了wwwroot中每个函数的文件夹,每个函数都包含一个function.json文件。 appsettings.json文件进入wwwroot / bin文件夹,函数无法访问它。
我想也许如果我将函数项目更改为具有文件夹结构,它将部署appsettings.json,我将其更改为以下
-host.json
-Function_function1\
--Function_function1.cs
--appsettings.json
-Function_function2\
--Function_function2.cs
--appsettings.json
这没有我预期的结果,此时我不太清楚我需要做什么才能将appsettings复制到wwwroot而不是bin文件夹下的功能文件夹中,任何指导都将不胜感激。
答案 0 :(得分:4)
您所指的SO帖子包含已弃用的信息。 appsettings.json
已不再使用。
对于本地开发,您可以使用local.settings.json
文件,但函数应用程序中未使用此文件。我刚刚完成测试并验证了这一说法。
您可以在发布功能时使用--publish-local-settings
标记,以便在功能应用中获取设置。不过,这当然不是你想要的。
我自己也在寻找一种不涉及创建ARM模板的解决方案,但我感觉目前这是不可能的。 您当然可以编写自己的PowerShell脚本并以这种方式设置应用程序设置,但情况更糟。
可能不是你想要的答案,但它是最好的(目前)。
答案 1 :(得分:2)
在Azure Functions中,设置存储在local.setting.json中(如果您的解决方案中不存在此文件,则创建该文件,名称应与所提及的完全相同)。
sample local.settings.json正文,
{
"IsEncrypted": false,
"Values": {
"email": "email@server.com",
"pass": "pass"
},
"ConnectionStrings": {
"SqlConnectionString": "server=jongdb;user=jong;"
}
}
一旦添加设置文件,就必须在下面提到的Run()方法下对其进行配置,
var config = new ConfigurationBuilder().SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: false, reloadOnChange: true).AddEnvironmentVariables().Build();
访问设置时,在下方使用
IConfigurationRoot config;
config["fromEmail"];
使用以下命令发布设置
func azure functionapp publish *YourAppName* --publish-local-settings -i
一旦部署完成,您将在Azure门户的“功能”中的“应用程序设置”下查看设置(请参见下图)
必填, 您的计算机中需要安装Azure CLI,