如何编译可在Linux(CentOS)环境运行的C#项目?
解决C#项目在CentOS上无法通过Mono运行的问题
1. 先明确项目的目标框架
查看项目的.csproj文件里的TargetFramework节点:
cat YourProject.csproj | grep TargetFramework
如果是net6.0/net7.0这类.NET Core/5+系列框架,Mono对其支持有限,不需要用Mono,直接用.NET SDK处理即可。
2. .NET Core/5+项目的跨平台处理
- 编译时指定Linux运行时:
dotnet build --configuration Release --runtime linux-x64 - 将编译后的文件复制到CentOS,进入输出目录后直接运行:
./YourProject.exe
3. 若项目基于.NET Framework(需用Mono)
如果TargetFramework是net48这类.NET Framework版本:
- 在Windows上用Visual Studio或
msbuild编译,确保生成兼容Mono的纯CIL程序集:msbuild /p:TargetFramework=net48 /p:Configuration=Release - 将生成的exe及依赖库复制到CentOS,用Mono运行:
mono YourProject.exe
4. 排查单文件发布问题
如果之前用了单文件发布命令(比如dotnet publish -r linux-x64 -p:PublishSingleFile=true),生成的exe是包含运行时的二进制文件,不是纯CIL格式,Mono无法识别,需取消单文件发布,或直接用dotnet命令运行。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

