Bagikan melalui


Opsi pengompilasi C# tingkat lanjut

Opsi berikut mendukung skenario tingkat lanjut. Sintaksis MSBuild baru ditampilkan dalam Huruf tebal. Sintaks csc.exe lebih lama ditampilkan dalam code style.

  • MainEntryPoint, StartupObject / -main: Menentukan jenis yang berisi titik entri.
  • PdbFile / -pdb: Menentukan nama file informasi debug.
  • PathMap / -pathmap: Menentukan pemetaan untuk output nama jalur sumber oleh pengompilasi.
  • ApplicationConfiguration / -appconfig: Menentukan file konfigurasi aplikasi yang berisi pengaturan pengikatan rakitan.
  • AdditionalLibPaths / -lib: Menentukan direktori tambahan untuk menelusuri referensi.
  • GenerateFullPaths / -fullpath: Pengompilasi menghasilkan jalur yang sepenuhnya memenuhi syarat.
  • PreferredUILang / -preferreduilang: Menentukan nama bahasa output pilihan.
  • BaseAddress / -baseaddress: Menentukan alamat dasar yang menjadi tempat pustaka dibangun.
  • ChecksumAlgorithm / -checksumalgorithm : Menentukan algoritma untuk menghitung checksum file sumber yang disimpan di PDB.
  • CodePage / -codepage: Menentukan codepage yang akan digunakan saat membuka file sumber.
  • Utf8Output / -utf8output: Pesan pengompilasi output dalam pengodean UTF-8.
  • FileAlignment / -filealign: Menentukan perataan yang digunakan untuk bagian file output.
  • ErrorEndLocation / -errorendlocation: Baris dan kolom output lokasi akhir tiap kesalahan.
  • NoStandardLib / -nostdlib: Tidak mereferensikan pustaka standar mscorlib.dll.
  • SubsystemVersion / -subsystemversion: Menentukan versi subsistem rakitan ini.
  • ModuleAssemblyName / -moduleassemblyname: Nama rakitan yang akan menjadi bagian dari modul ini.
  • ReportIVTs-reportivts / : Menghasilkan informasi tambahan tentang System.Runtime.CompilerServices.InternalsVisibleToAttribute informasi.

Anda menambahkan salah satu opsi ini dalam <PropertyGroup> elemen dalam file Anda *.csproj :

<PropertyGroup>
    <StartupObject>...</StartupObject>
    ...
</PropertyGroup>

MainEntryPoint atau StartupObject

Opsi ini menentukan kelas yang berisi titik entri ke program, jika lebih dari satu kelas berisi metode Main.

<StartupObject>MyNamespace.Program</StartupObject>

or

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Jika Program merupakan jenis yang berisi metode Main. Nama kelas yang diberikan harus sepenuhnya memenuhi syarat; nama kelas harus mencakup namespace lengkap yang berisi kelas dan diikuti dengan nama kelas. Misalnya, jika metode Main terletak di dalam kelas Program pada namespace MyApplication.Core, opsi pengompilasi harus -main:MyApplication.Core.Program. Jika kompilasi Anda menyertakan lebih dari satu jenis dengan metode Main, Anda dapat menentukan jenis yang berisi metode Main.

Catatan

Opsi ini tidak dapat digunakan untuk proyek yang menyertakan pernyataan tingkat atas, meskipun proyek tersebut berisi satu atau beberapa metode Main.

PdbFile

Opsi pengompilasi PdbFile menentukan nama dan lokasi file simbol debug. Nilai filename menentukan nama dan lokasi file simbol debug.

<PdbFile>filename</PdbFile>

Saat Anda menentukan DebugType, pengkompilasi membuat file .pdb di direktori yang sama di mana pengkompilasi membuat file output (.exe atau .dll). File .pdb memiliki nama file dasar yang sama dengan nama file output. PdbFile memungkinkan Anda menentukan nama file dan lokasi nondefault untuk file .pdb. Opsi pengkompilasi ini tidak dapat diatur di lingkungan pengembangan Visual Studio, juga tidak dapat diubah secara terprogram.

PathMap

Catatan

Menentukan PathMap akan mencegah titik henti bekerja di build debug lokal. Hanya atur PathMap untuk build produksi atau integrasi berkelanjutan.

Opsi pengompilasi PathMap menentukan cara memetakan jalur fisik ke output nama jalur sumber oleh pengompilasi. Opsi ini memetakan tiap jalur fisik pada komputer tempat pengompilasi berjalan ke jalur yang sesuai yang harus ditulis dalam file output. Dalam contoh berikut, path1 merupakan jalur lengkap ke file sumber di lingkungan saat ini, dan sourcePath1 merupakan jalur sumber yang digantikan path1 dalam file output apa pun. Untuk menentukan beberapa jalur sumber yang dipetakan, pisahkan masing-masing dengan koma.

