我在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
答案 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
文件夹的根目录中。