Ubuntu 16.04下Dotnet Core 2.2无法构建基础WebSharper应用
wsfsc.exe退出码8的问题 我之前在Ubuntu 16.04 + .NET Core 2.2环境里遇到过几乎一模一样的问题,这个错误本质是WebSharper的F#编译工具wsfsc.exe在Linux环境下的依赖或版本兼容问题导致的,下面是我亲测有效的解决步骤:
步骤1:更新WebSharper包版本
默认模板拉取的WebSharper版本可能和.NET Core 2.2兼容性不佳,你可以手动修改项目文件WebSharperTest.fsproj里的WebSharper相关包版本,换成对.NET Core 2.2 Linux支持更完善的稳定版,比如4.7.1.318:
<PackageReference Include="WebSharper" Version="4.7.1.318" /> <PackageReference Include="WebSharper.FSharp" Version="4.7.1.318" /> <PackageReference Include="WebSharper.AspNetCore" Version="4.7.1.318" />
修改后执行dotnet restore重新还原包,再尝试dotnet build。
步骤2:补全系统依赖库
wsfsc.exe作为.NET Core应用,在Ubuntu 16.04上运行需要一些系统级依赖,比如libunwind和libicu,你可以通过apt安装:
sudo apt-get update sudo apt-get install libunwind8 libicu55
Ubuntu 16.04默认的libicu55刚好适配.NET Core 2.2的运行时需求,安装完成后重新构建项目。
步骤3:清理构建缓存
旧的构建缓存偶尔会引发奇怪的编译错误,你可以先删除项目的bin和obj目录,再重新构建:
rm -rf ./bin ./obj dotnet build
步骤4:锁定.NET Core SDK版本
如果系统里同时存在多个SDK版本,可能会导致项目使用错误的版本构建。先查看已安装的SDK:
dotnet --list-sdks
如果有多个版本,在项目根目录创建global.json文件指定2.2版本(比如2.2.402):
{ "sdk": { "version": "2.2.402" } }
执行dotnet restore后再尝试构建。
补充:如果以上步骤都无效,你可以先创建一个仅保留默认Hello World代码的极简WebSharper项目,排除自定义代码的影响。如果极简项目也报错,大概率是环境兼容性问题——Ubuntu 16.04已停止官方支持,后续WebSharper版本对其兼容性会越来越差,建议考虑升级到Ubuntu 18.04及以上版本。
内容的提问来源于stack exchange,提问作者onemorecupofcoffee

