为什么我的 CLR 分析器不加载普通的、非配置文件优化的本机图像?

Why do plain, non-profile-optimized native images aren't loaded by my CLR profiler?

我正在开发一个 CLR 分析器,使用 CLR profiling interfaces,并且很难让 CLR 加载普通的、非配置文件优化的本机图像(使用 ngen.exe 编译的没有 /profile 选项)当 运行 我的探查器时(或者至少,似乎没有加载这些图像,但现在我不能确定)。我做错了什么?

我已确认 COR_PRF_USE_PROFILE_IMAGES 标志(只允许配置文件优化的原生图像)未在我的分析器中设置。

以下是我试过的方法。非常感谢任何 help/tips!

FUSLOGVW 输出:

我一直在检查原生图像活页夹日志(在 FUSLOGVW.exe 中)试图弄清楚图像是否已加载:

附加信息:

回来回答我自己的问题,看来确实加载了原生图像! (两种 - 普通和配置文件优化)。问题是我的理解确实是这样。

我的错误来源是误读了 FUSLOGVW 日志输出。具体来说,不知何故,我没有看到 /profile 图像给出了 WRN: Native image compile options do not match request. Looking for next native image,但图像搜索继续并找到了普通的非个人资料图像,并且成功了。

最终帮助我理解的是Visual Studio。在 Visual Studio 中调试 CLR 探查器时,本机图像的绑定显示在 调试输出 window 中,其中还显示了正在加载的 DLL:

'CSharpTestProgram.exe' (Win32): Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlibef49acbb43c068f6ddf1587283b5f29\mscorlib.ni.dll'. 

一旦我得到这个,FUSLOGVW 日志开始变得更有意义,我可以准确了解加载了哪个图像以及何时加载。

另一个观察结果是 mscorlib /profile 图像比普通原生图像占用更多磁盘 space(在我的例子中大 30%),这也帮助我关联了图像路径和不管是/profile还是不是