AZFW0108: Il bundle di estensioni non è stato ripristinato prima della compilazione

Item Value
ID regola AZFW0108
Categoria Sdk
Severity Warning

Cause

Questo avviso SDK si verifica quando un progetto che utilizza Azure.Functions.Sdk viene compilato senza che venga invocato il hook del bundle di estensione post-ripristino. L'hook successivo al ripristino viene eseguito quando il progetto di funzioni viene ripristinato direttamente. Ripristinare un file di soluzione o un progetto di attraversamento non attiverà il hook post-ripristino.

Quando l'hook post-ripristino non viene eseguito correttamente, l'SDK di Functions cercherà di eseguire l'hook prima della build. Tuttavia, poiché l'hook post-restore esegue autonomamente un ulteriore ripristino NuGet, la sua esecuzione durante la build (anziché durante il restore) può causare problemi, a seconda dell'ambiente di build. Si consiglia vivamente di seguire i passaggi qui per garantire che l'hook post-ripristino venga eseguito come parte di dotnet restore.

Descrizione regola

Il pacchetto di estensioni è un pacchetto distribuito insieme a un'app per le funzioni, che contiene le estensioni necessarie al runtime delle funzioni per abilitare i trigger e i binding dell'app per le funzioni.

Procedura di correzione

Opzione 1: Ripristinare direttamente la funzione csproj

L'hook di post-ripristino verrà eseguito quando il progetto Functions viene ripristinato direttamente.

dotnet restore MyFunctionApp.csproj

Opzione 2: aggiungere un hook post-ripristino per la destinazione di ripristino.

Il Restore target si attiva solo sul progetto esatto contro cui dotnet restore è rivolto — non si propaga ai progetti di riferimento. Ciò significa che il hook post-ripristino dell'app funzione (che genera il progetto di estensione) non viene mai invocato durante il ripristino di una soluzione o di un progetto di attraversamento.

Per risolvere questo problema, aggiungi il seguente obiettivo affinché venga incluso nel progetto in fase di ripristino. Questa destinazione attraversa in modo ricorsivo gli elementi ProjectReference, fino a raggiungere l'app per le funzioni in cui è definito GenerateFunctionsExtensionProject.

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

Dove posizionare questo bersaglio dipende da come restauri:

  • File di soluzione (dotnet restore MySolution.sln): Aggiungi il target a un Directory.Solution.targets file accanto al file della soluzione.
  • Progetto a singolo attraversamento (dotnet restore dirs.proj): Aggiungi il target a Directory.Build.targets, assumendo dirs.proj che lo importi (il valore predefinito). Se hai una catena di progetti di attraversamento (ad esempio, dirs.proj → src/dirs.proj → MyFunctionApp.csproj), ognuno dirs.proj della catena deve avere questo obiettivo — direttamente o tramite il proprio Directory.Build.targets.

Quando sopprimere gli avvertimenti

La soppressione non è raccomandata. Segui i passaggi qui per correggere l'avvertimento.