如何在 Windows 机器上为 Linux 编译 .NET Core 应用程序

Posted

技术标签:

【中文标题】如何在 Windows 机器上为 Linux 编译 .NET Core 应用程序【英文标题】:How to compile .NET Core app for Linux on a Windows machine 【发布时间】:2017-05-22 20:42:07 【问题描述】:

我正在 Windows 10 机器上开发一个 .NET Core 应用程序(使用 Visual Studio 2015 更新 3 + Microsoft .NET Core 1.0.1 VS 2015 Tooling Preview 2),它应该在 Ubuntu 16 机器上发布。为此,我必须将我的源代码移动到终端机器并在那里编译,以使其运行。例如我无法在 windows 上编译代码并在 linux 上运行它。问:有没有什么办法可以在win机上编译代码并在linux上运行?

【问题讨论】:

【参考方案1】:

使用dotnet build 命令,您可以指定--runtime 标志

-r|--运行时

要构建的目标运行时。有关您可以使用的运行时标识符 (RID) 的列表,请参阅RID catalog。

代表具体操作系统的 RID 通常遵循这种模式[os].[version]-[arch]

例如,为 Ubuntu 16.04 运行时构建项目及其依赖项:

dotnet build --runtime ubuntu.16.04-x64

【讨论】:

谢谢。但我收到了这个错误:Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. @Javad_Amiry 您需要指定您的项目支持这些运行时。请参阅***.com/a/37590605/2833802 和***.com/a/40194003/2833802 SO 答案 只是为这个答案添加更新。您需要在 csproj 文件中使用您所针对的任何运行时设置 RuntimeIdentifier,即:win10-x64;ubuntu.16.04-x64 什么时候应该使用这个运行时标志?它是适用于所有用例的通用标志,只是为了优化特定平台生成的二进制文件?具体来说,它是仅用于构建自包含的二进制文件,还是也可以用于构建在 dotnet core SDK/Runtime 上运行的应用程序?【参考方案2】:
dotnet publish **path to your solution** --configuration Release --framework netcoreapp3.0 --output .**output path** --self-contained false --runtime linux-x64 --verbosity quiet

【讨论】:

这和右键项目,发布是一样的吗=> 将框架设置为Linux并发布?【参考方案3】:

对于现在看到这不再起作用的任何人,似乎从 2020 年 11 月 10 日的更新开始,您现在必须指定项目文件,因为它不喜欢在解决方案 (.sln) 上使用指定的运行时没有了。

这里提出了一个关于此的问题 (https://github.com/dotnet/sdk/issues/14281),但显然这不会立即得到解决。

所以以前这会起作用:

dotnet build --runtime ubuntu.xx.xx-x64

它现在想要这样的东西:

dotnet build ProjectName.csproj --runtime ubuntu.xx.xx-x64

【讨论】:

【参考方案4】:

选项 1:命令行

dotnet build ProjectFile.csproj --runtime linux-x64

适用于 Linux、Windows 和 Mac。

选项 2:Visual Studio

如果您愿意,也可以在 Visual Studio 中“发布”您的应用。选择“文件系统”发布方式并设置此设置:

【讨论】:

@E_Blue 对于两者。 仅适用于 C# 代码,不适用于 Basic 代码,对吧?

以上是关于如何在 Windows 机器上为 Linux 编译 .NET Core 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 linux 上为 windows 编译

在 Linux 上为 Windows 开发人员调试

无法使用 VS Code 在 Windows 机器上为 linux 构建 .Net core 3.0 项目

使用动态链接在 Linux 上为 Windows 交叉编译 Qt 应用程序

在 32 位机器上为 64 位编译一个 c# 项目? (视觉工作室 2015)

如何在 Windows 7 64 位机器上为 anaconda 的 python 3.5 安装 cvxopt?