AZFW0108: El paquete de extensiones no se restauró antes de la compilación

Elemento Value
Identificador de la regla AZFW0108
Categoría Sdk
Severity Warning

Causa

Esta advertencia del SDK aparece cuando se compila un proyecto que usa Azure.Functions.Sdk sin que se invoque el gancho posterior a la restauración del paquete de extensiones. El hook posterior a la restauración se ejecuta cuando el proyecto de funciones se restaura directamente. Al restaurar un archivo de solución o un proyecto transversal, no se invocará el hook posterior a la restauración.

Cuando el gancho posterior a la restauración no se ejecuta correctamente, el SDK de funciones intentará ejecutar el gancho antes de la compilación. Sin embargo, dado que el gancho posterior a la restauración realiza por sí mismo otra restauración de NuGet, ejecutarlo como parte de la compilación (y no de la restauración) puede causar problemas según el entorno de compilación. Se recomienda encarecidamente seguir los pasos aquí para asegurar que el gancho posterior a la restauración funcione como parte de dotnet restore.

Descripción de la regla

El paquete de extensiones es una carga útil que se implementa junto con una aplicación de funciones y contiene las extensiones necesarias para que el entorno de ejecución de las funciones habilite los desencadenadores y enlaces de la aplicación de funciones.

Solución

Opción 1: Restaurar la función csproj directamente

El enlace posterior a la restauración se ejecutará cuando el proyecto de Functions se restaure directamente.

dotnet restore MyFunctionApp.csproj

Opción 2: Añadir un enlace posterior a la restauración para el destino de restauración.

El Restore destino solo se ejecuta sobre el proyecto exacto al que dotnet restore se dirige, no se propaga a proyectos referenciados. Esto significa que el enlace posterior a la restauración de la aplicación de Function (que genera el proyecto de extensiones) nunca se invoca al restaurar una solución o un proyecto transversal.

Para solucionar esto, añade el siguiente objetivo para que se incluya en el proyecto que se va a restaurar. Este objetivo recorre recursivamente los elementos ProjectReference, hasta llegar a la aplicación de funciones donde se define 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>

Dónde colocar este destino depende de cómo se restaure:

  • Archivos de solución (dotnet restore MySolution.sln): Añade el destino a un Directory.Solution.targets archivo junto a tu archivo de solución.
  • Proyecto de recorrido único (dotnet restore dirs.proj): Añadir el destino a Directory.Build.targets, asumiendo dirs.proj que lo importa (por defecto). Si tienes una cadena de proyectos de recorrido (p. ej., dirs.proj → Directory.Build.targets → MyFunctionApp.csproj), cada src/dirs.proj de la cadena debe tener este objetivo, ya sea directamente o a través de su propio dirs.proj.

Cuándo suprimir las advertencias

No se recomienda la supresión. Sigue los pasos aquí para corregir la advertencia.