如何将Azure应用服务更改为64位
我一直无法向在Azure应用服务上运行的64位ASP.NET Core API发出请求。我得到的错误是:如何将Azure应用服务更改为64位
未处理的异常:System.BadImageFormatException:无法加载文件或程序集'***。dll'。试图加载格式不正确的程序。
我知道这意味着应用程序的平台(64位)与运行环境的平台不匹配。我只是无法弄清楚如何更改App Service,以便使用64位运行。
在Azure的门户我已经设置平台到64位应用程序设置:
,当我在捻检查然而,在运行时环境表明,它在win8的-x86操作系统:
project.json
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"platform": "x64"
},
"runtimes": {
"win10-x64": {}
}
一些问题
- 我如何改变应用程序服务,以确保它在64位平台上运行?
- 当我在
project.json
的运行时配置指定win10...
时,RID是否为win8...
是否重要?推测x86和x64很重要,但它是否也需要与Windows相同的版本。 win8 vs win10。
如果你需要一个64位运行时,有4种方式来做到这一点:
- 部署独立的应用程序
- 部署自己的运行
- 使用Linux Azure的应用服务
- 使用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环境中工作。可悲的是,对于那些没有这种选择的人来说,这并不意味着什么,我相信有很多。
我遇到了同样的问题。这有没有更新? –
@TamasPataky感谢提醒我 - 我会用支持的答案更新 – ajbeaven