【发布时间】:2020-05-21 08:59:59
【问题描述】:
我是 dotnet 平台的新手。我有一个预建在 Windows 中的 c# 应用程序,我想在 dotnetcore (3.1) 平台上的 linux (Centos-7 x64) 中运行它。 我认为这个应用程序可以直接在 dotnetcore (linux) 上运行,而无需付出额外的努力。
但是当我在下面的命令行上运行它时,我得到“无法执行二进制文件”。
$./app.exe
额外: 我还为完全实验安装了单声道平台,我使用 xbuild 在 linux 平台上成功构建了 win-apps sln。但是当我运行应用程序时,我又遇到了同样的错误 在 Linux 上。
我的 dotnet 是:
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 3.1.300
Commit: b2475c1295
Runtime Environment:
OS Name: centos
OS Version: 7
OS Platform: Linux
RID: centos.7-x64
Base Path: /usr/share/dotnet/sdk/3.1.300/
Host (useful for support):
Version: 3.1.4
Commit: 0090613580
.NET Core SDKs installed:
3.1.300 [/usr/share/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.App 3.1.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
你能帮我解决这个问题吗?
谢谢。
【问题讨论】:
-
尝试运行“dotnet app.exe”
-
windows 和 linux 平台都是 64 位的。 (Windows 10 & centos7-64)
-
“我认为这个应用程序可以直接在 dotnetcore (linux) 上运行,而无需付出额外的努力。” ...不,这不是真的,对于 .NET 或对于任何其他语言或框架)。 Windows 可执行文件是与 Linux 可执行文件完全不同的文件类型。 stackoverflow.com/a/46861681/5947043 可能会对您有所帮助 - 您必须专门为目标平台构建。教程docs.microsoft.com/en-us/dotnet/core/tutorials/… 还说“编译应用程序时,创建了一个操作系统特定的可执行文件”。
-
另见docs.microsoft.com/en-us/dotnet/core/deploying/… - 它说得很清楚:“可执行文件不是跨平台的。它们特定于操作系统和 CPU 架构”。在将时间花在永远不会起作用的事情上之前,始终阅读文档会有所帮助……您需要为要运行它的平台再次构建应用程序。