面向 Azure 应用服务上的 .NET 8 的 ASP.NET Core Web API

Sam*_*Sam 9 asp.net azure azure-web-app-service asp.net-core .net-8.0

我有一个 ASP.NET Core Web API,一直在 Azure 应用服务 Windows 平台上运行。这个应用程序的目标是 .NET 7,今天我将其更新为目标 .NET 8。它在本地编译和运行良好。

根据此公告,.NET 8 现已在 Azure 应用服务上提供:https ://azure.github.io/AppService/2023/11/14/dotnet8-ga.html

我将应用程序部署到 Azure 应用服务,然后将 .NET 版本更改为 .NET 8 - 如下所示:

在此输入图像描述

这不起作用,我不断收到以下错误:

ANCM 无法找到本机依赖项

然后我在 Reddit 上找到了这篇文章: https: //www.reddit.com/r/dotnet/comments/17v7qb5/http_error_50031_ancm_failed_to_find_native/

因此,我继续安装ASP.NET Core .NET 8 x64x86通过高级工具下的 Kudu - 如下所示:

在此输入图像描述

然后,我多次在 Azure 应用服务上停止并重新启动该应用程序,但它仍然无法正常工作。当我尝试访问 API 上的端点时,它旋转了很长时间,并返回“服务不可用”错误,但根据 Azure 上的应用程序仪表板,它已启动并正在运行。

有什么建议么?还有其他人遇到升级到 .NET 8 的问题吗?

PS:我的 API 应用程序的部署是通过 GitHub 操作完成的,我确实将 .NET 版本更新到 .NET 8 - 见下文:

在此输入图像描述

Pra*_* KV 2

我创建了一个版本为.NET-8.0的基本ASP .NET Core Web API,并使用 GitHub 操作部署到 Azure 应用服务。

步骤如下:

  • 创建了一个 .NET 8 版本的 ASP .NET Core Web API 项目,并且能够在本地运行。

  • 修改后的program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(x =>
{

    x.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");

#if DEBUG
    x.RoutePrefix = "swagger"; // For localhost
#else
    x.RoutePrefix = string.Empty; //  For azure
#endif
}
);
app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Run Code Online (Sandbox Code Playgroud)
  • 将应用程序推送到 GitHub。
  • 使用.NET-8.0(早期访问)作为运行时堆栈创建了Windows Azure 应用服务

在此输入图像描述

  • 使用 GitHub Actions 将应用程序部署到 Azure。

我的工作流程:

以下是我用来部署应用程序的工作流程。

name: Build and deploy ASP.Net Core app to Azure Web App - <web_app_name>

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '8.x'
          include-prerelease: true

      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    runs-on: windows-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    
    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: .net-app
      
      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: '<web_app_name>'
          slot-name: 'Production'
          package: .
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_FXXXXXXXXXX }}

Run Code Online (Sandbox Code Playgroud)

部署状态:

在此输入图像描述

成功运行应用程序。

在此输入图像描述

如果部署应用程序时问题仍然存在,请--self-contained在 GitHub 工作流程中添加 dotnet 的发布命令。

      - name: dotnet publish
        run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp --self-contained true
Run Code Online (Sandbox Code Playgroud)