Opsi Pengompilasi C# yang mengontrol output pengompilasi

Opsi berikut mengontrol pembuatan output pengompilasi.

MSBuild csc.exe Deskripsi
DocumentationFile -doc: Membuat file dokumen XML dari komentar ///.
OutputAssembly -out: Menentukan file rakitan output.
PlatformTarget -platform: Menentukan CPU platform target.
ProduceReferenceAssembly -refout: Membuat rakitan referensi.
TargetType -target: Menentukan jenis rakitan output.

DocumentationFile

Opsi DocumentationFile memungkinkan Anda menempatkan komentar dokumentasi dalam file XML. Untuk mempelajari selengkapnya tentang pendokumentasian kode Anda, lihat Tag yang Direkomendasikan untuk Komentar Dokumentasi. Nilai menentukan jalur ke file XML output. File XML berisi komentar dalam file kode sumber kompilasi.

<DocumentationFile>path/to/file.xml</DocumentationFile>

File kode sumber yang berisi pernyataan Utama atau tingkat atas adalah output terlebih dahulu ke dalam XML. Anda akan sering ingin menggunakan file .xml yang dihasilkan dengan IntelliSense. Nama file .xml harus sama dengan nama rakitan. File .xml harus berada di direktori yang sama dengan rakitan. Ketika perakitan dirujuk dalam proyek Visual Studio, file .xml juga ditemukan. Untuk informasi selengkapnya tentang pembuatan komentar kode, lihat Memberikan Komentar Kode. Kecuali Anda mengkompilasi dengan <TargetType:Module>, file akan berisi tag <assembly> dan </assembly> yang menentukan nama file yang berisi manifes perakitan untuk file output. Misalnya, lihat Cara menggunakan fitur dokumentasi XML.

Catatan

Opsi DocumentationFile berlaku untuk semua file dalam proyek. Untuk menonaktifkan peringatan yang terkait dengan komentar dokumentasi untuk file atau bagian kode tertentu, gunakan peringatan #pragma.

Opsi ini dapat digunakan dalam proyek gaya SDK .NET. Untuk informasi selengkapnya, lihat properti DocumentationFile.

OutputAssembly

Opsi OutputAssembly menentukan nama file output. Jalur output menentukan folder tempat output pengompilasi ditempatkan.

<OutputAssembly>folder</OutputAssembly>

Tentukan nama lengkap dan ekstensi file yang ingin Anda buat. Jika Anda tidak menentukan nama file output, MSBuild menggunakan nama proyek untuk menentukan nama rakitan output. Proyek gaya lama menggunakan aturan berikut:

  • .exe akan mengambil namanya dari file kode sumber yang berisi metode Main atau pernyataan tingkat atas.
  • .dll atau .netmodule akan mengambil namanya dari file kode sumber pertama.

Setiap modul yang dihasilkan sebagai bagian dari kompilasi menjadi file yang terkait dengan rakitan apa pun yang juga diproduksi dalam kompilasi. Gunakan ildasm.exe untuk melihat manifes rakitan untuk melihat file terkait.

Opsi pengompilasi OutputAssembly diperlukan agar exe menjadi target rakitan teman.

PlatformTarget

Menentukan versi CLR mana yang dapat menjalankan rakitan.

<PlatformTarget>anycpu</PlatformTarget>
  • anycpu (default) mengompilasi rakitan Anda untuk dijalankan di platform apa pun. Aplikasi Anda berjalan sebagai proses 64-bit jika memungkinkan dan kembali ke 32-bit jika hanya mode tersebut yang tersedia.
  • anycpu32bitpreferred mengompilasi rakitan Anda untuk dijalankan di platform apa pun. Aplikasi Anda berjalan dalam mode 32-bit pada sistem yang mendukung aplikasi 64-bit dan 32-bit. Anda hanya dapat menentukan opsi ini untuk proyek yang menargetkan .NET Framework 4.5 atau yang lebih baru.
  • ARM mengompilasi rakitan Anda untuk dijalankan di komputer yang memiliki prosesor Advanced RISC Machine (ARM).
  • ARM64 mengompilasi rakitan Anda untuk dijalankan oleh CLR 64-bit di komputer yang memiliki prosesor Advanced RISC Machine (ARM) yang mendukung set instruksi A64.
  • x64 mengompilasi rakitan Anda untuk dijalankan oleh CLR 64-bit di komputer yang mendukung set instruksi AMD64 atau EM64T.
  • x86 mengompilasi rakitan Anda untuk dijalankan oleh CLR 32-bit yang kompatibel dengan x86.
  • Itanium mengompilasi rakitan Anda untuk dijalankan oleh CLR 64-bit di komputer dengan prosesor Itanium.

