Kod oluşturmayı denetleen C# Derleyici Seçenekleri

Aşağıdaki seçenekler derleyici tarafından kod oluşturmayı denetler. Yeni MSBuild söz dizimi Kalın olarak gösterilir. Eski csc.exe söz dizimi içinde code stylegösterilir.

  • DebugType / -debug: Hata ayıklama bilgilerini yayma (veya yaymama).
  • İyileştirme / -optimize: İyileştirmeleri etkinleştirin.
  • Deterministic / -deterministic: Aynı giriş kaynağından bayt için bayt eşdeğeri çıkış üretin.
  • ProduceOnlyReferenceAssembly / -refonly: Birincil çıkış olarak tam derleme yerine bir başvuru derlemesi oluşturun.

DebugType

DebugType seçeneği, derleyicinin hata ayıklama bilgileri oluşturmasına ve bunu çıkış dosyasına veya dosyalara yerleştirmesine neden olur. Hata ayıklama bilgileri varsayılan olarak eklenir.

<DebugType>pdbonly</DebugType>

C# 6.0 ile başlayan tüm derleyici sürümleri için pdbonly ile tam arasında bir fark yoktur. Pdbonly'yi seçin. .pdb dosyasının konumunu değiştirmek için bkz. PdbFile.

Aşağıdaki değerler geçerlidir:

Değer Anlamı
full Geçerli platform için varsayılan biçimi kullanarak hata ayıklama bilgilerini .pdb dosyasına aktarın:
Windows: Bir Windows pdb dosyası.
Linux/macOS: Taşınabilir PDB dosyası.
pdbonly ile fullaynı. Daha fazla bilgi için aşağıdaki nota bakın.
portable Platformlar arası Taşınabilir PDB biçimini kullanarak hata ayıklama bilgilerini .pdb dosyasına yayın .
embedded Taşınabilir PDB biçimini kullanarak hata ayıklama bilgilerini .dll/.exe kendisine (.pdb dosyası üretilmemiş) yayın.

Önemli

Aşağıdaki bilgiler yalnızca C# 6.0'dan eski derleyiciler için geçerlidir. Bu öğenin değeri veya fullpdbonlyolabilir. Pdbonly belirtmezseniz geçerli olan tam bağımsız değişken, çalışan programa bir hata ayıklayıcısı eklemeyi etkinleştirir. Pdbonly'nin belirtilmesi, program hata ayıklayıcıda başlatıldığında kaynak kodu hata ayıklamasına izin verir, ancak yalnızca çalışan program hata ayıklayıcıya eklendiğinde derleyiciyi görüntüler. Hata ayıklama derlemeleri oluşturmak için bu seçeneği kullanın. Tam kullanıyorsanız, JIT için iyileştirilmiş kodun hızı ve boyutu üzerinde bazı etkileri ve tam kod kalitesi üzerinde küçük bir etkisi olduğunu unutmayın. Sürüm kodu oluşturmak için pdbonly kullanmanızı veya PDB oluşturmamanızı öneririz. Pdbonly ile tam arasındaki bir fark, derleyicinin dolu olduğunda JIT derleyicisine hata ayıklama bilgilerinin kullanılabilir olduğunu bildirmek için kullanılan bir DebuggableAttributeyaymadır. Bu nedenle, tam kullanıyorsanız kodunuz DebuggableAttribute false olarak ayarlanmışsa bir hata alırsınız. Bir uygulamanın hata ayıklama performansını yapılandırma hakkında daha fazla bilgi için bkz . Görüntüde Hata Ayıklamayı Kolaylaştırma.

Optimize Et

İyileştir seçeneği, çıktı dosyanızı daha küçük, daha hızlı ve daha verimli hale getirmek için derleyici tarafından gerçekleştirilen iyileştirmeleri etkinleştirir veya devre dışı bırakır. İyileştir seçeneği, Yayın derleme yapılandırması için varsayılan olarak etkindir. Hata Ayıklama ve diğer derleme yapılandırmaları için varsayılan olarak kapalıdır.

<Optimize>true</Optimize>

Visual Studio'da projeniz için Derleme özellikleri sayfasında İyileştir seçeneğini ayarlarsınız.

