繁体   English   中英

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

[英]Where can I find location of generated file after doing 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和本机映像如何工作的详细信息,并且只显示了更漂亮的UI。

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM