AZFW0108: Пакет расширений не был восстановлен перед сборкой

Item Ценность
Идентификатор правила AZFW0108
Категория SDK
Severity Предупреждение

Причина

Это предупреждение SDK возникает, когда проект, использующий Azure.Functions.Sdk, собирается без вызова post-restore-перехватчика пакета расширений. Крючок после восстановления запускается, когда проект функции восстанавливается напрямую. Восстановление файла решения или обходного проекта не вызывает хук post-restore.

Если крюк после восстановления не запускается успешно, функциональный SDK попытается запустить крючок до сборки. Однако поскольку перехватчик post-restore сам выполняет ещё одну операцию восстановления NuGet-пакетов, его запуск в рамках сборки (а не этапа восстановления) может вызвать проблемы в зависимости от среды сборки. Настоятельно рекомендуется выполнить шаги, описанные здесь, чтобы хук после восстановления выполнялся как часть dotnet restore.

Описание правила

Пакет расширений — это пакет, развертываемый вместе с приложением-функцией и содержащий расширения, необходимые среде выполнения функций для поддержки триггеров и привязок приложения-функции.

Как исправить

Вариант 1: Восстановить функцию csproj напрямую

Крючок после восстановления запускается, когда проект функций восстанавливается напрямую.

dotnet restore MyFunctionApp.csproj

Вариант 2: Добавить хук post-restore для целевого объекта восстановления.

Цель Restore выполняется только в том конкретном проекте, для которого предназначен dotnet restore, — она не распространяется на проекты, на которые есть ссылки. Это означает, что крючок послевосстановления функционального приложения (который генерирует проект расширения) никогда не вызывается при восстановлении решения или проекта.

Чтобы исправить это, добавьте следующую цель, чтобы она была включена в восстанавливаемый проект. Эта цель рекурсивно проходит по элементам ProjectReference, в конечном итоге достигая приложения-функции, в котором определено 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>

Где разместить этот целевой объект, зависит от способа восстановления:

  • Файлы решений (dotnet restore MySolution.sln): Добавьте целевой файл в Directory.Solution.targets файл рядом с вашим файлом решения.
  • Проект с однократным обходом (dotnet restore dirs.proj): Добавить целевой объект в Directory.Build.targets, при условии, что dirs.proj импортирует его (по умолчанию). Если у вас есть цепочка проектов обхода (например, dirs.projsrc/dirs.projMyFunctionApp.csproj), каждый dirs.proj в этой цепочке должен иметь эту цель — либо напрямую, либо через собственный Directory.Build.targets.

Когда нужно подавлять предупреждения

Подавление не рекомендуется. Следуйте инструкциям здесь, чтобы исправить предупреждение.