AZFW0108:擴充套件在建置前未被還原

Item 價值
規則識別碼 AZFW0108
類別 Sdk
Severity Warning

原因

當建置使用 Azure.Functions.Sdk 的專案時,如果未叫用擴充功能套件的還原後掛鉤,就會出現此 SDK 警告。 當函式專案直接還原時,會執行還原後掛鉤。 還原解決方案檔案或遍尋專案時,不會叫用還原後觸發器。

當還原後的掛鉤無法成功執行時,函式 SDK 會嘗試在建置前執行掛鉤。 然而,由於還原後掛鉤本身會再次執行 NuGet 還原,因此若它是在建置流程中執行(而不是在還原流程中),則可能會因建置環境不同而導致問題。 強烈建議您依照 此處 的步驟操作,以確保還原後掛鉤會作為 dotnet restore 的一部分執行。

規則說明

擴充功能套件是與函式應用程式一同部署的套件,其中包含函式執行階段為啟用函式應用程式的觸發程序和繫結所需的擴充功能。

修正方式

選項一:直接恢復 csproj 功能

當直接還原函式專案時,還原後掛鉤會被執行。

dotnet restore MyFunctionApp.csproj

選項 2:為還原目標新增還原後掛鉤。

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):將目標加入dirs.proj,前提是Directory.Build.targets會匯入它(預設情況)。 如果你有一串遍歷專案(例如→ dirs.projsrc/dirs.proj → MyFunctionApp.csproj),鏈中每個 dirs.proj 項目都必須擁有這個目標——無論是直接或透過自己的 Directory.Build.targets目標。

何時應抑制警告

不建議抑制。 請依 照此 處步驟修正警告。