[英]Why is the startup.cs file not being used when I start my Azure Function?
[英]Why would my Azure Function not load my environment variables correctly in startup.cs?
我們在 Windows 應用服務上的 .NET 6.0 上有一個 C# 預編譯的 v4 Azure 函數。 我們在 Startup.cs 中有以下代碼:
public override void Configure(IFunctionsHostBuilder builder)
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile(Path.Combine(builder.GetContext().ApplicationRootPath, $"local.settings.json"), optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
builder.Services.AddSingleton(config);
builder.Services.AddSingleton(s =>
{
var connectionString = config["Azure:CosmosDB:ConnectionString"];
if (string.IsNullOrEmpty(connectionString)) throw new InvalidOperationException(
"Please specify a valid CosmosDBConnection in the local.settings.json file or your Azure Functions Settings.");
return new CosmosClientBuilder(connectionString)
.Build();
});
// Additional services configuration
}
我們在 csproj 中有必要的包引用:
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.20.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.0" />
</ItemGroup>
這在 VS 2022 中本地運行並從local.settings.json
加載時運行良好,但在空連接字符串檢查時失敗,在部署到雲時拋出顯示的InvalidOperationException
,盡管環境變量已正確設置:
我們在這里缺少什么?
我們的解決方法是重寫ConfigureAppConfiguration
來初始化 Config,並且(因為我們需要在啟動的其他地方訪問它)將其設置為 Startup.cs 類的變量。
public IConfiguration Config { get; private set; }
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton(s =>
{
var connectionString = Config["Azure:CosmosDB:ConnectionString"];
if (string.IsNullOrEmpty(connectionString)) throw new InvalidOperationException(
"Please specify a valid CosmosDBConnection in the local.settings.json file or your Azure Functions Settings.");
return new CosmosClientBuilder(connectionString)
.Build();
});
// Etc.
}
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
builder.ConfigurationBuilder
.AddJsonFile(Path.Combine(builder.GetContext().ApplicationRootPath, $"local.settings.json"), optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Config = builder.ConfigurationBuilder.Build();
}
由於AddSingleton
傳遞了一個操作,並且在需要服務之前不會調用該操作,因此我們原始代碼中的config
可能超出了范圍。 我並不困惑為什么在我們部署它時它不起作用,但我對它為什么在本地工作感到困惑。 無論哪種方式,上述修復都適用於兩者,因此問題已解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.