<PathMap>path1=sourcePath1,path2=sourcePath2</PathMap>

Pengompilasi akan menulis jalur sumber ke dalam output-nya karena alasan berikut:

  1. Jalur sumber digantikan untuk suatu argumen jika CallerFilePathAttribute diterapkan ke parameter opsional.
  2. Jalur sumber disematkan dalam file PDB.
  3. Jalur file PDB disematkan ke dalam file PE (portable executable).

ApplicationConfiguration

Opsi pengompilasi ApplicationConfiguration memungkinkan aplikasi C# menentukan lokasi file konfigurasi aplikasi (app.config) rakitan ke runtime bahasa umum (CLR) pada saat pengikatan rakitan.

<ApplicationConfiguration>file</ApplicationConfiguration>

Sedangkan file merupakan file konfigurasi aplikasi yang berisi pengaturan pengikatan rakitan. Salah satu penggunaan ApplicationConfiguration adalah sebagai skenario tingkat lanjut ketika perakitan harus mereferensikan versi .NET Framework dan versi .NET Framework for Silverlight dari rakitan referensi tertentu secara bersamaan. Misalnya, perancang XAML yang ditulis dalam Windows Presentation Foundation (WPF) mungkin perlu mereferensikan WPF Desktop, untuk antarmuka pengguna perancang, maupun subset WPF yang disertakan dengan Silverlight. Rakitan perancang yang sama harus mengakses kedua rakitan tersebut. Secara default, referensi terpisah menyebabkan kesalahan kompiler, karena pengikatan rakitan melihat dua rakitan tersebut sebagai hal yang setara. Opsi pengompilasi ApplicationConfiguration memungkinkan Anda menentukan lokasi file app.config yang menonaktifkan perilaku default dengan menggunakan tag <supportPortability>, seperti yang ditunjukkan dalam contoh berikut.

<supportPortability PKT="7cec85d7bea7798e" enable="false"/>

Pengompilasi meneruskan lokasi file ke logika pengikatan rakitan CLR.

Catatan

Untuk menggunakan file app.config yang telah diatur dalam proyek, tambahkan tag properti <UseAppConfigForCompiler> ke file .csproj dan atur nilainya ke true. Untuk menentukan file app.config yang berbeda, tambahkan tag properti <AppConfigForCompiler> dan atur nilainya ke lokasi file.

Contoh berikut menunjukkan file app.config yang memungkinkan aplikasi memiliki referensi ke implementasi .NET Framework maupun implementasi .NET Framework for Silverlight dari tiap rakitan .NET Framework yang ada di kedua implementasi. Opsi pengompilasi ApplicationConfiguration menentukan lokasi file app.config ini.

<configuration>
  <runtime>
    <assemblyBinding>
      <supportPortability PKT="7cec85d7bea7798e" enable="false"/>
      <supportPortability PKT="31bf3856ad364e35" enable="false"/>
    </assemblyBinding>
  </runtime>
</configuration>

AdditionalLibPaths

Opsi AdditionalLibPaths menentukan lokasi rakitan yang direferensikan dengan opsi Referensi.

<AdditionalLibPaths>dir1[,dir2]</AdditionalLibPaths>

dir1 merupakan direktori tempat pencarian yang dapat dituju pengompilasi jika rakitan yang direferensikan tidak ditemukan di direktori kerja saat ini (direktori tempat Anda memanggil pengompilasi) atau di direktori sistem runtime bahasa umum. dir2 merupakan satu atau beberapa direktori tambahan untuk mencari referensi rakitan. Pisahkan nama direktori dengan tanda koma dan tanpa spasi kosong di antaranya. Pengompilasi mencari referensi rakitan yang tidak sepenuhnya memenuhi syarat dalam urutan berikut:

  1. Direktori kerja saat ini.
  2. Direktori sistem runtime bahasa umum.
  3. Direktori yang ditentukan oleh AdditionalLibPaths.
  4. Direktori yang ditentukan oleh variabel lingkungan LIB.

Gunakan Referensi untuk menentukan referensi rakitan. AdditionalLibPaths bersifat aditif. Menentukannya lebih dari sekali akan menambahkan ke nilai sebelumnya. Karena jalur ke rakitan dependen tidak ditentukan dalam manifes rakitan, aplikasi akan menemukan dan menggunakan rakitan di singgahan perakitan global. Pengompilasi yang mereferensikan rakitan tidak menyiratkan bahwa runtime bahasa umum dapat menemukan dan memuat rakitan pada durasi. Lihat Cara Runtime Menemukan Rakitan untuk detail tentang cara runtime mencari rakitan yang direferensikan.