Pada sistem operasi Windows 64-bit:

  • Rakitan yang dikompilasi dengan x86 akan dijalankan pada CLR 32-bit yang berjalan di WOW64.
  • DLL yang dikompilasi dengan anycpu dijalankan pada CLR yang sama dengan proses yang memuatnya.
  • Executable yang dikompilasi dengan anycpu dijalankan pada CLR 64-bit.
  • Executable yang dikompilasi dengan anycpu32bitpreferred dijalankan pada CLR 32-bit.

Pengaturan anycpu32bitpreferred hanya valid untuk file yang dapat dieksekusi (.EXE), dan memerlukan .NET Framework 4.5 atau yang lebih baru. Untuk informasi selengkapnya tentang mengembangkan aplikasi untuk dijalankan pada sistem operasi Windows 64-bit, lihat Aplikasi 64-bit.

Anda menetapkan opsi PlatformTarget dari halaman properti Build untuk proyek Anda di Visual Studio.

Perilaku anycpu memiliki beberapa nuansa tambahan pada rilis .NET Core dan .NET 5 dan yang lebih baru. Saat Anda mengatur anycpu, terbitkan aplikasi Anda dan jalankan dengan x86 dotnet.exe atau x64 dotnet.exe. Untuk aplikasi mandiri, langkah dotnet publish mengemas executable untuk konfigurasi RID.

ProduceReferenceAssembly

Opsi ProduceReferenceAssembly mengontrol apakah pengkompilasi menghasilkan rakitan referensi.

<ProduceReferenceAssembly>true</ProduceReferenceAssembly>

Rakitan referensi adalah jenis rakitan khusus yang hanya berisi jumlah minimum metadata yang diperlukan untuk mewakili permukaan API publik pustaka. Ini mencakup deklarasi untuk semua anggota yang signifikan saat mereferensikan rakitan dalam alat build. Rakitan referensi mengecualikan semua implementasi anggota dan deklarasi anggota privat. Anggota tersebut tidak memiliki dampak yang dapat diamati pada kontrak API miliknya. Untuk informasi selengkapnya, lihat Rakitan referensi di Panduan .NET.

Opsi ProduceOnlyReferenceAssembly dan ProduceReferenceAssembly bersifat eksklusif secara mutual.

Anda umumnya tidak perlu bekerja langsung dengan file perakitan referensi. Secara default, rakitan referensi dihasilkan dalam ref subfolder jalur perantara (yaitu obj/ref/). Untuk menghasilkannya di bawah direktori output sebagai gantinya (yaitu bin/ref/) diatur ProduceReferenceAssemblyInOutDir ke true dalam proyek Anda.

.NET SDK 6.0.200 membuat perubahan yang memindahkan rakitan referensi dari direktori output ke direktori perantara secara default.

TargetType

Opsi pengompilasi TargetType dapat ditentukan dalam salah satu formulir berikut:

  • library: untuk membuat pustaka kode. library adalah nilai defaultnya.
  • exe: untuk membuat file .exe.
  • module untuk membuat modul.
  • winexe untuk membuat program Windows.
  • winmdobj untuk membuat file .winmdobj perantara.
  • appcontainerexe untuk membuat file .exe untuk aplikasi Windows 8.x Store.

Catatan

Untuk target .NET Framework, kecuali apabila Anda menentukan module, opsi ini menyebabkan manifes rakitan .NET Framework ditempatkan dalam file output. Untuk informasi selengkapnya, lihat Rakitan di .NET dan Atribut Umum.

<TargetType>library</TargetType>

Pengompilasi hanya membuat satu manifes rakitan per kompilasi. Informasi tentang semua file dalam kompilasi berada dalam manifes rakitan. Saat menghasilkan beberapa file output di baris perintah, hanya satu manifes rakitan yang dapat dibuat dan harus masuk ke file output pertama yang ditentukan pada baris perintah.

Jika Anda membuat rakitan, Anda dapat menunjukkan bahwa semua atau sebagian kode Anda mematuhi CLS dengan atribut CLSCompliantAttribute.

pustaka

