C# 执行Ngen后,在哪里可以找到生成文件的位置?

C# 执行Ngen后,在哪里可以找到生成文件的位置?,c#,.net,clr,ngen,C#,.net,Clr,Ngen,我没有在一个C#可执行文件上进行加密。它成功了,但我无法确定生成的文件在我的电脑中的位置。MSDN说它应该在本机映像缓存中,但仍然无法确定它在哪里 编辑:我想在其上运行objdump,因此我需要物理文件 编辑2:我运行ngen的目的是: C:\Documents and Settings\nmea\My Documents\Visual Studio 2008\Projects\Console EAApplication4\ConsoleApplication4\bin\Release>ngen

我没有在一个C#可执行文件上进行加密。它成功了,但我无法确定生成的文件在我的电脑中的位置。MSDN说它应该在本机映像缓存中,但仍然无法确定它在哪里

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

编辑2:我运行ngen的目的是:

C:\Documents and Settings\nmea\My Documents\Visual Studio 2008\Projects\Console
EAApplication4\ConsoleApplication4\bin\Release>ngen安装ConsoleApplication4.e
氙
Microsoft(R)CLR本机映像生成器-版本2.0.50727.3053
版权所有(c)微软公司。版权所有。
安装程序集C:\Documents and Settings\nmea\My Documents\Visual Studio
2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Release\ConsoleApplica
4.exe
编译程序集C:\Documents and Settings\nmea\My Documents\Visual Studio
io 2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Release\ConsoleAppl
.exe(CLR v2.0.50727)。。。
ConsoleApplication4,版本=1.0.0.0,区域性=中立,PublicKeyToken=null

您可以在c:\windows\assembly的NativeImage_blabla文件夹中找到它们。我还注意到.NET3.5及更高版本实际上不允许物理访问NGENed映像。我想它已恢复为对所有文件使用一个大型数据库,但我不能确定,因为生成的图像在磁盘上看不到任何位置。

确切位置因版本而异,但与此类似:

C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Web\ace3bede2f516f9e5bca620ad86cc063>System.Web.ni.dll
它们从
C:\Windows\assembly
开始,然后每个.NET版本都有一个子文件夹
NativeImages\u vXXX
。然后,每个具有本机映像的dll都有一个子文件夹。在该文件夹下,为唯一版本标识符创建另一个子文件夹(因此您可以拥有来自同一dll不同版本的多个本机映像)。最后是本机dll本身


请注意,您无法在Windows Exlporer中导航到此目录。使用cmd。在资源管理器中有一个shell扩展,它隐藏了GAC和本机映像如何工作的详细信息,并向您展示了一个更漂亮的UI。

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

在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 display 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\u v4.0.30319\u 64
文件夹的根目录中。

在我的电脑的c:\windows\assembly下只有一个名为“download”的文件夹。找不到任何以“Native”开头的文件有..从visual c#2008 sdk提示符运行。Ngen版本为“Microsoft(R)CLR本机映像生成器-版本2.0.50727.3053”,然后确保本机映像缓存中存在该文件,使用
Ngen/show MyAssembly
,然后在整个Windows目录中搜索该程序集。我确信如果在缓存中正确安装,它会出现。是的,当我尝试显示时,它就出现了:“本机映像:ConsoleApplication4,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”结果表明,您可以在资源管理器中导航GAC——添加了一个答案,不确定是否作为注释更好。Ngen与本机映像缓存相关,而不是GAC。见: