Ilasm.exe (IL Derleyici)

IL Assembler, ara dil (IL) derlemesinden taşınabilir bir yürütülebilir (PE) dosyası oluşturur. (IL hakkında daha fazla bilgi için bkz. Yönetilen Yürütme İşlemi.) IL'nin beklendiği gibi çalışıp çalışmadığını belirlemek için IL ve gerekli meta verileri içeren sonuçta elde edilen yürütülebilir dosyayı çalıştırabilirsiniz.

Bu araç, Visual Studio ile birlikte otomatik olarak yüklenir. Aracı çalıştırmak için Visual Studio Geliştirici Komut İstemi'ni veya Visual Studio Geliştirici PowerShell'i kullanın.

Komut satırına şunu yazın:

Sözdizimi

ilasm [options] filename [[options]filename...]

Parametreler

Bağımsız Değişken Description
filename .il kaynak dosyasının adı. Bu dosya meta veri bildirim yönergeleri ve simgesel IL yönergelerinden oluşur. Ilasm.exeile tek bir PE dosyası oluşturmak için birden çok kaynak dosya bağımsız değişkeni sağlanabilir. Not: .il kaynak dosyasındaki son kod satırının sonunda boşluk veya satır sonu karakteri bulunduğundan emin olun.
Seçenek Açıklama
/32bitpreferred 32 bit tercih edilen bir görüntü (PE32) oluşturur.
/Hizalama:integer FileAlignment değerini NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .alignment IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar.
/appcontainer Çıktı olarak Windows uygulama kapsayıcısında çalışan bir .dll veya .exe dosyası üretir.
/Kol Hedef işlemci olarak Gelişmiş RISC Makinesi (ARM) belirtir.

Görüntü bitliği belirtilmezse varsayılan değer /32bitpreferred olur.
/Temel:integer ImageBase'i NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .imagebase IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar.
/Saat Belirtilen .il kaynak dosyası için aşağıdaki derleme sürelerini milisaniye cinsinden ölçer ve raporlar:

Toplam Çalıştırma: İzleyen tüm belirli işlemleri gerçekleştirmek için harcanan toplam süre.

Başlangıç: Dosyayı yükleme ve açma.

MD Yayma: Meta verileri yayma.

Başv- Def Çözümlemesi: Dosyadaki tanımlara yapılan başvuruları çözümleme.

CEE Dosya Oluşturma: Bellekte dosya görüntüsü oluşturuluyor.

PE Dosyası Yazma: Görüntüyü PE dosyasına yazma.
/debug[:IMPL|OPT] Hata ayıklama bilgisi içerir (yerel değişken ve bağımsız değişken adları ve satır numaraları). Bir PDB dosyası oluşturur.

Ek değer olmadan /debug, JIT iyileştirmesini devre dışı bırakır ve PDB dosyasındaki sıra noktalarını kullanır.

IMPL , JIT iyileştirmesini devre dışı bırakır ve örtük dizi noktaları kullanır.

OPT , JIT iyileştirmesini etkinleştirir ve örtük dizi noktaları kullanır.
/Dll Çıktı olarak bir.dll dosyası oluşturur.
/Enc:file Belirtilen kaynak dosyasından Düzenle ve Devam Et deltaları oluşturur.

Bu bağımsız değişken yalnızca akademik amaçlıdır ve ticari kullanım için desteklenmez.
/Exe Çıktı olarak bir yürütülebilir dosya oluşturur. Bu varsayılan seçenektir.
/Bayrak:integer ImageFlags değerini ortak dil çalışma zamanı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .corflags IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar. Tamsayı için geçerli değerlerin listesi için bkz. CorHdr.h, COMIMAGE_FLAGS.
/Kat Eşdeğer metot gövdelerini tek bir gövde olarak katlar.
/highentropyva Yüksek entropili adres alanı düzenini (ASLR) destekleyen bir çıktı çalıştırılabilir dosyası oluşturur. ( /appcontainer için varsayılan.)
/Içerir:includePath ile #includebirlikte gelen dosyaları aramak için bir yol ayarlar.
/ıtanium Hedef işlemci olarak Intel Itanium belirtir.

