AZFW0108: O pacote de extensões não foi restaurado antes da compilação

Item Valor
ID da regra AZFW0108
Categoria Sdk
Severity Warning

Cause

Esse aviso do SDK ocorre quando um projeto que usa Azure.Functions.Sdk é compilado sem que o gancho pós-restauração do bundle de extensões seja invocado. O hook de pós-restauração é executado quando o projeto da função é restaurado diretamente. Restaurar um arquivo de solução ou um projeto de percurso não invocará o gancho pós-restauração.

Quando o hook pós-restauração não é executado com sucesso, o SDK de funções tentará executar o hook antes da build. No entanto, como o hook de pós-restauração executa outra restauração do NuGet por conta própria, ser executado como parte da compilação (e não da restauração) pode causar problemas, dependendo do ambiente de compilação. É altamente recomendável seguir as etapas aqui para garantir que o hook pós-restauração seja executado como parte de dotnet restore.

Descrição da Regra

O pacote de extensões é um pacote implantado junto com um aplicativo de função, que contém as extensões de que o runtime das funções precisa para dar suporte aos gatilhos e às associações do aplicativo de função.

Como corrigir

Opção 1: Restaurar a função csproj diretamente

O gancho pós-restauração será executado quando o projeto de funções for restaurado diretamente.

dotnet restore MyFunctionApp.csproj

Opção 2: Adicionar gancho pós-restauração para o alvo de restauração.

O destino Restore é executado apenas no projeto exato ao qual dotnet restore se destina — ele não é propagado para projetos referenciados. Isso significa que o gancho pós-restauração do aplicativo de funções (que gera o projeto de extensões) nunca é invocado durante a restauração de uma solução ou de um projeto de percurso.

Para corrigir isso, adicione o seguinte alvo para que ele seja incluído no projeto a ser restaurado. Esse destino percorre recursivamente os itens ProjectReference, chegando por fim ao aplicativo de funções em que GenerateFunctionsExtensionProject é definido.

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

Onde colocar esse alvo depende de como você restaura:

  • Arquivos de solução (dotnet restore MySolution.sln): Adicione o alvo a um Directory.Solution.targets arquivo ao lado do seu arquivo de solução.
  • Projeto de travessia única (dotnet restore dirs.proj): Adicione o alvo a Directory.Build.targets, pressupondo que dirs.proj o importe (padrão). Se você tiver uma cadeia de projetos de percurso (por exemplo, dirs.proj → src/dirs.proj → MyFunctionApp.csproj), cada dirs.proj na cadeia deverá ter esse destino — seja diretamente ou por meio de seu próprio Directory.Build.targets.

Quando suprimir avisos

A supressão não é recomendada. Siga os passos aqui para corrigir o aviso.