具有运行时 2 的 Azure Functions;不会自动创建绑定扩展

Azure Functions with runtime 2; binding extensions not automatically created

当我基于 v2 运行time 将我的 Azure Function 项目部署到我的 Function App 时,我的项目依赖的绑定扩展(在我的例子中是 Azure 存储)不会自动创建。

我在根目录下使用 extensions.csproj 文件部署我的项目,但部署后我必须手动 运行 以下命令在 wwwroot 上创建一个 bin 和 obj 文件夹。

dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget

如果我没理解错的话,这应该是自动发生的。

使用 Visual Studio 时,您将直接从项目中引用扩展包,以便使用它们的属性和其他类型,因此 Visual Studio 处理安装过程,但仍然需要注册被执行。

这是由 Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator NuGet 包添加的自定义构建任务处理的,必须显式引用(这将由 SDK/Visual Studio 工具在未来的更新中)。

这些是使用我们前面示例中提到的 CosmosDB 扩展程序必须遵循的步骤:

1.Add 对 Microsoft.Azure.WebJobs.Extensions.Storage NuGet 包的引用

2.Add 对 Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator

的引用

3.Build 项目

更多细节,你可以参考这个article

通过 CLI 部署 func azure functionapp publish

函数核心工具使用zip部署来部署函数,这样kudu不会构建项目by default。要启用该功能,请在门户的应用程序设置中将 SCM_DO_BUILD_DURING_DEPLOYMENT 设置为 true

至于为什么默认设置为false,zip部署通常需要部署的内容包括所有相关文件,因此无需重新构建。

对于 Azure 函数核心工具,我们通常使用命令 func extensions installregister extensions 进行 input/output 绑定,当扩展没有像我们从模板创建触发器那样自动安装时。这就是为什么命令 func startfunc azure functionapp publish 不构建 extensions.csproj,扩展应该在我们 运行 或发布函数之前安装。

DevOps 部署更新

使用 Azure 管道,我们需要在归档文件之前构建 extensions.csporj。添加 .NET Core 构建任务,参数为 -o bin.

如果你想让 kudu 构建项目,请转到平台功能下的部署中心。选择 VSTS 作为 CI 存储库,kudu 将为您构建和部署项目。