Linux下使用csc编译调用Newtonsoft.Json的C#代码报CS0012错误如何解决
CS0012编译错误解决方案
根本原因
你使用的Newtonsoft.Json v13.x版本是基于.NET Standard 2.0规范编译的类库,而Linux环境下Mono套件自带的csc编译器默认编译时仅会引用.NET Framework核心程序集,不会自动加载netstandard的适配Facade程序集,因此无法识别Newtonsoft.Json中依赖的基础类型定义,抛出CS0012错误。
解决方法
编译时显式额外引用netstandard.dll即可,Mono环境下该文件默认路径为/usr/lib/mono/4.5/Facades/netstandard.dll,完整编译命令如下:
csc -r:/home/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll -r:/usr/lib/mono/4.5/Facades/netstandard.dll test.cs
编译成功后运行程序:
mono test.exe
输出结果为:
test
可选优化
如果需要频繁编译同类项目,可以做如下配置简化操作:
- 将netstandard.dll所在目录添加到csc的LIB环境变量,之后编译仅需写
-r:netstandard.dll即可,无需输入全路径 - 建议更换为.NET SDK进行C#开发,使用
dotnet build命令会自动处理所有类库依赖引用,无需手动指定程序集路径
内容的提问来源于stack exchange,提问作者Mount
相关产品推荐
相关产品推荐

