如何在 Azure 函数中的 AppSettings.json 中添加配置值。有什么结构吗?
How to add configuration values in AppSettings.json in Azure functions. Is there any structure for it?
向 appsettings.json
添加键的标准结构是什么?
另外,如何在我们的 run.csx
中读取这些值?
通常在 app.config,我们有 ConfigurationManager.GetSettings["SettingName"];
Azure Function中有没有类似的实现?
要加载您需要使用的环境或应用程序设置值
System.Environment.GetEnvironmentVariable property
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);
}
您不必使用 System.Environment.GetEnvironmentVariable()
来访问您的应用程序设置。
ConfigurationManager
可用于 run.csx 中的 Azure Functions,如下所示:
System.Configuration.ConfigurationManager.AppSettings["SettingName"]
如前所述here
These settings can also be read in your code as environment variables. In C#, use System.Environment.GetEnvironmentVariable
or ConfigurationManager.AppSettings
. In JavaScript, use process.env
. Settings specified as a system environment variable take precedence over values in the local.settings.json
file.
Azure 函数仅支持 app.config
的有限部分。当 运行ning 从 VS 运行时,它允许在 local.settings.json
中保存应用程序设置和连接。它不支持此 json 文件中 system.serviceModel
下的 WCF 端点设置。我在 Azure Function 中有一个 dll 库引用,它在内部调用 WCF api。
我发现奇怪的是,当我 运行 Azure 函数时,它会在 cli 路径 (%localappdata%\AzureFunctionsTools\Releases.6.0\cli\func.exe.config
) 将 json 转换回 xml 配置。我将我的 xml 配置层次结构 (system.serviceModel
) 添加到此配置文件并且它工作正常,选择我的 WCF 端点到 运行 服务。尽管在使用 log4net 配置方面遇到了困难,但对 运行 API 很满意。
Azure 应该直接支持 xml 配置文件。
希望这有帮助。
在 Azure Functions 2.x 中,您需要使用包 Microsoft.Extensions.Configuration
中包含的 .Net 核心配置管理样式。这允许您在开发计算机上创建一个本地 settings.json
文件,用于 json 文件的 Values
和 ConnectionString
部分的本地配置。 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 后,您可以更改应用程序设置选项卡上的设置值:
Appsettings不是由函数本身管理的,而是由它的Function App管理的。所以,如果你使用 cli,是不是...
az functionapp appsettings set .....
我在 CI/CD 管道中就是这样做的。之后,您可以在您的函数中使用它们。请记住,函数必须存在于函数应用程序中,因此将所有这些值放在那里是完全有意义的,这样您就可以在每个函数中使用它们。
设置方法如下:
第 1 步
在你的 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>
这将明确告诉编译器在 dotnet build 为 运行 时包含 app.settings.json 文件,并将所述文件包含在 /bin 中,允许您的 dll 访问它。
编码愉快。
向 appsettings.json
添加键的标准结构是什么?
另外,如何在我们的 run.csx
中读取这些值?
通常在 app.config,我们有 ConfigurationManager.GetSettings["SettingName"];
Azure Function中有没有类似的实现?
要加载您需要使用的环境或应用程序设置值
System.Environment.GetEnvironmentVariable property
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);
}
您不必使用 System.Environment.GetEnvironmentVariable()
来访问您的应用程序设置。
ConfigurationManager
可用于 run.csx 中的 Azure Functions,如下所示:
System.Configuration.ConfigurationManager.AppSettings["SettingName"]
如前所述here
These settings can also be read in your code as environment variables. In C#, use
System.Environment.GetEnvironmentVariable
orConfigurationManager.AppSettings
. In JavaScript, useprocess.env
. Settings specified as a system environment variable take precedence over values in thelocal.settings.json
file.
Azure 函数仅支持 app.config
的有限部分。当 运行ning 从 VS 运行时,它允许在 local.settings.json
中保存应用程序设置和连接。它不支持此 json 文件中 system.serviceModel
下的 WCF 端点设置。我在 Azure Function 中有一个 dll 库引用,它在内部调用 WCF api。
我发现奇怪的是,当我 运行 Azure 函数时,它会在 cli 路径 (%localappdata%\AzureFunctionsTools\Releases.6.0\cli\func.exe.config
) 将 json 转换回 xml 配置。我将我的 xml 配置层次结构 (system.serviceModel
) 添加到此配置文件并且它工作正常,选择我的 WCF 端点到 运行 服务。尽管在使用 log4net 配置方面遇到了困难,但对 运行 API 很满意。
Azure 应该直接支持 xml 配置文件。
希望这有帮助。
在 Azure Functions 2.x 中,您需要使用包 Microsoft.Extensions.Configuration
中包含的 .Net 核心配置管理样式。这允许您在开发计算机上创建一个本地 settings.json
文件,用于 json 文件的 Values
和 ConnectionString
部分的本地配置。 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 后,您可以更改应用程序设置选项卡上的设置值:
Appsettings不是由函数本身管理的,而是由它的Function App管理的。所以,如果你使用 cli,是不是...
az functionapp appsettings set .....
我在 CI/CD 管道中就是这样做的。之后,您可以在您的函数中使用它们。请记住,函数必须存在于函数应用程序中,因此将所有这些值放在那里是完全有意义的,这样您就可以在每个函数中使用它们。
设置方法如下:
第 1 步
在你的 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>
这将明确告诉编译器在 dotnet build 为 运行 时包含 app.settings.json 文件,并将所述文件包含在 /bin 中,允许您的 dll 访问它。
编码愉快。