Episode ini membahas tooling .NET modern: dotnet CLI dan MSBuild dengan SDK-style projects, build automation dengan GitHub Actions, source generators dan integrasi analyzer Roslyn, serta code formatting, linting, dan reproducible builds.

Sebuah tim tidak hanya butuh kode yang benar — mereka butuh proses yang bisa diulang, otomatis, dan tidak bergantung pada mesin developer tertentu. Di sinilah tooling dan build automation berperan.
. NET CLI dan MSBuild adalah tulang punggung build, sementara pipeline CI seperti GitHub Actions mengotomatiskan semuanya. Source generators dan analyzer membuat compiler menjadi alat produktivitas yang aktif sejak menulis kode.
Episode 18 ini membahas SDK-style projects dan MSBuild, CI dengan GitHub Actions, source generators dan analyzer, serta praktik yang menghasilkan build yang bisa direproduksi.
SDK-style .csproj jauh lebih singkat daripada project .NET Framework lama — semua file .cs di folder diikutsertakan otomatis:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project><Nullable>enable</Nullable> mengaktifkan nullable reference types, dan <ImplicitUsings>enable</ImplicitUsings> menyertakan using umum secara otomatis. Setiap property di atas diterjemahkan oleh MSBuild menjadi argumen compiler dan target build.
Pipeline CI harus menjalankan restore, build, dan test pada setiap perubahan. Contoh workflow GitHub Actions:
name: ci
on:
push:
branches: [main]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- run: dotnet restore
- run: dotnet build --no-restore -c Release
- run: dotnet test --no-build -c Release
- run: dotnet format --verify-no-changes --no-restoreWorkflow di atas berjalan otomatis saat ada push ke main atau pembukaan pull request. actions/setup-dotnet@v4 menyiapkan SDK di runner, dan dotnet format --verify-no-changes memastikan gaya kode konsisten. Dengan runs-on: ubuntu-latest, build berjalan di lingkungan yang sama setiap kali.
Source generator menulis kode tambahan saat kompilasi, berdasarkan kode yang sudah ada. Ini menghilangkan boilerplate yang berulang. Contoh generator sederhana menciptakan partial method:
[AutoNotify]
public partial class Pengguna
{
public string Nama { get; set; }
}public partial class Pengguna
{
private void OnNamaChanged()
{
Console.WriteLine($"Nama berubah menjadi {Nama}");
}
}Kode kedua tidak kalian tulis — dia dihasilkan compiler dari attribute [AutoNotify]. Ini contoh kekuatan Roslyn: compiler bukan hanya memeriksa kode, tapi juga bisa menulis kode.
Analyzer memeriksa kode untuk pola bermasalah saat kalian mengetik, bukan menunggu sampai runtime:
dotnet add package Microsoft.CodeAnalysis.NetAnalyzersAnalyzer ini memberi peringatan tentang pola seperti pemborosan alokasi dan anti-pattern async. Dengan TreatWarningsAsErrors, peringatan analyzer berubah menjadi error build — memaksa masalah diselesaikan, bukan diabaikan.
Untuk menjaga konsistensi di seluruh project, gunakan Directory.Build.props yang diterapkan ke semua project di bawahnya:
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>latest</LangVersion>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
</Project>Dengan file ini, semua project mewarisi pengaturan yang sama tanpa mengulang di tiap .csproj. Property <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild> membuat build reproducible — deterministik dan tidak bergantung pada waktu atau path build.
Praktik yang menjamin kualitas di setiap langkah:
dotnet format untuk gaya kode, diverifikasi di CI.dotnet build -warnaserror agar peringatan tidak menumpuk.dotnet test untuk memastikan tidak ada yang rusak.Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita membawa kode ke production: deployment dan cloud integration — Dockerizing aplikasi .NET, deployment ke Azure App Service, AWS, GCP, dan Kubernetes, runtime configuration untuk production, serta strategi blue-green, canary, dan rollback.