在 Ubuntu 系统上搭建 .NET 开发环境,对于想要进行跨平台开发的程序员来说是个必备技能。我刚开始接触 Linux 下的 .NET 开发时,发现和 Windows 环境下的体验完全不同,但熟悉之后反而觉得更加高效。下面我就来分享下这些年积累的实战经验。
首先需要明确的是,.NET 在 Linux 上的支持已经非常完善。从早期的 Mono 到现在官方的 .NET Core 和后续版本,微软对 Linux 的支持力度越来越大。目前最新的 .NET 8 在 Ubuntu 上的性能表现甚至优于 Windows 平台,特别是在容器化部署场景下。
在开始安装前,建议先确认你的 Ubuntu 版本。不同版本的 Ubuntu 在安装步骤上会有细微差别:
bash复制lsb_release -a
目前主流的 LTS 版本包括:
我建议使用最新的 LTS 版本,因为微软会优先为这些版本提供支持。如果你用的是非 LTS 版本,可能会遇到一些兼容性问题。
安装 .NET 前需要确保系统已更新:
bash复制sudo apt update && sudo apt upgrade -y
还需要安装一些基础依赖:
bash复制sudo apt install -y wget curl gnupg apt-transport-https
这些工具在后续的安装过程中都会用到。特别是 apt-transport-https,它允许 apt 通过 HTTPS 协议下载软件包,确保安装过程的安全性。
微软为 Ubuntu 提供了官方的软件源,我们需要先将其添加到系统中。这里有个小技巧:不同版本的 Ubuntu 需要使用不同的软件包。
对于 Ubuntu 20.04:
bash复制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
对于 Ubuntu 22.04 及更新版本,微软已经将其纳入默认源,所以不需要额外添加。这个变化是我在实际使用中发现的,可以节省不少时间。
SDK 包含开发所需的所有工具,适合需要编译和构建项目的开发者。你可以选择安装特定版本或多个版本:
bash复制sudo apt update
sudo apt install -y dotnet-sdk-8.0 dotnet-sdk-7.0 dotnet-sdk-6.0
如果你只需要运行 .NET 应用而不需要开发,可以只安装运行时:
bash复制sudo apt install -y dotnet-runtime-8.0 aspnetcore-runtime-8.0
我在实际项目中经常需要同时维护多个使用不同 .NET 版本的项目,所以通常会安装多个版本的 SDK 和运行时。
安装多个版本后,可以使用以下命令查看已安装的版本:
bash复制dotnet --list-sdks
dotnet --list-runtimes
在项目中指定使用特定版本,可以通过 global.json 文件实现:
bash复制dotnet new globaljson --sdk-version 8.0.100
这个文件会告诉 .NET CLI 在当前目录及其子目录中使用指定的 SDK 版本。我在团队协作项目中发现这个功能特别有用,可以确保所有开发者使用相同的工具链。
在 Ubuntu 上开发 .NET 应用,我推荐使用以下工具:
以 VS Code 为例,安装后需要添加以下扩展:
bash复制code --install-extension ms-dotnettools.csharp
code --install-extension jmrog.vscode-nuget-package-manager
经过多次测试,我发现以下配置可以显著提升开发体验:
bash复制dotnet nuget locals all --list
xml复制<PropertyGroup>
<BuildInParallel>true</BuildInParallel>
</PropertyGroup>
bash复制export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
这些优化在我开发大型微服务项目时特别有效,编译时间可以减少 30% 以上。
有时候安装会遇到依赖冲突,这时可以尝试:
bash复制sudo apt --fix-broken install
如果还是不行,可以清除缓存后重试:
bash复制sudo apt clean
sudo apt update
当系统中存在多个 .NET 版本时,可能会遇到命令执行错误。这时可以明确指定版本:
bash复制/usr/share/dotnet/dotnet --version
或者使用绝对路径运行特定版本的 CLI 工具。
如果应用运行异常,可以启用更详细的日志:
bash复制export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0
dotnet run --verbosity detailed
这些环境变量可以帮助诊断很多奇怪的问题,特别是在网络连接和性能方面。
对于 ASP.NET Core 项目,我推荐使用以下命令创建新项目:
bash复制dotnet new web -o MyWebApp
cd MyWebApp
dotnet run
在 Ubuntu 上运行 ASP.NET Core 应用时,Nginx 是个不错的反向代理选择。配置示例:
bash复制sudo apt install -y nginx
sudo systemctl start nginx
然后在 /etc/nginx/sites-available/default 中添加代理配置。
在微服务场景下,我通常会结合 Docker 使用:
bash复制dotnet new webapi -o MyMicroservice
cd MyMicroservice
dotnet publish -c Release -o ./publish
然后创建 Dockerfile:
dockerfile复制FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY ./publish .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]
这种组合在 Ubuntu 服务器上部署特别方便,也是目前云原生开发的主流做法。
虽然 .NET 的跨平台桌面开发不如 Web 成熟,但使用 Avalonia 或 Uno Platform 也能实现不错的体验:
bash复制dotnet new avalonia.app -o MyDesktopApp
cd MyDesktopApp
dotnet run
在 Ubuntu 上运行这些框架需要额外安装一些依赖,比如 GTK 和 X11 相关库。