在 .NET 可观测性体系中,System.Diagnostics.DiagnosticSource.dll 是一个关键基础程序集。它把诊断事件、分布式追踪、指标采集和日志关联统一到一套低开销 API 中,使框架、类库和应用能够发布诊断数据,而 APM、OpenTelemetry、dotnet-counters 等消费者可以按需订阅。
Activity、ActivitySource、ActivityContext、ActivityLink 等类型,表示逻辑操作、父子关系、SpanId、TraceId,并支持 W3C Trace Context 的 traceparent、tracestate 传播。DiagnosticSource 与 DiagnosticListener 允许组件以命名事件发布数据,订阅者通过 IsEnabled 判断是否消费,未订阅时几乎不产生开销。System.Diagnostics.Metrics 下的 Meter、Counter、Histogram、ObservableGauge 等,用于导出请求数、延迟、错误率、资源使用量等指标。Activity.Current 可与 ILogger 作用域结合,把 TraceId、SpanId 写入日志,便于在分布式系统中串联一次调用链。FileNotFoundException、Could not load file or assembly System.Diagnostics.DiagnosticSource。MissingMethodException、TypeLoadException、FileLoadException,尤其在 .NET Framework 与 .NET Core 混用、NuGet 依赖未统一时。通过 NuGet 安装与目标框架匹配的 System.Diagnostics.DiagnosticSource,统一解决方案内版本,检查发布输出目录与 deps.json,避免手工替换不同来源的 DLL;对 .NET Framework 项目应确认绑定重定向和程序集版本,对 .NET Core/.NET 项目应优先使用框架自带或官方 NuGet 包。