.NET Core 2.1 - 我的代码没有出现在 VS2017 堆栈跟踪中

.NET Core 2.1 - My code does not appear in VS2017 stack trace

我正在使用依赖注入 (Microsoft.Extensions.DependencyInjection) 开发 .NET Core 2.1 控制台应用程序。代码看起来像这样:

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 class 和 ImportCentersAndStores 方法没有什么特别的——它做各种事情,包括读取 Excel 文件和做一些日志记录。我不认为该代码的性质是相关的。

现在的问题是,每当在 DataImporter class 中抛出异常时,堆栈跟踪都没有我的代码的框架:

调试显示如下所示:

无论我是否捕捉到抛出的异常,都会发生这种情况。上述异常发生在从 ImportCentersAndStores 调用的 DataImporter 中的方法中。所以我的代码应该有两帧。

没有调试上下文。我无法检查变量或任何东西。

我不知道 System.Private.CoreLib 是什么,也不知道为什么它占用了大部分调用堆栈。不知道是不是真的和我用DI有关

只是我的代码没有区别。例外设置是默认的。我看不到任何应该执行此操作的调试选项。

如果您想知道:我已将其包含在项目文件中以启用异步 Main 方法:

<LangVersion>7.1</LangVersion>

任何人都可以阐明这一点吗?

在第二个屏幕截图上:异常助手(弹出窗口)-> 查看详细信息-> 堆栈跟踪。这将是在 async 香肠开始之前抛出异常时的正确堆栈跟踪。

所以 - 是的 - 这种行为是因为你的 async 东西。老实说,这让我很好奇为什么你会在 console 应用程序中做任何事情 async