Récupérer 50 à 100 Go d'espace disque : Guide complet pour développeurs .NET, Jeux et Desktop
Tout développeur de logiciels et de jeux vidéo sur Windows connaît ce matin fatidique : vous démarrez votre station de travail, lancez votre IDE et Windows vous alerte qu'il reste moins de 2 Go d'espace libre sur votre SSD NVMe de 1 To.
Vous n'avez téléchargé aucun film lourd ni installé de nouveaux jeux de 100 Go. Où est donc passé cet espace ?
En tant que développeur de jeux indépendants et d'applications de bureau multiplateformes (** .NET 8/9**, MonoGame, Android et Windows Application Packaging / MSIX pour le Microsoft Store), j'ai enquêté sur cette crise de stockage. En exécutant une analyse automatisée sur mes répertoires de projets, j'ai découvert que plus de 68 Go étaient monopolisés par de simples artefacts de compilation temporaires, des archives d'anciens packages de publication et des caches NuGet.
Ce guide détaille les raisons de cette saturation, pourquoi nettoyer ces dossiers est 100 % sans risque, et fournit un outil clé en main en PowerShell et Batch pour récupérer instantanément des dizaines de gigaoctets.
1. D'où vient la saturation du disque ?
Lors de la compilation de solutions ciblant le Desktop, le Mobile (Android) et le Microsoft Store, les compilateurs dupliquent les fichiers binaires et les ressources à chaque étape :
flowchart TD
subgraph "Espace Projets"
Code["Code source (.cs, .xaml, .json)\n(Protégé - Quelques Mo)"]
Assets["Ressources brutes (PNG, OGG, Shaders)\n(Protégé)"]
Git["Historique .git\n(Protégé)"]
BinObj["Dossiers bin & obj\n(DLLs intermédiaires, symboles)\n[30 - 60 Go]"]
AppPackages["WAP / MSIX AppPackages\n(Historique .msixbundle, .msixupload)\n[5 - 20 Go]"]
end
subgraph "Caches Globaux"
NuGet["%USERPROFILE%\\.nuget\\packages\n(Cache global NuGet)\n[10 - 20 Go]"]
Temp["%LOCALAPPDATA%\\Temp\n(Fichiers temporaires)\n[3 - 10 Go]"]
end
style BinObj fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style AppPackages fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style NuGet fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
style Temp fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
Coupable A : Les dossiers bin et obj (30 à plus de 60 Go)
Chaque projet C# génère deux dossiers :
obj/(Sortie intermédiaire) : Conserve les états de compilation incrémentielle et les éléments propres à chaque plateforme. Pour Android, ce dossier atteint facilement 3 à 6 Go par projet.bin/(Sortie binaire) : Contient les exécutables et toutes les ressources copiées via<CopyToOutputDirectory>. Si 10 projets référencent un dossier de contenu de 500 Mo, ce dernier est copié 10 fois (5 Go consommés pour une seule solution).
Coupable B : Les dossiers AppPackages de Microsoft Store (5 à plus de 20 Go)
Lors de la création de packages MSIX/WAP pour le Store, Visual Studio génère des fichiers .msixbundle et .msixupload (pesant entre 800 Mo et 2,5 Go par version). Visual Studio ne supprime jamais les versions obsolètes.
Coupable C : Le cache global NuGet (10 à plus de 20 Go)
Situé dans %USERPROFILE%\.nuget\packages, il conserve chaque version de chaque package téléchargé depuis l'installation de votre machine.
Coupable D : Les fichiers temporaires Windows (3 à 10 Go)
Dans %LOCALAPPDATA%\Temp, les compilateurs abandonnent des milliers de fragments de fichiers temporaires au fil des mois.
2. Garantie de sécurité : Zéro risque pour vos données
| Protégé (JAMAIS supprimé) | Supprimable sans risque (100 % régénérable) |
|---|---|
Code source : .cs, .xaml, .cpp, .json |
Fichiers objets de compilation (obj/) |
Projets et solutions : .sln, .csproj, .wapproj |
Binaires et DLL compilés (bin/) |
Dépôts Git : Dossier .git/, branches et commits |
Anciens packages de distribution (AppPackages/) |
| Ressources brutes : Textures, sons, shaders | Packages NuGet mis en cache (.nuget\packages) |
Certificats : .pfx, StoreAssociation.xml |
Fichiers de travail temporaires (%LOCALAPPDATA%\Temp) |
Que se passe-t-il lors de la réouverture de l'IDE ?
Dès que vous cliquez sur Build ou Rebuild, Visual Studio et le SDK .NET recréent immédiatement les dossiersbinetobjà partir de votre code source.
3. La solution automatisée : Scripts PowerShell et Batch
Script PowerShell (Clean-DevDiskSpace.ps1)
Enregistrez ce script dans _tools/Clean-DevDiskSpace.ps1 à la racine de vos projets :
<#
.SYNOPSIS
Outil universel de nettoyage d'espace disque pour développeurs.
#>
[CmdletBinding()]
param (
[switch]$Force,
[switch]$ScanOnly,
[switch]$SkipNuget,
[switch]$SkipTemp,
[string]$RootPath = ""
)
if ([string]::IsNullOrWhiteSpace($RootPath)) {
if ($PSScriptRoot) { $RootPath = (Join-Path $PSScriptRoot "..") } else { $RootPath = Get-Location }
}
$resolvedRoot = (Resolve-Path $RootPath -ErrorAction SilentlyContinue).Path
if ([string]::IsNullOrWhiteSpace($resolvedRoot) -or $resolvedRoot -in @("C:\", "C:", "\", "/")) {
Write-Host "ARRÊT DE SÉCURITÉ : Répertoire racine ou non valide !" -ForegroundColor Red
exit 1
}
$systemDrive = Get-PSDrive -Name C
$freeGBBefore = [math]::Round($systemDrive.Free / 1GB, 2)
Write-Host "Espace libre actuel sur C: $freeGBBefore Go" -ForegroundColor Yellow
$binObjDirs = Get-ChildItem -Path $resolvedRoot -Recurse -Directory -Force -ErrorAction SilentlyContinue |
Where-Object { $_.Name -in @('bin', 'obj') }
$appPackageDirs = Get-ChildItem -Path $resolvedRoot -Recurse -Directory -Filter "AppPackages" -Force -ErrorAction SilentlyContinue
if ($ScanOnly) { Write-Host "Fin de l'analyse." -ForegroundColor Yellow; return }
if (-not $Force) {
$prompt = Read-Host "Confirmer le nettoyage sécurisé ? (O/N)"
if ($prompt -notin @('O', 'o', 'Y', 'y')) { return }
}
$binObjDirs | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} }
$appPackageDirs | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} }
if (-not $SkipTemp) { Get-ChildItem -Path [System.IO.Path]::GetTempPath() -Force -ErrorAction SilentlyContinue | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} } }
if (-not $SkipNuget) { try { $null = dotnet nuget locals all --clear 2>&1 } catch {} }
$freeGBAfter = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 2)
$freedTotal = [math]::Round($freeGBAfter - $freeGBBefore, 2)
Write-Host "`nNETTOYAGE TERMINÉ ! Espace récupéré : +$freedTotal Go" -ForegroundColor Green
Lanceur Batch (clean-disk-space.bat)
@echo off
setlocal
title Nettoyage Disque Développeur
cd /d "%~dp0"
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0_tools\Clean-DevDiskSpace.ps1" %*
pause
4. Résultats concrets sur le terrain
- Espace libre avant : 1,35 Go (Alerte rouge)
- Espace libre après : 53,80 Go
- Gain net : +52,45 Go récupérés en 3 minutes.
À propos d'Arar Games et de nos jeux
Découvrez nos créations et rejoignez notre communauté :
- 🌐 Site officiel : https://www.mayhemcorporation.com
🎮 Nos jeux
- Blocked: Pixel Panzer : Combat de chars rétro arcade avec météo dynamique et combats de boss.
Google Play (Android et PC) - PaintTrek : Puzzles colorés et action créative de peinture en pixels.
Google Play | Microsoft Store (PC et Xbox) - Space Dodger : Jeu d'arcade et d'esquive spatiale à réflexes intenses.
Google Play
📱 Suivez notre studio
- 🎵 TikTok : https://www.tiktok.com/@arargamesstudio
- 📸 Instagram : https://www.instagram.com/arargamesstudio
- 🐦 X (Twitter) : https://x.com/arargamesstudio
- 📺 YouTube : https://www.youtube.com/@koreaaria
- 🧵 Threads : https://www.threads.net/@arargamesstudio
- 📘 Facebook : https://www.facebook.com/arargamesstudio
Hiç yorum yok:
Yorum Gönder