1. 项目背景与核心挑战
去年接手一个工业控制项目时,客户突然要求将原本部署在Windows工控机上的C#上位机程序迁移到Linux环境。这个需求让我不得不面对三个棘手问题:C#程序如何跨平台运行?如何保证不同设备间的实时通信?以及如何实现快速部署和版本管理?经过反复验证,最终采用Docker容器化方案完美解决了这些问题。
传统.NET Framework程序高度依赖Windows环境,而现代工业场景中Linux设备占比越来越高。通过.NET Core(现为.NET 5+)的跨平台特性配合Docker容器化,可以实现一次构建到处运行。实测在Rocky Linux 8.6上运行的容器化C#程序,与Windows端Modbus TCP通信延迟稳定在3ms以内,完全满足工业级实时性要求。
2. 环境准备与工具链搭建
2.1 开发环境配置
推荐使用Visual Studio 2022 Community版(免费)作为主开发工具,关键组件包括:
- .NET 6.0 SDK(长期支持版本)
- Docker Desktop(Windows版需启用WSL2后端)
- NuGet包管理器
重要配置项检查清单:
bash复制# 验证.NET版本
dotnet --list-sdks
# 输出应包含:6.0.400 [C:\Program Files\dotnet\sdk]
# 检查Docker引擎
docker version --format '{{.Server.Version}}'
# 推荐使用20.10.17以上版本
2.2 项目结构调整
典型工业上位机项目需要改造的代码结构:
code复制ProjRoot/
├── PLCComm/ # 原通信模块
│ ├── Modbus.cs # 需适配Linux的串口操作
├── Dockerfile # 新增的容器构建文件
├── docker-compose.yml # 服务编排文件
└── appsettings.json # 配置改为跨平台格式
关键改造点:
- 将
System.IO.Ports替换为SerialPortStream(支持Linux串口) - 配置文件路径改为`Path.Combine(E
