首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dotnet在Linux消费计划中隔离了Azure函数w/ .Net 6,抱怨6.0 AspNetCore.App运行时不可用

Dotnet在Linux消费计划中隔离了Azure函数w/ .Net 6,抱怨6.0 AspNetCore.App运行时不可用
EN

Stack Overflow用户
提问于 2021-12-23 19:59:04
回答 2查看 1.1K关注 0票数 3

我需要一些帮助,找出为什么部署到Linux消费计划中的Azure函数无法启动并抱怨AspNetCore.App运行时不可用:

应用程序洞察日志

我不太明白的是,为什么这会引用RC2。我们已经将问题隔离到了包依赖项(StackExchange.Redis.Extensions.AspNetCore" Version="7.2.1")中--如果包含这个问题,它会破坏部署在Azure中的函数。

查看该依赖项的源代码,看起来他们所做的只是引用AspNetCore.App框架引用,如下所示:

https://github.com/imperugo/StackExchange.Redis.Extensions/blob/master/src/aspnet/StackExchange.Redis.Extensions.AspNetCore/StackExchange.Redis.Extensions.AspNetCore.csproj

请注意,我们的Azure函数能够使用相同的项目引用(相同库的6.x版本)运行.Net 5,没有任何问题。

我们使用CLI创建和部署如下所示的函数:

内部版本:

代码语言:javascript
复制
        - 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'

功能应用程序创建:

代码语言:javascript
复制
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]'

部署:

代码语言:javascript
复制
          - 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
EN

回答 2

Stack Overflow用户

发布于 2022-04-22 07:31:14

这就是我如何在我的特殊情况下解决这首史诗的方法。

在.csproj属性中有<TargetFramework>net5.0</TargetFramework><AzureFunctionsVersion>v3</AzureFunctionsVersion>

生成管道使用Pool: Azure PipelinesImage: 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-bundlerdotnet functions.dll一起尝试,但没有结果。

msdocs链接如下:

运行进程外运行的.NET类库函数的比较的功能和行为差异

.NET孤立项目指南

手动Linux上的版本更新

因此,在部署之后,有一个任务来设置"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任务。

票数 2
EN

Stack Overflow用户

发布于 2021-12-24 11:33:10

在您的函数应用程序中,需要添加应用程序设置SCM_DO_BUILD_DURING_DEPLOYMENT

在某些情况下,您可能无法将应用程序部署到消费计划中的Linux函数。如果发生这种情况,则添加一个名为SCM_DO_BUILD_DURING_DEPLOYMENT的应用程序设置,其值为0.。

参考这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70466876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档