AZFW0108: Bundle d’extensions non récupéré avant la compilation

Item Valeur
Identificateur de la règle AZFW0108
Category SDK
Severity Warning

Cause

Cet avertissement du SDK se produit lorsqu’un projet utilisant Azure.Functions.Sdk est généré sans que le hook post-restauration du bundle d’extensions soit invoqué. Le hook post-restauration s’exécute lorsque le projet de fonction est directement restauré. La restauration d’un fichier solution ou d’un projet de parcours n’invoquera pas le hook post-restauration.

Lorsque le hook post-restauration n’est pas exécuté avec succès, le SDK des fonctions tente d’exécuter le hook avant la compilation. Cependant, étant donné que le hook post-restauration effectue lui-même une autre restauration NuGet, le fait qu’il s’exécute dans le cadre de la génération (et non de la restauration) peut poser des problèmes selon l’environnement de génération. Il est fortement recommandé de suivre les étapes ici pour garantir que le hook post-restauration s’exécute dans le cadre de dotnet restore.

Description de la règle

Le bundle d’extensions est une charge utile déployée en même temps qu’une application de fonction, qui contient les extensions nécessaires à l’exécution des fonctions pour activer les déclencheurs et liaisons de l’application de fonctions.

Comment résoudre le problème

Option 1 : Restaurer directement la fonction csproj

Le hook post-restauration sera exécuté lorsque le projet Functions est restauré directement.

dotnet restore MyFunctionApp.csproj

Option 2 : Ajouter un crochet post-restauration pour la cible de restauration.

La Restore cible s’exécute uniquement sur le projet exact ciblé par dotnet restore — elle n’est pas transmise aux projets référencés. Cela signifie que le hook post-restauration de l’application de fonction (qui génère le projet d’extension) n’est jamais invoqué lors de la restauration d’une solution ou d’un projet de parcours.

Pour corriger cela, ajoutez la cible suivante afin qu’elle soit incluse dans le projet en cours de restauration. Cette cible parcourt récursivement les éléments ProjectReference, jusqu’à atteindre finalement l’application de fonction où GenerateFunctionsExtensionProject est défini.

<Target Name="_RecursiveGenerateFunctionsExtensionProject" AfterTargets="Restore">
  <MSBuild Projects="@(ProjectReference)" Targets="_RecursiveGenerateFunctionsExtensionProject"
    SkipNonexistentProjects="true" SkipNonexistentTargets="true" />
  <MSBuild Projects="@(ProjectReference)" Targets="GenerateFunctionsExtensionProject"
    SkipNonexistentProjects="true" SkipNonexistentTargets="true" />
</Target>

L’endroit où placer cette cible dépend de la manière dont vous restaurez :

  • Fichiers de solution (dotnet restore MySolution.sln) : Ajoutez la cible à un Directory.Solution.targets fichier à côté de votre fichier de solution.
  • Projet de traversée unique (dotnet restore dirs.proj) : Ajouter la cible à Directory.Build.targets, en supposant dirs.proj qu’elle soit importée (par défaut). Si vous avez une chaîne de projets de traversée (par exemple, dirs.proj → Directory.Build.targets → MyFunctionApp.csproj), chaque src/dirs.proj de la chaîne doit avoir cette cible — soit directement, soit via son propre dirs.proj.

Quand supprimer les avertissements

La suppression n’est pas recommandée. Suivez les étapes ici pour corriger l’avertissement.