关于.net Core在华为云的鲲鹏服务器上部署的细节纪要

2021年01月11日来源:本站原创

由于鲲鹏使用的是ARM的cpu,,非x86的,我们公司买的是Centos,,由于需要在上面部署.net core 3.0/3.1的应用,,在按照官方的文章进行部署之后,会提示

FailFast: Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.
Invariant to true if you want to run with no globalization support.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode()
   at System.Globalization.GlobalizationMode..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.CultureData.GetCultureData(System.String, Boolean)
   at System.Globalization.CultureInfo.InitializeFromName(System.String, Boolean)
   at System.Globalization.CultureInfo.Init()
   at System.Globalization.CultureInfo..cctor()
   at System.StringComparer..cctor()
   at System.AppDomainSetup.SetCompatibilitySwitches(System.Collections.Generic.IEnumerable`1<System.String>)
   at System.AppDomain.PrepareDataForSetup(System.String, System.AppDomainSetup, System.String[], System.String[])
Aborted (core dumped)

根据微软的解释:https://github.com/dotnet/core/blob/master/Documentation/build-and-install-rhel6-prerequisites.md#troubleshooting   是需要单独再安装ICU库,但是最大的坑就在这里了,不管是使用官方文章中的方法,或者只用yum install libicu 方法安装进的ICU,依旧提示ICU包错误,,经过测试,发现,core 3.0需要的icu的版本是59,而使用yum方法安装的是50的版本,官方文章中使用的是57的版本,,因此,导致icu包无法使用,,,

在华为的一个文章中有介绍到怎么解决.net core在鲲鹏上的移植,,具体可以参考这个链接 https://bbs.huaweicloud.com/forum/thread-46787-1-1.html

其中,3.1步是最重要的,必须要用文章上提供的libstdc++.so.6替换掉centos原有的文件,然后再使用3.2步骤中的方法,拉取源代码然后再次编译,即可解决,重要的是,如果跳过3.1,直接拉取源码,编译生成出来的包,也无法使用

 经过上述处理后,可以直接安装官方提供的arm上的sdk或者rumtime的包,然后直接运行.net core的程序,并且yum上提供的libgdiplus包也是可以直接安装使用的,不需要单独再编译