.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
?
我正在使用依赖注入 (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
?