Loading

Supported technologies

This page details the technologies the APM Agent for .NET supports, the package or runtime versions we test, and which installation methods work for each one. Versions beyond the listed upper bound have not been tested and are not supported, but might work.

Use this page as a compatibility matrix:

  1. Find the framework or library you use.
  2. Check that your package or runtime version falls within the supported range.
  3. Check the installation method you plan to use: Profiler, NuGet, or OpenTelemetry Bridge.
  4. Read any footnotes or notes directly below that table for important limitations or setup requirements.

If you are already using OpenTelemetry, consider the EDOT .NET SDK for traces, metrics, and logs. It covers many of the same technologies (and more) and integrates naturally with Elastic's observability platform.

The APM Agent for .NET libraries and components target .NET Standard 2.0 or .NET Standard 2.1.

We support .NET runtimes ≤10.0.x and .NET Framework runtimes from 4.6.2 to 4.8.1 for as long as they receive active support from Microsoft per the .NET support policy and .NET Framework support policy. When Microsoft ends support for a runtime version, so does Elastic. Issues reported against unsupported runtimes will only be acted on if they also affect a supported runtime.

Warning

Native AOT is not supported. The agent relies on reflection, runtime IL emit, and embedded libraries that are incompatible with AOT compilation. Attempting to use the agent in a Native AOT-published application will fail at runtime.

Note

On .NET Framework, we strongly recommend at least .NET Framework 4.7.2 because of binding issues introduced by Microsoft.

Each table below shows which installation methods apply to each technology. A checkmark (✓) means the technology is supported with that installation method for the listed version range; a cross (✗) means it is not supported using that method. Where a cell shows a version qualifier such as (≥3.7.0), only that narrower range is covered by that method.

Note

The OpenTelemetry Bridge column requires .NET 8+ and APM Server ≥7.16. A checkmark there means the technology is covered through the built-in OpenTelemetry Bridge, whether the agent was installed using the Profiler or a NuGet package.

On .NET Framework, technologies that depend on the startup hook or the OpenTelemetry Bridge need the NuGet install method instead. If no Elastic APM NuGet package exists for that technology, such as Elastic.Clients.Elasticsearch, it is not supported on .NET Framework.

Column Meaning
Profiler Instrumented automatically by the Elastic APM .NET Profiler with no code changes. On .NET, a startup hook loads DiagnosticSource subscribers and the built-in OpenTelemetry Bridge. On .NET Framework, the profiler uses IL rewriting instead.
NuGet Install the linked integration NuGet package alongside the core Elastic.Apm package and add the setup call to application startup.
OpenTelemetry Bridge The library emits native OpenTelemetry spans that the agent captures through its built-in OpenTelemetry Bridge.

For supported web frameworks, the agent creates one transaction per incoming request and names it after the registered route.

Framework Supported versions Profiler NuGet OpenTelemetry Bridge
ASP.NET Core
≥8.0.0
≤10.0.x
✓ ¹
ASP.NET (.NET Framework) in IIS
4.6.2–4.8.1 (IIS 10)

¹ Using a startup hook on .NET.

Note

We support ASP.NET on IIS 10 versions supported by Microsoft per their IIS support policy. IIS must be installed on a supported Windows operating system version.

The profiler does not support the Web Garden (multi-worker process) mode of IIS.

For supported gRPC frameworks, the agent automatically captures both client-side and server-side calls.

Streaming is not supported - the agent does not create transactions or spans for streaming calls automatically.

Framework Supported versions Profiler NuGet OpenTelemetry Bridge
gRPC server (ASP.NET Core)
≥8.0.0
≤10.0.x
✓ ¹
gRPC client
Grpc.Net.Client
≥2.23.2
<3.0.0
✓ ¹ ✓ (≥2.57.0)

¹ Using a startup hook on .NET.

Note

Grpc.Net.Client ≥2.57.0 emits native OpenTelemetry spans. When using the profiler without the NuGet package, the OpenTelemetry Bridge captures them automatically. When the NuGet package is installed, the dedicated subscriber takes precedence to prevent duplicate spans.

