Microsoft.Diagnostics.Runtime 2.1.327703 The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved

.NET 6.0 .NET Standard 2.0
Install-Package Microsoft.Diagnostics.Runtime -Version 2.1.327703
dotnet add package Microsoft.Diagnostics.Runtime --version 2.1.327703
<PackageReference Include="Microsoft.Diagnostics.Runtime" Version="2.1.327703" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Microsoft.Diagnostics.Runtime --version 2.1.327703
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Microsoft.Diagnostics.Runtime, 2.1.327703"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Microsoft.Diagnostics.Runtime as a Cake Addin
#addin nuget:?package=Microsoft.Diagnostics.Runtime&version=2.1.327703

// Install Microsoft.Diagnostics.Runtime as a Cake Tool
#tool nuget:?package=Microsoft.Diagnostics.Runtime&version=2.1.327703
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Migrating to 2.1

Here is a summary of breaking changes in ClrMD 2.1:

Microsoft.Diagnostics.Runtime.Architecture → System.Runtime.InteropServices.Architecture

Use System.Runtime.InteropServices.Architecture instead. Note that the values have shifted, since ClrMD defined an "Unknown" enum member as 0, which is not in the new architecture list.

IBinaryLocator → IFileLocator

We have removed IBinaryLocator and replaced it with IFileLocator. Similarly the properties on DataTarget and CustomDataTarget have changed accordingly.

If you originally implemented the IBinaryLocator interface, you will now need to implement IFileLocator instead. This interface is meant to fully capture the SSQP conventions for making symbol server requests. The specs for which can be found at SSQP Key Conventions and SSQP CLR Private Key conventions.

Most folks don't need to implement these interface specifically, and ClrMD provides a reasonable default implementation. Unfortunately, the best way to see how these are implemented is to look at ClrMD's implementation if you need to change behavior.

Why did we make this change?

IBinaryLocator did not provide the proper interface surface to fully capture Elf and Mach-O symbol server requests and the underlying interface could not be made to work without resorting to some really bad hacks.

It was a lot cleaner to replace IBinaryLocator than to try to hack around the original implementation.

PEImage and Elf related classes are now internal

TODO: Provide stream so this can be passed to System.Reflection.Metadata.

Why did we make this change?

ClrMD was designed 10 years ago as a monolithic API that does everything for the user, such as parsing files that are unrelated to .Net diagnostics. It was originally designed this way because there wasn't a healthy NuGet ecosystem at the time where these kinds of APIs existed.

We've found some very tough to solve problems in the internals of PEImage where what ClrMD needs is a PE image reader which understands that data could be missing from a dump file, that we may need to go request the file from a symbol server mid-operation, and that requesting from a symbol server should only be done on demand and not eagerly.

We cannot reasonably make those fixes changes without another breaking change to PEImage. At this point it makes sense to have folks use a REAL PE image (and elf image) reader instead of ClrMD's half-baked one.

Some alternatives:

  1. System.Reflection.Metadata
  2. https://github.com/dotnet/symstore/tree/main/src/Microsoft.FileFormats
  3. https://www.nuget.org/packages/Marklio.Metadata/

ModuleInfo has changed slightly

If you implement your own IDataTarget and need to produce ModuleInfo you will need to define an implementation here. I will likely mark my implementations of ModuleInfo for pefiles, elf files, and mach-o files as public at some point, but I wanted to make sure they are actually ready (design-wise) to be marked public first.

VersionInfo is removed

Use System.Version instead.

ClrInfo.DacInfo → ClrInfo.DebugLibraryInfo

Additionally we added ClrInfo.IsSingleFile.

ClrInfo.DacLibraryClrInfo.DebuggingLibraries

Instead of providing a single "DacLibrary", we now enumerate all debugging libraries we know to exist for this CLR runtime. The resulting list is stored in DebuggingLibraries instead. Most folks didn't use DacLibrary directly, but if you did then you will need to enumerate DebuggingLibraries and find all libraries which match your current platform and architecture. Additionally, we also enumerate DBI libraries even though ClrMD does not use them (this is DebugLibraryInfo.Kind).

You will still find the original file DacLibrary pointed to in this list of dacs.

ClrRuntimeInfo has is no longer marked public

This is an odd struct that probably will change over the lifetime of .Net Core. It should not have been exposed as public to begin with. Instead all of this information is provided by ClrInfo.DebuggingLibraries.

ClrInfoProvider was removed

This functionality has been wrapped into ClrInfo, and probably shouldn't have been marked public to begin with.

Why did we make this change?

