如何在Windows机器上为Linux编译C# .NET Core应用程序
完全可行,具体操作方法如下
一、先确认项目基础
你的控制台项目得是.NET Core 3.1、.NET 5及以上版本的——.NET Framework不支持跨平台编译,别选错框架。右键项目→属性,就能查看目标框架。
二、为什么dotnet build生成Windows文件?
dotnet build -r linux-x64做的是依赖框架的编译,产出的.dll文件得在Linux上用dotnet命令才能运行,不会生成直接可执行的Linux程序。要生成能直接运行的文件,必须用dotnet publish,且开启独立部署模式。
三、解决发布时的MSB4803错误
这个错误是因为你的.csproj项目文件里包含了GenerateBootstrapper相关配置,而.NET Core版本的MSBuild不支持这个任务。修改项目文件即可解决:
- 右键项目→编辑项目文件(打开Deser.csproj)
- 找到并删除类似以下的内容:
<GenerateBootstrapper>true</GenerateBootstrapper> <!-- 或者任何包含Bootstrapper的PropertyGroup、Target节点 --> - 保存文件后重新执行发布命令。
四、正确的跨平台发布命令
执行这条命令生成Linux x64的独立可执行文件:
dotnet publish Deser.csproj -r linux-x64 -o D:\test -c Release --self-contained true
-r linux-x64:指定目标运行时为Linux 64位,其他Unix系统可替换为对应的RID(比如Mac用osx-x64,Ubuntu 22.04用ubuntu.22.04-x64,输入dotnet rid list可查看所有可用RID)--self-contained true:生成的部署包自带.NET运行时,目标Linux机器无需提前安装.NET环境- 发布完成后,
D:\test目录下会出现名为Deser(无后缀)的Linux可执行文件,将整个目录复制到Linux机器,给文件添加执行权限(chmod +x Deser)即可直接运行。
五、额外注意点
- 代码中不要使用Windows专属API(比如注册表操作、
System.Windows.Forms组件等),否则在Linux环境下会运行失败。 - 要适配多个Unix系统,只需替换对应的RID重复执行发布命令即可。
内容的提问来源于stack exchange,提问作者Alex Fiks
相关产品推荐
相关产品推荐

