Azure功能 - 使用appsettings.json

Nos*_*das 17 azure azure-functions

是否可以在Azure Functions中使用appsettings.json文件?

这里有环境变量的文档..

https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp#environment-variables

..但是我们使用Octopus进行部署,并且真的希望控制appsettings版本.

我们尝试过使用

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "Microsoft.Extensions.Configuration": "1.0.0",
        "Microsoft.Extensions.Configuration.Json": "1.0.0"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但不断得到

2016-11-23T15:27:03.811(12,16):错误CS0012:类型"对象"在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0的引用

即使能够通过Octopus提供/更新环境变量也足以满足我们的需求.

请指教.

小智 17

根据您的需要,答案是肯定的!Azure Functions可以使用appsettings.json进行配置.但是,当请求Function时,Azure会执行一些排序序列.

1º)天青将寻找KEYS您所使用.GetEnvironmentVariables("[ KEY ]")上的应用程序设置已配置的方法,通过键叶片天青功能的设置

2º)如果Azure无法通过"应用程序设置"键找到该配置,则Azure将尝试在appsettings.json文件中查找您正在处理的函数的根文件夹.

3º)最后,如果Azure无法在appsettings.json文件上的应用程序设置中找到此密钥,那么Azure将最后一次尝试查找web.config以查找此文件appsettings 部分键.

为了您的欣赏,您可以通过我的github repo上的示例找到这些配置:此处此处

我希望这些信息对您有所帮助.


arm*_*.mx 11

根据对配置文件所做的更改,您应该只使用local.settings.json,因为appsettings.json已重命名为local.settings.json

参考变化: azure-functions-cli

  • 这不再正确,请参阅https://github.com/Azure/azure-functions-host/issues/4761 (2认同)

mat*_*ewc 7

应用程序设置和连接字符串仅支持环境变量。appsettings.json不支持。

但是,您可以使用 Azure 资源管理器 (ARM) 模板来配置函数应用的设置。这是一篇博客文章,更详细地描述了这一点。

  • 该设置文件仅用于本地开发,并由我们的 CLI 使用。有一篇博文 [here](https://blogs.msdn.microsoft.com/appserviceteam/2016/12/01/running-azure-functions-locally-with-the-cli/) 更详细地描述了这一点。 (2认同)

Nil*_*ant 5

Configuration source customization is available beginning in Azure Functions host versions 2.0.14192.0 and 3.0.14191.0.

To specify additional configuration sources, override the ConfigureAppConfiguration method in your function app's StartUp class.

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder 
builder)
        {
            FunctionsHostBuilderContext context = builder.GetContext();

            builder.ConfigurationBuilder
                .AddJsonFile(Path.Combine(context.ApplicationRootPath, 
"appsettings.json"), optional: true, reloadOnChange: false)
                .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"appsettings. 
{context.EnvironmentName}.json"), optional: true, reloadOnChange: false)
                .AddEnvironmentVariables();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

// update configuration in csproject

<None Update="appsettings.json">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>      
</None>

<None Update="appsettings">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)

Instead of everytime using configuration, you can inject option class whenever required as below. From inside the Startup.Configure method, you can extract values from the IConfiguration instance into your custom type using the following code:

builder.Services.AddOptions<MyOptions>()
    .Configure<IConfiguration>((settings, configuration) =>
    {
        configuration.GetSection("MyOptions").Bind(settings);
    });
Run Code Online (Sandbox Code Playgroud)

Function class: using System; using Microsoft.Extensions.Options;

public class HttpTrigger
{
    private readonly MyOptions _settings;

    public HttpTrigger(IOptions<MyOptions> options)
    {
        _settings = options.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

Refer: https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources

  • 添加到 .csproj 文件中的第二个“appsettings”是什么? (2认同)