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

pinkon5k  于 2023-06-24  发布在  其他
关注(0)|答案(5)|浏览(155)

我一直在向在Azure应用服务上运行的64位ASP.NET Core API发出请求时遇到麻烦。我得到的错误是:
未处理异常:System. BadImageFormatException:未能加载文件或程序集“***. dll”。试图加载格式不正确的程序。
我理解这意味着应用程序的平台(64位)和它运行的环境之间存在不匹配。我只是不知道如何更改应用程序服务,使其使用64位运行。
在Azure门户的应用程序设置中,我已将平台设置为64位:

然而,当我签入Kudu时,运行时环境表明它在win8-x86下运行:

    • project. json**
"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "platform": "x64"
},

"runtimes": {
    "win10-x64": {}
}
    • 有些问题**

1.如何更改App Service以确保其在64位平台上运行?
1.当我在project.json中的运行时配置指定win10...时,RID是win8...是否重要?大概x86 vs x64很重要,但它是否需要是相同版本的windows太ie. win8 vs win10.

46scxncf

46scxncf1#

现在,Azure App Service中提供了这一功能。
部署步骤:
1.在门户中将平台设置为64位
1.通过在CSProj中包括以下内容,确保项目目标为64位:

<PropertyGroup>
  <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

1.发布应用程序时,确保目标框架设置为win-x64。(如果运行dotnet publish,只需添加-r win-x64
文档是here,但(目前)它被认为有点稀疏。
这个github问题回应建议我们应该能够做一个依赖于框架的部署,并让它“正常工作”。YMMV,但这不是我自己的经验,因此上面的运行时标志建议

1mrurvl1

1mrurvl12#

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

以下是我与Microsoft Azure支持的讨论。
Azure门户上的64位/32位配置(如上面我的屏幕截图所示)控制IIS w3wp.exe进程。w3wp.exe进程将请求转发到NET核心进程。配置不控制.NET核心进程的位数。这有点令人困惑,但解释了为什么在上面的screneshot中更改平台选项没有影响。
根据app service的PATH环境变量设置,dotnet.exe被Map到32位的,即“D:\Program Files(x86)\dotnet\dotnet.exe”。.NET核心的64位运行时未预安装在应用程序服务中,因此目前不可用。
微软计划在Azure中的.NET核心运行时上运行的.NET核心应用程序中添加64位支持,但这取决于.NET核心工具链的未来更新。他们给了我一个估计的内部日期,但我保证我不会公开分享。
他们给我的一个变通方法是使用ASP.NETcore(使用. netframework)Visual Studio模板,而不是ASP.NETcore(使用. netcore)模板。该应用程序为ASP.NET核心Web应用程序加载64位.Net框架运行时。这将需要一点迁移工作,我认为可能不可能为一些项目。
幸运的是,我能够交换到我的一些依赖项的32位版本,这意味着应用程序可以在Azure环境中工作。可悲的是,这对那些没有这个选择的人来说意义不大,我相信有很多人。

laawzig2

laawzig23#

如果您需要64位运行时,有4种方法可以做到这一点:
1.部署自包含的应用程序
1.部署自己的运行时
1.使用Linux Azure应用服务
1.将Web应用程序用于容器
有关如何做到这一点的更多详细信息,请参阅下面的链接:https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service/
导演:Glenn Condron

wswtfjt7

wswtfjt74#

dotnetpublish命令生成一个web.config文件,IIS使用该文件启动dotnet进程。在Kudu中,PATH环境变量dotnet.exe来自 D:\Program Files(x86)\dotnet
解决方案是在生成后在此文件中替换

<aspNetCore processPath="dotnet" arguments=...

其中:

<aspNetCore processPath="%ProgramFiles%\dotnet\dotnet" arguments=...
2admgd59

2admgd595#

在64位中运行的AppService有4个要求
1.在Azure Portal中将AppService设置为64位(这使得Webserver-Process以64位运行)
1.确保您的应用程序能够在64位平台上运行(例如通过在项目文件<PropertyGroup> <PlatformTarget>x64</PlatformTarget> </PropertyGroup>中将平台设置为x64)
1.。。这是我花了最长时间才弄明白的一个:转到Azure门户中AppService的扩展刀片,并为您的.NET版本安装x64扩展。所以对我来说,在这个时候,我安装了“ASP.NET Core 7. 0(x64)Runtime”
1.您的AppService需要在至少为Basic层(当然也可以更高)的AppServicePlan上运行
为了检查是否成功,您可能希望将Environment.Is64BitProcess的结果包含在日志或类似的东西中,看看您是否真的在64位上运行。

相关问题