Görüntü bitliği belirtilmezse varsayılan değer /pe64'dür.
/Anahtar:keyFile filename içinde bulunan özel anahtarı kullanarak güçlü bir imzayla derlerkeyFile.
/Anahtar: @keySource adresinde keySourceüretilen özel anahtarı kullanarak güçlü bir imzayla derlerfilename.
/Liste Standart çıktıda bir listeleme dosyası oluşturur. Eğer bu seçeneği koymazsanız, listeleme dosyası oluşturulmaz.

Bu parametre .NET Framework 2.0 ve sonrasında desteklenmez.
/mdv:versionString Meta veri sürümü dizesini ayarlar.
/msv:major.minor Meta veri akışı sürümünü ayarlar; burada major ve minor tamsayılardır.
/noautoinherit Hiçbir temel sınıf belirtilmediğinde varsayılan Object devralmayı devre dışı bırakır.
/nocorstub CORExeMain taslağının oluşturulmasını bastırır.
/nologo Microsoft başlangıç başlığı görüntüsünü bastırır.
/Çıkış:file.ext Çıktı dosyası adını ve uzantısını belirtir. Varsayılan olarak, çıktı dosyası adı ilk kaynak dosyasının adıyla aynıdır. Varsayılan uzantı .exe. /dll seçeneğini belirtirseniz, varsayılan uzantı .dll. Not:/output:myfile.dll belirtilmesi /dll seçeneğini ayarlamaz. /dll belirtmezseniz, sonuç myfile.dlladlı yürütülebilir bir dosya olur.
/Optimize Uzun yönergeleri kısa olarak iyileştirir. Örneğin, br için br.s.
/pe64 64 bitlik bir görüntü oluşturur (PE32+).

Hedef işlemci belirtilmezse, varsayılan değer olur /itanium.
/Pdb Hata ayıklama bilgisi izlemeyi etkinleştirmeden bir PDB dosyası oluşturur.
/Sessiz Sessiz modu belirtir; hiçbir derleme ilerlemesini bildirmez.
/Kaynak:file.res Belirtilen kaynak dosyasını elde edilen .exe veya .dll dosyasına *.res biçiminde ekler. /resource seçeneğiyle yalnızca bir .res dosyası belirtilebilir.
/ssver:int.int NT isteğe bağlı üst bilgisinde alt sistem sürümünü ayarlar. /appcontainer ve /arm için en düşük sürüm numarası 6,02'dir.
/Yığın:stackSize NT İsteğe Bağlı üst bilgisindeki SizeOfStackReserve değerini olarak stackSizeayarlar.
/stripreloc Temel yeniden konumlandırmanın gerekmediğini belirtir.
/Alt:integer Alt sistemi NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .subsystem IL yönergesi dosyada belirtiliyorsa, bu komut onu geçersiz kılar. için geçerli değerlerin integerlistesi için bkz. winnt.h, IMAGE_SUBSYSTEM.
/x64 Hedef işlemci olarak bir 64 bitlik AMD işlemci belirtir.

Görüntü bitliği belirtilmezse, varsayılan değer /pe64'dür.
/? Araç için komut sözdizimini ve seçenekleri görüntüler.

Not

Ilasm.exe için tüm seçenekler büyük/küçük harfe duyarlı değildir ve ilk üç harf tarafından tanınır. Örneğin, /lis/listing ile eşdeğerdir ve /res:myresfile.res /resource:myresfile.res ile eşdeğerdir. Bağımsız değişkenleri belirten seçenekler iki nokta üst üste (:) veya seçenek ile bağımsız değişken arasındaki ayırıcı olarak eşittir işareti (=) yazın. Örneğin, /output:file.ext, /output=file.ext ile eşdeğerdir.

Açıklamalar

IL Derleyicisi araç satıcılarına IL oluşturucuları tasarlamaları ve uygulamaları için yardımcı olur. Ilasm.exekullanarak, araç ve derleyici geliştiricileri IL'yi PE dosya biçiminde yayma konusunda endişelenmeden IL ve meta veri üretmeye odaklanabilir.

