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

时间:2019-01-30 13:19:50

标签: c# .net-core visual-studio-2017 visual-studio-debugging

我正在使用依赖项注入(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类和ImportCentersAndStores方法没什么特别的-它做了很多事情,包括读取Excel文件和进行一些日志记录。我认为该代码的性质无关紧要。

现在的问题是,只要在DataImporter类内引发异常,堆栈跟踪就不会包含带有我的代码的帧:

My useless call stack

调试显示如下:

My useless debugging display

无论我是否捕获到引发的异常,都会发生这种情况。上述异常发生在DataImporter中从ImportCentersAndStores调用的方法中。因此,我的代码应该有两个框架。

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

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

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

以防万一:我已将其包含在项目文件中以启用异步Main方法:

<LangVersion>7.1</LangVersion>

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

1 个答案:

答案 0 :(得分:1)

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

所以-是的-这种行为是由于您的async所致。老实说,这令我感到好奇,为什么您会在控制台应用程序中做任何async的事情?