Determine if GAC'ed & NGen'ed assemblies are being used

后端 未结 3 1421
执念已碎
执念已碎 2020-12-14 21:42

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

相关标签:
3条回答
  • 2020-12-14 22:03

    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.

    0 讨论(0)
  • 2020-12-14 22:22

    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.

    0 讨论(0)
  • 2020-12-14 22:27

    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.

    0 讨论(0)
提交回复
热议问题