AZFW0108: Pacote de extensões não foi reposto antes da compilação

Item Valor
ID da regra AZFW0108
Categoria Sdk
Severity Warning

Cause

Este aviso do SDK ocorre quando um projeto que utiliza Azure.Functions.Sdk é compilado sem que o hook pós-restauro do pacote de extensões seja invocado. O gancho pós-restauro é executado quando o projeto de funções é restaurado diretamente. O restauro de um ficheiro de solução ou de um projeto transversal não invoca a rotina pós-restauro.

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, uma vez que o hook pós-restauro efetua ele próprio outro restauro do NuGet, a sua execução como parte da compilação (e não do restauro) pode causar problemas, dependendo do ambiente de compilação. Recomenda-se vivamente seguir os passos indicados aqui para garantir que o hook pós-restauro é executado como parte de dotnet restore.

Descrição da regra

O pacote de extensões é um pacote implementado juntamente com uma aplicação de funções, que contém as extensões necessárias ao ambiente de execução das funções para ativar os acionadores e as associações da aplicação de funções.

Como Corrigir

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

O gancho posterior ao restauro 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 Restore alvo só corre no projeto exato contra o qual dotnet restore é direcionado — não se propaga para projetos referenciados. Isto significa que o hook pós-restauro da aplicação de funções (que gera o projeto de extensão) nunca é invocado ao restaurar uma solução ou um projeto de percurso.

Para resolver isto, adicione o seguinte objetivo para que seja incluído no projeto em restauro. Este destino percorre recursivamente os itens ProjectReference, até chegar à aplicação de função onde GenerateFunctionsExtensionProject está 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 este alvo depende de como restaurar:

  • Ficheiros de solução (dotnet restore MySolution.sln): Adicione o alvo a um Directory.Solution.targets ficheiro ao lado do seu ficheiro de solução.
  • Projeto de percurso único (dotnet restore dirs.proj): Adicionar o destino a Directory.Build.targets, assumindo dirs.proj que o importa (o padrão). Se tiver uma cadeia de projetos de travessia (por exemplo, dirs.proj → Directory.Build.targets → MyFunctionApp.csproj), cada src/dirs.proj na cadeia tem de ter este destino — seja diretamente ou através do seu próprio dirs.proj.

Quando Suprimir Avisos

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