AZFW0108: Das Erweiterungspaket wurde vor dem Build nicht wiederhergestellt

Element Wert
Regel-ID AZFW0108
Kategorie Sdk
Severity Warning

Ursache

Diese SDK-Warnung tritt auf, wenn ein Projekt mit Azure.Functions.Sdk gebaut wird, ohne dass der Erweiterungsbundle-Post-Restore-Hook aufgerufen wird. Der Post-Restore-Hook wird ausgeführt, wenn das Funktionsprojekt direkt wiederhergestellt wird. Das Wiederherstellen einer Lösungsdatei oder eines Durchlaufprojekts ruft den Nach-Wiederherstellungs-Hook nicht auf.

Wenn der Post-Restore-Hook nicht erfolgreich ausgeführt wurde, versucht das Functions SDK, den Hook vor dem Build auszuführen. Da der Post-Restore-Hook jedoch selbst eine weitere Nuget-Wiederherstellung durchführt, kann das Ausführen als Teil des Builds (und nicht die Wiederherstellung) je nach Build-Umgebung Probleme verursachen. Es wird dringend empfohlen, die hier genannten Schritte zu befolgen, um sicherzustellen, dass der Nach-Wiederherstellungshaken als Teil von dotnet restoreläuft.

Regelbeschreibung

Das Erweiterungsbundle ist eine Nutzlast, die zusammen mit einer Funktionsanwendung bereitgestellt wird und die Erweiterungen enthält, die von der Funktionslaufzeit benötigt werden, um die Trigger und Bindungen der Funktionsanwendung zu aktivieren.

So beheben Sie das Problem

Option 1: Funktion csproj direkt wiederherstellen

Der Post-Restore-Hook wird ausgeführt, wenn das Funktionsprojekt direkt wiederhergestellt wird.

dotnet restore MyFunctionApp.csproj

Option 2: Nach-Wiederherstellungs-Hook für das Wiederherstellungsziel hinzufügen.

Das Restore-Ziel wird nur für genau das Projekt ausgeführt, auf das dotnet restore abzielt — es wird nicht an referenzierte Projekte weitergegeben. Das bedeutet, dass der Post-Restore-Hook der Funktions-App (der das Erweiterungsprojekt generiert) beim Wiederherstellen einer Lösung oder eines Durchlaufprojekts niemals aufgerufen wird.

Um dies zu beheben, fügen Sie das folgende Ziel hinzu, damit es in das zu restaurierende Projekt aufgenommen wird. Dieses Ziel durchläuft rekursiv ProjectReference-Elemente und gelangt schließlich zur Function App, in der GenerateFunctionsExtensionProject definiert ist.

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

Wo dieses Ziel platziert werden soll, hängt davon ab, wie Sie restaurieren:

  • Lösungsdateien (dotnet restore MySolution.sln): Fügen Sie das Ziel zu einer Directory.Solution.targets-Datei neben Ihrer Lösungsdatei hinzu.
  • Projekt mit einem einzelnen Durchlauf (dotnet restore dirs.proj): Fügen Sie das Ziel in Directory.Build.targets ein, unter der Annahme, dass dirs.proj es importiert (die Standardeinstellung). Wenn Sie eine Kette von Traversal-Projekten haben (z. B. dirs.projDirectory.Build.targetsMyFunctionApp.csproj), muss jedes src/dirs.proj in der Kette dieses Ziel haben – entweder direkt oder über sein eigenes dirs.proj.

Wann Warnungen unterdrückt werden sollten

Unterdrückung wird nicht empfohlen. Folgen Sie den Schritten hier, um die Warnung zu beheben.