我有两个装有 Dotnet 6.0 的 Ubuntu 22.04 系统。从旧版本 Ubuntu 不断升级的那个系统可以毫无问题地运行我的 Dotnet Core 3.1 应用程序——因为它仍然具有libssl1.1
22.04 不再可用的旧运行时(和)。
在 WSL 中运行的版本(即 Windows 下的 Ubuntu)具有从 packages.ubuntu.com/focus 和microsoft下载的dotnet6.0
软件包。libssl1.1
aspnetcore-runtime-3.1
但dotnet --info
:
.NET SDK (reflecting any global.json):
Version: 6.0.108
Commit: 4e3a463d2b
Runtime Environment:
OS Name: ubuntu
OS Version: 22.04
OS Platform: Linux
RID: ubuntu.22.04-x64
Base Path: /usr/lib/dotnet/dotnet6-6.0.108/sdk/6.0.108/
global.json file:
Not found
Host:
Version: 6.0.8
Architecture: x64
Commit: 55fb7ef977
.NET SDKs installed:
6.0.108 [/usr/lib/dotnet/dotnet6-6.0.108/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 6.0.8 [/usr/lib/dotnet/dotnet6-6.0.108/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.8 [/usr/lib/dotnet/dotnet6-6.0.108/shared/Microsoft.NETCore.App]
尽管运行时显示/usr/share/dotnet/shared/Microsoft.NETCore.App/3.1.28/
答案1
我无法使用任何软件包存储库在 ubuntu 22 上运行 3.1。使用微软软件包存储库,我可以找到该软件包,但它无法获取依赖项:
sudo apt-get install dotnet-sdk-3.1
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies.
dotnet-sdk-3.1 : Depends: dotnet-targeting-pack-3.1 (>= 3.1.0) but it is not installable
Depends: netstandard-targeting-pack-2.1 (>= 2.1.0)
Depends: aspnetcore-targeting-pack-3.1 (>= 3.1.10) but it is not installable
E: Unable to correct problems, you have held broken packages
我认为这是因为 3.1 现在不受支持。
似乎有效的是卸载我所有的 dotnet 包
sudo apt remove dotnet*
然后直接从 https://dotnet.microsoft.com/en-us/download/dotnet/3.1
当您单击您的架构的链接时,它会提供以下说明:
通过运行此命令进行安装~/Downloads
(或者在任何有 tar.gz 的地方)
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.1.426-linux-x64.tar.gz -C $HOME/dotnet
然后将以下行添加到您的 bash 启动文件(.profile/.bashrc/whatever)
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
然后你需要在任何打开的终端中获取你的个人资料,然后dotnet run
再次执行此操作
答案2
**编辑:可能已过时:参见 Johny Raa 的回答:**
事实证明,Ubuntu 的 SDK 和运行时位置选择与 Microsoft 的不兼容。因此,拥有可以拉入所有软件包的软件包固然很好dotnet6
,但您想要的软件包实际上是 Microsoft 的!关键是首先创建一个apt
首选项文件:
derbro@L21PS773:~$ cat /etc/apt/preferences.d/dotnet.pref
Package: dotnet* aspnet* netstandard*
Pin: release o=Ubuntu,l=Ubuntu
Pin-Priority: -10
(根据使 Dotnet 6.0 工作的说明,我的工作系统已经具备了为什么这些方法都无法在 22.04(Jammy Jellyfish)上安装 .Net Core SDK 和运行时?。实际上,我在让 Dotnet 6 在此 WSL 安装上运行时没有遇到问题,我只是无法让它找到 3.1 运行时)
现在,按照 MS 说明安装 3.1 运行时或 SDK:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-3.1
#or
sudo apt-get install -y dotnet-sdk-3.1
(如果由于缺少 而无法安装libssl1.1
,则必须从https://packages.ubuntu.com/focal/libssl1.1并使用dpkg --install
)安装
然后升级你的 MS 源:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
并安装(或重新安装)dotnet 6
sudo apt install dotnet-sdk-6.0
答案3
在文件 /etc/ssl/openssl.cnf 中,注释掉以下行:
#openssl_conf = openssl_init
因此,尝试安装 sdk 3.1:
sudo wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-3.1
现在,转到终端并输入此命令:
dotnet --info
如果一切顺利,你将看到 dotnet 3.1 的安装路径