.NET Core 2.1 - мой код не отображается в трассировке стека VS2017 - PullRequest
0 голосов
/ 30 января 2019

Я занимаюсь разработкой консольного приложения .NET Core 2.1 с использованием внедрения зависимостей (Microsoft.Extensions.DependencyInjection).Код выглядит примерно так:

class Program
{
    static async Task Main(string[] args)
    {
        //...

        var configuration = GetConfiguration();
        var serviceProvider = ConfigureServices(configuration);

        var importer = serviceProvider.GetRequiredService<DataImporter>();

        var result = await importer.ImportCentersAndStores(fileName);

        //...
    }

    private static IConfigurationRoot GetConfiguration()
    {
        return new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();
    }

    private static ServiceProvider ConfigureServices(IConfigurationRoot configuration)
    {
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

        return new ServiceCollection()
            .AddLogging(builder =>
            {
                builder.AddConfiguration(configuration.GetSection("Logging"));
                builder.AddConsole();
            })
            .AddOptions()
            .AddAutoMapper()
            .AddDatabase(configuration.GetConnectionString("Blah"))
            .AddTransient<DataImporter>()
            .BuildServiceProvider();
    }
}

Класс DataImporter и метод ImportCentersAndStores не являются чем-то особенным - он делает разные вещи, включая чтение файла Excel, и делает некоторые записи.Я не думаю, что природа этого кода актуальна.

Теперь проблема в том, что всякий раз, когда в классе DataImporter генерируется исключение, трассировка стека не имеет фреймов с моим кодом:

My useless call stack

Экран отладки выглядит следующим образом:

My useless debugging display

Это происходит ли я ловлювыброшенное исключение или нет.Вышеуказанное исключение происходит в методе из DataImporter, вызываемом из ImportCentersAndStores.Так что там должно быть два кадра моего кода.

Нет контекста для отладки.Я не могу проверять переменные или что-либо еще.

Я понятия не имею, что такое System.Private.CoreLib или почему он занимает большую часть стека вызовов.Я не знаю, действительно ли проблема связана с моим использованием DI.

Just My Code не имеет значения.Настройки исключения являются настройками по умолчанию.Я не вижу никаких вариантов отладки, которые должны это делать.

На случай, если вам интересно: я включил это в файл проекта, чтобы включить асинхронный метод Main:

<LangVersion>7.1</LangVersion>

Может кто-нибудь сбросить любойсвет на это?

1 Ответ

0 голосов
/ 30 января 2019

На втором снимке экрана: Помощник по исключениям (всплывающее окно) -> Просмотр сведений -> Трассировка стека.Это будет правильная трассировка стека в тот момент, когда возникла исключительная ситуация до запуска колбасы async.

Так что - да - это поведение из-за ваших вещей async.Что, честно говоря, вызывает у меня любопытство: зачем вам что-то делать async в консоли приложении?

...