![](/img/trans.png)
[英]How to transform Function Application settings of Azure Function App .NET core 2.0 in DevOps Pipeline?
[英].Net 6 function app not getting values from Azure application settings
我使用 Visual Studio 2022 创建了一个新的 .net 6 进程内函数应用。该函数应用包含三 (3) 个计时器函数。 我有一个从配置设置填充的自定义设置类。 函数应用在 Visual Studio 的本地开发计算机上正常运行。
将其部署到 Azure 后会出现问题。 依赖注入在 Startup 类中失败,因为自定义设置类未从应用程序功能应用程序设置中正确填充。
这是设置类:
public class Settings
{
public ConnectionStrings ConnectionStrings { get; set; }
public TwilioSettings TwilioSettings { get; set; }
}
public class TwilioSettings
{
public string AccountSid { get; set; }
public string AuthToken { get; set; }
public string From { get; set; }
}
public class ConnectionStrings
{
public string ZZZZZZZ { get; set; }
}
我有一个 local.settings.json 文件,其中包含自定义设置所需的键/值对:
{
"IsEncrypted": false,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"ConnectionStrings": {
"ZZZZZZZ": "xxxxxxxxxxxxxxxxxxxxxxxx"
},
"TwilioSettings": {
"AccountSid": "xxxxxxxxxxxxxxxx",
"AuthToken": "xxxxxxxxxxxxxxxxx",
"From": "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
在 Startup.cs 中,我有以下配置绑定:
public override void Configure(IFunctionsHostBuilder builder)
{
var settings = new Settings();
var basePath = $"{Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName}\\";
var jsonPath = $"{basePath.Substring(0, basePath.LastIndexOf('\\'))}\\local.settings.json";
var config = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile(jsonPath, true)
.AddEnvironmentVariables()
.Build();
config.Bind(settings);
builder.Services.AddSingleton(settings);
builder.Services.AddSingleton(settings.TwilioSettings);
var cs = settings.ConnectionStrings.ZZZZZ;
builder.Services.AddDbContextFactory<JTMContext>(opt => opt.UseSqlServer(cs));
builder.Services.AddDbContext<JTMContext>(opt => opt.UseSqlServer(cs));
}
在从 Visual Studio 部署之前,我在 Azure 中创建了函数应用资源。 我在应用程序设置和连接字符串中添加了必要的键/值对:
一旦我从 Visual Studio 发布了函数应用程序,一切看起来都很好,直到其中一个计时器函数被触发。 然后我看到以下错误:
Microsoft.Extensions.DependencyInjection.Abstractions:值不能为空。 (参数'implementationInstance')。
尝试在 Configure() 方法中注册自定义设置时,这在 Startup.cs 中失败:
public override void Configure(IFunctionsHostBuilder builder)
{
...
config.Bind(settings);
builder.Services.AddSingleton(settings);
builder.Services.AddSingleton(settings.TwilioSettings);
...
}
实例化的 IConfigurationRoot 对象 config 似乎没有 Azure 应用程序设置。
我在 Startup.cs 中缺少什么,以便将 Azure 中的应用程序设置输入 IConfigurationRoot?
您是否尝试过TwilioSetting:From
格式?
来自https://docs.microsoft.com/en-us/azure/app-service/configure-common?tabs=portal
应用设置名称不能包含句点 (.)。 如果应用设置包含句点,则该句点将替换为容器中的下划线。
在默认 Linux 应用服务或自定义 Linux 容器中,应用设置名称(如 ApplicationInsights:InstrumentationKey)中的任何嵌套 JSON 键结构都需要在应用服务中配置为 ApplicationInsights__InstrumentationKey 作为键名称。 换句话说,任何 : 都应该替换为 __(双下划线)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.