【问题标题】:.Net core application cannot run on Linux?.Net 核心应用程序无法在 Linux 上运行?
【发布时间】:2018-08-22 19:09:53
【问题描述】:

我在 Visual Studio 中创建了一个 .Net core C# 控制台应用程序,并使用以下步骤在 Linux 上对其进行了测试。

  1. 使用 Visual Studio“构建 -> 发布”菜单项在 ....\bin\Release\netcoreapp2.1\publish 中创建可执行文件。
  2. 将“发布”目录复制到 Linux 机器上
  3. 在 Linux 上,chmod 777 myApp.dll
  4. ./myApp.dll

但是,执行应用程序显示错误

-bash: ./myApp.dll: 无法执行二进制文件

【问题讨论】:

  • 在 Linux 和 Windows 上,动态链接库不是独立的可执行文件。您可能只能从命令行启动可执行文件(exe,Linux 中默认为无扩展名)。
  • Linux机器是否安装了.NET Core运行时或SDK?
  • 是的,我也阅读了 SO 问题。我以为它会通过 Visual Studio 为 Linux 生成一个可执行文件 myApp,但它没有。
  • @RQDQ,不,它没有。我想创建一个独立的 .Net 网络核心应用程序。

标签: c# linux .net-core


【解决方案1】:

看起来你做了一个Framework-Dependendent Deployment。本质上,发布命令是:

dotnet publish -c Release

FDD 假定您将拥有一个 .NET Core 运行时来在目标平台上运行您的应用程序。

一旦您将 publish 目录复制到另一台机器(可能是 Linux、macOS 或 Windows),您的应用程序仍然需要 .NET Core 运行时来运行您的应用程序。

安装 .NET Core 运行时取决于您使用的特定 Linux 发行版。安装后,您可以通过以下方式运行您的应用程序:

dotnet /path/to/publish/myApp.dll

框架相关部署的替代方案是Self-Contained Deployment。在此模式下,已发布的应用程序将包含您的应用程序以及 .NET Core 运行时的副本。在命令行上,进行 SCD 发布如下所示:

dotnet publish -r linux-x64 -c Release

要在 Visual Studio 中执行此操作,请参阅上面的链接。然后,您应该会看到一个包含myApp 文件的bin\Release\netcoreapp2.1\linux-x64\publish\ 目录。您可以将此发布目录复制到 Linux 发行版并运行:

/path/to/linux-x64/publish/myApp

【讨论】:

  • 我试过dotnet publish -r linux-x64 -c Release,它得到了Error: An assembly specified in the application dependencies manifest (myApp.deps.json) was not found: package: 'AWSSDK.Core', version: '3.3.24.8' path: 'lib/netstandard1.3/AWSSDK.Core.dll'
  • 我下载了awssdk.core.3.3.24.8.nupkg,它包含lib/netstandard1.3/AWSSDK.Core.dll。该软件包是否存在于您的磁盘上?是否包含此文件?
  • 我在错误的目录中。当在Publish 目录下运行相同的myApp 时,它可以工作。但是,我需要从父文件夹手动复制文件 appsettings.json。这听起来像是 .Net 核心发布的一个小故障。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2016-05-31
  • 2018-05-14
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多