📄 Program.cs
using System;
using System.IO;
using System.Runtime.CompilerServices;
using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis.MSBuild;
using Reacher;

MSBuildLocator.RegisterDefaults();

using var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(GetSolutionPath());

Noop();

var analysis = await solution.AnalyzeReachabilityFromEntryPoints(default);

foreach (var member in analysis.ReachableMembers)
{
    Console.WriteLine(member);
}

return;

#pragma warning disable CS0162 // Intentionally unreachable
Unreachable();
#pragma warning restore CS0162

static string GetSolutionPath([CallerFilePath] string sourcePath = null!) =>
    Path.GetFullPath(Path.Join(Path.GetDirectoryName(sourcePath), @"..\Reacher.slnx"));

static void Noop() => TransitiveNoop();

static void TransitiveNoop() { }

static void Unreachable() => Unreachable();

static void Unused() => Unused();