C# ve Visual Basic gibi çalışma zamanını hedefleyen diğer derleyicilere benzer şekilde ,Ilasm.exe ara nesne dosyaları üretmez ve PE dosyası oluşturmak için bir bağlantı aşaması gerektirmez.

IL Derleyicisi, çalışma zamanını hedef alan programlama dillerinin tüm varolan meta veri ve IL özelliklerini ifade edebilir. Bu, bu programlama dillerinden herhangi birinde yazılan yönetilen kodun IL Assembler'da yeterli şekilde ifade edilmesini ve Ilasm.exeile derlenebilmelerini sağlar.

Not

Eğer .il kaynak dosyasının son kod satırında bir boşluk veya satır sonu karakteri yoksa derleme başarısız olabilir.

Ilasm.exe yardımcı aracıIldasm.exeile birlikte kullanabilirsiniz . Ildasm.exe IL kodunu içeren bir PE dosyası alır ve Ilasm.exegiriş olarak uygun bir metin dosyası oluşturur. Bu örneğin, tüm çalışma zamanı meta veri özniteliklerini desteklemeyen bir programlama dilinde kod derlerken kullanışlıdır. Kodu derleyip çıkışı Ildasm.exearacılığıyla çalıştırdıktan sonra, sonuçta elde edilen IL metin dosyası eksik öznitelikleri eklemek için el ile düzenlenebilir. Ardından bu metin dosyasını Ilasm.exe aracılığıyla çalıştırarak son yürütülebilir dosyayı oluşturabilirsiniz.

Bu tekniği kullanarak ayrı derleyiciler tarafından üretilen çeşitli PE dosyalarından tek bir PE dosyası oluşturabilirsiniz.

Not

Şu anda, bu tekniği gömülü yerel kod içeren (örneğin, Visual C++ tarafından üretilen PE dosyaları) PE dosyaları ile kullanamazsınız.

BuIldasm.exe ve Ilasm.exe kullanımını mümkün olduğunca doğru hale getirmek için, derleyici varsayılan olarak IL kaynaklarınızda yazmış olabileceğiniz uzun kodlamalar (veya başka bir derleyici tarafından yayılabilir) için kısa kodlamalar yerine geçmez. Kısa kodlamaları mümkün olduğunca değiştirmek için /optimize seçeneğini kullanın.

Not

Ildasm.exe yalnızca disk üzerindeki dosyalar üzerinde çalışır. Genel bütünleştirilmiş kod önbelleğine yüklü olan dosyalar üzerinde çalışmaz.

IL'nin dil bilgisi hakkında daha fazla bilgi için Windows SDK'sında asmparse.grammar dosyasına bakın.

Sürüm Bilgileri

.NET Framework 4.5'den başlayarak, aşağıdakine benzer bir kod kullanarak arabirim uygulamasına özel bir öznitelik ekleyebilirsiniz:

.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 )
      …

.NET Framework 4.5'den başlayarak, aşağıdaki kodda gösterildiği gibi ham ikili gösterimini kullanarak rastgele bir hazırlama BLOB'u (ikili büyük nesne) belirtebilirsiniz:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

IL'nin dil bilgisi hakkında daha fazla bilgi için Windows SDK'sında asmparse.grammar dosyasına bakın.

Örnekler

Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek myTestFile.exeyürütülebilir dosyasını üretir.

ilasm myTestFile

Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myTestFile.dlloluşturur.

ilasm myTestFile /dll

Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myNewTestFile.dlloluşturur.

ilasm myTestFile /dll /output:myNewTestFile.dll

Aşağıdaki kod örneği, konsolda "Merhaba Dünya!" görüntüleyen son derece basit bir uygulamayı gösterir. Bu kodu derleyebilir ve ardından Ildasm.exe aracını kullanarak bir IL dosyası oluşturabilirsiniz.

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Aşağıdaki IL kod örneği önceki C# kod örneğine karşılık gelir. IL Assembler aracını kullanarak bu kodu bir derlemeye derleyebilirsiniz. Hem IL hem de C# kod örnekleri konsolda "Merhaba Dünya!" görüntüler.

// 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

Ayrıca bkz.