SkyWalking 官方 .NET Agent 不支持 .NET Framework 是因依赖 .NET Core 3.1+ 的 DiagnosticSource 和 Activity 基础设施;仅支持 .NET Core 3.1+ 和 .NET 5+,.NET Framework 项目需升级或改用社区 SDK。
为什么
官方 .NET Agent 不支持 .NET Framework?
目前(截至 SkyWalking v9.7),官方
Agent 仅支持
和
,底层依赖
和
的现代诊断基础设施。如果你项目还在用
,直接装 NuGet 包会失败或无任何埋点效果。
可行路径只有两条:
升级到
(推荐,长期维护有保障)
改用手动 SDK 模式(
已停更,需回退到
v1.x 或改用社区维护分支)
在 ASP.NET Core 中启用自动埋点的最小配置
以
+
(v2.4.0)为例,自动捕获 HTTP 请求、DB 查询、HttpClient 调用的关键是正确初始化和配置
环境变量
。
必须设置的环境变量(非代码内硬
编码
):
注意:
前缀不能省略,且大小写敏感;
是默认传输协议,若服务端启用了
的 HTTP 接收器,需换用
配置项。
和
是埋点核心,但别手动订阅
有人尝试用
自己解析
或
的事件,这不仅重复造轮子,还极易漏掉上下文传播逻辑(比如 TraceId 跨线程丢失)。官方 Agent 已封装好所有关键监听器:
C知道
CSDN推出的一款AI技术问答工具
下载
→ HTTP 入口
→ SQL 执行前
→ HttpClient 出站调用
只要 Agent 加载成功且环境变量正确,这些监听器就自动生效;手动干预反而可能破坏
的链路一致性。
自定义 Span 必须用
对非 HTTP/DB/HTTPClient 的逻辑(如消息队列消费、定时任务、内部计算),需要显式创建 Span。不要用
或直接操作
,否则无法被 Collector 正确识别。
正确写法示例:
重点:必须调用
,否则 Span 不会上报;
会自动继承上游 Context,无需手动传 TraceId。
最容易被忽略的是跨线程场景:比如
中的 Span 不会自动延续。此时需显式使用
或改用
安全的异步上下文传递方式——这点在 Kafka 消费者或 Hangfire 任务里特别容易出错。
SkyWalkingskywalking-dotnet.NET Core 3.1+.NET 5+DiagnosticSourceActivity.NET Framework 4.6.1+.NET 6/8SkyApm.Agent.AspNetCoreSkyApm.DotNet.NET 6SkyAPM.Agent.AspNetCoreASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCoreSKYWALKING__SERVICENAME=your-service-nameSKYWALKING__COLLECTOR__BACKENDGRPC__HOST=127.0.0.1SKYWALKING__COLLECTOR__BACKENDGRPC__PORT=11800SKYWALKING__BACKENDGRPCoap-serverBACKENDHTTPDiagnosticListenerActivityDiagnosticListener.AllListeners.Subscribe(...)Microsoft.AspNetCoreSqlClientMicrosoft.AspNetCore.Hosting.HttpRequestInMicrosoft.Data.SqlClient.WriteCommandBeforeSystem.Net.Http.HttpRequestOutActivity.Current?.Context.TraceIdTracingContext.Instance.NewEntrySpan()new Span(...)Activityusing SkyApm.Tracing;
var span = TracingContext.Instance.NewEntrySpan("process-order", "/order/process");
try
{
span.Tag("order.id", orderId);
// your logic
}
catch (Exception ex)
{
span.Error(ex);
throw;
}
finally
{
span.End();
}
span.End()NewEntrySpanTask.Run(() => { /* 埋点代码 */ })TracingContext.Instance.Continued(...)AsyncLocal