Creating ClrInfo was a strange, multi class process and involved a lot of moving pieces spread over the codebase. We now consolidated all of the relevant code into ClrInfo.cs. We've also pulled together all of the various ways of finding the DAC and DBI libraries all in one place and provided a way for the user to locate all of the various binaries.

This also lets ClrMD enumerate through all possible matching DAC libraries and query the symbol server for all of them. This is especially helpful in case one of the dacs happens to be missing from the symbol server (which should be rare but isn't unheard of).

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (22)

Showing the top 5 NuGet packages that depend on Microsoft.Diagnostics.Runtime:

Package Downloads
BenchmarkDotNet The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Powerful .NET library for benchmarking

ppy.osu.Framework

A 2D application/game framework written with rhythm games in mind.

Backtrace

Backtrace's integration with C# applications allows customers to capture and report handled and unhandled C# exceptions to their Backtrace instance, instantly offering the ability to prioritize and debug software errors.

DynaMD

Helper objects to browse complex structures returned by ClrMD

ParallelStacks.Runtime

Helper objects to compute and render thread stacks

GitHub repositories (34)

Showing the top 5 popular GitHub repositories that depend on Microsoft.Diagnostics.Runtime:

Repository Stars
dnSpy/dnSpy
.NET debugger and assembly editor
dotnet/roslyn
The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
dotnet/BenchmarkDotNet
Powerful .NET library for benchmarking
winsw/winsw
A wrapper executable that can run any executable as a Windows service, in a permissive license.
microsoft/perfview
PerfView is a CPU and memory performance-analysis tool
Version Downloads Last updated
2.1.327703 67 5/27/2022
2.0.226801 677,731 5/19/2021
2.0.226401 489 5/14/2021
2.0.222201 24,020 4/22/2021
2.0.221201 1,907 4/14/2021
2.0.217201 26,755 3/22/2021
2.0.161401 240,289 12/14/2020
2.0.156101 19,453 11/18/2020
2.0.151903 14,725 10/19/2020
2.0.145301 43,173 9/4/2020
2.0.142701 3,755 8/28/2020
2.0.142501 1,122 8/25/2020
2.0.142103 1,240 8/21/2020
2.0.141902 5,110 8/19/2020
2.0.137201 17,431 7/22/2020
2.0.130507 17,304 6/6/2020
2.0.0-rc.20303.6 304 6/4/2020
2.0.0-rc.20278.6 342 5/28/2020
2.0.0-beta.20276.4 238 5/27/2020
2.0.0-beta.20273.1 299 5/23/2020
2.0.0-beta.20272.2 322 5/22/2020
2.0.0-beta.20272.1 238 5/22/2020
2.0.0-beta.20268.2 317 5/18/2020
2.0.0-beta.20230.2 376 4/30/2020
2.0.0-beta.20230.1 243 4/30/2020
2.0.0-beta.20229.3 240 4/30/2020
2.0.0-beta.20223.2 246 4/23/2020
2.0.0-beta.20222.8 219 4/23/2020
2.0.0-beta.20222.7 212 4/23/2020
2.0.0-beta.20222.5 214 4/22/2020
2.0.0-beta.20220.3 222 4/20/2020
2.0.0-beta.20213.1 352 4/13/2020
2.0.0-beta.20174.2 315 3/24/2020
2.0.0-beta.20072.5 605 1/23/2020
2.0.0-beta.19618.7 362 12/19/2019
2.0.0-beta.19612.8 258 12/12/2019
1.1.142101 112,242 8/21/2020
1.1.132302 11,736 6/23/2020
1.1.127808 52,221 5/29/2020
1.1.126102 2,690,716 5/17/2020
1.1.122004 30,425 4/20/2020
1.1.116301 29,443 3/13/2020
1.1.61812 54,643 12/19/2019
1.1.57604 3,112,182 11/26/2019
1.1.57004 3,523 11/20/2019
1.1.46104 90,165 9/11/2019
1.1.37504 34,140 7/25/2019
1.1.35902 5,567 7/9/2019
1.1.35504 1,088 7/5/2019
1.0.5 713,601 3/19/2019
1.0.3 62,814 2/13/2019
1.0.2 20,830 12/17/2018
1.0.0 8,830 11/22/2018
0.9.180305.1 249,760 3/6/2018
0.9.170809.3 125,127 8/9/2017
0.9.170626.1 21,456 6/26/2017
0.8.31-beta 574,662 10/15/2015
0.8.30-beta 6,187 9/16/2015
0.8.27-beta 38,726 9/30/2014
0.8.26-beta 1,644 8/14/2014
0.8.25-beta 2,942 3/12/2014
0.8.24-aamain00309 1,106 12/2/2014
0.7.1-beta 3,123 5/3/2013

See https://github.com/Microsoft/clrmd/releases for the latest release notes