/clr (Kompilasi Runtime Bahasa Umum)

Memungkinkan aplikasi dan komponen menggunakan fitur dari runtime bahasa umum (CLR) dan mengaktifkan kompilasi C++/CLI.

Sintaks

/clr[:opsi]

Argumen

opsi
Satu atau beberapa argumen yang dipisahkan koma berikut.

  • tidak ada

    Tanpa opsi, /clr membuat metadata untuk komponen. Metadata dapat dikonsumsi oleh aplikasi CLR lainnya, dan memungkinkan komponen untuk menggunakan jenis dan data dalam metadata komponen CLR lainnya. Untuk informasi selengkapnya, lihat Rakitan Campuran (Asli dan Terkelola).

  • netcore

    Tersedia mulai Visual Studio 2019 versi 16.4, /clr:netcore membuat metadata dan kode untuk komponen menggunakan kerangka kerja .NET lintas platform terbaru, juga dikenal sebagai .NET Core. Metadata dapat dikonsumsi oleh aplikasi .NET Core lainnya. Dan, opsi ini memungkinkan komponen untuk menggunakan jenis dan data dalam metadata komponen .NET Core lainnya.

  • nostdlib

    Menginstruksikan pengkompilasi untuk mengabaikan direktori default \clr . Pengkompilasi menghasilkan kesalahan jika Anda menyertakan beberapa versi DLL, seperti System.dll. Opsi ini memungkinkan Anda menentukan kerangka kerja tertentu untuk digunakan selama kompilasi.

  • pure

    /clr:pure tidak digunakan lagi. Opsi dihapus di Visual Studio 2017 dan yang lebih baru. Kami menyarankan agar Anda membuat kode port yang harus MSIL murni ke C#.

  • safe

    /clr:safe tidak digunakan lagi. Opsi dihapus di Visual Studio 2017 dan yang lebih baru. Kami menyarankan agar Anda membuat kode port yang harus aman MSIL ke C#.

  • noAssembly

    /clr:noAssembly tidak digunakan lagi. Gunakan /LN (Buat Modul MSIL) sebagai gantinya.

    Memberi tahu pengkompilasi untuk tidak menyisipkan manifes perakitan ke dalam file output. Secara default, noAssembly opsi tidak berlaku.

    Program terkelola yang tidak memiliki metadata rakitan dalam manifes dikenal sebagai modul. Opsi noAssembly ini hanya dapat digunakan untuk menghasilkan modul. Jika Anda mengkompilasi dengan menggunakan /c dan /clr:noAssembly, maka tentukan /NOASSEMBLY opsi dalam fase linker untuk membuat modul.

    Sebelum Visual Studio 2005, /clr:noAssembly diperlukan /LD. /LD sekarang tersirat ketika Anda menentukan /clr:noAssembly.

  • initialAppDomain

    initialAppDomain sudah usang. Memungkinkan aplikasi C++/CLI berjalan pada versi 1 CLR. Aplikasi yang dikompilasi dengan menggunakan initialAppDomain tidak boleh digunakan oleh aplikasi yang menggunakan ASP.NET karena tidak didukung di clr versi 1.

Keterangan

Kode terkelola adalah kode yang dapat diperiksa dan dikelola oleh CLR. Kode terkelola dapat mengakses objek terkelola. Untuk informasi selengkapnya, lihat /clr Pembatasan.

Untuk informasi tentang cara mengembangkan aplikasi yang menentukan dan menggunakan jenis terkelola di C++, lihat Ekstensi Komponen untuk Platform Runtime.

Aplikasi yang dikompilasi dengan menggunakan /clr mungkin atau mungkin tidak berisi data terkelola.

Untuk mengaktifkan penelusuran kesalahan pada aplikasi terkelola, lihat /ASSEMBLYDEBUG (Tambahkan DebuggableAttribute).

Hanya jenis CLR yang diinstansiasi pada tumpukan yang dikumpulkan sampah. Untuk informasi selengkapnya, lihat Kelas dan Struktur. Untuk mengkompilasi fungsi ke kode asli, gunakan unmanaged pragma. Untuk informasi selengkapnya, lihat managed, unmanaged.

Secara default, /clr tidak berlaku. Ketika /clr berlaku, /MD juga berlaku. Untuk informasi selengkapnya, lihat /MD, , /LD/MT(Gunakan Pustaka Run-Time). /MD memastikan bahwa versi rutinitas runtime yang ditautkan secara dinamis dan multithread dipilih dari file header standar. Multithreading diperlukan untuk pemrograman terkelola karena pengumpul sampah CLR menjalankan finalizer dalam utas tambahan.

Jika Anda mengkompilasi dengan menggunakan /c, Anda dapat menentukan jenis CLR dari file output yang dihasilkan dengan menggunakan /CLRIMAGETYPE opsi linker.

/clr menyiratkan /EHa, dan tidak ada opsi lain /EH yang didukung untuk /clr. Untuk informasi selengkapnya, lihat /EH (Model Penanganan Pengecualian).

Untuk informasi tentang cara menentukan jenis gambar CLR file, lihat /CLRHEADER.

Semua modul yang diteruskan ke pemanggilan linker tertentu harus dikompilasi dengan menggunakan opsi pengkompilasi pustaka run-time yang sama (/MD atau /LD).

/ASSEMBLYRESOURCE Gunakan opsi linker untuk menyematkan sumber daya dalam rakitan. /DELAYSIGNOpsi , /KEYCONTAINER, dan /KEYFILE linker juga memungkinkan Anda menyesuaikan cara perakitan dibuat.

Ketika /clr digunakan, _MANAGED simbol didefinisikan menjadi 1. Untuk informasi selengkapnya, lihat Makro yang telah ditentukan sebelumnya.

Variabel global dalam file objek asli diinisialisasi terlebih dahulu (selama DllMain jika yang dapat dieksekusi adalah DLL), dan kemudian variabel global di bagian terkelola diinisialisasi (sebelum kode terkelola dijalankan). #pragma init_seg hanya memengaruhi urutan inisialisasi dalam kategori terkelola dan tidak terkelola.

Metadata dan Kelas yang Tidak Disebutkan Namanya

Kelas yang tidak disebutkan namanya muncul dalam metadata di bawah nama seperti $UnnamedClass$<crc-of-current-file-name>$<index>$, di mana <index> merupakan jumlah berurutan dari kelas yang tidak disebutkan namanya dalam kompilasi. Misalnya, sampel kode berikut menghasilkan kelas yang tidak disebutkan namanya dalam metadata.

// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;

Gunakan ildasm.exe untuk melihat metadata.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Atur menu dropdown Konfigurasi ke Semua konfigurasi, dan atur menu dropdown Platform ke Semua Platform.

  3. Pilih halaman Properti>Konfigurasi C/C++>General.

  4. Ubah properti Dukungan Runtime Bahasa Umum. Pilih OK untuk menyimpan perubahan.

Catatan

Di IDE Visual Studio, /clr opsi pengkompilasi dapat diatur satu per satu pada halaman Properti>Konfigurasi C/C++>Umum dari dialog Halaman Properti. Namun, kami sarankan Anda menggunakan templat CLR untuk membuat proyek Anda. Ini mengatur semua properti yang diperlukan untuk keberhasilan pembuatan komponen CLR. Cara lain untuk mengatur properti ini adalah dengan menggunakan properti Dukungan Runtime Bahasa Umum pada halaman Properti>Konfigurasi Tingkat Lanjut dari dialog Halaman Properti. Properti ini mengatur semua opsi alat terkait CLR lainnya sekaligus.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Baca juga

Opsi Pengkompilasi MSVC
Sintaks Baris Perintah Pengkompilasi MSVC