ASP.NET Core控制台应用无法添加Application Insight遥测问题求助
问题原因
AddApplicationInsightsTelemetry() 是ASP.NET Core专属的扩展方法,来自Microsoft.ApplicationInsights.AspNetCore包,内部依赖Web应用运行时默认注入的HTTP上下文、环境服务等依赖项,控制台应用没有内置这些服务,所以会抛出服务未找到的异常,这就是相同配置在Web API项目正常、控制台项目报错的核心原因。
解决方法
首先安装控制台/后台服务专用的Application Insights NuGet包:
Microsoft.ApplicationInsights.WorkerService修改服务注册逻辑,将原有的
AddApplicationInsightsTelemetry替换为适配非Web场景的AddApplicationInsightsTelemetryWorkerService,修改后的代码示例如下:
private static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddTransient<Program>(); HttpManager manager = new HttpManager(Configuration); SqlManager sqlManager = new SqlManager(Configuration); EngineFunctions engineFunctions = new EngineFunctions(); EngineManager engineManager = new EngineManager(sqlManager, engineFunctions); WorkOrderFunctions workOrderFunctions = new WorkOrderFunctions(); ServiceBusManager serviceBusManager = new ServiceBusManager(Configuration); WorkOrderService wservice = new WorkOrderService(manager, sqlManager, workOrderFunctions, engineManager, serviceBusManager); services.AddSingleton(wservice); string instrumentationKey = Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"]; // 替换原Web场景专用的注册方法 services.AddApplicationInsightsTelemetryWorkerService(instrumentationKey); }); }
- (可选)自定义日志采集规则,可通过配置
TelemetryConfiguration实现,例如调整采样率、添加自定义遥测初始化器:
services.Configure<TelemetryConfiguration>(config => { // 采样率设为100%,全量上报日志 config.TelemetryProcessorChainBuilder.UseSampling(100); // 添加自定义遥测初始化器,可统一给日志加公共属性 config.TelemetryInitializers.Add(new CustomTelemetryInitializer()); });
配置完成后,注入TelemetryClient可手动上报事件、异常、指标,通过ILogger接口输出的日志也会自动同步到Azure Application Insights,使用逻辑和Web API项目完全一致。
内容的提问来源于stack exchange,提问作者OguzKaanAkyalcin
相关产品推荐
相关产品推荐

