提问人:Sam 提问时间:11/15/2023 最后编辑:marc_sSam 更新时间:11/22/2023 访问量:439
面向 Azure 应用服务上的 .NET 8 的 ASP.NET Core Web API
ASP.NET Core Web API targeting .NET 8 on Azure App Service
问:
我有一个 ASP.NET 核心 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/
因此,我继续在“高级工具”下安装并通过 Kudu 进行安装——见下文:ASP.NET Core .NET 8 x64
x86
然后,我在 Azure 应用服务上多次停止并重新启动该应用,但它仍然无法正常工作。当我尝试在我的 API 上点击终结点时,它会旋转和旋转很长时间,并返回“服务不可用”错误,但根据 Azure 上的应用程序仪表板,它已启动并运行。
有什么建议吗?还有其他人遇到升级到 .NET 8 的问题吗?
PS:我的 API 应用程序的部署是通过 GitHub 操作完成的,我确实将 .NET 版本更新到 .NET 8 - 见下文:
答:
我已经创建了一个基本的 ASP .NET Core Web API,版本为 .NET-8.0 并使用 GitHub 操作部署到 Azure 应用服务。
遵循的步骤:
创建了具有 .NET 8 版本的 ASP .NET Core Web API 项目,并能够在本地运行。
修改后的程序 .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();
- 将应用程序推送到 GitHub。
- 使用 创建了 Windows Azure 应用服务。NET-8.0(Early Access)作为运行时堆栈。
- 使用 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 }}
部署状态:
成功运行应用程序。
如果在部署应用程序时问题仍然存在,请在 GitHub 工作流中添加 dotnet 的 publish 命令。--self-contained
- name: dotnet publish
run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp --self-contained true
我基本上遇到了使用 .NET Core 8 Web 应用程序部署到 Azure 的相同问题。您可以使用“独立”作为解决方法。 但是,我发现,如果部署到“美国东部”,它可以正常工作,但“英国南部”会产生“服务不可用”。
评论
我也遇到了这个问题,对我来说,解决方案是由 .Net 7 站点扩展引起的,该扩展必须使用高级工具 -> 站点扩展进行更新。将扩展(ASP.Net Core Logging Integration)更新到 .Net 8 版本并重新启动应用服务后,一切正常。
请注意,我只是在 VS 2022 中使用点击发布部署,并发布到西欧地区。
Microsoft现在已经发布了一个修复程序。
我已经在澳大利亚东南部地区进行了测试(不起作用),现在它可以工作了。
评论