27 Ekim 2026 Salı

Récupérer 50 à 100 Go d'espace disque : Guide complet pour développeurs .NET, Jeux et Desktop




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 dossiers bin et obj à 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é :

🎮 Nos jeux

📱 Suivez notre studio




Hiç yorum yok:

Yorum Gönder