我来带你一步步在 VS Code 里搭建出和图中一样的 C# 开发环境,并能成功运行代码。
一、准备工作:安装必备软件
1. 安装 .NET SDK
C# 代码运行需要 .NET SDK,这是微软官方的开发工具包:
-
前往官网下载:
-
选择你系统对应的版本(Windows/macOS/Linux),推荐下载 长期支持(LTS) 版本。
-
安装完成后,打开 VS Code 的终端(
Ctrl+快捷键),输入以下命令验证安装:shdotnet --version如果能输出版本号,说明安装成功。
2. 安装 VS Code 扩展
打开 VS Code,在扩展市场(左侧方块图标)安装这两个扩展:
- C# Dev Kit(微软官方的 C# 开发工具,包含语法高亮、调试、自动补全)
- C#(OmniSharp 提供的语言支持,通常会和 C# Dev Kit 一起安装)
二、创建和运行第一个 C# 项目(和图中结构完全一致)
1. 创建项目文件夹
- 在电脑上新建一个文件夹,比如
OpenCVIntro(和图中的项目名一致)。 - 用 VS Code 打开这个文件夹:
文件 → 打开文件夹。
2. 在终端创建控制台项目
在 VS Code 终端中,输入以下命令创建一个控制台应用:
sh
dotnet new console
执行后,VS Code 的文件资源管理器里会自动生成这些文件,和图中的结构完全对应:
Program.cs:你的主代码文件(图中打开的文件)OpenCVIntro.csproj:项目配置文件(和图中文件名一致)bin/和obj/文件夹:编译生成的文件(和图中显示的一样)
3. 编写和运行代码
-
打开
Program.cs,把默认代码改成你图中的版本:csharpusing System; namespace ourNamespace { class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } } } -
点击 VS Code 顶部的
运行 → 启动调试(或按F5),或在终端输入:shdotnet run3.如果想使用插件直接安装 需要下载Code Runner插件 详见https://zhuanlan.zhihu.com/p/576402546
终端会输出 Hello, World!,说明代码成功运行了 ✅
三、常见问题和补充说明
-
为什么我的文件结构和图里不一样?
新版 .NET 6+ 的
dotnet new console默认是顶级语句写法(没有 namespace 和 class),如果你想和图里的旧版结构完全一致,可以在创建项目时指定旧模板:shdotnet new console -lang C# -f net5.0或者直接手动把代码改成图中的写法即可。
-
调试怎么配置?
第一次按
F5运行时,VS Code 会自动生成.vscode/launch.json和.vscode/tasks.json文件,不需要手动配置,直接就能调试。
四、后续拓展(如果你要做 OpenCV)
你图里的项目名是 OpenCVIntro,如果要在 C# 里用 OpenCV,可以通过 NuGet 安装包:
-
在终端输入:
shdotnet add package OpenCvSharp4 dotnet add package OpenCvSharp4.runtime.win -
之后就可以在代码里引用 OpenCV 命名空间,写图像处理代码了。
一句话:这是给你的 C# 项目安装「Emgu CV」NuGet 包,让你能在 C# 里直接用 OpenCV(图像处理/计算机视觉)功能。
我拆开讲清楚:
1. dotnet add package 是什么?
这是 .NET 命令行工具(CLI)的命令:
sh
dotnet add package 包名
作用:
-
给**当前目录下的 C# 项目(.csproj)**添加一个外部库(NuGet 包)引用
-
自动修改
.csproj,加上:xml<PackageReference Include="Emgu.CV" Version="xxx" /> -
自动下载并安装这个库到项目里
简单说:就是在命令行里装库,等同于 VS 里右键"管理 NuGet 包"→安装。
2. Emgu.CV 是什么?
- OpenCV:最著名的开源图像处理/计算机视觉库,底层是 C++ 写的
- Emgu CV :把 OpenCV 封装成 .NET 库(C# 可用),叫「.NET wrapper」
有了它,你在 C# 里可以直接写:
csharp
using Emgu.CV;
using Emgu.CV.CvInvoke;
Mat img = CvInvoke.Imread("test.jpg");
CvInvoke.Imshow("window", img);
就能读图片、显示、人脸识别、边缘检测、摄像头处理......全部 OpenCV 功能。
3. 为什么你要执行这个命令?
因为你项目叫 OpenCVIntro,就是要做 C# + OpenCV 入门。
只装 Emgu.CV 还不够(它只是"包装层"),Windows 下必须再装运行时:
sh
dotnet add package Emgu.CV.runtime.windows
否则会报"找不到 opencv 原生 dll"。
4. 总结(最简单理解)
dotnet add package→ 安装 C# 库Emgu.CV→ C# 版 OpenCV(图像处理/视觉)- 你执行它 = 给项目装上 OpenCV 能力
一句话:dotnet add package Emgu.CV.runtime.windows 是 Windows 专用的「原生运行时」包,专门带 OpenCV 的 .dll 文件;没有它,你的 C# 程序一用 Emgu.CV 就直接崩溃。
下面拆开讲,保证你彻底明白:
1. 先分清楚两个包
你装了两个东西:
1)Emgu.CV(核心托管库)
- 是 C# 能看懂的「包装层」
- 提供
using Emgu.CV;、Mat、CvInvoke.Imread这些类和方法 - 但它本身不包含 OpenCV 底层代码(没有 .dll)
2)Emgu.CV.runtime.windows(Windows 原生运行时)
- 里面是编译好的 OpenCV C++ 原生 DLL(x86/x64)
- 比如:
opencv_world480.dll、cvextern.dll等 - 专门给 Windows 用,Linux/macOS 要装别的 runtime 包
2. 为什么必须装这个?(最关键)
Emgu.CV 工作原理:
C# 代码(Emgu.CV 托管层)
↓调用
OpenCV C++ 代码(在 .dll 里)
- 只装
Emgu.CV→ 只有"说明书",没有"干活的工人" - 运行时会直接报: 无法加载 DLL"opencv_worldxxx.dll"
或
Emgu.CV.CvInvoke 的类型初始值设定项引发异常
- 装了
runtime.windows→ NuGet 自动把所有 OpenCV 原生 DLL 复制到输出目录,程序才能真正跑起来
3. 这条命令的意思
sh
dotnet add package Emgu.CV.runtime.windows
dotnet add package:给当前项目安装 NuGet 包Emgu.CV.runtime.windows:Windows 平台的 Emgu CV 原生运行时包
等价于:
我要在 Windows 上用 Emgu CV,请把所有必需的 OpenCV DLL 都装好。
4. 总结(超级精简版)
- Emgu.CV = C# 接口(让你能写代码)
- Emgu.CV.runtime.windows = Windows 版 OpenCV 底层 DLL(让代码能跑)
- 缺一不可,否则运行报错、崩溃
要不要我给你一段最小示例代码,你直接复制就能测试图片读取+显示,确认两个包都装对了?