Azure Functions - 本地开发:如何尊重触发器注释中的环境?

Fil*_*dor 5 c# azureservicebus azure-functions

在我们在 Visual Studio 中本地开发的函数应用程序中,我们有两个运行环境:测试和开发。

现在,我们有一个local.settings.json和两个各自的特定环境,local.settings.<environment>.json 它们工作得很好 -但有一个例外:函数触发注释中使用的值。

它们似乎在实际过程开始之前就已经解决了local.settings.json

它是 dotnet 6 v4,独立进程。该项目设置为读取local.settings.json local.settings.<environment>.json

相关文件如下所示:

lauchSettings.json

{
  "profiles": {
    "My.Project.Functions": {
      ...,
      "environmentVariables": {
        "AZURE_FUNCTIONS_ENVIRONMENT": "Test"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

local.settings.Test.json

{
    "myTopicName": "some-topic-for-test",
    "myServiceBusConnection": "Endpoint=sb://MyTestBusURI"
}
Run Code Online (Sandbox Code Playgroud)

MyFunction.cs

public class MyFunction
{

    [Function(nameof(MyFunctionAsync))]
    public async Task MyFunctionAsync(
       [ServiceBusTrigger("%myTopicName%", Connection = "myServiceBusConnection")] // <-- error here
       MyMessageEntity myMessageEntity)
    {
        // resolving environment-specific values _here_ will work perfectly fine.
        await _someIrrelevantService.DoSomethingAsync(myMessageEntity);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们没有myTopicName并且myServiceBusConnectionlocal.settings.json在环境特定设置中,则应用程序将无法启动,并抱怨找不到相应的设置。

我们真的希望避免复制设置,使这种过程变得乏味且容易出错。

我已经阅读了大量的 Microsoft 文档,不幸的是,这些文档从未谈到本地开发中的环境特定设置文件。所以,我担心这可能是不可能的,但是:

有谁知道如何使工具尊重注释中的环境特定设置?(“你不能”将是一个有效的答案,所以我可以继续寻找解决方法而不会良心不安:))


根据要求:我们像这样加载配置:

return hostBuilder
           .ConfigureAppConfiguration((context, builder) =>
           {
               builder.SetBasePath(Directory.GetCurrentDirectory())
                      .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                      .AddJsonFile($"local.settings.{context.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true)
                      .AddEnvironmentVariables();
           })
Run Code Online (Sandbox Code Playgroud)

这工作正常,但无关紧要,因为它是在解析注释的引用之后发生的。