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

时间:2011-04-14 01:23:01

标签: c# .net clr 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

5 个答案:

答案 0 :(得分:22)

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

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和本机映像如何工作的详细信息,并且只显示了一个更漂亮的用户界面。

答案 1 :(得分:21)

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

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

之后,打开一个新的资源管理器窗口并导航到例如C:\ Windows \组件

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

嗯,你发现需要很长时间才能找到位置!

嗯,它位于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文件夹的根目录中。