GenerateFullPaths

Opsi GenerateFullPaths menyebabkan pengompilasi menentukan jalur lengkap ke file saat mencantumkan kesalahan dan peringatan kompilasi.

<GenerateFullPaths>true</GenerateFullPaths>

Secara default, kesalahan dan peringatan yang dihasilkan dari kompilasi akan menentukan nama file kesalahan yang ditemukan. Opsi GenerateFullPaths menyebabkan pengompilasi menentukan jalur lengkap ke file. Opsi pengkompilasi ini tidak tersedia di Visual Studio dan tidak dapat diubah secara terprogram.

PreferredUILang

Dengan menggunakan opsi pengompilasi PreferredUILang, Anda dapat menentukan bahasa yang digunakan saat pengompilasi C# menampilkan output, seperti pesan kesalahan.

<PreferredUILang>language</PreferredUILang>

language merupakan nama bahasa dari bahasa yang digunakan sebagai output pengompilasi. Anda dapat menggunakan opsi pengompilasi PreferredUILang untuk menentukan bahasa yang akan digunakan pengompilasi C# untuk pesan kesalahan dan output baris perintah lainnya. Jika paket bahasa untuk bahasa tersebut tidak diinstal, pengaturan bahasa sistem operasi akan digunakan sebagai gantinya.

BaseAddress

Opsi BaseAddress memungkinkan Anda menentukan alamat dasar yang dipilih untuk memuat DLL. Untuk informasi selengkapnya tentang waktu dan alasan menggunakan opsi ini, lihat WebLog Larry Osterman.

<BaseAddress>address</BaseAddress>

address adalah alamat dasar untuk DLL. Alamat ini dapat ditentukan sebagai angka desimal, heksadesimal, atau oktal. Alamat dasar default untuk DLL diatur oleh runtime bahasa umum .NET. Kata dengan urutan bawah pada alamat ini akan dibulatkan. Misalnya, jika Anda menentukan 0x11110001, dibulatkan ke 0x11110000. Untuk menyelesaikan proses penandatanganan DLL, gunakan SN.EXE dengan opsi -R.

ChecksumAlgorithm

Opsi ini mengontrol algoritma checksum yang digunakan untuk mengodekan file sumber di PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

algorithm harus SHA1 (default) atau SHA256.

CodePage

Opsi ini menentukan halaman kode yang akan digunakan selama kompilasi jika halaman yang diperlukan bukan codepage default sistem saat ini.

<CodePage>id</CodePage>

Di mana id ADALAH ID halaman kode yang akan digunakan untuk semua file kode sumber dalam kompilasi. Pengkompilasi pertama kali mencoba menginterpretasikan semua file sumber sebagai UTF-8. Jika file kode sumber Anda berada dalam pengodean selain UTF-8 dan menggunakan karakter selain karakter ASCII 7-bit, gunakan opsi CodePage untuk menentukan halaman kode yang harus digunakan. CodePage berlaku untuk semua file kode di dalam kompilasi Anda. Lihat GetCPInfo untuk informasi tentang cara menemukan halaman kode yang didukung di sistem Anda.

Utf8Output

Opsi Utf8Output menampilkan output pengompilasi dengan menggunakan pengodean UTF-8.

<Utf8Output>true</Utf8Output>

Dalam beberapa konfigurasi internasional, output kompilator tidak dapat ditampilkan dengan benar di konsol. Gunakan Utf8Output dan alihkan output pengompilasi ke file.

FileAlignment

Opsi FileAlignment memungkinkan Anda menentukan ukuran bagian dalam file output Anda. Nilai yang valid adalah 512, 1024, 2048, 4096, dan 8192. Nilai tersebut tersedia dalam byte.

<FileAlignment>number</FileAlignment>

Anda dapat mengatur opsi FileAlignment dari halaman Tingkat Lanjut properti Build untuk proyek Anda di Visual Studio. Setiap bagian diratakan pada batas yang merupakan kelipatan dari nilai FileAlignment . Tidak ada default tetap. Jika FileAlignment tidak ditentukan, runtime bahasa umum akan memilih default pada saat kompilasi. Menentukan ukuran bagian akan memengaruhi ukuran file output. Mengubah ukuran bagian mungkin berguna untuk program yang berjalan pada perangkat yang lebih kecil. Gunakan DUMPBIN untuk melihat informasi tentang bagian dalam file output Anda.

ErrorEndLocation

