如何将Azure应用服务更改为64位

如何将Azure应用服务更改为64位

问题描述:

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

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

我知道这意味着应用程序的平台(64位)与运行环境的平台不匹配。我只是无法弄清楚如何更改App Service,以便使用64位运行。

在Azure的门户我已经设置平台到64位应用程序设置:

enter image description here

,当我在捻检查然而,在运行时环境表明,它在win8的-x86操作系统:

enter image description here

project.json

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

"runtimes": { 
    "win10-x64": {} 
} 

一些问题

  1. 我如何改变应用程序服务,以确保它在64位平台上运行?
  2. 当我在project.json的运行时配置指定win10...时,RID是否为win8...是否重要?推测x86和x64很重要,但它是否也需要与Windows相同的版本。 win8 vs win10。
+0

我遇到了同样的问题。这有没有更新? –

+0

@TamasPataky感谢提醒我 - 我会用支持的答案更新 – ajbeaven

如果你需要一个64位运行时,有4种方式来做到这一点:

  1. 部署独立的应用程序
  2. 部署自己的运行
  3. 使用Linux Azure的应用服务
  4. 使用Web Apps的货柜

参见如何做到这一点在下面的链接的详细信息: https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service/

致谢:Glenn Condron

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


以下是我与Microsoft Azure支持人员进行的讨论。

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

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

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

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

幸运的是,我能够交换到我的一些依赖项的32位版本,这意味着该应用程序在Azure环境中工作。可悲的是,对于那些没有这种选择的人来说,这并不意味着什么,我相信有很多。

+0

关于ETA的任何更新? – MartinH

+1

这是我能找到的最好的ETA。它在6个月前转移到“计划”,但没有更新,因为:https://feedback.azure.com/forums/169385-web-apps/suggestions/16049980-install-64-bit-dotnet-exe-runtime – yfisaqt