Opsi library menyebabkan pengompilasi membuat dynamic-link library (DLL) bukan file yang dapat dieksekusi (EXE). DLL akan dibuat dengan ekstensi .dll. Kecuali apabila ditentukan lain dengan opsi OutputAssembly, nama file output mengambil nama file input pertama. Saat membuat file .dll, metode Main tidak diperlukan.

exe

Opsi exe menyebabkan pengompilasi membuat aplikasi konsol yang dapat dieksekusi (EXE). File yang dapat dieksekusi akan dibuat dengan ekstensi .exe. Gunakan winexe untuk membuat program Windows yang dapat dieksekusi. Kecuali apabila ditentukan lain dengan opsi OutputAssembly, nama file output mengambil nama file input yang berisi titik masuk (Metode utama atau pernyataan tingkat atas). Satu-satunya titik masuk diperlukan dalam file kode sumber yang dikompilasi ke dalam file .exe. Opsi pengompilasi StartupObject memungkinkan Anda menentukan kelas mana yang berisi metode Main, jika kode Anda memiliki lebih dari satu kelas dengan metode Main.

modul

Opsi ini menyebabkan pengompilasi tidak menghasilkan manifes rakitan. Secara default, file output yang dibuat dengan kompilasi dengan opsi ini akan memiliki ekstensi .netmodule. File yang tidak memiliki manifes rakitan tidak dapat dimuat oleh runtime .NET. Namun, file tersebut dapat dimasukkan ke dalam manifes rakitan suatu rakitan dengan AddModules. Jika lebih dari satu modul dibuat dalam satu kompilasi, jenis internal dalam satu modul akan tersedia untuk modul lain dalam kompilasi tersebut. Jika kode dalam satu modul mereferensikan jenis internal dalam modul lain, kedua modul harus dimasukkan ke dalam manifes rakitan, dengan AddModules. Membuat modul tidak didukung di lingkungan pengembangan Visual Studio.

winexe

Opsi winexe menyebabkan pengompilasi membuat program Windows yang dapat dieksekusi (EXE). File yang dapat dieksekusi akan dibuat dengan ekstensi .exe. Program Windows adalah program yang menyediakan antarmuka pengguna dari pustaka .NET atau dengan API Windows. Gunakan exe untuk membuat aplikasi konsol. Kecuali apabila ditentukan lain dengan opsi OutputAssembly, nama file output mengambil nama file input yang berisi metode Main. Satu-satunya metode Main diperlukan dalam file kode sumber yang dikompilasi ke dalam file .exe. Opsi StartupObject memungkinkan Anda menentukan kelas mana yang berisi metode Main, jika kode Anda memiliki lebih dari satu kelas dengan metode Main.

winmdobj

Jika Anda menggunakan opsi winmdobj, pengompilasi membuat file .winmdobj perantara yang dapat Anda konversi ke file biner Windows Runtime (.winmd). File .winmd dapat digunakan oleh program JavaScript dan C++, selain program bahasa terkelola.

Pengaturan winmdobj memberi sinyal ke pengompilasi bahwa modul perantara diperlukan. File .winmdobj kemudian dapat diumpankan melalui alat ekspor WinMDExp untuk menghasilkan file metadata Windows (.winmd). File .winmd berisi kode dari pustaka asli dan metadata WinMD yang digunakan oleh JavaScript atau C++ dan oleh Windows Runtime. Output file yang dikompilasi menggunakan opsi pengompilasi winmdobj hanya digunakan sebagai input untuk alat ekspor WimMDExp. File .winmdobj sendiri tidak dirujuk secara langsung. Kecuali apabila Anda menggunakan opsi OutputAssembly, nama file output mengambil nama file input pertama. Metode Main tidak diperlukan.

appcontainerexe

Jika Anda menggunakan opsi pengompilasi appcontainerexe, pengompilasi membuat file Windows yang dapat dieksekusi (.exe) yang harus dijalankan dalam kontainer aplikasi. Opsi ini setara dengan -target:winexe tetapi dirancang untuk aplikasi Windows 8.x Store.

Agar aplikasi wajib berjalan dalam kontainer aplikasi, opsi ini mengatur bit dalam file Portable Executable (PE). Ketika bit tersebut diatur, kesalahan terjadi jika metode CreateProcess mencoba meluncurkan file yang dapat dieksekusi di luar kontainer aplikasi. Kecuali apabila Anda menggunakan opsi OutputAssembly, nama file output mengambil nama file input yang berisi metode Main.