在将使用Entity Framework(Code First)的Azure Functions应用程序更新为.Net 6时,来自local.settings.json的任何值都无法找到。此问题出现在运行“ef”命令时,但在调试或运行应用程序时不会出现。
Azure Functions应用程序配置为在隔离模式下运行,并使用Environment.GetEnvironmentVariable
方法从设置文件中检索值。而且当调试或运行应用程序时,这个方法非常有效。
// Simplified code example
public static async Task Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(s =>
{
var connectionString = Environment.GetEnvironmentVariable("ConnectionString");
// connectionString is null here only when running dotnet ef command
});
builder.RunAsync();
}
但是,如果我从终端运行任何 ef 命令(比如 dotnet ef database update
),所有的值都是 null,因此似乎在运行这些命令时并没有考虑 local.settings.json 文件。
当从 .Net 5 运行时,这个方法很好用。当然,EntityFrameworkCore NuGet 包也已经更新以支持新的 .Net 版本。
更新
为了澄清,local.settings.json 文件是简单的,结构化的方式。在 .Net 5 中,我可以轻松地从“Values”部分检索变量,但在升级到 .Net 6 后,在运行 dotnet ef
命令时,它们总是为空。
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"ConnectionString": "[...]"
},
"Host": {
"CORS": "*",
"CORSCredentials": false
}
}
local.settings.json
文件,以便查看您是如何在值或连接字符串下添加这些值的。 - anon