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 istemine şunu yazın:

Sözdizimi

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

Parametreler

Bağımsız değişken Açıklama
filename .il kaynak dosyasının adı. Bu dosya meta veri bildirim yönergeleri ve simgesel IL yönergelerinden oluşur. Ilasm.exe ile 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 olduğ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 belirtilen integer 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ı oluşturur.
/kol Hedef işlemci olarak Gelişmiş RISC Makinesi (ARM) belirtir.

Görüntü bitliği belirtilmezse varsayılan değer /32bitpreferred olur.
/taban: 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: Izleyen 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.

Ref to Def Resolution: 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'ı 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.
/katlamak 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.)
/kapsamak: includePath ile #includebirlikte gelen dosyaları aramak için bir yol ayarlar.
/itanium 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 yer alan özel anahtarı kullanarak güçlü bir imzayla derlerkeyFile.
/anahtar: @keySource filename adresinde keySourceüretilen özel anahtarı kullanarak güçlü bir imzayla derler.
/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.
/çıktı: 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.dll adlı 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.
/quiet Sessiz modu belirtir; hiçbir derleme ilerlemesini bildirmez.
/kaynak: file.res Elde edilen .exe veya .dll dosyasında belirtilen kaynak dosyasını *.res biçiminde içerir. /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 integergeçerli değerlerin listesi 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, seçenek ve bağımsız değişken arasında ayırıcı olarak iki nokta üst üste (:) veya eşittir işareti (=) kabul eder. Ö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. Araç ve derleyici geliştiricileri, Ilasm.exe kullanarak, 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ğlama 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ılmış yönetilen kodun IL Assembler'da yeterince ifade edilmesini ve Ilasm.exe ile derlenmesini 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.exe ile birlikte kullanabilirsiniz. Ildasm.exe IL kodu içeren bir PE dosyası alır ve Ilasm.exe giriş 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.exe çalıştırdıktan sonra, sonuçta elde edilen IL metin dosyası eksik öznitelikleri eklemek için el ile düzenlenebilir. Daha sonra son yürütülebilir dosyayı oluşturmak için bu metin dosyasını Ilasm.exe çalıştırabilirsiniz.

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.

Ildasm.exe ve Ilasm.exe bu birleşik kullanımını mümkün olduğunca doğru hale getirmek için, varsayılan olarak derleyici, IL kaynaklarınızda yazmış olabileceğiniz uzun kodlamaların yerine kısa kodlamalar kullanmaz (veya başka bir derleyici tarafından yayılabilir). 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 Bilgisi

.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 sıralama BLOB'unu (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 yürütülebilir myTestFile.exe oluşturur.

ilasm myTestFile

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

ilasm myTestFile /dll

Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myNewTestFile.dll oluş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 derlemede 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.