İyileştirme ayrıca ortak dil çalışma zamanına çalışma zamanında kodu iyileştirmesini bildirir. Varsayılan olarak iyileştirmeler devre dışı bırakılır. İyileştirmeleri etkinleştirmek için Optimize+ değerini belirtin. Bir derleme tarafından kullanılacak bir modül oluştururken, derleme tarafından kullanılan en iyi duruma getirme ayarlarını kullanın. İyileştirme ve Hata Ayıklama seçeneklerini birleştirmek mümkündür.

Deterministic

Derleyicinin, aynı girişler için derlemelerde bayt için bayt çıkışı aynı olan bir derleme üretmesine neden olur.

<Deterministic>true</Deterministic>

Varsayılan olarak, derleyici bir zaman damgası ve bir MVID (a ) eklediğinden, belirli bir giriş kümesinden gelen derleyici çıktısı benzersizdir Module.ModuleVersionId. Temel olarak, modülü ve sürümü benzersiz olarak tanımlayan bir GUID'dir.) rastgele sayılardan oluşturulur. Giriş aynı kaldığı sürece ikili içeriği derlemeler arasında aynı olan bir deterministik derleme oluşturmak için seçeneğini kullanırsınız<Deterministic>. Böyle bir derlemede zaman damgası ve MVID alanları, tüm derleme girişlerinin karmasından türetilen değerlerle değiştirilir. Derleyici, determinizmi etkileyen aşağıdaki girişleri dikkate alır:

  • Komut satırı parametrelerinin sırası.
  • Derleyicinin .rsp yanıt dosyasının içeriği.
  • Kullanılan derleyicinin tam sürümü ve başvuruda bulunan derlemeleri.
  • Geçerli dizin yolu.
  • Derleyiciye doğrudan veya dolaylı olarak açıkça geçirilen tüm dosyaların ikili içeriği, örneğin:
    • Kaynak dosyalar
    • Başvurulan derlemeler
    • Başvurulan modüller
    • Kaynaklar
    • Tanımlayıcı ad anahtar dosyası
    • @ yanıt dosyaları
    • Çözümleyiciler
    • Kural kümeleri
    • Çözümleyiciler tarafından kullanılabilecek diğer dosyalar
  • Geçerli kültür (tanılama ve özel durum iletilerinin oluşturulduğu dil için).
  • Kodlama belirtilmemişse varsayılan kodlama (veya geçerli kod sayfası).
  • Derleyicinin arama yollarında dosyaların varlığı, varolmaması ve içeriği (örneğin, veya -recursetarafından -lib belirtilir).
  • Derleyicinin üzerinde çalıştırıldığı Ortak Dil Çalışma Zamanı (CLR) platformu.
  • çözümleyici bağımlılık yüklemesini %LIBPATH%etkileyebilecek değeri.

Bir ikilinin güvenilir bir kaynaktan derlenip derlenmediğini belirlemek için deterministik derleme kullanılabilir. Belirleyici çıkış, kaynak genel kullanıma sunulduğunda yararlı olabilir. Ayrıca, derleme işleminde kullanılan ikili dosya değişikliklerine bağımlı derleme adımlarının olup olmadığını belirleyebilir.

ProduceOnlyReferenceAssembly

ProduceOnlyReferenceAssembly seçeneği, birincil çıkış olarak bir başvuru derlemesinin uygulama derlemesi yerine çıkış olması gerektiğini belirtir. Başvuru derlemeleri yürütülemediğinden, ProduceOnlyReferenceAssembly parametresi çıktı PDB'lerini sessizce devre dışı bırakır.

<ProduceOnlyReferenceAssembly>true</ProduceOnlyReferenceAssembly>

Başvuru derlemeleri özel bir derleme türüdür. Başvuru derlemeleri, kitaplığın genel API yüzeyini temsil etmek için gereken en düşük meta veri miktarını içerir. Derleme araçlarındaki bir derlemeye başvururken önemli olan tüm üyeler için bildirimler içerir, ancak API sözleşmeleri üzerinde gözlemlenebilir bir etkisi olmayan özel üyelerin tüm üye uygulamalarını ve bildirimlerini dışlarlar. Daha fazla bilgi için bkz . Başvuru derlemeleri.

ProduceOnlyReferenceAssembly ve ProduceReferenceAssembly seçenekleri birbirini dışlar.