23

我在 C# 可执行文件上做了 Ngen。它是成功的,但我无法弄清楚生成的文件在我的电脑中的位置。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
4

5 回答 5

23

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

C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Web\ace3bede2f516f9e5bca620ad86cc063>System.Web.ni.dll

它们从开始,C:\Windows\assembly然后NativeImages_vXXX每个 .NET 版本都有一个子文件夹。然后每个 dll 都有一个具有本机图像的子文件夹。在另一个用于唯一版本标识符的子文件夹下(因此您可以拥有来自同一 dll 的不同版本的多个本机图像)。最后是本机 dll 本身。

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

于 2011-04-14T01:45:52.527 回答
22

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

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

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

于 2012-03-14T15:56:02.470 回答
2

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

于 2011-04-14T01:28:37.343 回答
2

尝试 ngen display AssemblyName /verbose | findstr "文件:"

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

于 2013-07-19T07:17:15.330 回答
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目录中。

于 2017-04-23T10:01:39.173 回答