如何在 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,即: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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 VS Code 在 Windows 机器上为 linux 构建 .Net core 3.0 项目
使用动态链接在 Linux 上为 Windows 交叉编译 Qt 应用程序