openSuse 中的 `dotnet new command` 导致 `No usable version of the libssl was found` 错误

`dotnet new command` in openSuse causes `No usable version of the libssl was found` error

我正在尝试在 openSuse 中开发 .NET Core。我确实安装了 SDK 和教程中的所有内容。现在,当我尝试 运行 dotnet new console 命令时,我得到这个错误:

No usable version of the libssl was found

Aborted (core dumped)

我找到了这个答案:(),但没有得到我应该怎么做才能解决问题。他们似乎很深 linuxer(我不是,我只是想学习 linux)。知道如何 运行 命令吗?

更新:系统信息:

openSUSE Leap 15.0

内核版本4.12.14-lp150.12.22-default

OS 类型:64-bit

你能安装 libopenssl1_0_0 包吗? .NET Core 应该拿起它来使用它。

对好奇的人稍微长一点的解释:

OpenSSL 是 Linux 上最常用的加密库之一。它有多个版本。 1.0 版有点旧,但使用频繁。 1.1 是(相对)最近发布的较新版本。 1.0 和 1.1 不兼容。期望 1.0 的应用程序不能针对 1.1 构建,也不能 运行 针对它。

.NET Core 2.1,所有更早的版本只支持OpenSSL 1.0.

许多 Linux 发行版开始使 OpenSSL 1.1 成为新的默认设置。但是他们中的大多数仍然有 1.0 的包。所以你只需要找到并安装它。在 Fedora 上是 compat-openssl10。对于 openSuSE,它是 libopenssl1_0_0。然后 .NET Core 会自动找到它,拿起它并自动使用它。

编辑:自 2019 年 3 月起,这应该不是必需的。我们更新了 .NET Core 2.1 及更高版本,以选择并使用 OpenSSL 1.1 或 1.0(无论可用的)。因此,最近发布的 .NET Core 应该不会再出现此问题。

当使用 sqlpackage 工具 (https://docs.microsoft.com/en-us/sql/tools/sqlpackage-download?view=sql-server-2017) 时,在 Fedora 30(安装了 compat-openssl10)上仍然得到这个。

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.203
 Commit:    e5bab63eca

Runtime Environment:
 OS Name:     fedora
 OS Version:  30
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/2.2.203/

Host (useful for support):
  Version: 2.2.4
  Commit:  f95848e524

.NET Core SDKs installed:
  2.2.203 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.2.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.2.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.2.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Dotnet 独立运行良好。但是 运行 sqlpackage 不起作用:

$ sqlpackage /tsn:localhost /tu:xx /tp:yyy /A:Import /tdn:mydb /sf:mydb.bacpac
Importing to database 'mydb' on server 'localhost'.
No usable version of the libssl was found
Aborted (core dumped)

我在 github 中查找 "No usable version of the libssl was found"。您会在 C 中找到许多 .Net 核心安全库的变体,每个变体都有针对确切 libssl 库的非常特定的 dll 加载,并且尽管在许多地方命名不同,但一切都必须完美匹配。

对于 raspberry pi/debian,它需要 libssl 1.0.2,没有别的。

sudo apt-get install libssl1.0.2

应该为圆周率做点什么!我无法与其他变体对话。

我在 Ubuntu 20.04 上遇到了同样的问题 运行 sqlpackage,而 dotnet 正常工作。

dotnet 通过 apt 和 sqlserver 分发,但由于某些原因,sqlpackage 在此处通过 zip 分发 (https://docs.microsoft.com/en-us/sql/tools/sqlpackage-download?view=sql-server-ver15),并且仍然受到缺少 libssl1.0 的影响。

解决了

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5.6_amd64.deb
sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.6_amd64.deb

Ubuntu 22.04

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb

sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb