有没有这种感觉:同事发来一段C#代码,说"你直接跑一下看看"。你打开VS2026,新建项目,结果面对着十几个模板愣住了——控制台?WPF?WinForms?类库?Worker Service?
选错了,代码粘进去直接报错。
选对了,却发现命名空间不对,还是跑不起来。
这不是你笨,是没人告诉你第一步该怎么走。今天这节课就专门解决这个问题:从零开始,创建你人生中第一个C#控制台项目,并且让它真正跑起来。
「上一节我们学了 VS2026 内置的 Copilot 智能编程助手,掌握了用自然语言提问、让 AI 自动补全和生成代码的方法。今天在这个基础上,我们进一步学习如何从零创建一个完整的 C# 控制台项目,并写出第一段有工业语义的程序。」
控制台程序(Console Application),说白了就是一个只有黑色命令行窗口的程序。没有按钮,没有界面,输入文字、输出文字。
听起来很"老土",但在工厂场景里它的价值被严重低估。
你想想这些需求:定时采集设备数据写入数据库、批量处理生产报表、监听PLC报警信号然后发短信通知……这些任务根本不需要界面,控制台程序反而是最轻量、最稳定的选择。
「控制台程序 = 工厂后台服务的最佳练手载体。」
C# 14 引入了**顶级语句(Top-level Statements)**特性。
什么意思?以前写C#,哪怕只打印一行字,也要先写类、写Main方法、写命名空间,一堆套娃。现在不用了,直接写业务逻辑,.NET 10会自动帮你套好外壳。
对比一下:
| 写法 | C# 9 之前 | C# 14 顶级语句 |
|---|---|---|
| 代码量 | 约10行 | 约1行 |
| 需要写Main方法 | 是 | 否 |
| 适合初学者 | 一般 | 非常适合 |
| 工程级项目 | 适用 | 同样适用 |
「顶级语句不是"偷懒",是C#语言进化的方向。」
先用工厂类比帮你理解:
你现在要做的,就是先建好一栋车间(项目),然后在里面写第一份操作规程(类+方法)。
下一节会专门讲解这个层级关系,今天先建起来、跑起来,概念自然就清晰了。
新建项目后,VS2026会自动生成几个文件,初学者经常被这些文件搞懵:
| 文件名 | 作用 | 需要动它吗? |
|---|---|---|
Program.cs | 程序入口,写业务逻辑的地方 | 是,主战场 |
项目名.csproj | 项目配置文件,记录.NET版本等 | 一般不用手动改 |
obj/ 文件夹 | 编译中间文件 | 不用管 |
bin/ 文件夹 | 编译输出,生成的.exe在这里 | 部署时用到 |
「今天你只需要关注一个文件:Program.cs。」
Step 1:打开 VS2026,进入新建项目向导
启动 VS2026,点击起始页的「创建新项目」按钮。 在搜索框输入"控制台",选择「控制台应用」(注意:选 C# 图标那个,不要选 VB.NET)。 点击「下一步」。
📎 Copilot 辅助:如果你不确定该选哪个模板,可以在 Copilot 对话框输入:「我想写一个采集设备数据的后台程序,应该用哪种C#项目模板?」Copilot 会直接告诉你选"控制台应用"并说明原因。
Step 2:配置项目名称和路径
IndustrialMonitor(工业监控,有语义)D:\proejct\11Test
⚠️ 路径里不要有中文和空格,这是编程界的铁律。
Step 3:选择目标框架
在「框架」下拉框中选择 .NET 10.0。 确认勾选「不使用顶级语句」取消勾选(即保持默认,使用顶级语句),不过作为老人我还是系统勾上这个。 点击「创建」。

📎 Copilot 辅助:创建完成后,VS2026 Copilot 会自动弹出"代码解释"浮层,解释
Program.cs里每一行的含义。点击「解释此代码」即可查看。
Step 4:运行你的第一个程序

直接按键盘 F5,或点击顶部工具栏绿色「▶ 运行」按钮。
黑色控制台窗口弹出,显示 Hello, World!,说明环境配置完全正确。
📎 Vibe Coding Prompt 示例:在 Copilot 对话框输入「把 Hello World 改成输出当前时间和一条模拟设备报警信息」,Copilot 会直接生成修改后的代码,你只需粘贴替换。


这段代码实现了一个模拟工业设备状态监控的控制台输出程序,包含设备温度、产量计数和报警阈值判断。
csharp// =====================================================
// 项目:IndustrialMonitor
// 功能:模拟注塑机设备状态监控(控制台输出版)
// 框架:.NET 10 | C# 14 | 顶级语句模式
// =====================================================
// 引入系统基础命名空间(.NET 10 默认已全局引入,此处显式写出便于理解)
using System;
// ---------- 设备基础参数定义 ----------
// 设备名称
string deviceName = "注塑机 #3号";
// 当前设备温度(摄氏度),模拟传感器读取值
double deviceTemp = 187.6;
// 报警温度阈值,超过此值触发警告
double alarmThreshold = 200.0;
// 当前班次累计产量(件)
int productionCount = 1482;
// 班次目标产量(件)
int targetProduction = 1500;
// ---------- 输出设备状态报告 ----------
Console.OutputEncoding=System.Text.Encoding.UTF8; // 设置控制台输出编码以支持特殊符号
Console.WriteLine("========================================");
Console.WriteLine($" 工业设备状态监控系统 v1.0");
Console.WriteLine($" 运行时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
Console.WriteLine("========================================");
Console.WriteLine($"\n【设备】{deviceName}");
Console.WriteLine($"【温度】{deviceTemp:F1} °C (报警阈值:{alarmThreshold:F1} °C)");
// ---------- 温度报警判断逻辑 ----------
// 判断当前温度是否超过报警阈值
if (deviceTemp >= alarmThreshold)
{
// 超温:输出红色警告(控制台颜色切换)
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("⚠️ [报警] 设备温度超标!请立即检查冷却系统!");
Console.ResetColor();
}
else
{
// 正常:输出绿色状态
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("✅ [正常] 温度在安全范围内");
Console.ResetColor();
}
// ---------- 产量进度计算 ----------
// 计算当前产量完成百分比
double completionRate = (double)productionCount / targetProduction * 100;
Console.WriteLine($"\n【产量】{productionCount} 件 / 目标 {targetProduction} 件");
Console.WriteLine($"【进度】{completionRate:F1}% {GetProgressBar(completionRate)}");
// ---------- 班次结论 ----------
// 判断是否完成目标
if (productionCount >= targetProduction)
{
Console.WriteLine("\n🎯 本班次目标已完成!");
}
else
{
int remaining = targetProduction - productionCount;
Console.WriteLine($"\n📋 距目标还差 {remaining} 件,加快节拍!");
}
Console.WriteLine("\n========================================");
Console.WriteLine(" 按任意键退出监控...");
Console.ReadKey();
// ---------- 本地函数:生成文本进度条 ----------
// 根据完成百分比生成可视化进度条字符串
static string GetProgressBar(double percent)
{
// 进度条总格数
int totalBlocks = 20;
// 计算已填充格数
int filledBlocks = (int)(percent / 100 * totalBlocks);
// 构建进度条字符串
string filled = new string('█', filledBlocks);
string empty = new string('░', totalBlocks - filledBlocks);
return $"[{filled}{empty}]";
}

运行后,控制台会显示一份格式整齐的设备状态报告:设备名称、当前温度(绿色"正常"或红色"报警")、产量进度条,以及班次完成提示。把 deviceTemp 改成 205.0 再跑一次,你会看到红色报警信息弹出——这就是工业报警逻辑的最简雏形。
场景任务: 冲压车间需要一个小工具,在每次换班时快速打印当班的设备点检结果,包含3台冲压机的状态(正常/故障),输出到控制台供班长确认。
思路拆解: ① 定义3台设备的名称和状态数组。 ② 用循环遍历每台设备。 ③ 根据状态值判断输出"正常"还是"故障"。 ④ 故障设备用红色高亮显示。 ⑤ 最后统计故障台数并给出班长决策提示。
csharp// 冲压车间换班点检报告生成器
// .NET 10 | C# 14
using System;
// 设备名称列表
string[] pressNames = { "冲压机A1", "冲压机A2", "冲压机A3" };
// 设备状态:true = 正常,false = 故障
bool[] pressStatus = { true, false, true };
int faultCount = 0;
Console.WriteLine($"===== 换班点检报告 [{DateTime.Now:HH:mm}] =====");
for (int i = 0; i < pressNames.Length; i++)
{
if (pressStatus[i])
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($" {pressNames[i]}:✅ 正常");
Console.ResetColor();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($" {pressNames[i]}:❌ 故障 — 需维修后方可开机");
Console.ResetColor();
faultCount++;
}
}
Console.WriteLine("=====================================");
// 班长决策提示
if (faultCount == 0)
Console.WriteLine(" 全部设备正常,可正常交班。");
else
Console.WriteLine($" ⚠️ {faultCount} 台设备故障,请通知维修班组后再交班!");
Console.ReadKey();

运行后控制台输出三台设备的点检状态,A2故障行以红色高亮显示,并在底部给出班长交班建议——把这个工具交给班长,直接替代手写点检表。
坑一:项目路径带中文,现在来说问题不大,不过尽量不要这样
❌ 错误做法:C:\用户\张工\我的项目\IndustrialMonitor
✅ 正确做法:D:\CSharpProjects\IndustrialMonitor
📌 原因:部分编译工具链对中文路径支持不完整,会出现莫名其妙的"找不到文件"错误,查半天查不出来。
坑二:Console.ReadKey() 漏写,窗口一闪而过
❌ 错误做法:程序最后一行直接结束,没有任何等待
✅ 正确做法:末尾加上 Console.ReadKey();
📌 原因:控制台程序运行完毕会立刻关闭窗口,你根本看不到输出结果。加上这一行,程序会等你按任意键才退出。
坑三:整数除法导致进度计算结果为0
❌ 错误做法:double rate = productionCount / targetProduction * 100;
✅ 正确做法:double rate = (double)productionCount / targetProduction * 100;
📌 原因:两个 int 相除在C#里是整数除法,1482/1500的结果直接变成0,强制转换其中一个为 double 才能得到小数结果。
「学完本节,你掌握了:」
用 VS2026 从零创建 .NET 10 控制台项目的完整流程,理解了 C# 14 顶级语句带来的简洁写法,学会了用 Console.WriteLine 输出设备状态信息,用 if 判断实现报警逻辑,用 for 循环遍历多台设备数据,还顺手用上了 Copilot 辅助生成代码的 Vibe Coding 工作方式。控制台程序看着简单,但它是你后续开发工业后台服务的基础骨架——地基打好了,后面盖多高都稳。
📖 本文是《C# 工业数字化应用开发专家》系列第 007 节
上一节:【VS2026 AI 内置功能:Copilot 智能编程助手入门】
下一节:【理解解决方案、项目、文件的层级关系】(明天更新)
💬 你在工厂里有没有想用程序替代的重复性工作? 欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。
🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这420节,从工厂小白到工业软件开发专家,我们一起走。
#C#编程入门 #工业数字化 #VS2026 #工厂工程师 #.NET开发
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!