У меня есть простой консольный проект .NET C #, использующий RabbitMQ с MassTransit:
using System;
using MassTransit;
namespace ConsoleApp1
{
public static class Program
{
public class YourMessage
{
public string Text { get; set; }
}
public static void Main(params string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri("rabbitmq://rabbitmq"), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "test_queue", ep =>
{
ep.Handler<YourMessage>(context => Console.Out.WriteLineAsync($"Received: {context.Message.Text}"));
});
});
bus.Start();
bus.Publish(new YourMessage { Text = "Hi" });
Console.WriteLine("Press any key to exit");
Console.ReadKey();
bus.Stop();
}
}
}
Этот проект фактически докеризуется через docker-compose.yml
, который запускает две зависимости PostGre и RabbitMQ:
version: '3.4'
services:
consoleapp1:
image: ${DOCKER_REGISTRY-}consoleapp1
build:
context: .
dockerfile: ConsoleApp1/Dockerfile
restart: always
depends_on:
- rabbitmq
- postgre
postgre:
image: postgres
environment:
POSTGRES_USERNAME: root
POSTGRES_PASSWORD: 0000
rabbitmq:
image: rabbitmq:3-management
ports:
- "5672:5672"
- "8080:15672"
Однако при отладке моего решения C # с помощью Visual Studio 2019 я сталкиваюсь с проблемой, связанной со связанным вызовом stdin ниже в строке 34
: Console.ReadKey();
System.InvalidOperationException: 'Cannot read keys when either application does not have a console or when console input has been redirected. Try Console.Read.'
(Однако, похоже, что Console.WriteLine("Press any key to exit");
правильно распечатывается).
Я прочитал эту запись на SO , но никакого реального решения не было дано.
Мне интересно, как получить доступ к отладчику Visual Studiostdin из моего приложения для документирования .NET C #.
Возможно ли открыть другую консоль, которая будет использовать оба stdin stdout для текущего приложения отладки?