Подтвердить что ты не робот

Где я могу найти местоположение сгенерированного файла после выполнения Ngen?

Я сделал Ngen для исполняемого файла С#. Это было успешно, но я не могу понять, где сгенерированный файл находится на моем ПК. MSDN говорит, что он должен быть в кэше собственного образа, все еще не в состоянии выяснить, где он находится.

EDIT: я хочу запустить 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
4b9b3361

Ответ 1

Точное местоположение будет отличаться по версии, но оно будет примерно таким:

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

Они начинаются с C:\Windows\assembly, а затем есть подпапка NativeImages_vXXX для каждой версии .NET. Затем есть подпапка для каждой dll, которая имеет собственный образ. Под этой другой подпапкой для уникального идентификатора версии (чтобы вы могли иметь несколько собственных образов из разных версий одной и той же библиотеки). Наконец, сама родная dll.

Обратите внимание, что вы не можете перейти к этому каталогу в Windows Exlporer. Используйте cmd. В проводнике есть расширение оболочки, которое скрывает детали работы GAC и собственных изображений и просто показывает вам более красивый интерфейс.

Ответ 2

Просто изучите некоторые подобные проблемы здесь, и вы можете перемещаться по GAC в проводнике, если вы вносите изменения в реестр.

В HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion создайте запись DWORD с именем DisableCacheViewer и установите ее в 1.

После этого откройте новое окно проводника и перейдите к примеру. с:.\Windows\сборка

Ответ 3

Вы найдете их в папке NativeImages_blabla в c:\windows\assembly. Также я заметил, что .NET 3.5 и выше фактически не позволяют физически получать доступ к изображению NGENed. Я думаю, он вернулся к использованию одной большой базы данных для всех файлов, но я не могу быть уверенным, так как сгенерированные изображения не там, где их можно увидеть на диске.

Ответ 4

Попробуйте ngen display AssemblyName/verbose | findstr "Файл:"

например: % windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe display System.Xaml/verbose | findstr "Файл:"

Ответ 5

Хорошо, вы видите, что для поиска места требуется много времени!

Ну, это внутри папки 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.