当前位置: 首页 > news >正文

Ubuntu 20.04 下彻底卸载与升级 Dotnet 环境的完整指南

1. 为什么要彻底卸载Dotnet环境?

在Ubuntu 20.04上开发.NET应用时,我们经常会遇到需要切换不同版本SDK的情况。比如你正在维护一个老项目用的是.NET Core 3.1,但新项目要用.NET 8.0。这时候如果直接在系统里安装多个版本,很容易出现各种奇怪的问题。

我去年就踩过这样的坑:当时系统里同时装了.NET 5.0和6.0两个版本,结果运行dotnet build时总是莫名其妙地选择了错误版本的SDK,导致编译失败。后来才发现是因为PATH环境变量里两个版本的路径都混在一起了。所以我的经验是:除非确实需要多版本共存,否则最好保持开发环境的纯净

另一个常见场景是升级系统后残留的旧版Dotnet。比如从Ubuntu 18.04升级到20.04时,系统可能保留了之前安装的.NET Core 2.1,这些残留文件不仅占用磁盘空间,还可能干扰新版本的正常运行。

2. 查看已安装的Dotnet环境

2.1 使用apt命令查看

最直接的方法是使用apt命令查询已安装的SDK和运行时:

apt list --installed | grep dotnet

这个命令会列出所有已安装的dotnet相关包,输出大概长这样:

dotnet-runtime-5.0/focal,now 5.0.17-1 amd64 [installed] dotnet-sdk-5.0/focal,now 5.0.408-1 amd64 [installed] dotnet-targeting-pack-5.0/focal,now 5.0.17-1 amd64 [installed]

2.2 使用dotnet命令检查

如果你还能运行dotnet命令,可以用这些命令查看当前环境:

dotnet --list-sdks dotnet --list-runtimes

这两个命令会分别列出所有安装的SDK版本和运行时版本。比如输出可能是:

3.1.426 [/usr/share/dotnet/sdk] 5.0.408 [/usr/share/dotnet/sdk] 6.0.301 [/usr/share/dotnet/sdk]

特别注意:有时候apt和dotnet命令显示的版本可能不一致。这是因为有些版本是通过其他方式安装的(比如手动下载安装包)。这种情况下,我们需要结合两种方法的结果来全面了解系统状况。

3. 彻底卸载Dotnet环境

3.1 使用apt卸载SDK和运行时

假设我们要卸载.NET 5.0,可以执行以下命令:

sudo apt remove dotnet-sdk-5.0 dotnet-runtime-5.0 dotnet-targeting-pack-5.0

这里有几个容易忽略的点:

  1. targeting-pack:这个包经常被忘记卸载,它包含了特定版本的引用程序集
  2. aspnetcore运行时:如果你开发过Web应用,可能还需要卸载aspnetcore-runtime-5.0
  3. hosting bundle:如果是生产服务器,可能安装了dotnet-hosting-5.0

3.2 手动清理残留文件

即使使用apt卸载,Dotnet仍会在系统中留下一些文件和目录。我建议手动检查并清理这些位置:

sudo rm -rf /usr/share/dotnet sudo rm -rf /etc/dotnet sudo rm -rf ~/.dotnet sudo rm -rf ~/.nuget

特别注意:清理前最好备份~/.nuget目录,这里面可能包含你下载的NuGet包缓存。如果你经常切换项目,这些缓存可以节省大量下载时间。

3.3 检查环境变量

Dotnet安装时可能会修改你的shell配置文件(如.bashrc或.zshrc)。用文本编辑器检查这些文件,删除所有包含"dotnet"或"DOTNET"的行:

nano ~/.bashrc nano ~/.profile

4. 安装新版Dotnet环境

4.1 添加微软软件源

首先需要添加微软的官方软件源:

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

这个操作只需要执行一次,以后升级Dotnet版本时不需要重复。

4.2 安装最新版SDK

更新软件包索引并安装最新版SDK:

sudo apt update sudo apt install dotnet-sdk-8.0

如果你想安装特定版本(比如LTS版本),可以指定具体版本号:

sudo apt install dotnet-sdk-6.0

4.3 验证安装

安装完成后,运行以下命令验证:

dotnet --version dotnet --list-sdks

如果一切正常,你应该能看到新安装的版本号。

5. 多版本管理技巧

虽然我们建议保持环境纯净,但有时确实需要同时使用多个Dotnet版本。这时候可以使用global.json文件来指定项目使用的SDK版本。

5.1 创建global.json

在项目根目录下运行:

