Ngen.exe (генератор образов в машинном коде)

Генератор образов в машинном коде (Ngen.exe) — это средство повышения быстродействия управляемых приложений. Ngen.exe создает образы в машинном коде, представляющие собой файлы, содержащие компилированный специфический для процессора машинный код, и устанавливает их в кэш образов в машинном коде на локальном компьютере. Среда выполнения может использовать образы в машинном коде, находящиеся в кэше, вместо использования JIT-компилятора для компиляции исходной сборки.

Изменения NGen.exe в .NET Framework 4:

  • Теперь NGen.exe компилирует сборки с полным доверием, и политика управления доступом для кода больше не вычисляется.

  • Собственные образы, созданные с помощью NGen.exe, нельзя загружать в приложения, выполняющиеся в режиме частичного доверия.

Изменения NGen.exe в .NET Framework версии 2.0:

  • При установке сборки также устанавливаются ее зависимости, что упрощает синтаксис Ngen.exe.

  • Образы в машинном коде теперь могут использоваться совместно в различных доменах приложений.

  • Новое действие, update, заново создает образы, ставшие недействительными.

  • Служба может отложить выполнение действий, используя для создания и установки образов время простоя компьютера.

  • Был устранен ряд причин недействительности образов.

Дополнительные сведения об использовании программы Ngen.exe и службы образов в машинных кодах см. в разделе Служба образов в машинном коде.

ПримечаниеПримечание

Синтаксис Ngen.exe для версий 1.0 и 1.1 платформы .NET см. в разделе Генератор образов в машинном коде (Ngen.exe), традиционный синтаксис.

Это средство устанавливается автоматически с Visual Studio и пакетом SDK Windows. Чтобы запустить инструмент, мы рекомендуем использовать командную строку Visual Studio или командную строку пакета Windows SDK (командную оболочку). Эти служебные программы позволяют легко работать с инструментом, не переходя к папке установки. Дополнительные сведения см. в разделе Командная строка Visual Studio и пакета Windows SDK.

  • Если на компьютере установлена среда Visual Studio: на панели задач последовательно щелкните Start, All Programs, Visual Studio, Visual Studio Tools и Visual Studio Command Prompt.

    – или –

    Если на компьютере установлен пакет Windows SDK: на панели задач щелкните Start, выберите All Programs и откройте папку с пакетом Windows SDK, затем щелкните Command Prompt (или CMD Shell).

  • В командной строке введите следующее:

ngen action [options]
ngen /? | /help

Действия

В следующей таблице показан синтаксис каждого из действий action. Описания отдельных частей параметра action см. в таблицах Аргументы, Уровни приоритета, Сценарии и Конфигурации. В таблице Параметры описывается параметр options и переключатели справки.

Действие

Описание

install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]]

Формирует образы в машинном коде для сборки и ее зависимостей, а затем устанавливает образы в кэш образов в машинных кодах.

Если задан переключатель /queue, действие помещается в очередь службы образов в машинных кодах. Приоритет по умолчанию равен 3. См. таблицу Уровни приоритета.

uninstall [assemblyName | assemblyPath] [scenarios] [config]

Удаляет образы в машинных кодах для сборки и ее зависимостей из кэша образов в машинных кодах.

Для удаления одного образа и его зависимостей используются те же аргументы командной строки, что и для установки образа.

ПримечаниеПримечание
В версии .NET Framework 4 действие uninstall * не поддерживается. 

update [/queue]

Обновляет образы в машинных кодах, ставшие недействительными.

Если задан переключатель /queue, обновления помещаются в очередь службы образов в машинных кодах. Обновления всегда планируются с приоритетом 3, поэтому они выполняются во время простоя компьютера.

display [assemblyName | assemblyPath]

Отображает состояние образов в машинных кодах для сборки и ее зависимостей.

Если не указан никакой аргумент, отображается все содержимое кэша образов в машинных кодах.

executeQueuedItems [1|2|3]

– или –

eqi [1|2|3]

Выполняет поставленные в очередь задания компиляции.

Если указан приоритет, выполняются задания компиляции с большим или равным приоритетом. Если приоритет не задан, выполняются все поставленные в очередь задания компиляции.

queue {pause | continue | status}

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

Аргументы

Аргумент

Описание

assemblyName

