How do I determine if the Native images are being used without the Loader verifing the signature of the assembly at runtime, or even using the GAC\'ed assembly?
I ha
You can use the VMMAP. There, all the .dll (assembly) have location details
In details if your assembly is being loaded from "C:\Windows\assembly\NativeImages(version)..." so your application are using the native image.
You can easily see it from the Fuslogvw.exe tool. Start it from the Visual Studio Command Prompt. Configure it with Log Categories = Native Images, Settings + Log all binds to disk. Run your program. Back to fuslogvw, Refresh. It will show you a list of all assemblies that got loaded.
Double-click an entry to see how the assembly got loaded. If it came from the GAC, you'll see:
LOG: IL assembly loaded from C:\Windows\assembly\GAC_MSIL\blahblah
If the Ngen-ed images was used, you'll see:
LOG: Bind to native image succeeded.
You can see if the assembly came from the GAC pretty easily:
Assembly assembly = Assembly.GetExecutingAssembly();
if (assembly.GlobalAssemblyCache)
{
Console.WriteLine("I'm in the GAC!");
}
EDIT: found a way...
In order to see if it is NGEN'd, you have to read the assembly directly and see if the Precompile Header field has data as per this page. I'm a bit rusty on getting to that value, but that should do it. I don't see a way to figure it out via the reflection methods.