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

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

project.json
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"platform": "x64"
},
"runtimes": {
"win10-x64": {}
}几个问题
project.json中的运行时配置指定win10...时,RID是否为win10...?想必x86和x64很重要,但是它是否也需要相同版本的windows呢?win8对win10.发布于 2019-07-05 09:34:37
这一点现在可以在Azure应用程序服务中获得。
部署步骤:
<PropertyGroup>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>dotnet publish,只需添加-r win-x64)文档是这里,但(目前)它被认为有点稀疏。
这个github问题答复建议我们应该能够进行框架依赖的部署,并让它“正常工作”。但这不是我自己的经验,所以上面的运行时标志建议
发布于 2017-06-08 11:03:55
TLDR;使用.NET核心运行时(相对于.NET框架运行时)的 64位.NET核心进程尚未在Azure上得到支持,但计划在未来推出。
以下是我与Microsoft支持的讨论结果。
Azure门户上的64位/32位配置(如我的屏幕截图所示)控制IIS w3wp.exe进程。w3wp.exe进程将请求转发到网络核心进程。配置不控制.NET核心进程的比特性。这有点让人费解,但解释了为什么在上面的screneshot中更改Platform选项没有任何影响。
根据app服务的路径环境变量设置,将dotnet.exe映射到32位变量,即"D:\Program (x86)\dotnet\dotnet.exe“。.NET核心的64位运行时没有预先安装在应用程序服务中,因此目前无法使用。
微软计划为运行在Azure中的.NET核心运行时上运行的.NET核心应用程序添加64位支持,但这取决于.NET核心工具链的未来更新。他们给了我一个估计的内部日期,但我保证不会公开分享。
他们给我的解决办法是使用ASP.NET核心(使用.net框架) visual模板,而不是使用ASP.NET核心(使用.net核心)。它为您的.Net核心web应用程序加载64位的ASP.Net框架运行时。这将需要一些迁移工作,我认为某些项目不可能这样做。
幸运的是,我能够交换到32位版本的我的一些依赖,这意味着应用程序在Azure环境中工作。可悲的是,这对那些没有这个选择的人来说没有多大意义,我相信还有很多。
发布于 2018-01-14 18:44:43
如果您需要64位运行时,有4种方法可以做到这一点:
在下面的链接:https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service/中可以看到更多关于如何做到这一点的详细信息。
贷记:格伦·康德龙
https://stackoverflow.com/questions/42726350
复制相似问题