我需要一些帮助,找出为什么部署到Linux消费计划中的Azure函数无法启动并抱怨AspNetCore.App运行时不可用:
我不太明白的是,为什么这会引用RC2。我们已经将问题隔离到了包依赖项(StackExchange.Redis.Extensions.AspNetCore" Version="7.2.1")中--如果包含这个问题,它会破坏部署在Azure中的函数。
查看该依赖项的源代码,看起来他们所做的只是引用AspNetCore.App框架引用,如下所示:
请注意,我们的Azure函数能够使用相同的项目引用(相同库的6.x版本)运行.Net 5,没有任何问题。
我们使用CLI创建和部署如下所示的函数:
内部版本:
- task: UseDotNet@2
inputs:
version: $(dotNetVersion)
displayName: Set DotNet Version $(dotNetVersion)
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/xyz.Function.OurFunction.csproj'
arguments: '--configuration $(buildConfiguration) --output $(System.DefaultWorkingDirectory)/func_api'
displayName: 'Build Function'功能应用程序创建:
az functionapp create --name $(functionAppName)
--resource-group $(rg) --consumption-plan-location $(region)
--functions-version 4 --os-type Linux --runtime dotnet-isolated
--storage-account $(funstorageAccountName) --assign-identity '[system]'部署:
- task: AzureFunctionApp@1
inputs:
azureSubscription: '$(azureSubscription)'
appType: 'functionAppLinux'
appName: '$(functionAppName)'
package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
deploymentMethod: 'zipDeploy'
runtimeStack: 'DOTNET-ISOLATED|6.0'
appSettings: >-
-FUNCTIONS_WORKER_RUNTIME dotnet-isolated发布于 2022-04-22 07:31:14
这就是我如何在我的特殊情况下解决这首史诗的方法。
在.csproj属性中有<TargetFramework>net5.0</TargetFramework>和<AzureFunctionsVersion>v3</AzureFunctionsVersion>。
生成管道使用Pool: Azure Pipelines和Image: ubuntu-latest。
我遇到的第一个问题是Azure函数AppDeployRelease管线任务,试图部署ZIP工件。即使这是微软的建议,它也会无限期地挂起。因此,前面有一个解压缩文件任务,它将$(System.DefaultWorkingDirectory)/func/drop/Functions.zip解压缩到$(Agent.TempDirectory)/func。在我的例子中,func是工件源别名。
Azure Function App Deploy任务过时了。
默认情况下,您可能选择的最新运行时堆栈是DOTNET|3.1 (functionapp v3)。
然后,在任务日志中,人们会注意到:
Trying to update App Service Application settings.
Data:{"FUNCTIONS_WORKER_RUNTIME":"dotnet","WEBSITES_ENABLE_APP_SERVICE_STORAGE":"true"}。
这是非常出乎意料的,因为我们使用的是的进程外模型。
此外,启动命令为空。
与func azure functionapp publish $(functions-app-name) --no-bundler和dotnet functions.dll一起尝试,但没有结果。
msdocs链接如下:
运行进程外运行的.NET类库函数的比较的功能和行为差异
.NET孤立项目指南
因此,在部署之后,有一个任务来设置"FUNCTIONS_WORKER_RUNTIME":"dotnet-isolated"。
然后救世主是本指南。
注意,为了能够将您的孤立函数项目发布到Azure中的Windows或Linux应用程序,您必须在远程FUNCTIONS_WORKER_RUNTIME应用程序设置中设置一个dotnet的值。要在Linux上支持zip部署和从部署包中运行,您还需要将linuxFxVersion站点配置设置更新为DotNet-Indivision6.0。
功能应用程序Function host is not running.说,开发成功
当我运行az functionapp config show --name $(functions-app) --resource-group $(rg) --query 'linuxFxVersion' -o tsv时,我会得到DOTNET\3.1。
所以我做az functionapp config set --name $(functions-app) --resource-group $(rg) --linux-fx-version 'DOTNET-ISOLATED|5.0',因为我的目标是netcore5。这修复了所有问题,并在发布管道中部署后成为Azure任务。
发布于 2021-12-24 11:33:10
在您的函数应用程序中,需要添加应用程序设置SCM_DO_BUILD_DURING_DEPLOYMENT
在某些情况下,您可能无法将应用程序部署到消费计划中的Linux函数。如果发生这种情况,则添加一个名为SCM_DO_BUILD_DURING_DEPLOYMENT的应用程序设置,其值为0.。


参考这里
https://stackoverflow.com/questions/70466876
复制相似问题