Где я могу найти местоположение сгенерированного файла после выполнения Ngen? - PullRequest
22 голосов
/ 14 апреля 2011

Я сделал Ngen на C # исполняемый файл.Это было успешно, но я не могу понять, где сгенерированный файл находится на моем ПК.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

Ответы [ 5 ]

22 голосов
/ 14 апреля 2011

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

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.В Проводнике есть расширение оболочки, которое скрывает детали работы GAC и собственных изображений и просто показывает вам более симпатичный пользовательский интерфейс.

21 голосов
/ 14 марта 2012

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

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

После этого откройте новое окно проводника и перейдите, например, к c: \ windows \ assembly.

2 голосов
/ 19 июля 2013

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

ex:% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ ngen.exe display System.Xaml / verbose |findstr "Файл:"

2 голосов
/ 14 апреля 2011

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

1 голос
/ 23 апреля 2017

Ну, вы видите, что это заняло много времени, чтобы найти место!

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

...