如何在Windows机器上编译.NET Core应用以在Linux上运行

55
我正在Windows 10机器上开发一个.NET Core应用程序(使用Visual Studio 2015更新3 + Microsoft .NET Core 1.0.1 VS 2015工具预览版2),这个应用程序需要在Ubuntu 16机器上发布。为了做到这一点,我必须将我的源代码移动到目标机器并在那里编译它才能运行。例如,我无法在Windows上编译代码并在Linux上运行。问题是:是否有任何方法可以在Windows机器上编译代码并在Linux上运行?
4个回答

69

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

-r|--runtime < RUNTIME_IDENTIFIER >

要构建的目标运行时。您可以使用RID catalog中的Runtime Identifiers (RIDs)列表。

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

例如,要为Ubuntu 16.04 runtime构建项目及其依赖项,请使用:

dotnet build --runtime ubuntu.16.04-x64

2
谢谢。但是我遇到了这个错误:无法找到与目标运行时 '.NETCoreApp,Version = v1.0' 兼容的运行时目标之一:'win10-x64,win81-x64,win8-x64,win7-x64'。 - amiry jd
1
@Javad_Amiry,你需要指定你的项目支持这些运行时。请参考https://dev59.com/IFoU5IYBdhLWcg3wTVzE#37590605和https://dev59.com/HVkS5IYBdhLWcg3wN0O_#40194003的SO答案。 - Set
1
只是为这个答案添加一个最新的更新。您需要在 csproj 文件中设置 RuntimeIdentifier,以便针对您所需的所有运行时进行目标设置,例如:<RuntimeIdentifiers>win10-x64;ubuntu.16.04-x64</RuntimeIdentifiers>。 - Jean Roux
2
这个运行时标记应该在什么情况下使用?它是一般的标记,适用于所有用例,只是为了优化特定平台生成的二进制文件吗?具体来说,它只用于构建自包含二进制文件,还是也可用于构建在dotnet core SDK/Runtime上运行的应用程序? - Kok How Teh

12
dotnet publish **path to your solution** --configuration Release --framework netcoreapp3.0 --output .**output path** --self-contained false --runtime linux-x64 --verbosity quiet

2
这是不是相当于右键单击项目,选择发布 => 将框架设置为Linux并进行发布? - SalmanShariati

12

选项一:命令行

dotnet build ProjectFile.csproj --runtime linux-x64

可在Linux,Windows和Mac上运行。

选项2:Visual Studio

如果你喜欢的话,你也可以在Visual Studio中“发布”你的应用程序。选择“文件系统”发布方式并设置此设置:

输入图像描述


@E_Blue 适用于两者。 - MC Emperor
只能用于C#代码,不能用于Basic代码,对吗? - E_Blue

11
对于那些现在看到它不再工作的人,似乎从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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接