我下载并安装了新发布的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
我希望变量RabbitSettings
的属性_settings
包含我的docker-compose.yml文件中的值,就像在Visual Studio 2017中一样。
环境变量包含“:”字符。如此处所述:
...建议在asp.net核心的环境变量名中使用双下划线'__'而不是':'。 ':'在VS 2017解决方案中运行良好,但VS2019需要双下划线'__'。