[GUIDE] Ressources développeurs .NET, VS Code, PowerShell, GitHub

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

[GUIDE] Ressources développeurs .NET, VS Code, PowerShell, GitHub

Message par ayi »

[GUIDE] Ressources developpeurs .NET, VS Code, PowerShell, GitHub



Guide complet des outils, frameworks et bonnes pratiques pour les developpeurs de l’ecosysteme Microsoft. De .NET 9 a GitHub Copilot, en passant par PowerShell et Azure DevOps.





1. .NET & C# — L’ecosysteme moderne


.NET 9 — Nouveautes majeures


.NET 9 (novembre 2024) apporte des ameliorations significatives :



  • Performances : amelioration du JIT, du GC (Garbage Collector) et du runtime

  • AOT natif : compilation Ahead-of-Time pour les API minimales, applications console et workers

  • Serialisation JSON : System.Text.Json ameliore avec le support des types supplementaires

  • LINQ : nouvelles methodes CountBy, AggregateBy, Index

  • Bibliotheque de base : TimeProvider pour les tests temporels, SearchValues pour la recherche optimisee


// Exemple .NET 9 : CountBy et AggregateBy
var mots = new[] { "bonjour", "monde", "bonjour", "france", "monde", "monde" };
foreach (var (mot, count) in mots.CountBy(m => m))
{
Console.WriteLine($"{mot} : {count} fois");
}

ASP.NET Core











































FrameworkUsageQuand l’utiliser
API minimaleAPI REST legeresMicroservices, API simples
API ControllersAPI REST completesAPI complexes avec conventions
MVCSites web avec vues RazorApplications web traditionnelles
Blazor ServerSPA cote serveurApps interactives, connexion permanente
Blazor WebAssemblySPA cote clientApps offline, distribution CDN
Blazor United (.NET 8+)Rendu hybride SSR + interactifNouveau standard recommande

// API minimale .NET 9
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<AppDbContext>();
var app = builder.Build();

app.MapGet("/api/produits", async (AppDbContext db) =>
await db.Produits.ToListAsync());

app.MapPost("/api/produits", async (Produit produit, AppDbContext db) =>
{
db.Produits.Add(produit);
await db.SaveChangesAsync();
return Results.Created($"/api/produits/{produit.Id}", produit);
});

app.Run();

.NET MAUI — Applications cross-platform


.NET MAUI (Multi-platform App UI) permet de creer des applications natives pour Windows, macOS, Android et iOS avec un seul code C# :


// Page MAUI simple
public class MainPage : ContentPage
{
public MainPage()
{
Content = new VerticalStackLayout
{
new Label { Text = "Bienvenue sur MAUI !", FontSize = 24 },
new Button { Text = "Cliquez-moi", Command = new Command(() =>
DisplayAlert("Info", "MAUI fonctionne !", "OK")) }
};
}
}

Entity Framework Core


// Migration EF Core
// 1. Ajouter une migration
// dotnet ef migrations add InitialCreate
// 2. Appliquer a la base de donnees
// dotnet ef database update

public class AppDbContext : DbContext
{
public DbSet<Produit> Produits => Set<Produit>();
public DbSet<Categorie> Categories => Set<Categorie>();

protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("Server=.;Database=MaBase;Trusted_Connection=true;TrustServerCertificate=true;");
}

Migration .NET Framework vers .NET moderne



  1. Utilisez l’outil upgrade-assistant :


dotnet tool install -g upgrade-assistant
upgrade-assistant upgrade ./MonProjet.sln


  1. Analysez les incompatibilites avec apiport (API Portability Analyzer)

  2. Migrez les packages NuGet System.Web vers les equivalents ASP.NET Core

  3. Remplacez Web.config par appsettings.json

  4. Convertissez Global.asax vers Program.cs / Startup.cs




2. Visual Studio — Productivite maximale


Raccourcis essentiels




























































RaccourciAction
Ctrl+Maj+BCompiler la solution
F5 / Ctrl+F5Demarrer avec/sans debogage
Ctrl+.Actions rapides et refactoring
Ctrl+TRechercher fichiers, types, membres
Ctrl+Maj+FRechercher dans tous les fichiers
F12Aller a la definition
Alt+F12Definition en apercu (peek)
Ctrl+K, Ctrl+DFormater le document
Ctrl+K, Ctrl+C/UCommenter/Decommenter
Ctrl+R, Ctrl+RRenommer (refactoring)
Maj+Alt+EntreePlein ecran
Ctrl+Maj+VHistorique du presse-papiers

Extensions indispensables



  • ReSharper : analyse de code avancee, refactoring puissant

  • CodeMaid : nettoyage et organisation du code

  • Fine Code Coverage : couverture de code gratuite

  • GitHub Copilot : suggestions IA en temps reel

  • Markdown Editor : edition Markdown avec apercu

  • SlowCheetah : transformations de fichiers de configuration


