using System.Reflection.PortableExecutable;
public static void Main()
Console.WriteLine(Environment.OSVersion);
var currentAssemblyIsManaged = IsManaged(typeof(Program).Assembly.Location) ?? false;
Console.WriteLine($"The currently executing assembly is {(currentAssemblyIsManaged ? "" : "not ")}managed");
Console.WriteLine("Here are some unmanaged assemblies:");
var unmanagedAssemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES"))
.Split(OperatingSystem.IsWindows() ? ';' : ':')
.Select(path => Path.GetDirectoryName(path))
.SelectMany(directory => Directory.GetFiles(directory))
.Where(file => IsManaged(file) == false);
foreach (var path in unmanagedAssemblies)
static bool? IsManaged(string path)
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
using var peReader = new PEReader(stream);
return peReader.HasMetadata;