Skip to content

Dotsider.Core.Analysis

Detects .NET apphost executables and locates their companion managed assemblies.

public static class ApphostDetector

Core analyzer that reads a .NET assembly and extracts PE, metadata, IL, and string information. Uses PEReader and MetadataReader from the BCL.

public sealed class AssemblyAnalyzer : IDisposable

Compares two assemblies and produces a detailed diff result. Uses dictionary-based O(n) matching by name.

public static class AssemblyDiffer

Formats an assembly’s full identity into a stable opaque string used as a graph node identifier and as a key for grouping TypeRefInfo entries by the full identity of their resolution scope.

public static class AssemblyIdentityFormat

Shared factory for opening assembly files. Handles apphosts (companion .dll redirect), single-file bundles (entry assembly extraction), and direct .dll/.exe loading. Returns an AssemblyOpenResult that preserves the distinction so callers can decide how to present each case (e.g. showing an apphost dialog).

public static class AssemblyLoader

Builds the full transitive assembly dependency graph rooted at an analyzed assembly. Performs a breadth-first walk through each assembly’s AssemblyRefs, resolving children by full identity, deduping on Id, preserving edges for cycles and diamonds, and classifying unresolvable and identity-mismatched references as non-expanding leaf nodes. For .NET Framework roots the resolution routes through NetFxBinder so that nodes are keyed on the bound identity (post-redirect), collapsing two distinct requested versions onto a single graph node when policy redirects them to the same loaded version. Produces a DependencyGraphResult containing the public topology plus internal navigation metadata consumed only by the TUI.

public static class DependencyGraphBuilder

Discovers system .NET installations and resolves shared framework assembly paths.

public static class DotNetRuntimeLocator

Decodes IL (Intermediate Language) method bodies into human-readable instruction sequences.

public sealed class IlDisassembler

Resolves a metadata token from an IL instruction to an IlNavigationTarget describing what the token points to and where it lives.

public static class IlNavigationResolver

Resolves reference assemblies (e.g., System.Runtime, mscorlib) to their implementation assemblies (e.g., System.Private.CoreLib) by probing for type forwarding.

public static class ImplementationAssemblyResolver

CLR-accurate .NET Framework assembly binder for both CLR generations. Consumes a NetFxBindingContext and produces a NetFxBindResult matching what the actual .NET Framework binder would do at runtime: framework unification + machine.config + publisher policy + app config (in CLR walk order, with later layers overriding earlier ones), then locate against the GAC (architecture-prioritized, strong-named only), then the framework runtime directory, then configured codeBase href (fail-fast), then the application base + private paths with culture-aware probing.

public static class NetFxBinder

Resolves assembly references by consulting the referencing assembly’s .deps.json file to locate its NuGet dependencies in the NuGet global packages folder. This is the probe step that makes library projects work — dotnet build does not copy NuGet package assemblies next to a library’s bin output, but the .deps.json manifest records the exact resolved package version and runtime asset path, matching what the .NET host uses at runtime.

public static class NuGetDepsJsonResolver

Opens and analyzes a NuGet package (.nupkg) file. Reads package metadata from .nuspec and lists all contents.

public sealed class NuGetPackageAnalyzer : IDisposable

Manages launching a .NET assembly as a child process and collecting runtime events via EventPipe diagnostics (PID-based connect with retry).

public sealed class RuntimeTracer : IDisposable

Reads .NET single-file bundles — detects the bundle signature, parses the manifest header, and extracts individual entries.

public static class SingleFileBundleReader

Computes IL code size per method and builds a hierarchical size tree for treemap visualization.

public static class SizeAnalyzer

Extracts strings from .NET assemblies across three sources: the #US heap (user string literals), the #Strings heap (metadata identifiers), and raw printable character sequences from the binary.

public sealed class StringExtractor