Debogage avance


// Breakpoint conditionnel : clic droit sur le breakpoint > Conditions
// Expression : produit.Prix > 100 && produit.Stock == 0

// Point de trace (Tracepoint) : affiche un message sans arreter l'execution
// Message : "Produit {produit.Nom} - Prix: {produit.Prix}"

// DebuggerDisplay pour un affichage personnalise dans le debogueur
[DebuggerDisplay("{Nom} (Id={Id}, Prix={Prix}€)")]
public class Produit
{
public int Id { get; set; }
public string Nom { get; set; }
public decimal Prix { get; set; }
}


  • IntelliTrace (Enterprise) : enregistrement de l’historique d’execution pour revenir en arriere dans le debogage

  • Profiling : Debogage > Profileur de performances > choisir CPU, memoire, base de donnees




3. VS Code — L’editeur incontournable


Extensions Microsoft recommandees
























































ExtensionDescription
C# Dev KitIntelliSense, debogage, tests pour C#
PowerShellEdition et debogage PowerShell
Azure ToolsPack complet pour Azure (Functions, App Service, Storage…)
GitHub CopilotAutocompletion IA
GitHub Copilot ChatChat IA integre dans l’editeur
Remote - SSHDevelopper sur un serveur distant
Remote - WSLDevelopper dans WSL
Dev ContainersDevelopper dans des conteneurs Docker
PythonSupport complet Python
Thunder ClientClient REST API integre
Live ShareCollaboration en temps reel

settings.json optimise


