1. Linux与.NET Core的跨界融合
十年前如果有人告诉我.NET能在Linux上跑,我肯定会觉得是天方夜谭。但微软2014年开源.NET的决定彻底改变了游戏规则,现在我的生产环境已经全面转向Linux+.NET Core的组合。这种组合不仅性能出色,更重要的是打破了操作系统对开发者的束缚。
.NET Core是微软推出的跨平台开源框架,它彻底重构了传统.NET框架,剥离了Windows依赖。在Linux上运行.NET Core应用可以获得比Windows更高效的资源利用率和更低的运维成本。我最近部署的一个高并发API服务,在Ubuntu Server上的吞吐量比Windows Server高出23%,内存占用减少40%。
2. 环境准备与安装指南
2.1 系统兼容性检查
在开始之前,建议先确认你的Linux发行版是否受官方支持。目前主流发行版包括:
- Ubuntu 16.04+
- Debian 9+
- CentOS/RHEL 7+
- Fedora 32+
- Alpine 3.12+
可以通过以下命令检查系统信息:
cat /etc/os-release
uname -m # 确认CPU架构
注意:ARM架构的设备(如树莓派)需要额外配置,建议使用官方提供的ARM64版本
2.2 三种安装方式对比
2.2.1 包管理器安装(推荐)
这是最稳定的安装方式,以Ubuntu为例:
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 apt-get update
sudo apt-get install -y dotnet-sdk-6.0
2.2.2 Snap安装
适合需要自动更新的场景:
sudo snap install dotnet-sdk --classic
sudo snap alias dotnet-sdk.dotnet dotnet
2.2.3 手动安装
当需要特定版本或离线环境时适用:
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.400-linux-x64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
实测发现:包管理器安装的版本会随系统更新,而手动安装更适合需要版本锁定的生产环境
3. 项目创建与开发实战
3.1 创建第一个控制台应用
dotnet new console -o MyFirstApp
cd MyFirstApp
dotnet run
你会看到经典的"Hello World"输出。但更值得关注的是项目结构:
MyFirstApp/
├── Program.cs # 主程序文件
├── MyFirstApp.csproj # 项目配置文件
└── obj/ # 编译中间文件
3.2 WebAPI开发实例
现代后端开发的首选方案:
dotnet new webapi -o WeatherApi
cd WeatherApi
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
修改Program.cs添加最小API:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapGet("/weather", () => new { Temp = 25, Summary = "Sunny" });
app.Run();
启动服务:
dotnet run --urls "http://*:5000"
3.3 数据库连接技巧
在Linux连接SQL Server常见SSL错误解决方案:
var connectionString = "Server=myServer;Database=myDB;User=sa;Password=myPwd;TrustServerCertificate=True;";
或者在appsettings.json中配置:
{
"ConnectionStrings": {
"Default": "Server=.;Database=myDB;Trusted_Connection=False;TrustServerCertificate=True;"
}
}
4. 部署与优化策略
4.1 发布配置
生成独立部署包:
dotnet publish -c Release -r linux-x64 --self-contained true
关键参数说明:
-
-c Release:使用Release配置 -
-r linux-x64:指定目标运行时 -
--self-contained:包含所有依赖
4.2 系统服务化
创建systemd服务单元:
sudo nano /etc/systemd/system/myapp.service
服务文件示例:
[Unit]
Description=My .NET Core App
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
User=www-data
[Install]
WantedBy=multi-user.target
管理命令:
sudo systemctl enable myapp
sudo systemctl start myapp
4.3 性能调优
在Linux上特别有效的几个配置:
- 线程池优化:
ThreadPool.SetMinThreads(100, 100);
- 内存限制(在docker中特别有用):
export COMPlus_GCHeapHardLimit=0x10000000
- 禁用NUMA:
export COMPlus_GCNoAffinitize=1
5. 常见问题排雷指南
5.1 依赖缺失问题
典型错误:
Failed to load /usr/share/dotnet/shared/Microsoft.NETCore.App/6.0.0/libcoreclr.so
解决方案:
sudo apt-get install libc6 libgcc1 libgssapi-krb5-2 libicu66 libssl1.1 libstdc++6 zlib1g
5.2 权限问题
当遇到文件访问权限问题时:
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/dotnet
5.3 多版本管理
使用global.json锁定SDK版本:
{
"sdk": {
"version": "6.0.400",
"rollForward": "disable"
}
}
查看已安装版本:
dotnet --list-sdks
6. 进阶开发技巧
6.1 容器化部署
Dockerfile示例:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]
构建命令:
docker build -t myapp .
docker run -p 8080:80 -e ASPNETCORE_ENVIRONMENT=Production myapp
6.2 高可用配置
使用Nginx反向代理:
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
6.3 监控与日志
集成Prometheus监控:
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics => metrics
.AddAspNetCoreInstrumentation()
.AddPrometheusExporter());
在Program.cs中添加:
app.UseOpenTelemetryPrometheusScrapingEndpoint();
7. 生态工具推荐
7.1 开发工具
- VS Code + C#扩展:轻量级开发体验
- JetBrains Rider:全功能IDE
- OmniSharp:智能提示引擎
7.2 诊断工具
- dotnet-counters:实时性能监控
- dotnet-dump:内存转储分析
- dotnet-trace:性能追踪
使用示例:
dotnet tool install -g dotnet-counters
dotnet counters monitor System.Runtime MyApp
7.3 实用库推荐
- Dapper:轻量ORM
- Polly:弹性策略库
- Serilog:结构化日志
- Hangfire:后台任务
安装示例:
dotnet add package Dapper
dotnet add package Polly

1252

被折叠的 条评论
为什么被折叠?