Data access technology Supported versions Profiler NuGet OpenTelemetry Bridge
Azure CosmosDB
Microsoft.Azure.Cosmos
≥3.0.0
<4.0.0
Azure DocumentDB.Core (legacy)
Microsoft.Azure.DocumentDB.Core
≥2.4.1
<3.0.0
Azure DocumentDB (legacy)
Microsoft.Azure.DocumentDB
≥2.4.1
<3.0.0
Elasticsearch
Elastic.Clients.Elasticsearch
≥8.0.0
<10.0.0
Elasticsearch (legacy)
Elasticsearch.Net
≥7.6.0
<8.0.0
✓ ¹
Elasticsearch (legacy)
NEST
≥7.6.0
<8.0.0
✓ ¹
Entity Framework Core
Microsoft.EntityFrameworkCore
≥8.0.0
≤10.0.x
✓ ¹
Entity Framework 6
EntityFramework
≥6.2
≤6.5.2
MongoDB
MongoDB.Driver
≥3.0.0
<4.0.0
✓ (≥3.7.0) ³ ✓ (≥3.7.0)
MySQL
MySql.Data
≥6.7.0
<9.0.0
Oracle
Oracle.ManagedDataAccess
≥12.2.1100
<22.0.0
Oracle
Oracle.ManagedDataAccess.Core
≥2.0.0
<4.0.0
PostgreSQL
Npgsql
≥4.0.0
<8.0.0
Redis
StackExchange.Redis
≥2.0.495
<3.0.0
✓ ²
MS SQL
System.Data.SqlClient
≥4.0.0
<5.0.0
MS SQL
Microsoft.Data.SqlClient
≥1.0.0
<6.0.0
SQLite
Microsoft.Data.Sqlite
≥2.0.0
<9.0.0
SQLite
System.Data.SQLite
≥1.0.0
<3.0.0

¹ Using a startup hook on .NET.

² Requires calling connection.UseElasticApm() on each IConnectionMultiplexer instance - see the setup page.

³ Requires the OpenTelemetry Bridge to be active. MongoDB.Driver ≥3.7.0 emits native OpenTelemetry spans; the profiler captures them through the bridge rather than a dedicated subscriber.

Note

Microsoft.Azure.DocumentDB.Core and Microsoft.Azure.DocumentDB are deprecated. The recommended replacement is the Microsoft.Azure.Cosmos package.

Elastic.Clients.Elasticsearch emits native OpenTelemetry spans. The legacy (deprecated) Elasticsearch.Net and NEST clients use a DiagnosticSource-based subscriber instead.

MongoDB.Driver ≥3.7.0 emits native OpenTelemetry spans. When running without the NuGet package (profiler-only install), these are captured automatically by the OpenTelemetry Bridge.

Messaging system Supported versions Profiler NuGet OpenTelemetry Bridge
Azure Service Bus
Azure.Messaging.ServiceBus
≥7.0.0
<8.0.0
Azure Service Bus (legacy)
Microsoft.Azure.ServiceBus
≥3.0.0
<6.0.0
Kafka
Confluent.Kafka
≥1.4.0
<3.0.0
✓ using an adapter ¹
RabbitMQ
RabbitMQ.Client
≥3.6.9
<7.0.0

¹ Requires adding Confluent.Kafka.Extensions.Diagnostics which wraps producers and consumers so they emit spans for the OpenTelemetry Bridge to capture. Code changes are required - see the setup page.

Note

Azure.Messaging.ServiceBus emits native OpenTelemetry spans. When using the profiler without the NuGet package, the OpenTelemetry Bridge captures them automatically. When the NuGet package is installed, the dedicated subscriber takes precedence to prevent duplicate spans.

The legacy Microsoft.Azure.ServiceBus package does not emit native OpenTelemetry spans and requires the NuGet package.

For supported Azure Functions hosting models, the agent creates one transaction per HTTP-triggered invocation.

Hosting model Supported versions Profiler NuGet OpenTelemetry Bridge
Azure Functions isolated worker
Microsoft.Azure.Functions.Worker
≥2.0.0
<3.0.0
Azure Functions in-process
Microsoft.Azure.Functions.Extensions
≥1.1.0
<2.0.0
Note

Only HTTP-triggered invocations are traced. To avoid unintentionally increasing Azure Functions costs on Consumption plans, system metrics are not collected.

The isolated worker model requires .NET 8+. The in-process model is deprecated by Microsoft - new apps should use the isolated worker model.

Storage service Supported versions Profiler NuGet OpenTelemetry Bridge
Azure Blob Storage
Azure.Storage.Blobs
≥12.8.0
<13.0.0
Azure Queue Storage
Azure.Storage.Queues
≥12.6.0
<13.0.0
Azure File Share Storage
Azure.Storage.Files.Shares
≥12.6.0
<13.0.0
Note

Azure Storage SDKs emit native OpenTelemetry spans. When using the profiler without the NuGet package, the OpenTelemetry Bridge captures them automatically. When the NuGet package is installed, the dedicated subscriber takes precedence to prevent duplicate spans.

For supported networking client-side technologies, the agent creates an HTTP span for each outgoing request and propagates tracing headers automatically.

Framework Supported versions Profiler NuGet OpenTelemetry Bridge
HttpClient
System.Net.Http.HttpClient
built-in (.NET)
HttpWebRequest
System.Net.HttpWebRequest
built-in (.NET)