Ubuntu下用Mono mcs编译含Microsoft.Extensions.Configuration的C#程序报错求助
解决Mono mcs编译Microsoft.Extensions.Configuration程序的引用错误问题
问题根源
你引用的是**.NET 8版本**的Microsoft.Extensions.Configuration相关程序集,但当前使用的Mono 6.8.0.105仅兼容.NET Standard 2.0及更早的.NET Core版本,版本不匹配导致类型转发和基础引用错误。
正确解决步骤
1. 下载兼容版本的NuGet包
Mono 6.8适配.NET Standard 2.0,需下载对应版本的配置包:
# 安装适配.NET Standard 2.0的配置包版本 nuget install Microsoft.Extensions.Configuration -Version 3.1.31 nuget install Microsoft.Extensions.Configuration.Json -Version 3.1.31
2. 修正代码路径问题
Linux系统下路径分隔符为/,修改代码中的配置文件路径:
using System; using Microsoft.Extensions.Configuration; internal class Program { static void Main(string[] args) { IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("./appsettings.json", false, true); IConfigurationRoot root = builder.Build(); Console.WriteLine($"Hello, { root["weather"] } world!"); } }
3. 使用正确的构建脚本
引用Mono自带的基础程序集,以及NuGet下载的兼容版本dll:
#!/bin/bash mcs monotest.cs \ -r:System.Runtime.dll \ -r:System.Collections.dll \ -r:System.ComponentModel.Annotations.dll \ -r:System.IO.FileSystem.dll \ -r:Microsoft.Extensions.Configuration/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll \ -r:Microsoft.Extensions.Configuration.Abstractions/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll \ -r:Microsoft.Extensions.Configuration.Json/lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll \ -r:Microsoft.Extensions.FileProviders.Abstractions/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll \ -r:Microsoft.Extensions.FileProviders.Physical/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll \ -r:Microsoft.Extensions.Primitives/lib/netstandard2.0/Microsoft.Extensions.Primitives.dll
4. 创建配置文件示例
在程序目录下创建appsettings.json:
{ "weather": "sunny" }
5. 运行程序
编译完成后,用Mono执行生成的可执行文件:
mono monotest.exe
额外说明
- 若遇到其他缺失引用的错误,可通过NuGet安装对应依赖包,或检查Mono的
/usr/lib/mono/netstandard2.0/目录下的基础程序集。 - 若长期使用,建议升级Mono到6.12及以上版本(支持.NET 6+),可大幅减少版本兼容问题。
内容的提问来源于stack exchange,提问作者AWM
相关产品推荐
相关产品推荐

