如何将Azure App Service更改为64位

ajb*_*ven 19 64-bit azure .net-core

我一直无法向在Azure应用服务上运行的64位ASP.NET Core API发出请求.我得到的错误是:

未处理的异常:System.BadImageFormatException:无法加载文件或程序集'***.dll'.尝试加载格式不正确的程序.

我知道这意味着应用程序平台(64位)与其运行环境之间存在不匹配.我只是无法弄清楚如何更改App Service,因此它使用64位运行.

在Azure门户的应用程序设置中,我将Platform设置为64位:

在此输入图像描述

但是当我检查Kudu时,运行时环境表明它在win8-x86下运行:

在此输入图像描述

project.json

"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "platform": "x64"
},

"runtimes": {
    "win10-x64": {}
}
Run Code Online (Sandbox Code Playgroud)

一些问题

  1. 如何更改App Service以确保它在64位平台上运行?
  2. RID是否win8...在我的运行时配置project.json指定时是否重要win10...?据推测x86 vs x64很重要,但是它也需要是相同版本的windows,即.win8 vs win10.

ajb*_*ven 12

TLDR; Azure尚不支持使用.NET核心运行时(而不是.NET Framework运行时)的64位.NET核心进程,但计划将来推出.


以下是我对Microsoft Azure支持的讨论.

Azure门户上的64位/ 32位配置(如上图所示)控制IIS w3wp.exe进程.w3wp.exe进程将请求转发给您的NET核心进程.配置不控制.NET核心进程的位数.这有点令人困惑,但解释了为什么在上面的screneshot中更改Platform选项没有任何影响.

根据app服务的PATH环境变量设置,dotnet.exe映射到32位,即"D:\ Program Files(x86)\ dotnet\dotnet.exe"..NET核心的64位运行时未预先安装在应用程序服务中,因此目前无法使用.

Microsoft计划为Azure中.NET核心运行时上运行的.NET核心应用程序添加64位支持,但这取决于.NET核心工具链的未来更新.他们给了我一个估计的内部日期,但我承诺我不会公开分享.

他们给我的一个解决方法是使用ASP.NET核心(使用.net框架)可视工作室模板,而不是ASP.NET核心(使用.net核心).那个为您的ASP.Net核心Web应用程序加载64位.Net框架运行时.这将需要一些迁移工作,我认为某些项目可能无法实现.

幸运的是,我能够交换到某些依赖项的32位版本,这意味着该应用程序在Azure环境中工作.遗憾的是,这对那些没有这个选项的人来说意义不大,我相信有很多.

  • 这是我能找到的最好的ETA.它在6个月前被移至"计划",但自此之后没有更新:https://feedback.azure.com/forums/169385-web-apps/suggestions/16049980-install-64-bit-dotnet-exe-runtime (3认同)

小智 10

如果您需要64位运行时,有4种方法可以执行此操作:

  1. 部署自包含的应用程序
  2. 部署自己的运行时
  3. 使用Linux Azure App Service
  4. 使用Web Apps for Containers

有关如何执行此操作的详细信息,请参阅以下链接:https: //blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service /

致记:Glenn Condron


Ste*_*t_R 10

这现在在 Azure 应用服务中可用。

部署步骤:

  1. 在门户中将平台设置为 64 位
  2. 通过在 csproj 中包含以下内容,确保项目面向 64 位:
<PropertyGroup>
  <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
  1. 发布应用程序时确保目标框架设置为 win-x64。(如果运行dotnet publish只是添加-r win-x64

文档在这里,但(目前)它被认为有点稀疏。

这个github 问题响应表明我们应该能够进行依赖于框架的部署并让它“正常工作”。YMMV 但这不是我自己的经验,因此上面的运行时标志建议