Полное отображаемое имя сборки. Например, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5".

ПримечаниеПримечание
Для действий display и uninstall разработчик может предоставить частичное имя сборки, например myAssembly.

В командной строке программы Ngen.exe может быть указана только одна сборка.

assemblyPath

Явный путь для сборки. Можно указать полный или относительный путь.

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

В командной строке программы Ngen.exe может быть указана только одна сборка.

Уровни приоритета

Приоритет

Описание

1

Образы в машинном коде генерируются и устанавливаются немедленно, не дожидаясь окончания времени простоя.

2

Образы в машинном коде генерируются и устанавливаются, не дожидаясь окончания время простоя, но после завершения всех действий и зависимостей действий с приоритетом 1.

3

Образы в машинном коде устанавливаются, когда служба образов в машинном коде обнаружит, что компьютер неактивен. См. раздел Служба образов в машинном коде.

Сценарии

Скрипт

Описание

/Debug

Создает образы в машинных кодах, которые могут использоваться с отладчиком.

/Profile

Создает образы в машинных кодах, которые могут использоваться с профилировщиком.

/NoDependencies

Создает минимальное число образов в машинных кодах, требуемых параметрами конкретного сценария.

Конфигурации

Конфигурация

Описание

/ExeConfig:exePath

Используется конфигурация заданной исполняемой сборки.

При привязке к зависимостям программе Ngen.exe нужно принять те же решения, что и загрузчику. Когда общий компонент загружается во время выполнения с помощью метода Load, файл конфигурации приложения определяет зависимости, загруженные для общего компонента — например, версию загруженной зависимости. Переключатель /ExeConfig указывает программе Ngen.exe, какие зависимости будут загружаться во время выполнения.

/AppBase:directoryPath

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

Параметры

Параметр

Описание

/nologo

Отключает отображение эмблемы Майкрософт при запуске.

/silent

Отключает отображение сообщений об успешно выполненных операциях.

/verbose

Отображает подробные сведения для отладки.

ПримечаниеПримечание
Из-за ограничений операционных систем этот параметр для Windows 98 и Windows Millennium Edition отображает намного меньше сведений.

/help, /?

Отображает синтаксис команды и параметры для текущего выпуска.

Заметки

Для запуска Ngen.exe необходимо обладать правами администратора.

Предупреждающее замечаниеВнимание

Не запускайте NGen.exe в полностью доверенных сборках.Начиная с .NET Framework 4, NGen.exe компилирует сборки с полным доверием и политика управления доступом для кода больше не вычисляется.

Начиная с .NET Framework 4, образы, созданные с помощью NGen.exe, нельзя загружать в приложения, выполняющиеся в режиме частичного доверия. Вместо этого вызывается JIT-компилятор.

Программа Ngen.exe создает образы в машинных кодах для заданной сборки и всех ее зависимостей. Зависимости определяются по ссылкам в манифесте сборки. Единственный сценарий, в котором необходимо устанавливать зависимость отдельно — это загрузка зависимости приложением с помощью отражения, например путем вызова метода Assembly.Load.

Важное примечаниеВажно

Не используйте с образами в машинных кодах метод Assembly.LoadFrom.Образ, загруженный этим методом, не может быть использован другими сборками в контексте выполнения.

Программа Ngen.exe ведет подсчет зависимостей. Например, пусть и MyAssembly.exe, и YourAssembly.exe установлены в кэше образов в машинных кодах и содержат ссылки на OurDependency.dll. При удалении MyAssembly.exe библиотека OurDependency.dll не удаляется. Она удаляется только после последующего удаления YourAssembly.exe.

При создании образа в машинных кодах для сборки из глобального кэша сборки нужно задать ее отображаемое имя. См. раздел Assembly.FullName.

Образы в машинных кодах, созданные программой Ngen.exe, могут совместно использоваться между доменами приложений. Это означает, что можно использовать Ngen.exe в сценариях приложений, требующих совместного использования сборок доменами приложений. Чтобы определить независимость от домена, выполните следующие действия:

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

ПримечаниеПримечание

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

Формирование образов для различных сценариев

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

Например, при выполнении сборки в рамках сценария отладки или профилирования среда выполнения ищет образ в машинном коде, созданный с параметрами /Debug или /Profile. Если найти соответствующий образ в машинном коде не удается, среда выполнения возвращается к стандартной схеме JIT-компиляции. Единственным способом отладки образов в машинных кодах является создание образа в машинном коде с параметром /Debug.

Действие uninstall также распознает сценарии, позволяя удалить все или только выбранные сценарии.

Определение случаев использования образов в машинных кодах

Образы в машинных кодах могут повысить производительность в двух областях: оптимизация использования памяти и уменьшение времени запуска.

ПримечаниеПримечание

Производительность образов в машинных кодах зависит от множества факторов, усложняющих анализ, таких как шаблоны доступа к коду и данным, количество вызовов, выполняемых через границы модуля, и количество зависимостей, уже загруженных другими приложениями.Единственным способом определить, обеспечивают ли образы в машинных кодах преимущество для конкретного приложения, являются тщательные измерения производительности в основных сценариях разработки.

Оптимизация использования памяти

Образы в машинных кодах могут заметно оптимизировать использование памяти, когда код совместно используется несколькими процессами. Образы в машинных кодах являются файлами Windows PE, поэтому несколько процессов могут совместно использовать одну копию DLL-файла. Напротив, образ в машинном коде, созданный JIT-компилятором, хранится в закрытой области памяти и не может быть использован совместно.

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

Кроме того, отсутствие необходимости загружать JIT-компилятор экономит определенный объем памяти для каждого экземпляра приложения.

Ускорение запуска приложения

Предварительная компиляция сборок программой Ngen.exe может улучшить время запуска для некоторых приложений. В общем случае, преимущество достигается благодаря совместному использованию сборок компонентов приложениями, так как после запуска первого приложения общие компоненты оказываются уже загруженными в память для последующих приложений. При "холодном" запуске, когда все сборки в приложении должны загружаться с жесткого диска, использование образов в машинных кодах не обеспечивает таких преимуществ, так как преобладающим является время доступа к жесткому диску.

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

ПримечаниеПримечание

До .NET Framework 3.5 с пакетом обновления 1 (SP1) необходимо было помещать общие компоненты со строгими именами в глобальный кэш сборок, поскольку загрузчик выполняет дополнительную проверку сборок со строгими именами, отсутствующих в глобальном кэше сборок, фактически устраняя все улучшения времени запуска, создаваемые использованием образов в машинных кодах.Оптимизации, которые впервые появились в .NET Framework 3.5 с пакетом обновления 1 (SP1), удаляют дополнительную проверку.

Важность базовых адресов сборок

Так как образы в машинных кодах являются файлами Windows PE, они подвержены тем же проблемам изменения базы, что и другие исполняемые файлы. При использовании жесткой привязки влияние перемещения на производительность становится еще более заметным.

Чтобы задать базовый адрес для образа в машинных кодах, можно использовать соответствующий параметр компилятора, определяя базовый адрес для сборки. Программа Ngen.exe использует этот базовый адрес для образа в машинном коде.

ПримечаниеПримечание

Образы в машинных кодах по размеру больше управляемых сборок, используемых для их создания.Базовые адреса должны быть рассчитаны с учетом этих увеличенных размеров.

Для просмотра предпочитаемого базового адреса образа в машинном коде можно использовать такую программу, как dumpbin.exe.

Обзор аспектов использования

Следующие общие положения и факторы для приложений могут помочь решить, предпринимать ли усилия по оценке применения образов в машинных кодах для разрабатываемого приложения:

  • Образы в машинных кодах загружаются быстрее, чем MSIL, так как они устраняют необходимость многих операций запуска, таких как JIT-компиляция и проверка типов.

  • Благодаря ненужности JIT-компилятора образы в машинных кодах требуют меньшего первоначального объема работы.

  • Образы в машинных кодах позволяют нескольким процессам использовать код совместно.

  • Образам в машинных кодах требуется больше места на жестком диске, чем сборкам. Кроме того, их создание может занимать значительное время.

  • Образы в машинных кодах необходимо обслуживать.

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

    • Для одной сборки может понадобиться несколько образов в машинных кодах, используемых в различных приложениях или различных сценариях. Например, данные конфигурации в двух приложениях могут привести к различным решениям привязки для одной и той же зависимой сборки.

    • Образы в машинных кодах должны создаваться администратором, то есть от имени учетной записи Windows в группе "Администраторы".

Помимо этих общих положений, при определении преимуществ производительности, предоставляемых образами в машинных кодах, необходимо учитывать суть разрабатываемого приложения:

  • Если приложение выполняется в среде, использующей множество совместно используемых компонентов, образы в машинных кодах позволяют нескольким процессам использовать компоненты совместно.

  • Если приложение использует несколько доменов приложений, образы в машинных кодах позволяют использовать страницы кода совместно в нескольких доменах.

    ПримечаниеПримечание

    В версиях 1.0 и 1.1 платформы .NET Framework образы в машинных кодах не могут совместно использоваться в нескольких доменах приложений.Но в версии 2.0 и более поздних версиях ситуация изменилась.

  • Если приложение работает в среде сервера терминалов, образы в машинных кодах позволяют использовать кодовые страницы совместно.

  • При компиляции в образы в машинных кодах большие приложения обычно получают ряд преимуществ. Небольшие приложения обычно не получают этих преимуществ.

  • Для приложений с длительным сроком выполнения JIT-компиляция во время выполнения обеспечивает немного лучшую производительность, чем образы в машинных кодах. (Жесткая привязка может в определенной степени уменьшить эту разницу в производительности.)

Жесткая привязка

Жесткая привязка увеличивает производительность и уменьшает объем работы для образов в машинных кодах. Недостаток жесткой привязки состоит в том, что при загрузке сборки должны загружаться все образы, жестко привязанные к сборке. Для большого приложения это может заметно увеличить время запуска.

Жесткая привязка подходит для зависимостей, загруженных во всех сценариях приложения, критических для производительности. Как и для других аспектов использования образов в машинных кодах, единственным способом определить, повышает ли жесткая привязка производительность приложения, являются тщательные измерения производительности.

Атрибуты DependencyAttribute и DefaultDependencyAttribute позволяют предоставить программе Ngen.exe подсказки, касающиеся жесткой привязки.

ПримечаниеПримечание

Эти атрибуты являются подсказками программе Ngen.exe, а не командами.Их использование не гарантирует выполнения жесткой привязки.В будущих выпусках значение этих атрибутов может измениться.

Задание для зависимости подсказки, касающейся привязки

Примените DependencyAttribute к сборке, чтобы указать вероятность того, что указанная зависимость будет загружаться. LoadHint.Always указывает, что жесткая привязка подходит, Default указывает, что для зависимости должно использоваться значение по умолчанию, и Sometimes указывает, что жесткая привязка не подходит.

В следующем коде показаны атрибуты для сборки с двумя зависимостями. Первая зависимость (Assembly1) является подходящим кандидатом ля жесткой привязки, а вторая (Assembly2) — нет.

Imports System.Runtime.CompilerServices
<Assembly:DependencyAttribute("Assembly1", LoadHint.Always)>
<Assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)>
using System.Runtime.CompilerServices;
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)]
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)]
using namespace System::Runtime::CompilerServices;
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)];
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)];

Имя сборки не включает расширение имени файла. Могут использоваться отображаемые имена.

Задание для сборки подсказки для привязки по умолчанию

Подсказки для привязки по умолчанию нужны только для сборок, которые будут использоваться немедленно и часто любым приложением, связанным с этим сборками зависимостями. Чтобы определить необходимость использования желтой привязки, к таким сборкам можно применить атрибут DefaultDependencyAttribute с LoadHint.Always.

ПримечаниеПримечание

Не стоит применять атрибут DefaultDependencyAttribute к DLL-сборкам, не попадающим в эту категорию, так как применение атрибута с любым значением, отличающимся от LoadHint.Always, дает тот же эффект, что и полное отсутствие атрибута.

Корпорация Майкрософт использует атрибут DefaultDependencyAttribute, чтобы определить, что жесткая привязка является значением по умолчанию для очень небольшого числа сборок в .NET Framework, таких как mscorlib.dll.

Устранение неполадок

Чтобы проверить, применяются ли в приложении образы в машинных кодах, можно использовать Fuslogvw.exe (средство просмотра журнала привязки сборок). Выберите Образы в машинных кодах в поле Категории журналов окна средства просмотра журнала привязок. Программа Fuslogvw.exe предоставляет сведения о том, почему образ в машинном коде был отклонен.

Чтобы определить, когда JIT-компилятор начинает компиляцию функции, можно использовать управляемый помощник по отладке jitCompilationStart MDA.

Отложенная обработка

Формирование образов в машинных кодах для очень большого приложения может занять значительное время. Аналогично, изменения общего компонента или изменения настроек компьютера могут потребовать обновления многих образов в машинных кодах. Для действий install и update предусмотрен параметром /queue, помещающим операцию в очередь для отложенного выполнения службой образов в машинных кодах. Кроме того, программа Ngen.exe предусматривает действия queue и executeQueuedItems, предоставляющие определенные возможности управления этой службой. Дополнительные сведения см. в разделе Служба образов в машинном коде.

Образы в машинных кодах и JIT-компиляция

Если Ngen.exe обнаруживает в сборке методы, которые он не может создать, эти методы исключаются из образа. Когда среда выполнения выполняет сборку, то при обнаружении метода, отсутствующего в образе в машинных кодах, выполняется JIT-компиляция.

Кроме того, образы в машинных кодах не используются, если сборка была модернизирована или по какой-то причине стала недействительной.

Недействительные образы

При использовании Ngen.exe для создания образа сборки в машинных кодах результат зависит от заданных параметров командной строки и определенных настроек компьютера. В число этих характеристик входят:

  • Версия .NET Framework.

  • Версия операционной системы, при переходе с семейства Windows 9x на семейство Windows NT.

  • Полное удостоверение сборки (оно изменяется при перекомпиляции).

  • Полное удостоверение всех сборок, на которых ссылается данная сборка (оно изменяется при перекомпиляции).

  • Факторы безопасности.

Ngen.exe сохраняет эти сведения при создании образа в машинном коде. При выполнении сборки среда выполнения просматривает созданный образ на предмет таких параметров и характеристик и сравнивает их с текущими параметрами и характеристиками среды. Если среда выполнения не находит соответствующий образ в машинных кодах, выполняется JIT-компиляция. Изменения следующих параметров компьютера и среды приводят к тому, что образы устаревают, т. е. становятся непригодными для использования:

  • Версия .NET Framework.

    При обновлении .NET Framework все образы в машинных кодах, созданные с помощью программы Ngen.exe, становятся недействительными. По этой причине, чтобы гарантировать повторное создание всех образов в машинных кодах, все обновления .NET Framework выполняют команду Ngen Update. .NET Framework автоматически создает новые образы для библиотек .NET Framework, которые она устанавливает.

  • Версия операционной системы, при переходе с семейства Windows 9x на семейство Windows NT.

    Например, при смене версии операционной системы компьютера с Windows 98 на Windows XP, все образы в машинных кодах, хранящиеся в кэше образов в машинных кодах, становятся недействительными. Но при изменении операционной системы с Windows 2000 на Windows XP образы остаются действительными.

  • Полное удостоверение сборки.

    При перекомпиляции сборки соответствующий образ устаревает.

  • Полное удостоверение всех сборок, на которых ссылается данная сборка.

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

  • Факторы безопасности.

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

    Подробные сведения об управлении доступом для кода в среде CLR и об использовании разрешений см. в разделе Управление доступом для кода.

Примеры

Следующая команда создает образ в машинных кодах для приложения ClientApp.exe, расположенного в текущем каталоге, и устанавливает образ в кэш образов в машинных кодах. Если для сборки существует файл конфигурации, программа Ngen.exe использует его. Кроме того, образы в машинных кодах создаются для всех DLL-файлов, на которые ссылается приложение ClientApp.exe.

ngen install ClientApp.exe

Образ, установленный с Ngen.exe, также называется корнем. Корень может быть приложением или общим компонентом.

Следующая команда создает образ в машинном коде для MyAssembly.exe с указанным путем.

ngen install c:\myfiles\MyAssembly.exe

При поиске сборок и их зависимостей программа Ngen.exe использует ту же самую логику тестирования, что и среда CLR. По умолчанию каталог, содержащий приложение ClientApp.exe, используется в качестве базовой папки приложения, с которой начинается тестирование всех сборок. Это поведение можно переопределить с помощью параметра /AppBase.

ПримечаниеПримечание

Поведение Ngen.exe было изменено по сравнению с версиями 1.0 и 1.1 среды .NET Framework, где в качестве базы приложения использовался текущий каталог.

Сборка может использовать зависимость без ссылки, например, если она загружает DLL-файл с помощью метода Assembly.Load. С помощью параметра /ExeConfig можно создать образ в машинных кодах для такого DLL-файла, используя сведения о конфигурации для сборки приложения. Следующая команда создает образ в машинных кодах для MyLib.dll,, используя сведения о конфигурации из MyApp.exe.

ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe

Сборки, установленные таким способом, не удаляются при удалении приложения.

Чтобы удалить зависимость, следует использовать те же параметры командной строки, которые использовались при ее установке. Следующая команда удаляет MyLib.dll из предыдущего примера.

ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe

Чтобы создать образ в машинном коде для сборки в глобальном кэше сборок, следует использовать отображаемое имя сборки. Примеры.

ngen install "ClientApp, Version=1.0.0.0, Culture=neutral, 
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"

Программа NGen.exe создает отдельный набор образов для каждого устанавливаемого сценария. Например, следующие команды устанавливают полный набор образов в машинных кодах для обычной работы, другой полный набор для отладки, а тритий — для профилирования:

ngen install MyApp.exe
ngen install MyApp.exe /debug
ngen install MyApp.exe /profile

Отображение кэша образов в машинных кодах

Образы в машинных кодах, установленные в кэш, можно отобразить с помощью команды Ngen.exe. Следующая команда выводит все образы в машинном коде в кэше образов в машинном коде.

ngen display

Действие display выводит сначала все корневые сборки, а затем выводит список всех образов в машинных кодах на компьютере.

Чтобы вывести сведения только об этой сборки, можно использовать простое имя сборки. Следующая команда выводит все образы в кэше образов в машинных кодах, соответствующие неполному имени MyAssembly, их зависимости и все корни с зависимостями от MyAssembly:

ngen display MyAssembly

Знание того, что корни зависят от общей сборки компонентов, полезно при определении влияния действия update после модернизации общего компонента.

Если задано расширение файла сборки, необходимо либо указать путь, либо выполнить программу Ngen.exe из каталога, содержащего сборку:

ngen display c:\myApps\MyAssembly.exe

Следующая команда выводит все образы с именем MyAssembly и версией 1.0.0.0, содержащиеся в кэше образов в машинном коде.

ngen display "myAssembly, version=1.0.0.0"

Обновление образов

Образы обычно обновляются после модернизации общего компонента. Для обновления всех образов в машинных кодах, которые были изменены или для которых были изменены зависимости, используется действие update без аргументов.

ngen update

Обновление всех образов может быть длительным процессом. С помощью параметра /queue можно поставить обновления в очередь выполнения службы образов в машинных кодах. Дополнительные сведения о параметре /queue и приоритетах установки см. в разделе Служба образов в машинном коде.

ngen update /queue

Удаление образов

Программа Ngen.exe поддерживает список зависимостей, поэтому общие компоненты удаляются, только когда удалены все сборки, зависимые от этих компонентов. Кроме того, общий компонент не удаляется, если он установлен как корень.

Следующая команда удаляет все сценарии для корня ClientApp.exe:

ngen uninstall ClientApp

Для удаления конкретных сценариев может использоваться действие uninstall. Следующая команда удаляет все сценарии отладки для ClientApp.exe:

ngen uninstall ClientApp /debug
ПримечаниеПримечание

Удаление сценариев /debug не удаляет сценарий, включающий и /profile, и /debug.

Следующая команда удаляет все сценарии для конкретной версии ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"

Следующая команда удаляет все сценарии для "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", или только сценарий отладки для этой сборки:

ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral, 
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"
ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral, 
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" /debug

Как и в случае действия install, предоставление расширения требует либо выполнения программы Ngen.exe из каталога, содержащего сборку, либо задания полного пути.

Примеры, связанные со службой образов в машинных кодах, см. в разделе Служба образов в машинном коде.

См. также

Ссылки

Командная строка Visual Studio и пакета Windows SDK

Основные понятия

Служба образов в машинном коде

Процесс управляемого выполнения

Обнаружение сборок в среде выполнения

Другие ресурсы

Инструменты .NET Framework

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Добавлены сведения об использовании командных строк Visual Studio и Windows SDK.

Улучшение информации.

Июнь 2010

Добавлена таблица уровней приоритета.

Обратная связь от клиента.