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

如何在Azure函数的AppSettings.json中添加配置值。它有什么结构吗?,azure,azure-functions,appsettings,Azure,Azure Functions,Appsettings,向appsettings.json添加键的标准结构是什么? 另外,如何在我们的run.csx中读取这些值? 通常在app.config中,我们有ConfigurationManager.GetSettings[“SettingName”] Azure函数中是否有类似的实现?要加载环境或appsettings值,您需要使用 System.Environment.GetEnvironmentVariable属性 管理应用程序设置变量-您不必使用System.Environment.GetEnviro

向appsettings.json添加键的标准结构是什么? 另外,如何在我们的
run.csx
中读取这些值? 通常在app.config中,我们有
ConfigurationManager.GetSettings[“SettingName”]

Azure函数中是否有类似的实现?

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

System.Environment.GetEnvironmentVariable属性


管理应用程序设置变量-

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

ConfigurationManager
可用于run.csx中的Azure函数,如下所示:

System.Configuration.ConfigurationManager.AppSettings["SettingName"]
如上所述

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


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

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

在Azure Functions 2.x中,您需要使用.Net核心配置管理样式,该样式包含在包
Microsoft.Extensions.configuration
中。这允许您在dev计算机上创建本地
settings.json
文件,以便在json文件的
Values
ConnectionString
部分进行本地配置。
本地json
设置文件不会发布到Azure,相反,Azure将从与函数关联的应用程序设置中获取设置

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

[FunctionName(“MyFunction”)]
公共静态异步任务运行([TimerTrigger(“0*/15****”)TimerInfo myTimer,
TraceWriter日志,Microsoft.Azure.WebJobs.ExecutionContext,
取消令牌(ctx)
{
var config=new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile(“local.settings.json”,可选:true,重载更改:true)
.AddenEnvironmentVariables()
.Build();
//这将抽象掉.json和app设置的双重性
var myValue=config[“MyKey”];
var myConnString=config.GetConnectionString(“connString”);
等
AddJsonFile
允许您添加包含本地开发值(未发布)的本地开发配置文件,例如
local.settings.json

虽然似乎除了EF之外,还使用了ConnectionString

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


应用程序设置不是由函数本身管理的,而是由其函数应用程序管理的。因此,如果您使用cli,那么

az functionapp应用程序设置集…..


我在我的CI/CD管道中就是这样做的。之后,您可以在函数中使用它们。请记住,函数必须位于函数应用程序中,因此将所有这些值放在其中,以便在每个函数中都可以使用它们是完全有意义的。

以下是设置方法:

第一步 在repo的根目录中添加json,例如
app.settings.json

步骤2 添加Diretory.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>


真的
$(TargetDir)
$(_函数sextensionsdir)bin
这将明确告诉编译器在运行dotnet build时包含app.settings.json文件,并将所述文件包含在/bin中,允许dll访问该文件


快乐编码。

他问题的另一部分呢?哪一部分?一般来说,变量是以键值方式存储的。没有任何变化。
向appsettings添加键的标准结构是什么。json?
Azure应用程序设置对应于值设置,连接字符串代表连接字符串json文件的一部分。当部署时,而不是从函数配置设置中读取时,是否有方法从部署了内容的appsettings.json文件中读取内容?这应该是公认的答案。我发现这非常有用。谢谢。
{
  "IsEncrypted": false,
  "Values": {
    "MyKey": "MyValue",
     ...
   },
   "ConnectionStrings": {
      "connString": "...."
}
<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>