Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az IL-összeállító egy hordozható végrehajtható (PE) fájlt hoz létre a köztes nyelvű (IL) szerelvényből. (További információ az IL-ről: Felügyelt végrehajtási folyamat.) Futtathatja az eredményül kapott végrehajtható fájlt, amely tartalmazza az IL-t és a szükséges metaadatokat annak megállapításához, hogy az IL a várt módon működik-e.
Ez az eszköz automatikusan telepítve van a Visual Studióval. Az eszköz futtatásához használja a Visual Studio fejlesztői parancssorát vagy a Visual Studio Developer PowerShellt.
A parancssorba írja be a következőt:
Syntax
ilasm [options] filename [[options]filename...]
Paraméterek
| Argumentum | Leírás |
|---|---|
filename |
A .il forrásfájl neve. Ez a fájl metaadat-deklarációs irányelvekből és szimbolikus IL-utasításokból áll. Több forrásfájlargumentum is megadható egyetlen PE-fájl létrehozásához Ilasm.exe. Megjegyzés: Győződjön meg arról, hogy az .il forrásfájl utolsó kódsora záró szóközzel vagy sorvég karakterrel rendelkezik. |
| Lehetőség | Leírás |
|---|---|
| /32bitpreferred | 32 bites előnyben részesített rendszerképet (PE32) hoz létre. |
/igazítás:integer |
A FileAlignment értékét az NT Opcionális fejlécben megadott integer értékre állítja. Ha a fájlban meg van adva a .alignment IL direktíva, ez a beállítás felülírja azt. |
| /appcontainer | Kimenetként létrehoz egy .dll vagy .exe fájlt, amely a Windows alkalmazástárolóban fut. |
| /kar | Célprocesszorként a Speciális RISC-gépet (ARM) adja meg. Ha nincs megadva képbit, az alapértelmezett érték a /32bitpreferred. |
/alap:integer |
Az ImageBase beállítása az NT Opcionális fejlécben megadott integer értékre. Ha a fájlban meg van adva a .imagebase IL-irányelv, ez a beállítás felülírja azt. |
| /óra | Ezredmásodpercben méri és jelenti a következő fordítási időt a megadott .il forrásfájlhoz: Teljes futtatás: Az összes követett művelet végrehajtásával töltött teljes idő. Indítás: A fájl betöltése és megnyitása. MD kibocsátása: Metaadatok kibocsátása. Ref to Def Resolution: A fájl definícióira mutató hivatkozások feloldása. CEE-fájlgenerálás: A fájlkép létrehozása a memóriában. PE-fájl írása: A kép írása egy PE-fájlba. |
| /debug[:IMPL|OPT] | Hibakeresési információkat (helyi változó- és argumentumneveket, valamint sorszámokat) tartalmaz. Létrehoz egy PDB-fájlt. A további érték nélküli /hibakeresés letiltja a JIT-optimalizálást, és a PDB-fájlból származó szekvenciapontokat használ. IMPL letiltja a JIT-optimalizálást, és implicit szekvenciapontokat használ.OPT lehetővé teszi a JIT optimalizálását, és implicit szekvenciapontokat használ. |
| /DLL | Kimenetként létrehoz egy .dll fájlt. |
/enc:file |
Szerkesztési és folytatási különbözeteket hoz létre a megadott forrásfájlból. Ez az argumentum csak tudományos célú, és kereskedelmi használatra nem támogatott. |
| /exe | Kimenetként végrehajtható fájlt hoz létre. Ez az alapértelmezett beállítás. |
/Zászlók:integer |
Az ImageFlags értékét a közös nyelvi futtatókörnyezet fejlécében megadott integer értékre állítja. Ha a fájlban a .corflags IL direktíva van megadva, ez a beállítás felülírja azt. Az egész szám érvényes értékeinek listáját lásd: CorHdr.h, COMIMAGE_FLAGS. |
| /szeres | Azonos metódustesteket hajt egybe. |
| / highentropyva | Olyan kimenetet hoz létre, amely támogatja a nagy entrópiás címtérelrendezést (ASLR). (Az /appcontainer alapértelmezett értéke.) |
/tartalmaz:includePath |
Beállít egy elérési utat a fájlokat tartalmazó kereséshez #include. |
| /itanium | Az Intel Itaniumot adja meg célprocesszorként. Ha nincs megadva képbit, az alapértelmezett érték a /pe64. |
/kulcs:keyFile |
filename Erős aláírással, a benne található keyFiletitkos kulccsal áll össze. |
/kulcs: @keySource |
filename Erős aláírással, a következő helyen keySourcelétrehozott titkos kulccsal áll össze: . |
| /szövetszegély | Létrehoz egy listafájlt a standard kimeneten. Ha kihagyja ezt a beállítást, a rendszer nem hoz létre listafájlt. Ez a paraméter nem támogatott a .NET-keretrendszer 2.0-s vagy újabb verziójában. |
/mdv:versionString |
Beállítja a metaadat-verzió sztringet. |
/msv:major.minor |
Beállítja a metaadat-adatfolyam verzióját, ahol major és minor amelyek egész számok. |
| /noautoinherit | Letiltja az alapértelmezett öröklést, Object ha nincs megadva alaposztály. |
| /nocorstub | Letiltja a CORExeMain-csonk létrehozását. |
| /nologo | Letiltja a Microsoft indítási szalagcímének megjelenítését. |
/hozam:file.ext |
Megadja a kimeneti fájl nevét és bővítményét. Alapértelmezés szerint a kimeneti fájl neve megegyezik az első forrásfájl nevével. Az alapértelmezett bővítmény a .exe. Ha megadja a /dll beállítást, az alapértelmezett bővítmény .dll. Megjegyzés: A /output megadása:myfile.dll nem állítja be a /dll beállítást. Ha nem adja meg a /dll értéket, az eredmény egy myfile.dll nevű végrehajtható fájl lesz. |
| /optimalizál | Rövidre optimalizálja a hosszú utasításokat. Például: brbr.s. |
| /pe64 | 64 bites rendszerképet hoz létre (PE32+). Ha nincs megadva célprocesszor, az alapértelmezett érték az /itanium. |
| /pdb | Létrehoz egy PDB-fájlt a hibakeresési információk nyomon követése nélkül. |
| /halk | Csendes módot ad meg; nem jelenti a szerelvény előrehaladását. |
/erőforrás:file.res |
*.res formátumban tartalmazza a megadott erőforrásfájlt az eredményként kapott .exe vagy .dll fájlban. Az /resource beállítással csak egy .res fájl adható meg. |
/ssver:int.int |
Beállítja az alrendszer verziószámát az NT opcionális fejlécében. Az /appcontainer és /arm esetében a minimális verziószám 6.02. |
/boglya:stackSize |
A SizeOfStackReserve értéket az NT Opcionális fejlécben a következőre stackSizeállítja: . |
| /stripreloc | Megadja, hogy nincs szükség alapáthelyezésre. |
/alrendszer:integer |
Beállítja az alrendszert az NT Opcionális fejlécben megadott integer értékre. Ha a fájlban meg van adva az .alrendszer IL-irányelve, ez a parancs felülírja azt. A winnt.h, IMAGE_SUBSYSTEM a érvényes értékeinek integerlistáját lásd: winnt.h, IMAGE_SUBSYSTEM. |
| /x64 | Célprocesszorként egy 64 bites AMD-processzort ad meg. Ha nincs megadva képbit, az alapértelmezett érték a /pe64. |
| /? | Megjeleníti az eszköz parancsszintaxisát és beállításait. |
Feljegyzés
A Ilasm.exe minden lehetősége megkülönbözteti a kis- és nagybetűket, és az első három betű felismeri. A /lis például egyenértékű a /listing és a /res:myresfile.res egyenértékű a /resource:myresfile.res fájlokkal. Az argumentumokat meghatározó beállítások kettőspontot (:) vagy egyenlőségjelet (=) fogadnak el elválasztóként a lehetőség és az argumentum között. A /output:file.ext például =
Megjegyzések
Az IL-összeszerelő segít a szerszámgyártóknak IL-generátorok tervezésében és megvalósításában. Az Ilasm.exe használatával az eszköz- és fordítófejlesztők anélkül összpontosíthatnak az IL és a metaadatok létrehozására, hogy a PE-fájlformátumban az IL-t bocsátanák ki.
A futtatókörnyezetet célzó más fordítókhoz, például a C#-hoz és a Visual Basichez hasonlóan Ilasm.exe nem hoz létre köztes objektumfájlokat, és nem igényel csatolási szakaszt a PE-fájl létrehozásához.
Az IL-összeállító a futtatókörnyezetet megcélozó programozási nyelvek összes meglévő metaadatát és IL-funkcióját képes kifejezni. Ez lehetővé teszi, hogy az ezen programozási nyelvek bármelyikében írt felügyelt kód megfelelően kifejezhető legyen az IL Assemblerben, és Ilasm.exe segítségével fordítható le.
Feljegyzés
A fordítás sikertelen lehet, ha az .il forrásfájl utolsó kódsora nem tartalmaz záró szóközt vagy sorvég karaktert.
A Ilasm.exe a társeszközével együtt használhatja, Ildasm.exe. Ildasm.exe egy IL-kódot tartalmazó PE-fájlt vesz fel, és létrehoz egy olyan szövegfájlt, amely alkalmas a Ilasm.exe bemenetére. Ez például akkor hasznos, ha olyan programozási nyelven állít össze kódot, amely nem támogatja az összes futtatókörnyezeti metaadat-attribútumot. A kód összeállítása és a kimenet Ildasm.exe keresztüli futtatása után az eredményül kapott IL-szövegfájl kézzel szerkeszthető a hiányzó attribútumok hozzáadásához. Ezután futtathatja ezt a szövegfájlt a Ilasm.exe a végleges végrehajtható fájl létrehozásához.
Ezzel a technikával egyetlen PE-fájlt is létrehozhat több, eredetileg különböző fordítók által létrehozott PE-fájlból.
Feljegyzés
Jelenleg nem használhatja ezt a technikát beágyazott natív kódot tartalmazó PE-fájlokkal (például a Visual C++ által létrehozott PE-fájlokkal).
A Ildasm.exe és Ilasm.exe együttes használatának lehető legpontosabbá tétele érdekében az összeszerelő alapértelmezés szerint nem helyettesíti a rövid kódolásokat olyan hosszúakra, amelyeket az IL-forrásokban írt (vagy amelyeket egy másik fordító bocsát ki). A /optimize lehetőséggel helyettesítse a rövid kódolásokat, ahol csak lehetséges.
Feljegyzés
Ildasm.exe csak lemezen lévő fájlokon működik. Nem működik a globális szerelvény-gyorsítótárban telepített fájlokon.
Az IL nyelvhelyességével kapcsolatos további információkért tekintse meg az asmparse.grammar fájlt a Windows SDK-ban.
Verzióadatok
A .NET-keretrendszer 4.5-től kezdve az alábbi kóddal csatolhat egy egyéni attribútumot egy felületi implementációhoz:
.class interface public abstract auto ansi IMyInterface
{
.method public hidebysig newslot abstract virtual
instance int32 method1() cil managed
{
} // end of method IMyInterface::method1
} // end of class IMyInterface
.class public auto ansi beforefieldinit MyClass
extends [mscorlib]System.Object
implements IMyInterface
{
.interfaceimpl type IMyInterface
.custom instance void
[mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
…
A .NET-keretrendszer 4.5-től kezdődően megadhat egy tetszőleges marshal BLOB-t (bináris nagy objektumot) nyers bináris ábrázolásával, ahogyan az az alábbi kódban látható:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Az IL nyelvhelyességével kapcsolatos további információkért tekintse meg az asmparse.grammar fájlt a Windows SDK-ban.
Példák
Az alábbi parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a végrehajtható myTestFile.exe.
ilasm myTestFile
Az alábbi parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a .dll fájlt myTestFile.dll.
ilasm myTestFile /dll
Az alábbi parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a .dll fájlt myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
Az alábbi példakód egy rendkívül egyszerű alkalmazást mutat be, amely a "„Helló világ!” alkalmazás!" szöveget jeleníti meg a konzolon. Ezt a kódot lefordíthatja, majd az Ildasm.exe eszközzel il-fájlt hozhat létre.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Az alábbi IL-kód példa az előző C# kód példájának felel meg. Ezt a kódot egy szerelvénybe fordíthatja az IL Assembler eszközzel. Az IL és a C#-kód példáiban a "„Helló világ!” alkalmazás!" jelenik meg a konzolon.
// Metadata version: v2.0.50215
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly sample
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x02F20000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Hello::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Hello::.ctor
} // end of class Hello