我正在将我的 .Net Framework webjobs 移植到 Core v6 并重新创建它们作为控制台应用程序。我无法获取 Azure 中父 Web 应用程序上的连接字符串来覆盖 Web 作业上的连接字符串。
然后我在 webjob 中有 appsettings.json,它被设置为 Copy If Newer:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=localhost;Initial Catalog=x;Persist Security Info=True;Integrated Security=True;TrustServerCertificate=True"
}
}
然后我读出了 Program.cs 中的连接字符串,但它显示的是本地连接字符串,而不是来自 web 应用程序的连接字符串:
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false);
var configuration = builder.Build();
var connectionString = configuration.GetSection("ConnectionStrings")["DefaultConnection"];
throw new Exception(connectionString);
这是来自 Azure 上的 webjob 的日志记录:
[03/08/2024 19:04:00 > 65f818: SYS INFO] Status changed to Initializing
[03/08/2024 19:04:00 > 65f818: SYS INFO] Run script 'run.cmd' with script host - 'WindowsScriptHost'
[03/08/2024 19:04:00 > 65f818: SYS INFO] Status changed to Running
[03/08/2024 19:04:00 > 65f818: INFO]
[03/08/2024 19:04:00 > 65f818: INFO] C:\local\Temp\jobs\triggered\Test\qahcfbvl.0q4>dotnet xxx.dll
[03/08/2024 19:04:00 > 65f818: ERR ] Unhandled exception. System.Exception: Data Source=localhost;Initial Catalog=x;Persist Security Info=True;Integrated Security=True;TrustServerCertificate=True
[03/08/2024 19:04:00 > 65f818: ERR ] at Program.<Main>$(String[] args) in C:\Dev\xxx\Program.cs:line 16
[03/08/2024 19:04:00 > 65f818: SYS INFO] Status changed to Failed
[03/08/2024 19:04:00 > 65f818: SYS ERR ] Job failed due to exit code -532462766
在代码中添加
.AddEnvironmentVariables()
即可访问 Azure 应用服务中添加的环境变量。
安装 NuGet 包
Microsoft.Extensions.Configuration.EnvironmentVariables
。
我也可以使用
configuration.GetConnectionString("DefaultConnection")
检索连接字符串。
我的
Program.cs
文件:
using Microsoft.Extensions.Configuration;
Console.WriteLine("Hello, World!");
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.AddEnvironmentVariables();
var configuration = builder.Build();
var connectionString = configuration.GetSection("ConnectionStrings")["DefaultConnection"];
//var azureconn = configuration.GetConnectionString("DefaultConnection");
throw new Exception(connectionString);
本地输出:
环境变量:
网络作业输出: