Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Generátor nativních imagí (Ngen.exe) je nástroj, který zlepšuje výkon spravovaných aplikací. Ngen.exe vytvoří nativní bitové kopie, což jsou soubory obsahující zkompilovaný strojový kód specifický pro procesor, a nainstaluje je do mezipaměti nativních bitových kopií v místním počítači. Modul runtime může k kompilaci původního sestavení použít nativní bitové kopie z mezipaměti místo kompilátoru JIT (just-in-time).
Poznámka:
Ngen.exe kompiluje nativní bitové kopie pro sestavení, která cílí pouze na rozhraní .NET Framework. Ekvivalentní generátor nativních imagí pro .NET Core je CrossGen.
Změny Ngen.exe v rozhraní .NET Framework 4:
Ngen.exe nyní kompiluje sestavení s úplným vztahem důvěryhodnosti a zásady zabezpečení přístupu kódu (CAS) se už nevyhodnocují.
Nativní bitové kopie vygenerované pomocí Ngen.exe se už nedají načíst do aplikací, které běží v částečné důvěryhodnosti.
Změny Ngen.exe v rozhraní .NET Framework verze 2.0:
Instalace sestavení také nainstaluje jeho závislosti, což zjednodušuje syntaxi Ngen.exe.
Nativní bitové kopie se teď dají sdílet napříč doménami aplikací.
Nová akce ,
updateznovu vytvoří image, které byly zneplatněna.Akce je možné odložit ke spuštění službou, která k vygenerování a instalaci imagí používá v počítači dobu nečinnosti.
Některé příčiny zneplatnění obrázku byly odstraněny.
Ve Windows 8 viz Úloha nativní bitové kopie.
Další informace o použití Ngen.exe a služby nativní bitové kopie naleznete v tématu Služba nativní bitové kopie.
Poznámka:
Ngen.exe syntaxi pro verze 1.0 a 1.1 rozhraní .NET Framework najdete ve starší syntaxi generátoru nativních imagí (Ngen.exe).
Tento nástroj je automaticky nainstalován se sadou Visual Studio. Ke spuštění nástroje použijte Visual Studio Developer Command Prompt nebo Visual Studio Developer PowerShell.
Na příkazovém řádku zadejte následující:
Syntaxe
ngen action [options]
ngen /? | /help
Akce
V následující tabulce je uvedena syntaxe jednotlivých action. Popis jednotlivých částí objektu actionnaleznete v tabulkách Argumenty, Úrovně priority, Scénáře a Konfigurační tabulky. Tabulka Možnosti popisuje options přepínače nápovědy a přepínače nápovědy.
| Činnost | Description |
|---|---|
install[assemblyName | assemblyPath] [] [configscenarios] [/queue[{1|:|23}]] |
Vygenerujte nativní bitové kopie pro sestavení a jeho závislosti a nainstalujte image do mezipaměti nativních bitových kopií. Pokud /queue je zadáno, akce se zařadí do fronty pro službu nativní bitové kopie. Výchozí priorita je 3. Podívejte se na tabulku Úrovně priority . |
uninstall[] [assemblyName | assemblyPath] [configscenarios] |
Odstraňte nativní bitové kopie sestavení a jeho závislosti z mezipaměti nativních bitových kopií. Pokud chcete odinstalovat jednu image a její závislosti, použijte stejné argumenty příkazového řádku, které byly použity k instalaci image. Poznámka: Počínaje rozhraním .NET Framework 4 se už akce uninstall * nepodporuje. |
update [/queue] |
Aktualizujte nativní bitové kopie, které byly neplatné. Pokud /queue je zadáno, aktualizace se zařadí do fronty pro službu nativní bitové kopie. Aktualizace jsou vždy naplánovány na prioritu 3, takže se spustí, když je počítač nečinný. |
display [assemblyName | assemblyPath] |
Zobrazí stav nativních imagí pro sestavení a jeho závislosti. Pokud není zadán žádný argument, zobrazí se vše v mezipaměti nativní bitové kopie. |
executeQueuedItems [1|2|3]-or- eqi [1|2|3] |
Spusťte úlohy kompilace ve frontě. Pokud je zadána priorita, spustí se úlohy kompilace s větší nebo stejnou prioritou. Pokud není zadána žádná priorita, spustí se všechny úlohy kompilace ve frontě. |
queue{pause | | continuestatus} |
Pozastavte službu nativní bitové kopie, povolte pozastavené službě pokračovat nebo zadejte dotaz na stav služby. |
Arguments
| Argument | Description |
|---|---|
assemblyName |
Úplný zobrazovaný název sestavení. Například: "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5".
Poznámka: Můžete zadat částečný název sestavení, například myAssembly, pro akce display a uninstall akce. Pro každý Ngen.exe příkazový řádek lze zadat pouze jedno sestavení. |
assemblyPath |
Explicitní cesta sestavení. Můžete zadat úplnou nebo relativní cestu. Pokud zadáte název souboru bez cesty, musí být sestavení umístěné v aktuálním adresáři. Pro každý Ngen.exe příkazový řádek lze zadat pouze jedno sestavení. |
Úrovně priority
| Priority | Description |
|---|---|
1 |
Nativní bitové kopie se generují a instalují okamžitě bez čekání na dobu nečinnosti. |
2 |
Nativní bitové kopie se generují a instalují bez čekání na dobu nečinnosti, ale po dokončení všech akcí priority 1 (a jejich závislostí). |
3 |
Nativní bitové kopie se nainstalují, když služba nativní bitové kopie zjistí, že počítač je nečinný. Viz Služba nativní bitové kopie. |
Scénáře
| Scenario | Description |
|---|---|
/Debug |
Vygenerujte nativní bitové kopie, které lze použít v ladicím programu. |
/Profile |
Vygenerujte nativní bitové kopie, které lze použít v profileru. |
/NoDependencies |
Vygenerujte minimální počet nativních imagí vyžadovaných zadanými možnostmi scénáře. |
Config
| Konfigurace | Description |
|---|---|
/ExeConfig:
exePath
|
Použijte konfiguraci zadaného spustitelného sestavení. Ngen.exe musí při vazbě na závislosti provádět stejná rozhodnutí jako zavaděč. Pokud je sdílená komponenta načtena za běhu pomocí Load metody, konfigurační soubor aplikace určuje závislosti načtené pro sdílenou komponentu – například verzi načtené závislosti. Přepínač /ExeConfig poskytuje Ngen.exe pokyny k načtení závislostí za běhu. |
/AppBase:
directoryPath
|
Při vyhledání závislostí použijte zadaný adresář jako základ aplikace. |
Možnosti
| Možnost | Description |
|---|---|
/nologo |
Potlačí zobrazení úvodního nápisu Microsoftu. |
/silent |
Potlačí zobrazení zpráv o úspěchu. |
/verbose |
Zobrazí podrobné informace pro ladění. |
/help, /? |
Zobrazí syntaxi příkazu a možnosti pro aktuální verzi. |
Poznámky
Ke spuštění Ngen.exemusíte mít oprávnění správce.
Upozornění
Nespouštět Ngen.exe na sestaveních, která nejsou plně důvěryhodná. Počínaje rozhraním .NET Framework 4 Ngen.exe kompiluje sestavení s úplným vztahem důvěryhodnosti a zásady zabezpečení přístupu kódu (CAS) se už nevyhodnocují.
Počínaje rozhraním .NET Framework 4 se nativní bitové kopie generované Ngen.exe už nedají načíst do aplikací, které běží v částečné důvěryhodnosti. Místo toho se vyvolá kompilátor JIT (just-in-time).
Ngen.exe generuje nativní bitové kopie pro sestavení určené argumentem assemblynameinstall akce a všechny jeho závislosti. Závislosti jsou určeny z odkazů v manifestu sestavení. Jediný scénář, ve kterém potřebujete nainstalovat závislost samostatně, je, když aplikace načte pomocí reflexe, například voláním Assembly.Load metody.
Důležité
Nepoužívejte metodu Assembly.LoadFrom s nativními imagemi. Image načtená touto metodou nemůže být použita jinými sestaveními v kontextu spuštění.
Ngen.exe udržuje počet závislostí. Předpokládejme například, že MyAssembly.exeYourAssembly.exe obě jsou nainstalovány v mezipaměti nativní bitové kopie a oba mají odkazy na OurDependency.dll. Pokud MyAssembly.exe se odinstaluje, OurDependency.dll neodinstaluje se. Odebere se pouze při YourAssembly.exe odinstalaci.
Pokud generujete nativní image pro sestavení v globální mezipaměti sestavení, zadejte jeho zobrazovaný název. Viz Assembly.FullName.
Nativní bitové kopie, které Ngen.exe generují, se dají sdílet napříč doménami aplikací. To znamená, že můžete použít Ngen.exe ve scénářích aplikace, které vyžadují sdílení sestavení napříč doménami aplikace. Určení neutrality domény:
LoaderOptimizationAttribute Použijte atribut pro vaši aplikaci.
AppDomainSetup.LoaderOptimization Nastavte vlastnost při vytváření informací o nastavení pro novou doménu aplikace.
Při načítání stejného sestavení do více domén aplikace vždy používejte kód neutrální pro doménu domény. Pokud je nativní bitová kopie načtena do nesdílené domény aplikace po načtení do sdílené domény, nelze ji použít.
Poznámka:
Doménově neutrální kód nelze uvolnit a výkon může být mírně pomalejší, zejména při přístupu ke statickým členům.
V této části Poznámky:
Generování imagí pro různé scénáře
Po vygenerování nativní bitové kopie pro sestavení se modul runtime automaticky pokusí vyhledat a použít tuto nativní bitovou kopii při každém spuštění sestavení. V závislosti na scénářích použití je možné vygenerovat více imagí.
Pokud například spustíte sestavení ve scénáři ladění nebo profilace, modul runtime vyhledá nativní bitovou kopii vygenerovanou pomocí /Debug možností nebo /Profile možností. Pokud se nepodaří najít odpovídající nativní bitovou kopii, modul runtime se vrátí ke standardní kompilaci JIT. Jediným způsobem, jak ladit nativní bitové kopie, je vytvořit nativní bitovou kopii s /Debug možností.
Akce uninstall také rozpozná scénáře, takže můžete odinstalovat všechny scénáře nebo jenom vybrané scénáře.
Určení, kdy použít nativní bitové kopie
Nativní bitové kopie můžou poskytovat vylepšení výkonu ve dvou oblastech: vylepšené využití paměti a zkrácení doby spuštění.
Poznámka:
Výkon nativních imagí závisí na řadě faktorů, které ztěžují analýzu, jako jsou vzory kódu a přístupu k datům, kolik volání se provádí přes hranice modulů a kolik závislostí už byly načteny jinými aplikacemi. Jediný způsob, jak určit, jestli nativní bitové kopie využívají vaši aplikaci, je pečlivé měření výkonu v klíčových scénářích nasazení.
Vylepšené využití paměti
Nativní bitové kopie můžou výrazně zlepšit využití paměti při sdílení kódu mezi procesy. Nativní bitové kopie jsou soubory prostředí Windows PE, takže jednu kopii souboru .dll může sdílet více procesů; Naproti tomu nativní kód vytvořený kompilátorem JIT je uložený v privátní paměti a nelze ho sdílet.
Aplikace spuštěné v terminálových službách můžou také využívat sdílené kódové stránky.
Kromě toho se při načítání kompilátoru JIT neuloží pevné množství paměti pro každou instanci aplikace.
Rychlejší spuštění aplikace
Předkompilování sestavení pomocí Ngen.exe může zlepšit dobu spuštění některých aplikací. Obecně lze zisky provést, když aplikace sdílejí sestavení součástí, protože po spuštění první aplikace jsou sdílené komponenty již načteny pro další aplikace. Studené spuštění, ve kterém všechna sestavení v aplikaci musí být načtena z pevného disku, nemá prospěch tolik z nativních bitových kopií, protože doba přístupu k pevnému disku předchází.
Pevná vazba může ovlivnit dobu spuštění, protože všechny image, které jsou pevně svázané s hlavním sestavením aplikace, musí být načteny současně.
Poznámka:
Před rozhraním .NET Framework 3.5 Service Pack 1 byste měli do globální mezipaměti sestavení umístit sdílené, silné pojmenované komponenty, protože zavaděč provádí dodatečné ověření u sestavení se silným názvem, která nejsou v globální mezipaměti sestavení, a účinně eliminuje veškeré zlepšení doby spuštění získané pomocí nativních imagí. Optimalizace, které byly zavedeny v rozhraní .NET Framework 3.5 SP1, odebraly dodatečné ověření.
Shrnutí důležitých informací o využití
Následující obecné aspekty a aspekty aplikace vám můžou pomoct při rozhodování, jestli se má provést vyhodnocení nativních imagí pro vaši aplikaci:
Nativní bitové kopie se načítají rychleji než CIL, protože eliminují potřebu mnoha spouštěcích aktivit, jako je kompilace JIT a ověření bezpečnosti typu.
Nativní bitové kopie vyžadují menší počáteční pracovní sadu, protože kompilátor JIT nepotřebuje.
Nativní bitové kopie umožňují sdílení kódu mezi procesy.
Nativní bitové kopie vyžadují více místa na pevném disku než sestavení CIL a mohou vyžadovat značné množství času k vygenerování.
Nativní bitové kopie musí být zachovány.
Při obsluhování původního sestavení nebo jedné ze závislostí je potřeba znovu vygenerovat image.
Jedno sestavení může potřebovat více nativních imagí pro použití v různých aplikacích nebo v různých scénářích. Například informace o konfiguraci ve dvou aplikacích můžou mít za následek různá rozhodnutí o vazbě pro stejné závislé sestavení.
Nativní bitové kopie musí být generovány správcem; to znamená, že ze účtu Systému Windows ve skupině Administrators.
Kromě těchto obecných aspektů je potřeba při určování, jestli nativní bitové kopie můžou poskytovat výhodu výkonu, vzít v úvahu povahu vaší aplikace:
Pokud vaše aplikace běží v prostředí, které používá mnoho sdílených komponent, nativní bitové kopie umožňují sdílení komponent více procesy.
Pokud vaše aplikace používá více domén aplikací, nativní bitové kopie umožňují sdílení znakových stránek napříč doménami.
Poznámka:
V rozhraní .NET Framework verze 1.0 a 1.1 nelze nativní bitové kopie sdílet napříč doménami aplikací. Nejedná se o případ ve verzi 2.0 nebo novější.
Pokud se vaše aplikace spustí v části Terminálový server, nativní bitové kopie umožňují sdílení znakových stránek.
Velké aplikace obecně využívají kompilaci do nativních imagí. Malé aplikace obecně nemají prospěch.
U dlouhotrvajících aplikací se kompilace JIT za běhu provádí mírně lépe než nativní bitové kopie. (Pevné vazby můžou tento rozdíl v výkonu zmírnit až do určité míry.)
Důležitost základních adres sestavení
Vzhledem k tomu, že nativní bitové kopie jsou soubory Prostředí Windows PE, podléhají stejným problémům sebasováním jako jiné spustitelné soubory. Náklady na přemístění výkonu jsou ještě výraznější, pokud je použita pevná vazba.
Chcete-li nastavit základní adresu nativní bitové kopie, použijte příslušnou možnost kompilátoru k nastavení základní adresy sestavení. Ngen.exe používá tuto základní adresu pro nativní bitovou kopii.
Poznámka:
Nativní bitové kopie jsou větší než spravovaná sestavení, ze kterých byly vytvořeny. Pro tyto větší velikosti je nutné vypočítat základní adresy.
K zobrazení upřednostňované základní adresy nativní bitové kopie můžete použít nástroj, například dumpbin.exe.
Pevná vazba
Pevná vazba zvyšuje propustnost a snižuje velikost pracovní sady nativních imagí. Nevýhodou pevné vazby je, že při načtení sestavení musí být načteny všechny bitové kopie, které jsou pevně vázány na sestavení. To může výrazně zvýšit dobu spuštění pro velkou aplikaci.
Pevná vazba je vhodná pro závislosti, které jsou načteny ve všech scénářích kritických pro výkon vaší aplikace. Stejně jako u jakéhokoli aspektu použití nativní bitové kopie představují pečlivé měření výkonu jediný způsob, jak určit, jestli pevná vazba zlepšuje výkon vaší aplikace.
DefaultDependencyAttribute Atributy DependencyAttribute umožňují poskytovat pevné vazby nápovědy pro Ngen.exe.
Poznámka:
Tyto atributy jsou rady pro Ngen.exe, ne příkazy. Použití nezaručuje pevnou vazbu. Význam těchto atributů se může v budoucích verzích změnit.
Určení nápovědy pro vazbu pro závislost
DependencyAttribute Použití na sestavení k označení pravděpodobnosti, že se načte zadaná závislost. LoadHint.Always indikuje, že je vhodná pevná vazba, značí, Default že se má použít výchozí hodnota závislosti, a Sometimes indikuje, že pevné vazby nejsou vhodné.
Následující kód ukazuje atributy sestavení, které má dvě závislosti. První závislost (Assembly1) je vhodným kandidátem pro pevné vazby a druhá (Sestavení2) není.
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)];
Název sestavení neobsahuje příponu názvu souboru. Zobrazované názvy lze použít.
Zadání výchozí nápovědy pro vazbu pro sestavení
Výchozí rady vazeb jsou potřeba pouze pro sestavení, která budou použita okamžitě a často všemi aplikacemi, které jsou na nich závislé. Použijte u DefaultDependencyAttribute těchto sestavení hodnotu with LoadHint.Always a určete, že má být použita pevná vazba.
Poznámka:
Neexistuje důvod použít DefaultDependencyAttribute pro .dll sestavení, která nespadají do této kategorie, protože použití atributu s jinou hodnotou než LoadHint.Always má stejný účinek jako použití atributu vůbec.
Microsoft používá DefaultDependencyAttribute k určení, že pevná vazba je výchozí pro velmi malý počet sestavení v rozhraní .NET Framework, například mscorlib.dll.
Odložené zpracování
Generování nativních imagí pro velmi velkou aplikaci může trvat poměrně dlouho. Podobně můžou změny sdílené komponenty nebo změny nastavení počítače vyžadovat aktualizaci mnoha nativních imagí. Akce install mají update/queue možnost, která zařadí operaci do fronty pro odložené spuštění službou nativní bitové kopie. Kromě toho Ngen.exe má queue a executeQueuedItems akce, které poskytují určitou kontrolu nad službou. Další informace naleznete v tématu Služba nativní bitové kopie.
Nativní bitové kopie a kompilace JIT
Pokud Ngen.exe v sestavení narazí na nějaké metody, které nemůže vygenerovat, vyloučí je z nativní bitové kopie. Když modul runtime spustí toto sestavení, vrátí se ke kompilaci JIT pro metody, které nebyly zahrnuty do nativní bitové kopie.
Kromě toho se nativní bitové kopie nepoužívají, pokud bylo sestavení upgradováno, nebo pokud byla image z nějakého důvodu zneplatněna.
Neplatné obrázky
Když použijete Ngen.exe k vytvoření nativní bitové kopie sestavení, výstup závisí na možnostech příkazového řádku, které zadáte, a určitých nastaveních v počítači. Mezi tato nastavení patří:
Verze rozhraní .NET Framework.
Přesná identita sestavení (rekompilace změní identitu).
Přesná identita všech sestavení, na která odkazuje sestavení (rekompilace mění identitu).
Bezpečnostní faktory.
Ngen.exe tyto informace zaznamenává při generování nativní bitové kopie. Při spuštění sestavení modul runtime vyhledá nativní bitovou kopii vygenerovanou s možnostmi a nastavením, které odpovídají aktuálnímu prostředí počítače. Modul runtime vrátí kompilaci sestavení JIT, pokud nemůže najít odpovídající nativní bitovou kopii. Následující změny nastavení a prostředí počítače způsobí, že nativní bitové kopie budou neplatné:
Verze rozhraní .NET Framework.
Pokud použijete aktualizaci rozhraní .NET Framework, všechny nativní bitové kopie, které jste vytvořili pomocí Ngen.exe se stanou neplatnými. Z tohoto důvodu všechny aktualizace rozhraní .NET Framework spustí
Ngen Updatepříkaz, aby se zajistilo, že se všechny nativní bitové kopie znovu vygenerují. Rozhraní .NET Framework automaticky vytvoří nové nativní bitové kopie pro knihovny rozhraní .NET Framework, které nainstaluje.Přesná identita sestavení.
Při opětovném kompilaci sestavení se odpovídající nativní bitová kopie sestavení stane neplatnou.
Přesná identita všech sestavení odkazuje na sestavení.
Pokud aktualizujete spravované sestavení, budou všechny nativní bitové kopie, které přímo nebo nepřímo závisejí na daném sestavení, neplatné a je třeba je znovu vygenerovat. To zahrnuje běžné odkazy i pevně vázané závislosti. Při každém použití aktualizace softwaru by instalační program měl spustit
Ngen Updatepříkaz, aby se zajistilo, že se všechny závislé nativní bitové kopie znovu vygenerují.Bezpečnostní faktory.
Změna zásad zabezpečení počítače tak, aby dříve udělená oprávnění sestavení omezila, může způsobit, že dříve zkompilovaná nativní image pro toto sestavení nebude platná.
Podrobné informace o tom, jak modul CLR (Common Language Runtime) spravuje zabezpečení přístupu kódu a jak používat oprávnění, najdete v tématu Zabezpečení přístupu kódu.
Řešení problémů
Následující témata řešení potíží umožňují zjistit, které nativní bitové kopie se používají a které nelze použít vaší aplikací, určit, kdy kompilátor JIT začne kompilovat metodu, a ukazuje, jak se odhlásit z kompilace nativních bitových kopií zadaných metod.
Prohlížeč protokolů vazby sestavení
Pokud chcete ověřit, že aplikace používá nativní bitové kopie, můžete použít Fuslogvw.exe (Prohlížeč protokolů vazby sestavení). V okně Prohlížeče protokolů vyberte nativní bitové kopie v poli Kategorie protokolu. Fuslogvw.exe poskytuje informace o tom, proč byla nativní image odmítnuta.
Pomocník pro spravované ladění JITCompilationStart
Pomocí pomocníka pro ladění jitCompilationStart (MDA) můžete určit, kdy kompilátor JIT začne kompilovat funkci.
Odhlášení z generování nativních imagí
V některýchpřípadechchmum informacím v některých případech může být NGen.exe obtížné generovat nativní image pro konkrétní metod V tomto případě můžete pomocí atributu System.Runtime.BypassNGenAttribute zabránit NGen.exe v generování nativní bitové kopie pro konkrétní metodu. Atribut musí být použit jednotlivě pro každou metodu, jejíž kód nechcete zahrnout do nativní bitové kopie. NGen.exe rozpozná atribut a negeneruje kód v nativní imagi pro odpovídající metodu.
Všimněte si však, že není BypassNGenAttribute definován jako typ v knihovně tříd rozhraní .NET Framework. Abyste mohli atribut v kódu využívat, musíte ho nejprve definovat následujícím způsobem:
namespace System.Runtime
{
[AttributeUsage(AttributeTargets.Method |
AttributeTargets.Constructor |
AttributeTargets.Property)]
public class BypassNGenAttribute : Attribute
{
}
}
Namespace System.Runtime
<AttributeUsage(AttributeTargets.Method Or
AttributeTargets.Constructor Or
AttributeTargets.Property)>
Public Class BypassNGenAttribute : Inherits Attribute
End Class
End Namespace
Atribut pak můžete použít pro jednotlivé metody. Následující příklad dává generátoru nativních imagí pokyn, že by neměl generovat nativní bitovou kopii pro metodu ExampleClass.ToJITCompile .
using System;
using System.Runtime;
public class ExampleClass
{
[BypassNGen]
public void ToJITCompile()
{
}
}
Imports System.Runtime
Public Class ExampleClass
<BypassNGen>
Public Sub ToJITCompile()
End Sub
End Class
Examples
Následující příkaz vygeneruje nativní bitovou kopii pro ClientApp.exe, umístěnou v aktuálním adresáři, a nainstaluje image do mezipaměti nativní bitové kopie. Pokud pro sestavení existuje konfigurační soubor, Ngen.exe ho použije. Kromě toho se nativní bitové kopie generují pro všechny .dll soubory, které ClientApp.exe odkazují.
ngen install ClientApp.exe
Image nainstalovaná s Ngen.exe se také nazývá kořen. Kořenem může být aplikace nebo sdílená komponenta.
Následující příkaz vygeneruje nativní bitovou kopii pro MyAssembly.exe zadanou cestu.
ngen install c:\myfiles\MyAssembly.exe
Při vyhledání sestavení a jejich závislostí Ngen.exe používá stejnou logiku sondy, kterou používá modul CLR (Common Language Runtime). Ve výchozím nastavení se adresář, který obsahuje ClientApp.exe , používá jako základní adresář aplikace a veškeré testování sestavení začíná v tomto adresáři. Toto chování můžete přepsat pomocí /AppBase možnosti.
Poznámka:
Jedná se o změnu z chování Ngen.exe v rozhraní .NET Framework verze 1.0 a 1.1, kde je základ aplikace nastaven na aktuální adresář.
Sestavení může mít závislost bez odkazu, například pokud pomocí metody načte soubor Assembly.Load .dll. Nativní bitovou kopii pro takový soubor .dll můžete vytvořit pomocí konfiguračních informací pro sestavení aplikace s /ExeConfig možností. Následující příkaz vygeneruje nativní bitovou kopii pro MyLib.dll použití konfiguračních informací z MyApp.exe.
ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe
Sestavení nainstalovaná tímto způsobem se při odebrání aplikace neodeberou.
K odinstalaci závislosti použijte stejné možnosti příkazového řádku, které byly použity k instalaci. Následující příkaz odinstaluje z předchozího příkladu MyLib.dll .
ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe
Chcete-li vytvořit nativní image pro sestavení v globální mezipaměti sestavení, použijte zobrazovaný název sestavení. Například:
ngen install "ClientApp, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"
NGen.exe vygeneruje samostatnou sadu imagí pro každý scénář, který instalujete. Například následující příkazy nainstalují úplnou sadu nativních imagí pro normální provoz, další úplnou sadu pro ladění a třetí sadu pro profilaci:
ngen install MyApp.exe
ngen install MyApp.exe /debug
ngen install MyApp.exe /profile
Zobrazení mezipaměti nativních imagí
Po instalaci nativních imagí do mezipaměti je možné je zobrazit pomocí Ngen.exe. Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií.
ngen display
Akce display nejprve zobrazí seznam všech kořenových sestavení následovaných seznamem všech nativních imagí v počítači.
Pomocí jednoduchého názvu sestavení zobrazíte informace pouze pro dané sestavení. Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií, které odpovídají částečnému názvu MyAssembly, jejich závislostem a všem kořenům, na MyAssemblykterých je závislost:
ngen display MyAssembly
Znalost, které kořeny závisí na sestavení sdílené komponenty, je užitečné při gaugování dopadu update akce po upgradu sdílené komponenty.
Pokud zadáte příponu souboru sestavení, musíte zadat cestu nebo spustit Ngen.exe z adresáře obsahujícího sestavení:
ngen display c:\myApps\MyAssembly.exe
Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií s názvem MyAssembly a verzí 1.0.0.0.
ngen display "myAssembly, version=1.0.0.0"
Aktualizace imagí
Image se obvykle aktualizují po upgradu sdílené komponenty. Chcete-li aktualizovat všechny nativní bitové kopie, které se změnily nebo jejichž závislosti se změnily, použijte update akci bez argumentů.
ngen update
Aktualizace všech imagí může být zdlouhavý proces. Pomocí této možnosti můžete zařadit aktualizace pro spuštění službou nativní bitové kopie do fronty /queue . Další informace o možnostech /queue a prioritách instalace najdete v tématu Služba nativní bitové kopie.
ngen update /queue
Odinstalace imagí
Ngen.exe udržuje seznam závislostí, takže sdílené komponenty budou odebrány pouze v případě, že byla odebrána všechna sestavení, která na nich závisí. Sdílená komponenta se navíc neodebere, pokud byla nainstalována jako kořen.
Následující příkaz odinstaluje všechny scénáře kořenového adresáře ClientApp.exe:
ngen uninstall ClientApp
Akce uninstall se dá použít k odebrání konkrétních scénářů. Následující příkaz odinstaluje všechny scénáře ladění pro ClientApp.exe:
ngen uninstall ClientApp /debug
Poznámka:
Odinstalace /debug scénářů neodinstaluje scénář, který zahrnuje obojí /profile i /debug.
Následující příkaz odinstaluje všechny scénáře pro konkrétní verzi ClientApp.exe:
ngen uninstall "ClientApp, Version=1.0.0.0"
Následující příkazy odinstalují všechny scénáře pro "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"toto sestavení nebo pouze scénář ladění pro toto sestavení:
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
Stejně jako u install akce vyžaduje dodání rozšíření spuštění Ngen.exe z adresáře obsahujícího sestavení nebo zadání úplné cesty.
Příklady týkající se služby nativní bitové kopie najdete v tématu Služba nativní bitové kopie.
Úloha nativní bitové kopie
Úloha nativní bitové kopie je úloha systému Windows, která generuje a udržuje nativní bitové kopie. Úloha nativní bitové kopie vygeneruje a uvolní nativní bitové kopie automaticky pro podporované scénáře. Umožňuje také instalačním programům používat Ngen.exe (Native Image Generator) k vytváření a aktualizaci nativních imagí v odložené době.
Úloha nativní bitové kopie se jednou zaregistruje pro každou architekturu procesoru podporovanou v počítači, aby byla povolena kompilace pro aplikace, které cílí na každou architekturu:
| Název úkolu | 32bitový počítač | 64bitový počítač |
|---|---|---|
| NET Framework NGEN v4.0.30319 | Ano | Ano |
| NET Framework NGEN v4.0.30319 64 | Ne | Ano |
Úloha nativní bitové kopie je k dispozici v rozhraní .NET Framework 4.5 a novějších verzích při spuštění ve Windows 8 nebo novějších verzích. V dřívějších verzích Systému Windows používá rozhraní .NET Framework službu nativní bitové kopie.
Doba života úkolu
Obecně platí, že plánovač úloh systému Windows spustí úlohu nativní bitové kopie každou noc, když je počítač nečinný. Úloha kontroluje veškerou odloženou práci, která je zařazena do fronty instalačními programy aplikací, všechny odložené požadavky na aktualizaci nativních imagí a automatické vytváření imagí. Úkol dokončí nevyrovnané pracovní položky a pak se vypne. Pokud počítač přestane být nečinný, když je úloha spuštěná, úloha se zastaví.
Úlohu nativní bitové kopie můžete spustit také ručně pomocí uživatelského rozhraní Plánovače úloh nebo ručním voláním NGen.exe. Pokud je úloha spuštěna některou z těchto metod, bude pokračovat ve spuštění, když počítač již není nečinný. Image vytvořené ručně pomocí NGen.exe mají prioritu, aby se umožnilo předvídatelné chování instalačních programů aplikací.
Služba nativní bitové kopie
Služba nativní bitové kopie je služba systému Windows, která generuje a udržuje nativní bitové kopie. Služba nativní bitové kopie umožňuje vývojáři odložit instalaci a aktualizaci nativních bitových kopií na období, kdy je počítač nečinný.
Za normálních okolností je služba nativní bitové kopie inicializována instalačním programem (instalačním programem) pro aplikaci nebo aktualizaci. V případě akcí s prioritou 3 se služba provede v době nečinnosti v počítači. Služba uloží svůj stav a v případě potřeby může pokračovat několika restartováními. Do fronty je možné přidat více kompilací obrázků.
Služba také komunikuje s ručním příkazem Ngen.exe. Ruční příkazy mají přednost před aktivitou na pozadí.
Poznámka:
V systému Windows Vista je název služby nativní bitové kopie "Microsoft.NET Framework NGEN v2.0.50727_X86" nebo "Microsoft.NET Framework NGEN v2.0.50727_X64". Ve všech starších verzích systému Microsoft Windows je název "Služba optimalizace modulu runtime .NET v2.0.50727_X86" nebo "Služba optimalizace modulu runtime .NET v2.0.50727_X64".
Spouštění odložených operací
Před zahájením instalace nebo upgradu se doporučuje pozastavení služby. Tím se zajistí, že se služba nespustí, když instalační program kopíruje soubory nebo vkládá sestavení do globální mezipaměti sestavení. Následující Ngen.exe příkazový řádek pozastaví službu:
ngen queue pause
Pokud jsou všechny odložené operace zařazené do fronty, umožní následující příkaz službě pokračovat:
ngen queue continue
Pokud chcete odložit generování nativních imagí při instalaci nové aplikace nebo při aktualizaci sdílené komponenty, použijte /queue možnost s akcemi install nebo update akcemi. Následující příkazové řádky Ngen.exe nainstalují nativní bitovou kopii sdílené komponenty a aktualizují všechny kořeny, které mohly být ovlivněny:
ngen install MyComponent /queue
ngen update /queue
Akce update znovu vygeneruje všechny nativní bitové kopie, které byly zneplatněné, nejen ty, které používají MyComponent.
Pokud se vaše aplikace skládá z mnoha kořenů, můžete řídit prioritu odložených akcí. Následující příkazy zařadí instalaci tří kořenových certifikátů do fronty.
Assembly1 je nainstalován jako první, aniž byste čekali na dobu nečinnosti.
Assembly2 je také nainstalován bez čekání na dobu nečinnosti, ale po dokončení všech akcí priority 1.
Assembly3 je nainstalována, když služba zjistí, že počítač je nečinný.
ngen install Assembly1 /queue:1
ngen install Assembly2 /queue:2
ngen install Assembly3 /queue:3
Akce zařazené do fronty můžete vynutit synchronně pomocí executeQueuedItems akce. Pokud zadáte volitelnou prioritu, tato akce ovlivní pouze akce zařazené do fronty, které mají stejnou nebo nižší prioritu. Výchozí priorita je 3, takže následující příkaz Ngen.exe zpracuje všechny akce ve frontě okamžitě a nevrátí se, dokud nebudou dokončeny:
ngen executeQueuedItems
Synchronní příkazy jsou spouštěné Ngen.exe a nepoužívají službu nativní bitové kopie. Akce můžete spouštět pomocí Ngen.exe, když je spuštěná služba nativní bitové kopie.
Vypnutí služby
Po spuštění příkazu Ngen.exe, který obsahuje /queue možnost, služba poběží na pozadí, dokud se nedokončí všechny akce. Služba uloží svůj stav, aby v případě potřeby mohl pokračovat několika restartováními. Když služba zjistí, že nejsou ve frontě žádné další akce, resetuje svůj stav, aby se při příštím spuštění počítače nerestartoval a pak se sám vypne.
Interakce služby s klienty
V rozhraní .NET Framework verze 2.0 je jediná interakce se službou nativní bitové kopie prostřednictvím nástroje příkazového řádku Ngen.exe. Pomocí nástroje příkazového řádku ve skriptech instalace zařadíte akce do fronty pro službu nativní bitové kopie a interagujte se službou.