From 7928dc35ed90d77233ebc473348535a6bb5baa14 Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 11:09:39 +1200 Subject: [PATCH 1/6] ci(craft): give Sentry.Maui.CommunityToolkit.Mvvm the registry metadata craft needs The 6.9.0 publish pushed to NuGet and cut the GitHub release, then aborted on the registry target: "name" is required for new package "nuget:Sentry.Maui.CommunityToolkit.Mvvm". Add `name` to the registry target config in your .craft.yml. #5456 added the package to the registry target as a bare key. That works for the other entries because they already exist in sentry-release-registry - craft reads their latest.json and carries it forward. This package has shipped on NuGet since 5.8.0 but was never added to the registry, so craft has to create its manifest, and for that it needs `name`, plus `packageUrl`/`mainDocsUrl` for the manifest to match the shape of its neighbours. The failure isn't scoped to the one package: updateVersionInRegistry throws before craft commits, so the whole registry target rolls back and every sentry-dotnet package is still pinned at 6.8.0 in the registry. The bare `nuget::` line is left intact so the GenerateSentrySdkNamespaces target in Sentry.csproj still picks the package up - verified by running the target and diffing SentrySdkNamespaces.g.cs. Co-Authored-By: Claude Opus 5 --- .craft.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.craft.yml b/.craft.yml index d098d717f6..a68c2e8f7c 100644 --- a/.craft.yml +++ b/.craft.yml @@ -19,7 +19,14 @@ targets: nuget:Sentry.Hangfire: nuget:Sentry.Log4Net: nuget:Sentry.Maui: + # The other packages already exist in the release registry, so craft just carries their + # manifests forward and a bare key is enough. This one doesn't, so craft has to create its + # manifest - which needs `name` (required) plus `packageUrl`/`mainDocsUrl` (otherwise the + # manifest is written without them and main_docs_url falls back to the repo URL). nuget:Sentry.Maui.CommunityToolkit.Mvvm: + name: Sentry.Maui.CommunityToolkit.Mvvm + packageUrl: https://www.nuget.org/packages/Sentry.Maui.CommunityToolkit.Mvvm + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/maui/ nuget:Sentry.NLog: nuget:Sentry.OpenTelemetry: nuget:Sentry.OpenTelemetry.Exporter: From a6bae341608aaf16d180d89eefc052c890196b78 Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 11:28:12 +1200 Subject: [PATCH 2/6] Apply suggestion from @jamescrosswell --- .craft.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.craft.yml b/.craft.yml index a68c2e8f7c..c5f7e7f136 100644 --- a/.craft.yml +++ b/.craft.yml @@ -19,10 +19,8 @@ targets: nuget:Sentry.Hangfire: nuget:Sentry.Log4Net: nuget:Sentry.Maui: - # The other packages already exist in the release registry, so craft just carries their - # manifests forward and a bare key is enough. This one doesn't, so craft has to create its - # manifest - which needs `name` (required) plus `packageUrl`/`mainDocsUrl` (otherwise the - # manifest is written without them and main_docs_url falls back to the repo URL). + # Extra detail for the Mvvm package so that craft can create it in the registry. + # The other packages already exist so craft just carries their manifests forward nuget:Sentry.Maui.CommunityToolkit.Mvvm: name: Sentry.Maui.CommunityToolkit.Mvvm packageUrl: https://www.nuget.org/packages/Sentry.Maui.CommunityToolkit.Mvvm From 01102fb744e3f3d3562df5351bfc4d0f45c0bbee Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 11:53:01 +1200 Subject: [PATCH 3/6] ci(craft): give every registry entry the metadata craft needs Extends the previous commit to the whole list rather than just the one package that happened to break 6.9.0. Craft only reads name/packageUrl/mainDocsUrl for a package it hasn't published before - for everything already in the release registry it carries the existing manifest forward, so a bare key works. The catch is that a bare key keeps working right up until the release that first ships a new package, and then fails the entire registry target, not just that package. That's caught us on nearly every new package: Sentry.Extensions.AI, Sentry.Hangfire, and now Sentry.Maui.CommunityToolkit.Mvvm. Filling the metadata in everywhere makes the working pattern the default: a new package is added by copying the block above it, and craft creates the registry entry on its own. Values are copied verbatim from the manifests in sentry-release-registry, not hand-written. Craft writes these fields over the manifest on every release, so a typo here would silently rewrite published metadata - including the stale-looking docs URLs, which are deliberately left exactly as they are rather than quietly corrected in a CI commit. Verified: the generated SentrySdkNamespaces.g.cs is byte-identical after a forced regeneration, and every value round-trips against the registry manifests. Co-Authored-By: Claude Opus 5 --- .craft.yml | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/.craft.yml b/.craft.yml index a68c2e8f7c..68ff785928 100644 --- a/.craft.yml +++ b/.craft.yml @@ -5,30 +5,93 @@ targets: - name: nuget - name: github - name: registry + # Every package carries name/packageUrl/mainDocsUrl, even though craft only reads them for a + # package it hasn't published before. For packages already in the release registry craft just + # carries the existing manifest forward, so a bare `nuget::` key works - right up + # until the release that first ships a *new* package, where craft has to build the initial + # manifest, finds no `name`, and fails the entire registry target (not just that package). + # That has caught us on nearly every new package: Sentry.Extensions.AI, Sentry.Hangfire and + # most recently Sentry.Maui.CommunityToolkit.Mvvm in 6.9.0 (#5495). Filling these in for + # everything means a new package is added by copying the block above it, and craft creates + # the registry entry by itself. + # + # These values are authoritative, not decorative: craft writes them over the manifest fields + # on every release, so a typo here rewrites what's published in the registry. They currently + # match https://github.com/getsentry/sentry-release-registry/tree/master/packages/nuget sdks: nuget:Sentry: + name: Sentry + packageUrl: https://www.nuget.org/packages/Sentry + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.AspNetCore: + name: Sentry.AspNetCore + packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnetcore nuget:Sentry.AspNetCore.Grpc: + name: Sentry.AspNetCore.Grpc + packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore.Grpc + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.AspNetCore.Blazor.WebAssembly: + name: Sentry.AspNetCore.Blazor.WebAssembly + packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore.Blazor.WebAssembly + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnetcore nuget:Sentry.AspNet: + name: Sentry.AspNet + packageUrl: https://www.nuget.org/packages/Sentry.AspNet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnet nuget:Sentry.DiagnosticSource: + name: Sentry.DiagnosticSource + packageUrl: https://www.nuget.org/packages/Sentry.DiagnosticSource + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.EntityFramework: + name: Sentry.EntityFramework + packageUrl: https://www.nuget.org/packages/Sentry.EntityFramework + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/entityframework nuget:Sentry.Extensions.AI: + name: Sentry.Extensions.AI + packageUrl: https://www.nuget.org/packages/Sentry.Extensions.AI + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/ai-agents-module/ nuget:Sentry.Extensions.Logging: + name: Sentry.Extensions.Logging + packageUrl: https://www.nuget.org/packages/Sentry.Extensions.Logging + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/microsoft-extensions-logging nuget:Sentry.Google.Cloud.Functions: + name: Sentry.Google.Cloud.Functions + packageUrl: https://www.nuget.org/packages/Sentry.Google.Cloud.Functions + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/gcp-functions nuget:Sentry.Hangfire: + name: Sentry.Hangfire + packageUrl: https://www.nuget.org/packages/Sentry.Hangfire + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/crons/hangfire/ nuget:Sentry.Log4Net: + name: Sentry.Log4Net + packageUrl: https://www.nuget.org/packages/Sentry.Log4Net + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.Maui: - # The other packages already exist in the release registry, so craft just carries their - # manifests forward and a bare key is enough. This one doesn't, so craft has to create its - # manifest - which needs `name` (required) plus `packageUrl`/`mainDocsUrl` (otherwise the - # manifest is written without them and main_docs_url falls back to the repo URL). + name: Sentry.Maui + packageUrl: https://www.nuget.org/packages/Sentry.Maui + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/maui/ nuget:Sentry.Maui.CommunityToolkit.Mvvm: name: Sentry.Maui.CommunityToolkit.Mvvm packageUrl: https://www.nuget.org/packages/Sentry.Maui.CommunityToolkit.Mvvm mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/maui/ nuget:Sentry.NLog: + name: Sentry.NLog + packageUrl: https://www.nuget.org/packages/Sentry.NLog + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.OpenTelemetry: + name: Sentry.OpenTelemetry + packageUrl: https://www.nuget.org/packages/Sentry.OpenTelemetry + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/performance/instrumentation/opentelemetry/ nuget:Sentry.OpenTelemetry.Exporter: + name: Sentry.OpenTelemetry.Exporter + packageUrl: https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry/ nuget:Sentry.Serilog: + name: Sentry.Serilog + packageUrl: https://www.nuget.org/packages/Sentry.Serilog + mainDocsUrl: https://docs.sentry.io/platforms/dotnet nuget:Sentry.Profiling: + name: Sentry.Profiling + packageUrl: https://www.nuget.org/packages/Sentry.Profiling + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/profiling/ From 08fa10e79e07b1d78558a9f97e1e6f6f416d9ee8 Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 12:10:08 +1200 Subject: [PATCH 4/6] ci(craft): point registry docs URLs at pages that exist Now that craft writes main_docs_url back to the release registry on every release, these values are published metadata rather than dead config, so the stale ones are worth correcting instead of carrying forward. Two were outright 404s: Sentry.AspNet /platforms/dotnet/aspnet -> guides/aspnet/ Sentry.Google.Cloud.Functions /platforms/dotnet/gcp-functions -> guides/google-cloud-functions/ Four pointed at URLs that only worked via redirect, now canonicalised (aspnetcore, entityframework, microsoft-extensions-logging, and OpenTelemetry's performance/ -> tracing/ move), and six sat on the generic platform root despite having their own page: Log4Net, NLog, Serilog, DiagnosticSource (the automatic-instrumentation page is specifically about Sentry.DiagnosticSource), Blazor.WebAssembly (was pointing at the ASP.NET Core guide), and AspNetCore.Grpc. Grpc is the one that stays imprecise - there is no .NET gRPC page, so it points at the ASP.NET Core guide it extends rather than the platform root. Every URL in the file, docs and nuget alike, was checked to return 200 *and* be the canonical target, so we don't bake in another redirect that later 404s. Co-Authored-By: Claude Opus 5 --- .craft.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.craft.yml b/.craft.yml index df9808daff..6c89787b58 100644 --- a/.craft.yml +++ b/.craft.yml @@ -14,31 +14,31 @@ targets: nuget:Sentry: name: Sentry packageUrl: https://www.nuget.org/packages/Sentry - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/ nuget:Sentry.AspNetCore: name: Sentry.AspNetCore packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnetcore + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/ nuget:Sentry.AspNetCore.Grpc: name: Sentry.AspNetCore.Grpc packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore.Grpc - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/ nuget:Sentry.AspNetCore.Blazor.WebAssembly: name: Sentry.AspNetCore.Blazor.WebAssembly packageUrl: https://www.nuget.org/packages/Sentry.AspNetCore.Blazor.WebAssembly - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnetcore + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/blazor-webassembly/ nuget:Sentry.AspNet: name: Sentry.AspNet packageUrl: https://www.nuget.org/packages/Sentry.AspNet - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/aspnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/aspnet/ nuget:Sentry.DiagnosticSource: name: Sentry.DiagnosticSource packageUrl: https://www.nuget.org/packages/Sentry.DiagnosticSource - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/automatic-instrumentation/ nuget:Sentry.EntityFramework: name: Sentry.EntityFramework packageUrl: https://www.nuget.org/packages/Sentry.EntityFramework - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/entityframework + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/entityframework/ nuget:Sentry.Extensions.AI: name: Sentry.Extensions.AI packageUrl: https://www.nuget.org/packages/Sentry.Extensions.AI @@ -46,11 +46,11 @@ targets: nuget:Sentry.Extensions.Logging: name: Sentry.Extensions.Logging packageUrl: https://www.nuget.org/packages/Sentry.Extensions.Logging - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/microsoft-extensions-logging + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/extensions-logging/ nuget:Sentry.Google.Cloud.Functions: name: Sentry.Google.Cloud.Functions packageUrl: https://www.nuget.org/packages/Sentry.Google.Cloud.Functions - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/gcp-functions + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/google-cloud-functions/ nuget:Sentry.Hangfire: name: Sentry.Hangfire packageUrl: https://www.nuget.org/packages/Sentry.Hangfire @@ -58,7 +58,7 @@ targets: nuget:Sentry.Log4Net: name: Sentry.Log4Net packageUrl: https://www.nuget.org/packages/Sentry.Log4Net - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/log4net/ nuget:Sentry.Maui: name: Sentry.Maui packageUrl: https://www.nuget.org/packages/Sentry.Maui @@ -70,11 +70,11 @@ targets: nuget:Sentry.NLog: name: Sentry.NLog packageUrl: https://www.nuget.org/packages/Sentry.NLog - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/nlog/ nuget:Sentry.OpenTelemetry: name: Sentry.OpenTelemetry packageUrl: https://www.nuget.org/packages/Sentry.OpenTelemetry - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/performance/instrumentation/opentelemetry/ + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry/ nuget:Sentry.OpenTelemetry.Exporter: name: Sentry.OpenTelemetry.Exporter packageUrl: https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter @@ -82,7 +82,7 @@ targets: nuget:Sentry.Serilog: name: Sentry.Serilog packageUrl: https://www.nuget.org/packages/Sentry.Serilog - mainDocsUrl: https://docs.sentry.io/platforms/dotnet + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/guides/serilog/ nuget:Sentry.Profiling: name: Sentry.Profiling packageUrl: https://www.nuget.org/packages/Sentry.Profiling From fa6f446904d6b69f1e94c28521ce8187f9d986ed Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 13:23:07 +1200 Subject: [PATCH 5/6] ci(craft): point Sentry.OpenTelemetry.Exporter at its own docs page Review catch on #5496. The Exporter was inheriting Sentry.OpenTelemetry's docs URL - a value carried over from the registry, not one this PR introduced, so it slipped through when the sibling entry was canonicalised. There is a dedicated "OpenTelemetry (OTLP)" page: it names Sentry.OpenTelemetry.Exporter nine times and nothing else, and it's what the README's documentation badge for the package already links to. The plain opentelemetry/ page is about Sentry.OpenTelemetry, mentioning the exporter only in passing. Cross-checking the rest of the file against the README badges turned up one more: Sentry.DiagnosticSource has an anchor on the shared automatic-instrumentation page, so it now points at #diagnosticsource-integration rather than the top of a page that also covers other integrations. The README's own badges for Sentry.OpenTelemetry and Sentry.DiagnosticSource still use the pre-rename performance/ paths. Those redirect rather than 404, and the README is outside this PR's scope, so they're left for a follow-up. Co-Authored-By: Claude Opus 5 --- .craft.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.craft.yml b/.craft.yml index 6c89787b58..269ddb1498 100644 --- a/.craft.yml +++ b/.craft.yml @@ -34,7 +34,7 @@ targets: nuget:Sentry.DiagnosticSource: name: Sentry.DiagnosticSource packageUrl: https://www.nuget.org/packages/Sentry.DiagnosticSource - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/automatic-instrumentation/ + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/automatic-instrumentation/#diagnosticsource-integration nuget:Sentry.EntityFramework: name: Sentry.EntityFramework packageUrl: https://www.nuget.org/packages/Sentry.EntityFramework @@ -78,7 +78,7 @@ targets: nuget:Sentry.OpenTelemetry.Exporter: name: Sentry.OpenTelemetry.Exporter packageUrl: https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter - mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry/ + mainDocsUrl: https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry-otlp/ nuget:Sentry.Serilog: name: Sentry.Serilog packageUrl: https://www.nuget.org/packages/Sentry.Serilog From 82164c7b356530574e5134bb9d804322220f79c9 Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Tue, 18 Aug 2026 14:20:03 +1200 Subject: [PATCH 6/6] docs: update the two README badges left on the pre-rename performance/ path Sentry.DiagnosticSource and Sentry.OpenTelemetry are the only README documentation badges still pointing at /platforms/dotnet/performance/..., which 301s to /platforms/dotnet/tracing/... Nothing was broken - the badges land on the right page today, and the DiagnosticSource anchor survives since fragments are client-side - but a redirect that works today is exactly what later becomes a 404, which is how /platforms/dotnet/aspnet and /gcp-functions ended up dead. Both README badges now match what .craft.yml publishes to the release registry for the same packages. The remaining README docs links that redirect do so only for a missing trailing slash, which is a different (and cosmetic) thing - left alone here. Co-Authored-By: Claude Opus 5 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2cd171e039..117721f92b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Sentry SDK for .NET | **Sentry.AspNetCore.Blazor.WebAssembly** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.AspNetCore.Blazor.WebAssembly.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Blazor.WebAssembly) | [![NuGet](https://img.shields.io/nuget/v/Sentry.AspNetCore.Blazor.WebAssembly.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Blazor.WebAssembly) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.AspNetCore.Blazor.WebAssembly.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Blazor.WebAssembly) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/blazor-webassembly/) | | **Sentry.AspNetCore.Grpc** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.AspNetCore.Grpc.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Grpc) | [![NuGet](https://img.shields.io/nuget/v/Sentry.AspNetCore.Grpc.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Grpc) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.AspNetCore.Grpc.svg)](https://www.nuget.org/packages/Sentry.AspNetCore.Grpc) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/) | | **Sentry.AspNet** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.AspNet.svg)](https://www.nuget.org/packages/Sentry.AspNet) | [![NuGet](https://img.shields.io/nuget/v/Sentry.AspNet.svg)](https://www.nuget.org/packages/Sentry.AspNet) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.AspNet.svg)](https://www.nuget.org/packages/Sentry.AspNet) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/aspnet) | -| **Sentry.DiagnosticSource** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![NuGet](https://img.shields.io/nuget/v/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/performance/instrumentation/automatic-instrumentation/#diagnosticsource-integration) | +| **Sentry.DiagnosticSource** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![NuGet](https://img.shields.io/nuget/v/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.DiagnosticSource.svg)](https://www.nuget.org/packages/Sentry.DiagnosticSource) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/automatic-instrumentation/#diagnosticsource-integration) | | **Sentry.EntityFramework** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.EntityFramework.svg)](https://www.nuget.org/packages/Sentry.EntityFramework) | [![NuGet](https://img.shields.io/nuget/v/Sentry.EntityFramework.svg)](https://www.nuget.org/packages/Sentry.EntityFramework) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.EntityFramework.svg)](https://www.nuget.org/packages/Sentry.EntityFramework) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/entityframework) | | **Sentry.Extensions.AI** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Extensions.AI.svg)](https://www.nuget.org/packages/Sentry.Extensions.AI) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Extensions.AI.svg)](https://www.nuget.org/packages/Sentry.Extensions.AI) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Extensions.AI.svg)](https://www.nuget.org/packages/Sentry.Extensions.AI) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/ai-agents-module/) | | **Sentry.Extensions.Logging** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Extensions.Logging.svg)](https://www.nuget.org/packages/Sentry.Extensions.Logging) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Extensions.Logging.svg)](https://www.nuget.org/packages/Sentry.Extensions.Logging) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Extensions.Logging.svg)](https://www.nuget.org/packages/Sentry.Extensions.Logging) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/extensions-logging/) | @@ -32,7 +32,7 @@ Sentry SDK for .NET | **Sentry.Log4Net** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Log4Net.svg)](https://www.nuget.org/packages/Sentry.Log4Net) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Log4Net.svg)](https://www.nuget.org/packages/Sentry.Log4Net) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Log4Net.svg)](https://www.nuget.org/packages/Sentry.Log4Net) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/log4net) | | **Sentry.Maui** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Maui.svg)](https://www.nuget.org/packages/Sentry.Maui) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Maui.svg)](https://www.nuget.org/packages/Sentry.Maui) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Maui.svg)](https://www.nuget.org/packages/Sentry.Maui) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/maui) | | **Sentry.NLog** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.NLog.svg)](https://www.nuget.org/packages/Sentry.NLog) | [![NuGet](https://img.shields.io/nuget/v/Sentry.NLog.svg)](https://www.nuget.org/packages/Sentry.NLog) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.NLog.svg)](https://www.nuget.org/packages/Sentry.NLog) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/nlog) | -| **Sentry.OpenTelemetry** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![NuGet](https://img.shields.io/nuget/v/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/performance/instrumentation/opentelemetry/) | +| **Sentry.OpenTelemetry** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![NuGet](https://img.shields.io/nuget/v/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.OpenTelemetry.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry/) | | **Sentry.OpenTelemetry.Exporter** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.OpenTelemetry.Exporter.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter) | [![NuGet](https://img.shields.io/nuget/v/Sentry.OpenTelemetry.Exporter.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.OpenTelemetry.Exporter.svg)](https://www.nuget.org/packages/Sentry.OpenTelemetry.Exporter) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/tracing/instrumentation/opentelemetry-otlp/) | | **Sentry.Profiling** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Profiling.svg)](https://www.nuget.org/packages/Sentry.Profiling) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Profiling.svg)](https://www.nuget.org/packages/Sentry.Profiling) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Profiling.svg)](https://www.nuget.org/packages/Sentry.Profiling) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/profiling/) | | **Sentry.Serilog** | [![Downloads](https://img.shields.io/nuget/dt/Sentry.Serilog.svg)](https://www.nuget.org/packages/Serilog) | [![NuGet](https://img.shields.io/nuget/v/Sentry.Serilog.svg)](https://www.nuget.org/packages/Sentry.Serilog) | [![NuGet](https://img.shields.io/nuget/vpre/Sentry.Serilog.svg)](https://www.nuget.org/packages/Sentry.Serilog) | [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/dotnet/guides/serilog) |