dotnet new globaljson --sdk-version 6.0.301

这会生成一个global.json文件,内容类似:

{ "sdk": { "version": "6.0.301" } }

5.2 解决版本冲突

当系统安装了多个SDK版本时,Dotnet会按照以下顺序选择版本:

  1. 当前目录或父目录中的global.json
  2. 用户目录下的global.json
  3. 使用最新安装的版本

如果遇到版本冲突问题,可以运行:

dotnet --info

这个命令会显示详细的版本信息和使用中的配置,对调试很有帮助。

6. 常见问题解决

6.1 安装失败:依赖关系问题

有时安装Dotnet会遇到依赖关系错误,特别是当你系统里有其他微软相关软件时。这种情况下可以尝试:

sudo apt --fix-broken install sudo apt autoremove

然后再重新安装Dotnet SDK。

6.2 命令找不到:PATH问题

如果你安装了新版本但dotnet命令仍然不可用,可能是PATH环境变量没设置正确。检查你的PATH是否包含Dotnet的安装路径:

echo $PATH

正常情况下应该包含/usr/share/dotnet。如果没有,可以手动添加:

export PATH=$PATH:/usr/share/dotnet

为了永久生效,把这行添加到你的shell配置文件中。

6.3 性能问题:NuGet源配置

国内开发者可能会遇到NuGet包下载慢的问题。可以尝试配置国内镜像源:

dotnet nuget add source https://mirrors.aliyun.com/nuget/ -n aliyun

这个命令会添加阿里云的NuGet镜像源,大幅提升包下载速度。

http://www.cnnetsun.cn/news/1367265.html

相关文章:

  • MinIO+Docker实战:5分钟搭建私有S3存储并集成Python客户端
  • React Native Typography 密集与Tall脚本支持:全面解决中文排版难题
  • Destiny核心原理:有向图与分形树在文件组织中的应用
  • # 发散创新:用Python自动化实现分子动力学模拟中的自由能计算在计算化学领域,**自由能(
  • 保姆级教程:在RTX 4090上从零部署PP-UIE大模型(含CUDA12.1配置)
  • AI辅助开发新体验:在快马平台中利用qoder进行智能代码重构与优化
  • OnlyOffice Docker部署避坑指南:从零到生产环境的完整配置流程
  • React Native Typography 与 styled-components 集成:现代React Native开发实战
  • Modularization-examples中的虚拟文件系统:抽象层设计与实现详解
  • Ruoyi+WebSocket实战:如何绕过安全配置实现即时通讯功能
  • VR消防安全学习机|沉浸式体验守护生命安全的新方式
  • springboot基于vue框架和协同过滤算法的图书推荐系统设计与实现
  • 基于卡尔曼滤波与ESKF算法的三维组合导航技术:MATLAB源码实现与性能对比分析
  • 三阶线性自抗扰控制器:Simulink仿真模型,动态响应迅速,参数调节方便,已封装可拖拽使用...
  • 5款强力游戏修改工具:轻松定制GameMaker游戏内容
  • Bidili Generator镜像免配置:内置CUDA 12.1+PyTorch 2.3+Xformers全栈环境
  • 保姆级教程:AI万能分类器从部署到实战,零代码实现智能分类
  • 深入Linux V4L2主从设备通信机制:从Camera Host控制器到Sensor的完整数据流分析
  • 【2024最新】Dify v0.9+ Multi-Agent深度适配指南:兼容LangChain 0.2、支持自定义Router与动态Tool注册,仅限首批内测用户掌握的6项隐藏能力
  • Smart-Admin微信小程序:smart-app目录结构与配置详解
  • AI Agent系统架构进阶指南:Agent Harness深度解析,从小白到大神,收藏这一篇就够了!
  • PVE环境下Intel核显直通与ffmpeg-qsv硬件加速全攻略
  • Leather Dress Collection 模型推理加速实战:算法优化与 Token 处理策略
  • VibeVoice Pro轻量级架构优势:0.5B模型对比1B+模型的延迟/显存/质量权衡
  • DoneJS 内存安全与性能优化:避免内存泄漏的 7 个最佳实践
  • EAS CLI 入门教程:从零开始配置你的第一个 Expo 项目
  • 电子课本下载:教师与学生的教育资源高效获取方案
  • Meixiong Niannian画图引擎在电商场景的应用:商品主图自动生成
  • 【漏洞剖析】Easy File Sharing Web Server 栈溢出漏洞的深度利用与防御
  • 黑丝空姐-造相Z-Turbo效果实测:看看AI生成的空姐有多惊艳