在做Ngen之后,我在哪里可以找到生成文件的位置?

我在C#可执行文件上做了Ngen。 这是成功的,但我无法弄清楚生成的文件在我的PC中的位置。 MSDN说它应该在原生图像缓存中,仍然无法弄清楚它在哪里。

编辑:我想对它运行objdump,因此我需要物理文件

EDIT2:我运行ngen的输出是:

C:\Documents and Settings\nmea\My Documents\Visual Studio 2008\Projects\Consol eApplication4\ConsoleApplication4\bin\Release>ngen install ConsoleApplication4.e xe Microsoft (R) CLR Native Image Generator - Version 2.0.50727.3053 Copyright (c) Microsoft Corporation. All rights reserved. Installing assembly C:\Documents and Settings\nmea\My Documents\Visual Studio 2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Release\ConsoleApplica tion4.exe Compiling assembly C:\Documents and Settings\nmea\My Documents\Visual Stud io 2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Release\ConsoleAppl ication4.exe (CLR v2.0.50727) ... ConsoleApplication4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 

具体位置因版本而异,但与此类似:

 C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Web\ace3bede2f516f9e5bca620ad86cc063>System.Web.ni.dll 

它们从C:\Windows\assembly ,然后每个.NET版本都有一个子文件夹NativeImages_vXXX 。 然后每个dll都有一个子文件夹,它有一个原生图像。 在另一个子文件夹下的唯一版本标识符(因此您可以从同一个dll的不同版本中获得多个本机映像)。 最后是本机dll本身。

请注意,您无法在Windows Exlporer中导航到此目录。 使用cmd。 在资源管理器中有一个shell扩展,它隐藏了GAC和本机映像的工作方式,并且只显示了一个更漂亮的用户界面。

只是在这里探讨一些类似的问题,如果您在注册表中进行更改,则可以在资源管理器中导航。

在HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Fusion下,创建名为DisableCacheViewer的DWORD条目,并将其设置为1。

之后,打开一个新的资源管理器窗口并导航到例如c:\ windows \ assembly。

您可以在c:\ windows \ assembly中的NativeImages_blabla文件夹中找到它们。 另外我注意到.NET 3.5及更高版本实际上不允许物理访问NGENed图像。 我想它恢复为所有文件使用一个大型数据库,但我不能确定,因为生成的图像无法在磁盘上看到。

尝试使用ngen显示AssemblyName / verbose | findstr“文件:”

例如:%windir%\ Microsoft.NET \ Framework \ v4.0.30319 \ ngen.exe显示System.Xaml / verbose | findstr“文件:”

好吧,你看到需要很长时间才能找到位置!

好吧,它在c:\Windows\assembly文件夹中,但是当我打开这个文件夹时,我只能看到.NET程序集,所以我想会有一些隐藏的文件夹。 所以我用管理权限打开命令提示符然后我能够看到文件夹列表,如下所示…

 GAC, GAC_32, GAC_64, GAC_MSIL, NativeImages_v2.0.50727_32 NativeImages_v2.0.50727_64, NativeImages_v4.0.30319_32, NativeImages_v4.0.30319_64 

你看它太神奇了。 我的意思是,在这里我只能看到所需的文件夹,但不能看到程序集。 好吧,没问题,快乐。

所以我的应用程序是在v4和64位编译中构建的,因此我所需的EXE文件位于NativeImages_v4.0.30319_64文件夹的根目录中。