dotnet new membuat kerangka yang tampak kecil, tetapi setiap bagian di dalamnya punya peran tertentu. Memahami struktur project membuat kita tidak bingung saat membaca galat build, mengatur folder output, atau mengelola banyak project sekaligus. Bab ini membedah folder HaloApp yang kita buat pada bab sebelumnya.
Peta Folder HaloApp #
HaloApp/
├── Program.cs
├── HaloApp.csproj
├── bin/
│ └── Debug/
│ └── net9.0/
└── obj/Peran setiap item:
| Item | Peran |
|---|---|
Program.cs | Kode sumber berisi entry point program |
HaloApp.csproj | File definisi project berformat XML |
bin/ | Hasil akhir build, berupa assembly siap dijalankan |
obj/ | File-file intermediate hasil proses build |
*.sln | Solution yang mengelompokkan beberapa project |
Anatomi File .csproj #
Berikut isi HaloApp.csproj yang dibuat template:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>Kita bedah baris demi baris:
<Project Sdk="Microsoft.NET.Sdk">— atributSdkmengimpor sekumpulan aturan build dan nilai default bawaan .NET, sehingga file ini tetap pendek.<OutputType>Exe</OutputType>—Exemenandakan hasil build berupa program yang dapat dieksekusi, bukan pustaka (Library).<TargetFramework>net9.0</TargetFramework>— project menargetkan .NET 9. Versi ini harus didukung SDK yang terpasang.<ImplicitUsings>enable</ImplicitUsings>— compiler menambahkan beberapa directiveusingyang umum secara otomatis, misalnyaSystem.<Nullable>enable</Nullable>— pemeriksaan nullable reference type aktif; compiler memberi peringatan bila variabel referensi dipakai tanpa memastikan nilainya bukannull.
Folder obj: Ruang Kerja Intermediate #
Folder obj/ menyimpan file antara sebelum hasil akhir ditulis ke bin/. Isi folder obj/ setelah restore dan build pertama:
Debug
HaloApp.csproj.nuget.dgspec.json
HaloApp.csproj.nuget.g.props
HaloApp.csproj.nuget.g.targets
project.assets.json
project.nuget.cacheFile project.assets.json adalah peta dependensi hasil restore NuGet; file *.cache menyimpan status build agar kompilasi berikutnya lebih cepat. MSBuild menulis dan membaca folder ini tanpa campur tangan kita.
Folder bin: Hasil Akhir Build #
Folder bin/Debug/net9.0/ memuat assembly hasil kompilasi:
HaloApp
HaloApp.deps.json
HaloApp.dll
HaloApp.pdb
HaloApp.runtimeconfig.json| File | Isi |
|---|---|
HaloApp.dll | Assembly berisi IL (Intermediate Language) hasil kompilasi |
HaloApp | Apphost, executable kecil peluncur yang memanggil runtime |
HaloApp.runtimeconfig.json | Versi runtime yang dibutuhkan saat program dijalankan |
HaloApp.deps.json | Daftar dependensi program |
HaloApp.pdb | Symbol debug untuk menampilkan nama baris saat debugging |
Folder bin/ dan obj/ seluruhnya dihasilkan otomatis, sehingga kita dapat menghapus keduanya kapan saja; build berikutnya membuat ulang seluruh isinya. Langkah ini justru solusi klasik ketika build berperilaku aneh — hapus bin/ dan obj/, lalu jalankan dotnet build dari awal.
Solution untuk Banyak Project #
Bila program tumbuh menjadi beberapa project, file .sln mengelompokkan semuanya dalam satu wadah. Visual Studio membuat .sln secara otomatis setiap project baru dibuat dari IDE. Dari terminal, kita membuat solution dengan dua perintah:
dotnet new sln -n BelajarCSharp
dotnet sln BelajarCSharp.sln add HaloApp/HaloApp.csprojPerintah pertama membuat solution kosong bernama BelajarCSharp; perintah kedua mendaftarkan project HaloApp ke dalamnya. VS Code dengan C# Dev Kit juga membaca file .sln dan menampilkan seluruh project di Solution Explorer.