/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 menggunakaninitialAppDomain
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. /DELAYSIGN
Opsi , /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
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Atur menu dropdown Konfigurasi ke Semua konfigurasi, dan atur menu dropdown Platform ke Semua Platform.
Pilih halaman Properti>Konfigurasi C/C++>General.
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
- Lihat CompileAsManaged.
Lihat juga
Opsi Pengkompilasi MSVC
Sintaks Baris Perintah Pengkompilasi MSVC