.net应用可在linux运行,前提是使用.NET Core或.NET 5+版本;需检查.csproj中为netcoreapp3.1及以上,发布时选择框架依赖或独立部署,注意RID、路径、权限、本地库及区域设置适配。

NET应用可以在Linux上直接运行,前提是使用.NET Core或.NET 5及更高版本(统称“.NET”),因为它们原生支持跨平台。.NET Framework不行,它仅限windows。
确认应用基于支持跨平台的.NET版本
打开项目文件(.csproj),检查<targetframework></targetframework>节点:
-
netcoreapp3.1、net5.0、net6.0、net7.0、net8.0等——可部署到Linux -
net472、net48等——属于.NET Framework,无法在Linux原生运行(除非用Mono,但不推荐用于新项目)
发布为独立部署(Self-contained)或框架依赖(Framework-dependent)
两种方式都可行,区别在于是否把.NET运行时一起打包:
- 框架依赖部署:体积小,但目标linux服务器必须已安装对应版本的.NET运行时
- 独立部署:生成包含运行时的完整文件夹,无需提前装.NET,适合环境不可控或无管理员权限的场景
命令示例(发布为Linux x64独立应用):
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish
注意:-r linux-x64中的运行时标识符(RID)需匹配目标系统架构(如linux-arm64用于树莓派或AWS Graviton)。
在Linux上运行和托管
发布后进入./publish目录,直接执行:
- 控制台应用:
./YourApp(确保有执行权限:chmod +x YourApp) - Web应用(如ASP.NET Core):
./YourWebApp,默认监听http://localhost:5000
生产环境建议用反向代理(如nginx)+ 进程管理(如systemd):
注意Linux特有事项
常见坑点提前规避:
- 路径分隔符:用
Path.Combine()代替硬编码"/"或"" - 文件权限与大小写:Linux文件系统区分大小写,资源路径、配置文件名别写错
- 依赖本地库:若用到
System.Drawing(旧版)、ffmpeg、sqlite等,需确认Linux下对应原生库已安装(如libgdiplus、libsqlite3-dev) - 时区与区域设置:容器中可能默认是
C.UTF-8,影响日期格式化或字符串比较,必要时在启动脚本中设export TZ=Asia/Shanghai
基本上就这些。只要用对.NET版本、选好发布方式、适配好路径和依赖,Linux跑.NET和windows一样稳。