Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| 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.proj→src/dirs.proj→MyFunctionApp.csproj), каждыйdirs.projв этой цепочке должен иметь эту цель — либо напрямую, либо через собственныйDirectory.Build.targets.
Когда нужно подавлять предупреждения
Подавление не рекомендуется. Следуйте инструкциям здесь, чтобы исправить предупреждение.