{
"editor.fontSize": 14,
"editor.fontFamily": "'Cascadia Code', 'Fira Code', Consolas, monospace",
"editor.fontLigatures": true,
"editor.formatOnSave": true,
"editor.minimap.enabled": false,
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"editor.stickyScroll.enabled": true,
"editor.inlineSuggest.enabled": true,
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.fontFamily": "'Cascadia Mono', Consolas",
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"workbench.colorTheme": "Default Dark Modern",
"git.autofetch": true,
"git.confirmSync": false,
"omnisharp.enableRoslynAnalyzers": true,
"dotnet.defaultSolution": "auto",
"[csharp]": {
"editor.defaultFormatter": "ms-dotnettools.csharp"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}

Multi-root Workspaces


Creez un fichier .code-workspace pour regrouper plusieurs projets :


{
"folders": [
{ "path": "./frontend", "name": "Frontend React" },
{ "path": "./backend", "name": "API .NET" },
{ "path": "./shared", "name": "Bibliotheque partagee" }
],
"settings": {
"dotnet.defaultSolution": "backend/MonAPI.sln"
}
}

Remote Development



  • SSH : Ctrl+Maj+P > “Remote-SSH: Connect to Host” — developpez sur un serveur Linux distant

  • WSL : ouvrez un dossier WSL directement — code /mnt/c/projets/monapp depuis WSL

  • Dev Containers : ajoutez un .devcontainer/devcontainer.json pour un environnement reproductible




4. PowerShell — Automatisation et scripts


Scripts d’automatisation courants


# Inventaire des logiciels installes
Get-CimInstance -ClassName Win32_Product |
Select-Object Name, Version, Vendor |
Sort-Object Name |
Export-Csv "$env:USERPROFILE\Desktop\logiciels.csv" -NoTypeInformation -Encoding UTF8

# Nettoyage des fichiers temporaires
$dossiers = @("$env:TEMP", "$env:SystemRoot\Temp", "$env:SystemRoot\Prefetch")
foreach ($dossier in $dossiers) {
Get-ChildItem $dossier -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
}
Write-Host "Nettoyage termine." -ForegroundColor Green

# Surveillance d'un service avec redemarrage automatique
$service = "Spooler"
if ((Get-Service $service).Status -ne 'Running') {
Start-Service $service
Send-MailMessage -To "[email protected]" -From "[email protected]" `
-Subject "Service $service redemarre" -SmtpServer "smtp.example.com"
}

Modules essentiels
















































ModuleUsageInstallation
AzGestion AzureInstall-Module Az
Microsoft.GraphAPI Microsoft 365Install-Module Microsoft.Graph
ActiveDirectoryGestion AD DSFonctionnalite RSAT
ImportExcelLire/ecrire Excel sans OfficeInstall-Module ImportExcel
PesterTests unitaires PowerShellInstall-Module Pester
PSScriptAnalyzerLinter PowerShellInstall-Module PSScriptAnalyzer
Terminal-IconsIcones dans le terminalInstall-Module Terminal-Icons

Profil PowerShell


# Editer le profil : notepad $PROFILE
# Contenu recommande :

# Modules
Import-Module Terminal-Icons
Import-Module posh-git

# Alias utiles
Set-Alias -Name g -Value git
Set-Alias -Name k -Value kubectl
Set-Alias -Name tf -Value terraform

# Fonctions personnalisees
function which($name) { Get-Command $name -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Path }
function mkcd($path) { New-Item -ItemType Directory -Path $path -Force; Set-Location $path }
function tail { Get-Content -Tail 20 -Wait @args }

# Prompt personnalise avec Oh My Posh
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\paradox.omp.json" | Invoke-Expression

Pester — Tests unitaires


# Fichier : Get-Factorielle.Tests.ps1
Describe "Get-Factorielle" {
It "Retourne 1 pour 0" {
Get-Factorielle -Nombre 0 | Should -Be 1
}
It "Retourne 120 pour 5" {
Get-Factorielle -Nombre 5 | Should -Be 120
}
It "Lance une erreur pour un nombre negatif" {
{ Get-Factorielle -Nombre -1 } | Should -Throw
}
}
# Executer : Invoke-Pester ./Get-Factorielle.Tests.ps1 -Output Detailed



5. GitHub & GitHub Copilot


Git workflow recommande


# Creer une branche feature
git checkout -b feature/ma-fonctionnalite

# Travailler, committer regulierement
git add .
git commit -m "feat: ajout du module d'authentification"

# Pousser et creer une Pull Request
git push -u origin feature/ma-fonctionnalite
gh pr create --title "feat: module authentification" --body "Description detaillee..."

# Apres la revue de code, fusionner
gh pr merge --squash --delete-branch

Conventions de commit (Conventional Commits) :



  • feat: — nouvelle fonctionnalite

  • fix: — correction de bug

  • docs: — documentation

  • refactor: — refactoring sans changement fonctionnel

  • test: — ajout ou modification de tests

  • chore: — maintenance (dependances, CI, config)


GitHub Actions — CI/CD


# .github/workflows/dotnet.yml
name: .NET CI/CD

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'

- name: Restaurer les dependances
run: dotnet restore

- name: Compiler
run: dotnet build --no-restore --configuration Release

- name: Tests
run: dotnet test --no-build --configuration Release --verbosity normal
--collect:"XPlat Code Coverage"

- name: Publier
if: github.ref == 'refs/heads/main'
run: dotnet publish -c Release -o ./publish

- name: Deployer sur Azure
if: github.ref == 'refs/heads/main'
uses: azure/webapps-deploy@v3
with:
app-name: 'mon-api-production'
publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
package: ./publish

GitHub Copilot — Prompts efficaces



  • Commentaire descriptif : ecrivez un commentaire clair avant le code, Copilot generera l’implementation

  • Chat inline : Ctrl+I pour demander une modification dans le contexte du fichier

  • Commandes slash :

    • /explain — expliquer le code selectionne

    • /fix — corriger un bug

    • /tests — generer des tests unitaires

    • /doc — generer la documentation

    • @workspace — poser une question sur tout le projet




GitHub Codespaces


Environnement de developpement cloud complet base sur VS Code :



  • Disponible en quelques secondes depuis n’importe quel depot

  • Configuration via .devcontainer/devcontainer.json

  • 60 heures/mois gratuites pour les comptes personnels

  • Forwarding de ports automatique pour les applications web




6. SQL Server


Requetes d’optimisation essentielles


-- Top 10 des requetes les plus couteuses en CPU
SELECT TOP 10
qs.total_worker_time / qs.execution_count AS avg_cpu_time,
qs.execution_count,
SUBSTRING(qt.text, (qs.statement_start_offset/2) + 1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset) / 2) + 1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY avg_cpu_time DESC;

-- Index manquants suggeres par SQL Server
SELECT
d.name AS base_de_donnees,
OBJECT_NAME(mid.object_id, mid.database_id) AS table_name,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns,
migs.avg_user_impact AS amelioration_estimee_pct
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
JOIN sys.databases d ON mid.database_id = d.database_id
ORDER BY migs.avg_user_impact DESC;

Sauvegarde et restauration


-- Sauvegarde complete
BACKUP DATABASE MaBase TO DISK = 'C:\Backups\MaBase_Full.bak'
WITH COMPRESSION, CHECKSUM, INIT;

-- Restauration
RESTORE DATABASE MaBase FROM DISK = 'C:\Backups\MaBase_Full.bak'
WITH RECOVERY, REPLACE,
MOVE 'MaBase' TO 'C:\Data\MaBase.mdf',
MOVE 'MaBase_Log' TO 'C:\Data\MaBase_log.ldf';



7. Azure DevOps


Pipeline YAML type


# azure-pipelines.yml
trigger:
branches:
include:
- main
- develop

pool:
vmImage: 'windows-latest'

variables:
buildConfiguration: 'Release'
dotnetVersion: '9.0.x'

stages:
- stage: Build
jobs:
- job: BuildAndTest
steps:
- task: UseDotNet@2
inputs:
version: $(dotnetVersion)

- script: dotnet restore
displayName: 'Restaurer les packages'

- script: dotnet build --configuration $(buildConfiguration)
displayName: 'Compiler'

- script: dotnet test --configuration $(buildConfiguration) --logger trx --results-directory $(Agent.TempDirectory)
displayName: 'Executer les tests'

- task: PublishTestResults@2
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '$(Agent.TempDirectory)/**/*.trx'

- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'

- stage: Deploy
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: DeployProduction
environment: 'production'
strategy:
runOnce:
deploy:
steps:
- script: echo "Deploiement en production..."
displayName: 'Deployer'

Azure DevOps — Composants
































ComposantDescription
ReposDepots Git avec Pull Requests et politiques de branche
PipelinesCI/CD avec YAML ou editeur visuel
BoardsGestion de projet Agile (Scrum, Kanban)
ArtifactsFlux NuGet, npm, Maven prives
Test PlansTests manuels et exploratoires



8. Outils complementaires


NuGet — Gestion des packages


# Ajouter un package
dotnet add package Newtonsoft.Json
dotnet add package Serilog.AspNetCore --version 8.0.0

# Lister les packages obsoletes
dotnet list package --outdated

# Mettre a jour tous les packages
dotnet outdated --upgrade # necessite dotnet-outdated-tool

Docker pour developpeurs .NET


# Dockerfile multi-stage pour une API .NET
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY --from=build /app ./
EXPOSE 8080
ENTRYPOINT ["dotnet", "MonAPI.dll"]

# Construire et executer
docker build -t mon-api .
docker run -d -p 8080:8080 --name mon-api-container mon-api

Windows Terminal & WSL2



  • Installez Windows Terminal depuis le Microsoft Store

  • Ajoutez des profils pour PowerShell, CMD, WSL (Ubuntu), Azure Cloud Shell

  • WSL2 : wsl --install pour installer Ubuntu, puis wsl --set-default-version 2

  • Interoperabilite : accedez aux fichiers Windows depuis WSL via /mnt/c/ et aux fichiers WSL depuis Windows via \\wsl$\




9. Certifications developpeur Microsoft






































CertificationSujetNiveau
AZ-204Developpement de solutions AzureAssocie
AZ-400Solutions DevOps AzureExpert
MS-600Applications et solutions Microsoft 365Associe
AI-102Solutions IA AzureAssocie
DP-420Azure Cosmos DBSpecialite

Ressources gratuites :



  • Microsoft Learn : parcours d’apprentissage gratuits et interactifs

  • .NET Learn : tutoriels debutants a avances

  • Microsoft Virtual Training Days : sessions gratuites avec bon d’examen parfois inclus




10. Tableau recapitulatif des commandes


dotnet CLI


dotnet new webapi -n MonAPI           # Creer un projet API
dotnet new blazor -n MonApp # Creer un projet Blazor
dotnet run # Executer le projet
dotnet watch # Hot reload en developpement
dotnet build -c Release # Compiler en mode Release
dotnet test # Lancer les tests
dotnet publish -c Release -o ./dist # Publier pour le deploiement
dotnet ef migrations add NomMigration # Creer une migration EF
dotnet ef database update # Appliquer les migrations
dotnet tool install -g dotnet-ef # Installer l'outil EF globalement

Git


git log --oneline --graph -20         # Historique graphique
git stash / git stash pop # Mettre de cote / restaurer
git rebase main # Rebaser sur main
git cherry-pick <hash> # Appliquer un commit specifique
git bisect start # Trouver un commit fautif
git reflog # Historique de toutes les actions

Azure CLI (az)


az login                              # Se connecter
az group create -n MonRG -l westeurope # Creer un resource group
az webapp create -g MonRG -p MonPlan -n MonApp # Creer une Web App
az webapp deploy -g MonRG -n MonApp --src-path ./dist.zip # Deployer
az acr build --registry MonACR --image monapp:v1 . # Build image

PowerShell (pwsh)


Get-Command *-Service*                # Trouver des commandes
Get-Help Get-Process -Examples # Aide avec exemples
Get-Process | Sort-Object CPU -Desc | Select-Object -First 10 # Top CPU
Measure-Command { script.ps1 } # Mesurer le temps d'execution
Test-Connection google.com -Count 4 # Equivalent de ping




Liens utiles : learn.microsoft.com | github.com/dotnet | devblogs.microsoft.com



Pour un accompagnement professionnel : ayinedjimi-consultants.fr

Répondre

Revenir à « .NET & C# »