新 Visual Studio 2019 中的环境变量为空,但 Visual Studio 2017 中没有

Environment variables null in new Visual Studio 2019 but not Visual Studio 2017

我下载并设置了新发布的 Visual Studio 2019 Professional 并打开了我一直在 Visual Studio 2017 Professional 中处理的解决方案。

此解决方案包含 3 个 ASP.NET 核心项目和 1 个 docker-compose 项目。

2019 年启动调试会话时,我在引用我的 docker-compose 环境变量的一行中出现空引用异常。

但是,如果我在 Visual Studio 2017 年打开相同的解决方案,我不会收到此空引用异常,因为值是从 docker-compose.yml 文件中正确读取的。

我查看了 Visual Studio 两个版本的设置,似乎没有遗漏任何内容。

// Create intance of item message handler
var container = services.BuildServiceProvider();
var _settings = container.GetService<IOptions<Settings>>().Value;

var itemListenerSettings = _settings.RabbitSettings.ListenerSettings.FirstOrDefault(s => s.Key == "ItemListener");
if (itemListenerSettings.Value != null)
{
  // Register item listener...
}
version: '3.4'

services:
  microserviceapi:
    image: microserviceapi
    container_name: ms
    build:
      context: ./MicroserviceApi
      dockerfile: Dockerfile
    environment:
      RabbitSettings:Hostname: "rabbit"
      RabbitSettings:Username: "user"
      RabbitSettings:Password: "pass"
      RabbitSettings:ReconnectionRetries: "10"
      RabbitSettings:ReconnectionTime: "1000"
      RabbitSettings:ListenerSettings__ItemListener__ExchangeName: "Imagine.ItemManagement"
      RabbitSettings:ListenerSettings__ItemListener__ExchangeType: "topic"
      RabbitSettings:ListenerSettings__ItemListener__QueueName: "foo.Item"
      RabbitSettings:ListenerSettings__ItemListener__RoutingKey: "item.*"

虽然 运行 在 Visual Studio 2019 的调试会话中,调用 var _settings = container.GetService<IOptions<Settings>>().Value 我希望变量 _settings 的 属性 RabbitSettings包含我的 docker-compose.yml 文件中的值,就像在 Visual Studio 2017 中一样。

环境变量包含“:”字符。如此处所述:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#environment-variables-configuration-provider

... 建议在 asp.net 内核的环境变量名称中使用双下划线 '__' 而不是 ':'。 ':' 在 VS 2017 解决方案中工作正常,但 VS2019 需要双下划线 '__'。