Datadog.Trace
2.2.0
Prefix Reserved
See the version list below for details.
dotnet add package Datadog.Trace --version 2.2.0
NuGet\Install-Package Datadog.Trace -Version 2.2.0
<PackageReference Include="Datadog.Trace" Version="2.2.0" />
paket add Datadog.Trace --version 2.2.0
#r "nuget: Datadog.Trace, 2.2.0"
// Install Datadog.Trace as a Cake Addin #addin nuget:?package=Datadog.Trace&version=2.2.0 // Install Datadog.Trace as a Cake Tool #tool nuget:?package=Datadog.Trace&version=2.2.0
Datadog.Trace NuGet package
This package contains the Datadog .NET APM tracer for configuring custom instrumentation.
If you are only using automatic instrumentation, you do not need this package. Please read our documentation for details on how to install the tracer for automatic instrumentation.
Getting Started
- Configure the Datadog agent for APM as described in our documentation.
- For automatic instrumentation, install and enable the tracer as described in our documentation.
- Configure custom instrumentation, as shown below
- View your live data on Datadog.
Configuring Datadog in code
There are multiple ways to configure your application: using environment variables, a web.config
file, or a datadog.json
file, as described in our documentation. This NuGet package also allows you to configure settings in code.
To override configuration settings, create an instance of TracerSettings
, and pass it to the static Tracer.Configure()
method:
using Datadog.Trace;
// Create a settings object using the existing
// environment variables and config sources
var settings = TracerSettings.FromDefaultSources();
// Override a value
settings.GlobalTags.Add("SomeKey", "SomeValue");
// Replace the tracer configuration
Tracer.Configure(settings);
Calling Tracer.Configure()
will replace the settings for all subsequent traces, both for custom instrumentation and for automatic instrumentation.
⚠️ Replacing the configuration should be done once, as early as possible in your application.
Create custom traces
To create and activate a custom span, use Tracer.Instance.StartActive()
. If a trace is already active (when created by automatic instrumentation, for example), the span will be part of the current trace. If there is no current trace, a new one will be started.
⚠️ Ensure you dispose of the scope returned from StartActive. Disposing the scope will close the span, and ensure the trace is flushed to Datadog once all its spans are closed.
using Datadog.Trace;
// Start a new span
using (var scope = Tracer.Instance.StartActive("custom-operation"))
{
// Do something
}
Release Notes
You can view the notes for the latest release on GitHub.
Upgrading from 1.x to 2.0
.NET Tracer 2.0 introduces several breaking changes to the API which allow various performance improvements, add new features, and deprecate problematic ways of using the package. Most of these changes do not require any changes to your code, but some patterns are no longer supported or recommended.
This section describes some of the most important breaking changes. For full details see the release notes on GitHub.
Supported .NET versions
.NET Tracer 2.0 adds support for .NET 6.0 and raises the minimum supported version of .NET Framework from .NET Framework 4.5 to .NET Framework 4.6.1. If you are currently targeting version < 4.6.1, we suggest you upgrade in line with Microsoft's guidance.
For full details of supported versions, see our documentation on .NET Framework compatibility requirements and .NET/.NET Core compatibility requirements.
Singleton Tracer
instances
In .NET Tracer 1.x, you could create new Tracer
instances with different settings for each instance, using the Tracer
constructor. In .NET Tracer 2.0 this constructor is marked [Obsolete]
and it is no longer possible to create Tracer
instances with different settings. This was done to avoid multiple problematic patterns that were hard for users to detect.
To update your code:
using Datadog.Trace;
// Create your settings as before
var settings = new TracerSettings();
// var tracer = new Tracer(settings) // <- Delete this line
Tracer.Configure(settings); // <- Add this line
Immutable Tracer.Settings
In .NET Tracer 1.x the TracerSettings
object passed into a Tracer
instance could be modified later. Depending on the changes, the tracer may or may not respect the changes. In .NET Tracer 2.0, an ImmutableTracerSettings
object is created when the Tracer
instance is configured. The property Tracer.Settings
now returns ImmutableTracerSettings
, not TracerSettings
. Subsequent changes to the original TracerSettings
instance will not be observed by Tracer
.
To update your code:
using Datadog.Trace;
var settings = TracerSettings.FromDefaultSources();
settings.TraceEnabled = false; // TracerSettings are mutable
Tracer.Configure(settings);
// All properties on Tracer.Settings are now read-only
// Tracer.Instance.Settings.TraceEnabled = false; // <- DOES NOT COMPILE
Exporter settings
Exporter-related settings were grouped into the TracerSettings.Exporter
property.
To update your code:
using Datadog.Trace;
var settings = TracerSettings.FromDefaultSources();
// settings.AgentUri = "http://localhost:8126"; // <- Delete this line
settings.Exporter.AgentUri = "http://localhost:8126"; // <- Add this line
Tracer.Configure(settings);
Configure ADO.NET integrations individually
In .NET Tracer 1.x, you could configure automatic instrumentation of all ADO.NET integrations using the AdoNet
integration ID. In .NET Tracer 2.0, you can now configure specific integrations using the following integration IDs:
MySql
Npgsql
(PostgreSQL)Oracle
SqlClient
(SQL Server)Sqlite
See our documentation for a complete list of supported integration IDs. Note that you can still disable all ADO.NET integrations using the AdoNet
integration ID.
This change also removes the now-obsolete TracerSettings.AdoNetExcludedTypes
setting and the corresponding environment variable DD_TRACE_ADONET_EXCLUDED_TYPES
. Replace usages of these with TracerSettings.Integrations["<INTEGRATION_NAME>"].Enabled
and DD_TRACE_<INTEGRATION_NAME>_ENABLED
, respectively:
using Datadog.Trace;
var settings = TracerSettings.FromDefaultSources();
// settings.AdoNetExcludedTypes.Add("MySql"); // <- Delete this line
settings.Integrations["MySql"].Enabled = false; // <- Add this line
ElasticsearchNet5
integration ID removed
In .NET Tracer 1.x, the integration ID for version 5.x of Elasticsearch.Net
was ElasticsearchNet5
, and the integration ID for versions 6 and above was ElasticsearchNet
. In .NET Tracer 2.0, ElasticsearchNet5
was removed. Use ElasticsearchNet
for all versions of Elasticsearch.Net
.
To update your code:
using Datadog.Trace;
var settings = TracerSettings.FromDefaultSources();
settings.Integrations["ElasticsearchNet5"].Enabled = false; // <- Delete this line
settings.Integrations["ElasticsearchNet"].Enabled = false; // <- Add this line
Obsolete APIs have been removed
The following deprecated APIs were removed.
TracerSettings.DebugEnabled
was removed. Set theDD_TRACE_DEBUG
environment variable to1
to enable debug mode.Tags.ForceDrop
andTags.ForceKeep
were removed. UseTags.ManualDrop
andTags.ManualKeep
respectively instead.SpanTypes
associated with automatic instrumentation spans, such asMongoDb
andRedis
, were removed.Tags
associated with automatic instrumentation spans, such asAmqpCommand
andCosmosDbContainer
, were removed.Tracer.Create()
was removed. UseTracer.Configure()
instead.TracerSettings.AdoNetExcludedTypes
was removed. UseTracerSettings.Integrations
to configure ADO.NET automatic instrumentation.- Various internal APIs not intended for public consumption were removed.
In addition, some settings were marked obsolete in 2.0:
- Environment variables
DD_TRACE_ANALYTICS_ENABLED
,DD_TRACE_{0}_ANALYTICS_ENABLED
, andDD_TRACE_{0}_ANALYTICS_SAMPLE_RATE
for controlling App Analytics are obsolete. App Analytics has been replaced with Tracing Without Limits. See our documentation for details. TracerSettings.AnalyticsEnabled
,IntegrationSettings.AnalyticsEnabled
, andIntegrationSettings.AnalyticsSampleRate
were marked obsolete.- Environment variable
DD_TRACE_LOG_PATH
is deprecated. UseDD_TRACE_LOG_DIRECTORY
instead.
Introduction of interfaces ISpan
, IScope
, and ITracer
.NET Tracer 2.0 makes the public Scope
and Span
classes internal. Instead, we now expose public IScope
and ISpan
interfaces and the tracer API was updated accordingly. If you are currently using explicit types (instead of inferring types with var
), replace usages of Scope
with IScope
and Span
with ISpan
.
This Tracer release also adds the new ITracer
interface, implemented by the Tracer
class. The type of static property Tracer.Instance
is still Tracer
, so use of ITracer
is not required, but the new interface can be useful for testing with mocks and dependency injection.
To update your Scope/Span
code:
using Datadog.Trace;
// No changes required here (using var)
using (var scope = Tracer.Instance.StartActive("my-operation"))
{
var span = scope.Span;
// ...
}
// No longer compiles (Scope and Span are no longer public)
using (Scope scope = Tracer.Instance.StartActive("my-operation"))
{
Span span = scope.Span;
// ...
}
// Correct usage with explicit types (using IScope and ISpan)
using (IScope scope = Tracer.Instance.StartActive("my-operation"))
{
ISpan span = scope.Span;
// ...
}
Simplification of the tracer interface
In addition to returning IScope
, several parameters parameters in the Tracer.StartActive
method signature were replaced with a single SpanCreationSettings
. The span's service name can no longer be set from Tracer.StartActive
. Instead, set Span.ServiceName
after creating the span.
To update your Scope/Span
code:
using Datadog.Trace;
// No changes required here (using only operation name)
using (var scope = Tracer.Instance.StartActive("my-operation"))
{
// ...
}
// No longer compiles (most parameters removed)
using (var scope = Tracer.Instance.StartActive("my-operation", parent: spanContext, serviceName: "my-service", ...))
{
// ...
}
// Correct usage
var spanCreationSettings = new SpanCreationSettings() { Parent = spanContext };
using (var scope = Tracer.Instance.StartActive("my-operation", spanCreationSettings))
{
scope.Span.ServiceName = "my-service";
// ...
}
Incorrect integration names are ignored
In .NET Tracer 2.0, any changes made to an IntegrationSettings
object for an unknown IntegrationId
will not be persisted. Instead, a warning will be logged describing the invalid access.
using Datadog.Trace;
var tracerSettings = TracerSettings.FromDefaultSources();
// Accessing settings for an unknown integration will log a warning
var settings = tracerSettings.Integrations["MyRandomIntegration"];
// changes are not persisted
settings.Enabled = false;
// isEnabled is null, not false
bool? isEnabled = tracerSettings.Integrations["MyRandomIntegration"].Enabled;
Automatic instrumentation changes
DD_TRACE_ROUTE_TEMPLATE_RESOURCE_NAMES_ENABLED
enabled by default
.NET Tracer 1.26.0 added the DD_TRACE_ROUTE_TEMPLATE_RESOURCE_NAMES_ENABLED
feature flag, which enables improved span names for ASP.NET and ASP.NET Core automatic instrumentation spans, an additional span for ASP.NET Core requests, and additional tags.
In .NET Tracer 2.0, DD_TRACE_ROUTE_TEMPLATE_RESOURCE_NAMES_ENABLED
is enabled by default. Due to the change in span names, you may need to update your monitors and dashboards to use the new resource names.
If you do not wish to take advantage of the improved route names, you can disable the feature by setting the DD_TRACE_ROUTE_TEMPLATE_RESOURCE_NAMES_ENABLED
environment variable to 0
.
Call-site instrumentation removed
Call-site automatic instrumentation was removed in .NET Tracer 2.0 and replaced with call-target instrumentation. This was the default mode since version 1.28.0 on .NET Framework 4.6 or above and .NET Core / .NET 5. Call-target instrumentation provides performance and reliability improvements over call-site instrumentation.
Note: Call-target instrumentation does not support instrumenting custom implementations of DbCommand
yet. If you find ADO.NET spans are missing from your traces after upgrading, please raise an issue on GitHub, or contact support.
DD_INTEGRATIONS
environment variable no longer needed
The integrations.json
file is no longer required for instrumentation. You can remove references to this file, for example by deleting the DD_INTEGRATIONS
environment variable.
Get in touch
If you have questions, feedback, or feature requests, reach our support.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- System.Diagnostics.DiagnosticSource (>= 4.4.1)
-
.NETFramework 4.6.1
- No dependencies.
-
.NETStandard 2.0
- System.Diagnostics.DiagnosticSource (>= 4.4.1)
- System.Reflection.Emit (>= 4.3.0)
- System.Reflection.Emit.Lightweight (>= 4.3.0)
NuGet packages (11)
Showing the top 5 NuGet packages that depend on Datadog.Trace:
Package | Downloads |
---|---|
Datadog.Trace.Bundle
Auto-instrumentation assets for Datadog APM |
|
Datadog.Trace.OpenTracing
Provides OpenTracing support for Datadog APM |
|
Datadog.Monitoring.Distribution
Auto-instrumentation assets for Datadog APM |
|
Lucca.Logs.Shared
Lucca.Logs |
|
Datadog.Trace.BenchmarkDotNet
BenchmarkDotNet exporter for Datadog CI Visibility |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Datadog.Trace:
Repository | Stars |
---|---|
DataDog/dd-trace-dotnet
.NET Client Library for Datadog APM
|
Version | Downloads | Last updated | |
---|---|---|---|
3.6.0 | 13,922 | 11/19/2024 | |
3.5.0 | 64,552 | 11/6/2024 | |
3.4.1 | 61,663 | 10/28/2024 | |
3.4.0 | 22,720 | 10/24/2024 | |
3.3.1 | 295,254 | 9/18/2024 | |
3.3.0 | 27,021 | 9/16/2024 | |
3.2.0 | 131,521 | 9/2/2024 | |
3.1.0-prerelease | 1,279 | 8/14/2024 | |
3.0.0-prerelease | 759 | 7/29/2024 | |
2.61.0 | 7,120 | 11/6/2024 | |
2.60.0 | 25,470 | 10/24/2024 | |
2.59.0 | 83,518 | 9/16/2024 | |
2.58.0 | 55,361 | 9/2/2024 | |
2.57.0 | 299,200 | 8/14/2024 | |
2.56.0 | 218,191 | 7/25/2024 | |
2.55.0 | 83,583 | 7/18/2024 | |
2.54.0 | 156,555 | 7/9/2024 | |
2.53.2 | 1,382,530 | 6/19/2024 | |
2.53.1 | 74,176 | 6/17/2024 | |
2.53.0 | 158,961 | 6/11/2024 | |
2.52.0 | 507,694 | 5/23/2024 | |
2.51.0 | 485,606 | 5/6/2024 | |
2.50.0 | 357,136 | 4/17/2024 | |
2.49.0 | 709,245 | 3/18/2024 | |
2.48.0 | 1,027,508 | 2/29/2024 | |
2.47.0 | 661,448 | 2/14/2024 | |
2.46.0 | 648,847 | 1/24/2024 | |
2.45.0 | 300,047 | 1/10/2024 | |
2.44.0 | 489,559 | 12/19/2023 | |
2.43.0 | 371,958 | 12/5/2023 | |
2.42.0 | 247,634 | 11/21/2023 | |
2.41.0 | 864,394 | 11/6/2023 | |
2.40.0 | 494,051 | 10/16/2023 | |
2.39.0 | 85,164 | 10/11/2023 | |
2.38.0 | 373,602 | 9/20/2023 | |
2.37.0 | 598,276 | 8/31/2023 | |
2.36.0 | 360,549 | 8/23/2023 | |
2.35.0 | 369,652 | 7/31/2023 | |
2.34.0 | 38,510 | 7/25/2023 | |
2.33.0 | 301,389 | 7/4/2023 | |
2.32.0 | 338,317 | 6/20/2023 | |
2.31.0 | 583,342 | 5/31/2023 | |
2.30.0 | 741,260 | 5/5/2023 | |
2.29.0 | 369,176 | 4/17/2023 | |
2.28.0 | 106,260 | 4/12/2023 | |
2.27.0 | 541,330 | 3/24/2023 | |
2.26.0 | 349,089 | 3/9/2023 | |
2.24.1 | 741,688 | 2/27/2023 | |
2.24.0 | 51,717 | 2/24/2023 | |
2.23.0 | 586,424 | 2/8/2023 | |
2.22.0 | 572,372 | 1/24/2023 | |
2.21.0 | 460,895 | 12/20/2022 | |
2.20.0 | 484,927 | 12/2/2022 | |
2.19.0 | 455,412 | 11/10/2022 | |
2.18.0 | 838,090 | 10/25/2022 | |
2.17.0 | 995,005 | 10/11/2022 | |
2.16.0 | 74,398 | 10/7/2022 | |
2.15.0 | 409,707 | 9/26/2022 | |
2.14.0 | 541,788 | 8/23/2022 | |
2.13.0 | 281,638 | 8/3/2022 | |
2.12.0 | 422,270 | 7/13/2022 | |
2.11.0 | 514,360 | 6/22/2022 | |
2.10.0 | 360,985 | 6/9/2022 | |
2.9.0 | 792,873 | 5/13/2022 | |
2.8.0 | 345,291 | 5/5/2022 | |
2.7.0 | 324,795 | 4/22/2022 | |
2.6.0 | 568,578 | 4/7/2022 | |
2.5.1 | 267,657 | 3/25/2022 | |
2.4.4 | 870,743 | 3/16/2022 | |
2.4.3 | 477,587 | 3/2/2022 | |
2.4.2 | 104,998 | 2/25/2022 | |
2.4.1 | 5,197 | 2/24/2022 | |
2.4.0 | 17,234 | 2/22/2022 | |
2.3.0 | 459,965 | 2/10/2022 | |
2.2.0 | 204,025 | 2/2/2022 | |
2.1.1 | 382,029 | 1/19/2022 | |
2.1.0 | 486,618 | 1/7/2022 | |
2.0.1 | 442,744 | 12/20/2021 | |
2.0.0-prerelease | 14,031 | 12/10/2021 | |
1.31.2 | 384,603 | 2/22/2022 | |
1.31.1 | 39,200 | 12/21/2021 | |
1.31.0 | 303,491 | 12/2/2021 | |
1.30.1 | 131,863 | 11/24/2021 | |
1.30.0 | 426,328 | 11/16/2021 | |
1.29.1-prerelease | 66,067 | 10/28/2021 | |
1.29.0 | 929,426 | 10/15/2021 | |
1.28.8 | 114,520 | 9/29/2021 | |
1.28.7 | 169,455 | 9/14/2021 | |
1.28.6 | 71,084 | 9/8/2021 | |
1.28.5-prerelease | 858 | 8/30/2021 | |
1.28.4 | 177,548 | 8/30/2021 | |
1.28.3-prerelease | 431 | 8/17/2021 | |
1.28.2 | 227,870 | 8/4/2021 | |
1.28.1-prerelease | 539 | 7/14/2021 | |
1.28.0 | 245,695 | 7/12/2021 | |
1.27.1 | 810,361 | 6/16/2021 | |
1.27.0 | 174,343 | 6/2/2021 | |
1.26.3 | 440,813 | 5/11/2021 | |
1.25.2-prerelease | 2,552 | 4/2/2021 | |
1.25.0 | 438,215 | 3/22/2021 | |
1.24.0 | 365,321 | 2/23/2021 | |
1.23.0 | 296,322 | 2/3/2021 | |
1.22.2-prerelease | 443 | 2/1/2021 | |
1.22.1-prerelease | 465 | 1/28/2021 | |
1.22.0 | 210,203 | 1/14/2021 | |
1.21.2-prerelease | 3,050 | 12/21/2020 | |
1.21.1 | 68,866 | 12/17/2020 | |
1.21.0 | 115,142 | 11/25/2020 | |
1.20.0 | 324,326 | 11/3/2020 | |
1.19.6-prerelease | 1,564 | 10/15/2020 | |
1.19.5 | 372,483 | 10/7/2020 | |
1.19.4 | 106,218 | 9/29/2020 | |
1.19.3 | 178,676 | 9/17/2020 | |
1.19.2 | 274,116 | 8/31/2020 | |
1.19.1 | 682,342 | 8/10/2020 | |
1.19.0 | 69,677 | 8/7/2020 | |
1.18.3 | 202,911 | 7/17/2020 | |
1.18.2 | 55,469 | 7/9/2020 | |
1.18.1-prerelease | 574 | 7/6/2020 | |
1.18.0 | 35,309 | 6/25/2020 | |
1.17.1-prerelease | 626 | 6/23/2020 | |
1.17.0 | 421,688 | 5/15/2020 | |
1.16.3-prerelease | 588 | 5/13/2020 | |
1.16.2 | 56,089 | 5/5/2020 | |
1.16.1 | 234,270 | 4/20/2020 | |
1.16.0 | 41,732 | 4/2/2020 | |
1.15.1-prerelease | 698 | 3/30/2020 | |
1.15.0 | 258,693 | 3/23/2020 | |
1.14.2 | 18,991 | 3/13/2020 | |
1.14.1-prerelease | 526 | 3/12/2020 | |
1.14.0 | 7,671 | 3/9/2020 | |
1.13.4-prerelease | 1,526 | 3/4/2020 | |
1.13.3-prerelease | 593 | 2/24/2020 | |
1.13.2 | 118,270 | 2/21/2020 | |
1.13.0 | 361,930 | 2/14/2020 | |
1.12.0 | 101,366 | 2/5/2020 | |
1.11.1-prerelease | 1,406 | 1/13/2020 | |
1.11.0 | 128,941 | 12/11/2019 | |
1.10.3-prerelease | 665 | 12/11/2019 | |
1.10.2-prerelease | 580 | 12/10/2019 | |
1.10.1-prerelease | 716 | 12/10/2019 | |
1.10.0 | 76,802 | 11/27/2019 | |
1.9.1-prerelease | 1,061 | 11/14/2019 | |
1.9.0 | 201,839 | 11/7/2019 | |
1.8.0 | 201,634 | 10/17/2019 | |
1.7.0 | 95,386 | 9/10/2019 | |
1.6.2 | 83,126 | 8/20/2019 | |
1.6.1 | 21,850 | 8/14/2019 | |
1.6.0 | 81,705 | 7/20/2019 | |
1.4.1 | 358,260 | 6/26/2019 | |
1.4.0 | 67,472 | 6/20/2019 | |
1.2.0 | 70,778 | 5/20/2019 | |
1.1.0 | 87,029 | 4/17/2019 | |
1.0.0 | 79,290 | 4/5/2019 | |
0.8.2-beta | 8,996 | 3/28/2019 | |
0.8.1-beta | 2,305 | 3/21/2019 | |
0.8.0-beta | 1,978 | 3/11/2019 | |
0.7.1-beta | 51,453 | 1/31/2019 | |
0.7.0-beta | 29,576 | 1/17/2019 | |
0.6.0-beta | 74,360 | 12/21/2018 | |
0.5.2-beta | 29,420 | 12/4/2018 | |
0.5.1-beta | 11,406 | 11/20/2018 | |
0.5.0-beta | 612,595 | 10/30/2018 | |
0.4.1-beta | 2,892 | 10/23/2018 | |
0.4.0-beta | 1,004 | 10/12/2018 | |
0.3.2-beta | 2,055 | 9/26/2018 | |
0.3.1-beta | 1,110 | 9/21/2018 | |
0.3.0-beta | 944 | 9/13/2018 | |
0.2.4-alpha | 934 | 9/13/2018 |
See release notes at https://github.com/DataDog/dd-trace-dotnet/releases