Comment faire en sorte que vos pipelines Azure DevOps respectent le fichier global.json ?

Voici une situation qui peut être embrassante si vous devez utiliser un fichier global.json avec Azure Pipeline : la tâche DotNetCoreCLI@2 n'utilise pas votre fichier global.json.

Ce problème se produit si le fichier global.json ne se trouve pas à la racine du repository.

Celui-ci a déjà été reporté sur GitHub [BUG]: DotNetCoreCLI@2 global.json lookup is hardcoded to repository root · Issue #21523 · microsoft/azure-pipelines-tasks.

Malheureusement, cette issue date de décembre, et n'a toujours pas été résolue.

Il existe cependant une solution de contournement qui n'est pas documentée. Elle consiste à utiliser la propriété workingDirectory de la tâche DotNetCoreCLI@2. En affectant à celle-ci le dossier dans lequel se trouve le fichier global.json, on résout le problème.

Exemple :


- task: DotNetCoreCLI@2
  displayName: 'Compilation'
  inputs:
    command: build
    projects: $(solution)
    workingDirectory: '$(Build.SourcesDirectory)\Sources\'


Jérémy Jeanson

La configuration Blazor qui casse l'authentification Windows !

Je vous propose aujourd'hui de présenter une situation qui m'a fait perdre un certain temps ;).

Je dispose d'un projet Blazor qui utilise l'authentification Windows avec succès depuis quelques années. Lors d'une récente évolution, j'ai été amené à lui ajouter une seconde forme d'authentification.

Tout va bien jusqu'au moment où l'authentification Windows se met à ne plus fonctionner. Que le navigateur reconnaisse le site comme étant un site de confiance ou non. L'utilisateur ne reçoit plus de demande d'authentifications.

Le problème est lié à l'appel de la méthode .AllowAnonymous() après le maping des composants  Blazor. L'utilisateur peut être anonyme. La demande de challenge ne se fait plus non plus.

Exemple de code :


app.MapRazorComponents<App>()
  .AddInteractiveServerRenderMode()
  .AllowAnonymous();

Pour résoudre le problème, il faut donc mettre en place une logique qui n'utilise la méthode AllowAnonymous() qu'à partir du moment où l'authentification Windows n'est pas requise.

Jérémy Jeanson

Comment utiliser Visual Studio 2026 avec les builds Azure DevOps ?

Vous souhaitez utiliser Visual Studio 2026, et ses builds tools dans votre CI / CD avec Azure Devops, mais cela ne fonctionne pas ?

Pas de panique, ce scénario est parfaitement supporté. Il suffit de mettre à jour vos agents de build avec une version 4.266.2 ou supérieure .

Petit lien ver la Release v4.266.2 · microsoft/azure-pipelines-agent

Features

  • Add Visual Studio 2026 (version 18.0) support to capability detection (#5406)
Jérémy Jeanson

NU1510, le warning de .net 10 que vous allez apprendre à aimer !

Pour débuter cette nouvelle année, je souhaite vous parler d’un warning que j’affectionne tout particulièrement.

Avant d’aller plus loin, non je ne suis pas masochiste. J’e n’aime pas particulièrement les warnings, mais j’aime les résoudre. Chaque warning résolu permet d’éviter un futur problème.

Avec .net 10, un nouveau warning a fait son apparition. Le warning référencé NU1510. Celui-ci met en avant les projets qui ont des références inutiles. Il met aussi en avant la référence inutile.

Quand on aime les projets propres, c’est un must.

Petite subtilité qui me fait tout particulièrement apprécier ce warning : celui-ci met aussi en avant les dépenses transitives qui sont référencées manuellement (dans le petit monde .net on perle souvent de dépendances indirectes au lieu de dépenses transitives). Ce type de référence se produit souvent quand on souhaite forcer une montée de version suite à la découverte d’une faille sur une dépendance transitive. Quand la dépendance directe est mise à jour, et qu’elle cible la dernière version de la dépendance transitive, le warning apparait. J’adore !

Jérémy Jeanson

Pourquoi les architectures monolithiques sont-elles à la mode ?

Bienvenue en 2025 ! Année qui sonne le glas des architectures de microservices au profit des monolithes.

Attention : avant de me faire traiter de troll, j’annonce clairement la couleur. L’idée de cet article n’est pas de troller, mais d’affirmer un fait que nous sommes nombreux à dénoncer, et qui ne date malheureusement pas d’hier. Le microservice, ce n’est pas la panacée, et cela peut couter très cher (performances, complexité de déploiement, coûts d’exploitation). Si vous ne voyez pas ce que je dénonce, réfléchissez à ces applications réparties en 5 ou 6 conteneurs, avec presque autant de sidecars, et de conteneurs d’initialisation. On parle aussi des x frameworks pour simplifier la configuration, et l’orchestration alors que l’on utilise certainement kubernetes ? On ajoutera de l’Open Id Connect, ou toute autre solution de STS (Security Token Service) ? Les 10 repos Git pour un seul produit ?

Depuis que des sociétés comme Amazon Prime Video ont annoncé l’abandon des microservices, certains architectes ouvrent enfin les yeux. Dommage qu’il ait fallu attendre aussi longtemps.

Un nouveau mouvement émerge : l’adoption des architectures monolithiques.

Oui « monolitique ». Le mot a été lâché. Nos ayatollahs des microservices ne semblent pas avoir trouvé mieux. L’architecture monolithique qui était autrefois l’ennemie jurée devient un buzz word (pas encore au point de concurrencer l’IA, n’ayez crainte).

Il y a aussi une variante que j’aime beaucoup : « le monolithique modulaire ».

Plus sérieusement : ce que l’on veut, ce n’est pas du monolithique. On ne veut pas d'un nième tas de code spaghettis. On veut que les développeurs, et architectes fassent du KISS, du SOLID, du DRY, du YAGNI. En fait, on vous propose simplement de revenir aux solutions n tiers, avec tous les raffinements des technologies de développement modernes.

Conclusion

S’il vous plait, ne me parlez plus d’architecture monolithique. Parlez de belles solutions avec n tiers propres, évolutifs, et clairement définis (petit rappel : "n" peut être égal à 1).

Merci Amazon !

Jérémy Jeanson