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)
一些问题
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环境中工作.遗憾的是,这对那些没有这个选项的人来说意义不大,我相信有很多.
小智 10
如果您需要64位运行时,有4种方法可以执行此操作:
有关如何执行此操作的详细信息,请参阅以下链接: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 应用服务中可用。
部署步骤:
<PropertyGroup>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
dotnet publish只是添加-r win-x64)文档在这里,但(目前)它被认为有点稀疏。
这个github 问题响应表明我们应该能够进行依赖于框架的部署并让它“正常工作”。YMMV 但这不是我自己的经验,因此上面的运行时标志建议
| 归档时间: |
|
| 查看次数: |
7315 次 |
| 最近记录: |