如何在Azure函数中的AppSettings.json中添加配置值。它有任何结构吗?

问题描述 投票:7回答:7

appsettings.json添加密钥的标准结构是什么?另外,如何在我们的run.csx中读取这些值?通常在app.config中,我们有ConfigurationManager.GetSettings["SettingName"]; Azure功能中是否有类似的实现?

azure azure-functions appsettings
7个回答
7
投票

如上所述here

这些设置也可以在代码中作为环境变量读取。在C#中,使用System.Environment.GetEnvironmentVariableConfigurationManager.AppSettings。在JavaScript中,使用process.env。指定为系统环境变量的设置优先于local.settings.json文件中的值。


7
投票

在Azure Functions 2.x中,您需要使用包含在Microsoft.Extensions.Configuration包中的.Net核心配置管理样式。这允许您在开发计算机上创建本地settings.json文件,以便在json文件的ValuesConnectionString部分进行本地配置。 local json设置文件未发布到Azure,而Azure将从与该功能关联的应用程序设置中获取设置。

在您的函数代码中,接受Microsoft.Azure.WebJobs.ExecutionContext context类型的参数,然后您可以在其中构建IConfigurationRoot提供程序:

[FunctionName("MyFunction")]
public static async Task Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer,
    TraceWriter log, Microsoft.Azure.WebJobs.ExecutionContext context, 
    CancellationToken ctx)
{
   var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

    // This abstracts away the .json and app settings duality
    var myValue = config["MyKey"];

    var myConnString = config.GetConnectionString("connString");
    ... etc

AddJsonFile允许您添加本地开发配置文件,例如包含本地开发值的local.settings.json(未发布)

{
  "IsEncrypted": false,
  "Values": {
    "MyKey": "MyValue",
     ...
   },
   "ConnectionStrings": {
      "connString": "...."
}

虽然似乎使用ConnectionStrings除了EF seems to be discouraged以外的任何东西

部署到Azure后,您可以更改功能“应用程序设置”刀片上的设置值:

Application Config


3
投票

您不必使用System.Environment.GetEnvironmentVariable()来访问您的应用设置。

ConfigurationManager在run.csx中可用于Azure Functions,如下所示:

System.Configuration.ConfigurationManager.AppSettings["SettingName"]

2
投票

要加载环境或appsettings值,您需要使用

System.Environment.GetEnvironmentVariable属性

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " + 
        System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

管理应用设置变量 - https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings


1
投票

Azure功能仅支持app.config的有限部分。它允许在从VS运行函数时保存local.settings.json中的应用程序设置和连接。它不支持此json文件中system.serviceModel下的WCF端点设置。我在Azure Function中有一个dll库引用,它在内部调用WCF apis。

我发现奇怪的是,当我运行Azure函数时,它将json转换回cli路径(%localappdata%\AzureFunctionsTools\Releases\1.6.0\cli\func.exe.config)的xml配置。我将我的xml配置层次结构(system.serviceModel)添加到此配置文件中,它运行正常,选择我的WCF端点来运行服务。虽然在使用log4net配置方面一直很努力,但我很擅长运行API。 Azure应该直接支持xml配置文件。希望这可以帮助。


0
投票

Appsettings不是由函数本身管理,而是由其Function Function管理。所以,如果你使用cli,那就是......

az functionapp appsettings set .....

这就是我在CI / CD管道中的做法。之后,您可以在功能中使用它们。请记住,函数必须存在于函数应用程序中,因此将所有这些值放在那里以便在每个函数中都可用它们是完全合理的。


0
投票

以下是如何设置它:

步骤1

在你的repo的根目录添加你的json,例如app.settings.json

第2步

添加Directory.Build.targets(.targets是此处的扩展名)文件,如下所示

<Project>
  <PropertyGroup>
    <_IsFunctionsSdkBuild Condition="$(_FunctionsTaskFramework) != ''">true</_IsFunctionsSdkBuild>
    <_FunctionsExtensionsDir>$(TargetDir)</_FunctionsExtensionsDir>
    <_FunctionsExtensionsDir Condition="$(_IsFunctionsSdkBuild) == 'true'">$(_FunctionsExtensionsDir)bin</_FunctionsExtensionsDir>
  </PropertyGroup>

  <Target Name="CopyExtensionsJson" AfterTargets="_GenerateFunctionsAndCopyContentFiles">
    <Message Importance="High" Text="Overwritting extensions.json file with one from build." />

    <Copy Condition="$(_IsFunctionsSdkBuild) == 'true' AND Exists('$(_FunctionsExtensionsDir)\extensions.json')"
          SourceFiles="$(_FunctionsExtensionsDir)\extensions.json"
          DestinationFiles="$(PublishDir)bin\extensions.json"
          OverwriteReadOnlyFiles="true"
          ContinueOnError="true"/>
  </Target>

  <Target Name="CopyVaultJson" AfterTargets="_GenerateFunctionsAndCopyContentFiles">
    <Message Importance="High" Text="Overwritting app.settings.json file with one from build." />

    <Copy Condition="$(_IsFunctionsSdkBuild) == 'true' AND Exists('$(_FunctionsExtensionsDir)\app.settings.json')"
          SourceFiles="$(_FunctionsExtensionsDir)\app.settings.json"
          DestinationFiles="$(PublishDir)bin\app.settings.json"
          OverwriteReadOnlyFiles="true"
          ContinueOnError="true"/>
  </Target>
</Project>

这将明确告诉编译器在运行dotnet构建时包含app.settings.json文件,并将所述文件包含在/ bin中,允许您的dll访问它。

快乐的编码。

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