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

本文关键字:文件 Ngen 后生 位置 在哪里 | 更新日期: 2023-09-27 17:50:00

我在一个c#可执行文件上做了Ngen。它是成功的,但我不知道生成的文件在我的电脑里。MSDN说它应该在本地图像缓存中,但仍然无法确定它在哪里。

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

编辑2:my putput of running 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

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

具体位置因版本而异,但大致如下:

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 explorer中导航到此目录。使用cmd。在资源管理器中有一个shell扩展,它隐藏了GAC和本地图像如何工作的细节,只是向您展示了一个更漂亮的UI。

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

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

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

您可以在c:'windows'assembly下的NativeImages_blabla文件夹中找到它们。此外,我还注意到。net 3.5及以上版本实际上不允许物理访问NGENed映像。我猜它恢复到使用一个大数据库的所有文件,但我不能确定,因为生成的图像是没有地方可以看到磁盘上。

Try ngen display AssemblyName/verbose | findstr "File:"

交货:%windir%' microt.net 'Framework'v4.0.30319'ngen.exe显示系统Xaml/verbose | findstr "File:"

你看,我花了很长时间才找到那个位置!

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