Menginstruksikan pengompilasi ke baris dan kolom output lokasi akhir tiap kesalahan.

<ErrorEndLocation>true</ErrorEndLocation>

Secara default, pengompilasi menulis lokasi awal di sumber untuk semua kesalahan dan peringatan. Ketika opsi ini diatur ke true, pengompilasi akan menulis lokasi awal maupun akhir untuk tiap kesalahan dan peringatan.

NoStandardLib

NoStandardLib mencegah impor mscorlib.dll yang menentukan seluruh Namespace sistem.

<NoStandardLib>true</NoStandardLib>

Gunakan opsi ini jika Anda ingin menentukan atau membuat Namespace sistem dan objek Anda sendiri. Jika Anda tidak menentukan NoStandardLib, mscorlib.dll akan diimpor ke program Anda (sama seperti menentukan <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Menentukan versi minimum subsistem tempat file yang dapat dieksekusi berjalan. Pada umumnya, opsi ini akan memastikan bahwa file yang dapat dieksekusi dapat menggunakan fitur keamanan yang tidak tersedia di versi Windows yang lebih lawas.

Catatan

Untuk menentukan subsistem itu sendiri, gunakan opsi pengompilasi TargetType.

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor menentukan versi minimum subsistem yang diperlukan, seperti yang dinyatakan dalam notasi titik untuk versi mayor dan minor. Misalnya, Anda dapat menentukan aplikasi agar tidak dapat berjalan pada sistem operasi yang lebih lawas dari Windows 7. Atur nilai opsi ini menjadi 6.01, seperti yang akan dijelaskan dalam artikel ini. Tentukan nilai untuk major dan minor sebagai integer. Nol yang berada di depan pada versi minor tidak akan mengubah versi tersebut, tetapi nol berikutnya akan mengubah versi. Misalnya, 6.1 dan 6.01 mengacu pada versi yang sama, tetapi 6.10 mengacu pada versi yang berbeda. Sebaiknya ekspresikan versi minor sebagai dua digit untuk menghindari kebingungan.

Tabel berikut ini mencantumkan versi subsistem umum Windows.

Versi Windows Versi subsistem
Windows Server 2003 5,02
Windows Vista 6.00
Windows 7 6,01
Windows Server 2008 6,01
Windows 8 6.02

Nilai default opsi pengompilasi SubsystemVersion bergantung pada syarat dalam daftar berikut:

  • Nilai defaultnya adalah 6,02 jika ada opsi pengkompilasi dalam daftar berikut diatur:
  • Nilai default-nya adalah 6.00 jika Anda menggunakan MSBuild, Anda menargetkan .NET Framework 4.5, dan Anda belum mengatur salah satu opsi pengompilasi yang ditentukan sebelumnya dalam daftar ini.
  • Nilai default-nya adalah 4.00 jika tidak ada syarat sebelumnya yang terpenuhi.

ModuleAssemblyName

Menentukan nama rakitan yang jenis nonpubliknya dapat diakses .netmodule .

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName sebaiknya digunakan saat membangun .netmodule, dan jika syarat berikut ini terpenuhi:

  • .netmodule memerlukan akses ke jenis nonpublik dalam rakitan yang ada.
  • Anda mengetahui nama rakitan .netmodule yang akan dibangun.
  • Rakitan yang ada telah memberikan akses rakitan teman ke rakitan tempat . netmodule akan dibangun.

Untuk informasi selengkapnya tentang membangun .netmodule, lihat opsi TargetTypemodul. Untuk informasi selengkapnya tentang rakitan teman, lihat Rakitan Teman.

ReportIVTs

Aktifkan atau nonaktifkan informasi diagnostik tambahan tentang System.Runtime.CompilerServices.InternalsVisibleToAttribute ditemukan selama kompilasi:

<ReportIVTs>true</ReportIVTs>

Diagnostik diaktifkan jika konten elemen , truedinonaktifkan jika false, atau tidak ada.

ReportIVTs melaporkan informasi berikut saat diaktifkan:

  1. Setiap diagnostik anggota yang tidak dapat diakses termasuk assembly sumber mereka, jika berbeda dari rakitan saat ini.
  2. Pengkompilasi mencetak identitas perakitan proyek yang dikompilasi, nama rakitan, dan kunci publiknya.
  3. Untuk setiap referensi yang diteruskan ke pengkompilasi, referensi mencetak;
    1. Identitas perakitan referensi
    2. Apakah referensi memberikan proyek saat ini InternalsVisibleTo
    3. Nama dan semua kunci publik dari rakitan apa pun yang diberikan InternalsVisibleTo dari rakitan ini