开发环境搭建与项目配置
第二章:开发环境搭建与项目配置
2.1 开发环境要求
2.1.1 硬件要求
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | Intel Core i5 或同等性能 | Intel Core i7/i9 或 AMD Ryzen 7/9 |
| 内存 | 8GB RAM | 16GB RAM 或更高 |
| 硬盘 | 50GB 可用空间(SSD推荐) | 100GB SSD |
| 显卡 | 支持OpenGL 3.3的独立显卡 | NVIDIA GTX 1060 或更高 |
| 显示器 | 1920×1080 分辨率 | 2560×1440 或更高 |
2.1.2 软件要求
-
操作系统
- Windows 10 64位(版本1909或更高)
- Windows 11 64位
-
开发工具
- Visual Studio 2022 社区版/专业版/企业版
- 版本要求:17.5.5 或更高
- 必须安装".NET桌面开发"工作负载
-
运行时环境
- .NET 8.0 SDK
- .NET Desktop Runtime 8.0
-
版本控制
- Git 2.30 或更高版本
- 推荐使用Git GUI工具(如SourceTree、GitKraken)
2.2 Visual Studio 2022 安装配置
2.2.1 下载安装
-
下载安装程序
- 访问 https://visualstudio.microsoft.com/
- 下载Visual Studio 2022 Community(免费版本)
-
选择工作负载
在安装程序中选择以下工作负载:☑ .NET 桌面开发 ├── .NET Framework 4.8 开发工具 ├── .NET 8.0 运行时 └── Windows Forms 设计器 ☑ 使用C++的桌面开发(可选,用于调试原生代码) -
选择单个组件
确保包含以下组件:- .NET 8.0 SDK
- NuGet包管理器
- 文本模板转换
2.2.2 VS2022 配置优化
-
配置文本编辑器
工具 → 选项 → 文本编辑器 → C# → 高级
☑ 在键入时显示行分隔符 ☑ 启用完整解决方案分析 ☑ 使用EditorConfig设置(推荐) -
配置调试选项
工具 → 选项 → 调试 → 常规
☑ 启用"仅我的代码" ☐ 启用.NET Framework源单步执行(调试框架时启用) ☑ 启用源服务器支持 -
配置NuGet
工具 → 选项 → NuGet包管理器
☑ 允许NuGet下载缺少的包 ☑ 自动检查缺少的包
2.3 获取和配置FY_Layout源码
2.3.1 克隆代码仓库
方法一:使用命令行
# 创建工作目录
mkdir D:\Projects\CAD
cd D:\Projects\CAD
# 克隆仓库
git clone https://gitee.com/qidaosoft/FY_Layout.git
# 进入项目目录
cd FY_Layout
方法二:使用VS2022
- 启动Visual Studio 2022
- 选择"克隆存储库"
- 输入仓库URL:
https://gitee.com/qidaosoft/FY_Layout.git - 选择本地路径
- 点击"克隆"
2.3.2 解决方案结构说明
打开LightBIM.sln后,可以看到以下项目结构:
解决方案 'LightBIM'
├── WorkingDrawing(解决方案文件夹)
│ ├── Plugins(解决方案文件夹)
│ │ └── QdLayout(项目)- 主插件项目
│ └── Providers(解决方案文件夹)
│ └── QdLayoutProvider(项目)- 三维Provider项目
2.3.3 项目文件详解
QdLayout.csproj 完整配置:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- 目标框架:.NET 8.0 Windows专用 -->
<TargetFramework>net8.0-windows</TargetFramework>
<!-- 启用Windows Forms支持 -->
<UseWindowsForms>true</UseWindowsForms>
<!-- 启用隐式using -->
<ImplicitUsings>enable</ImplicitUsings>
<!-- 启用可空引用类型 -->
<Nullable>enable</Nullable>
<!-- 输出路径设置到Build目录 -->
<BaseOutputPath>..\Build</BaseOutputPath>
</PropertyGroup>
<!-- 排除不需要编译的文件 -->
<ItemGroup>
<Compile Remove="bin\**" />
<Compile Remove="新文件夹\**" />
<EmbeddedResource Remove="bin\**" />
<EmbeddedResource Remove="新文件夹\**" />
<None Remove="bin\**" />
<None Remove="新文件夹\**" />
</ItemGroup>
<!-- 引用LightCAD核心库 -->
<ItemGroup>
<Reference Include="LightCAD.Core">
<HintPath>..\Libs\LightCAD.Core.dll</HintPath>
</Reference>
<Reference Include="LightCAD.Drawing">
<HintPath>..\Libs\LightCAD.Drawing.dll</HintPath>
</Reference>
<Reference Include="LightCAD.Drawing.Actions">
<HintPath>..\Libs\LightCAD.Drawing.Actions.dll</HintPath>
</Reference>
<Reference Include="LightCAD.MathLib">
<HintPath>..\Libs\LightCAD.MathLib.dll</HintPath>
</Reference>
<Reference Include="LightCAD.Model">
<HintPath>..\Libs\LightCAD.Model.dll</HintPath>
</Reference>
<Reference Include="LightCAD.RenderUtils">
<HintPath>..\Libs\LightCAD.RenderUtils.dll</HintPath>
</Reference>
<Reference Include="LightCAD.Runtime">
<HintPath>..\Libs\LightCAD.Runtime.dll</HintPath>
</Reference>
<Reference Include="ThreeJs4Net">
<HintPath>..\Libs\ThreeJs4Net.dll</HintPath>
</Reference>
<!-- 其他第三方库 -->
<Reference Include="Newtonsoft.Json">
<HintPath>..\Libs\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="netDxf">
<HintPath>..\Libs\netDxf.dll</HintPath>
</Reference>
<Reference Include="Svg">
<HintPath>..\Libs\Svg.dll</HintPath>
</Reference>
<Reference Include="OpenTK">
<HintPath>..\Libs\OpenTK.dll</HintPath>
</Reference>
<Reference Include="OpenTK.WinForms">
<HintPath>..\Libs\OpenTK.WinForms.dll</HintPath>
</Reference>
<Reference Include="Flee">
<HintPath>..\Libs\Flee.dll</HintPath>
</Reference>
<Reference Include="WinFormsUI">
<HintPath>..\Libs\WinFormsUI.dll</HintPath>
</Reference>
</ItemGroup>
<!-- 资源文件配置 -->
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>
2.4 依赖库说明
2.4.1 LightCAD核心库
| 库名称 | 版本 | 功能描述 |
|---|---|---|
| LightCAD.Core | - | 核心框架,包含文档模型、元素定义、事务管理等 |
| LightCAD.Drawing | - | 二维绘图引擎,提供Canvas、Paint等绘图接口 |
| LightCAD.Drawing.Actions | - | 绘图操作类,包含Action基类和交互处理 |
| LightCAD.MathLib | - | 数学库,包含Vector、Matrix、Box、几何算法等 |
| LightCAD.Model | - | 模型定义,包含组件、参数集等 |
| LightCAD.Runtime | - | 运行时环境,包含命令系统、UI框架等 |
| LightCAD.RenderUtils | - | 渲染工具类 |
| LightCAD.DBUtility | - | 数据库工具类 |
2.4.2 第三方库
| 库名称 | 版本 | 功能描述 |
|---|---|---|
| ThreeJs4Net | - | 基于OpenGL的三维渲染引擎(Three.js的.NET实现) |
| Newtonsoft.Json | 13.0+ | JSON序列化/反序列化 |
| netDxf | - | DXF文件格式读写 |
| Svg | - | SVG图形处理 |
| OpenTK | 4.0+ | OpenGL绑定库 |
| OpenTK.WinForms | - | OpenTK的WinForms集成 |
| Flee | - | 表达式求值引擎 |
| WinFormsUI | - | DockPanel等WinForms UI控件 |
2.4.3 Libs目录结构
Libs/
├── LightCAD.Core.dll
├── LightCAD.Core.pdb # 调试符号文件
├── LightCAD.Drawing.dll
├── LightCAD.Drawing.Actions.dll
├── LightCAD.MathLib.dll
├── LightCAD.Model.dll
├── LightCAD.Runtime.dll
├── LightCAD.RenderUtils.dll
├── LightCAD.DBUtility.dll
├── ThreeJs4Net.dll
├── Newtonsoft.Json.dll
├── netDxf.dll
├── Svg.dll
├── OpenTK.dll
├── OpenTK.WinForms.dll
├── Flee.dll
├── WinFormsUI.dll
└── ...其他依赖
2.5 全局Using配置
2.5.1 GlobalUsing.cs 详解
FY_Layout使用C# 10的全局using功能简化代码:
// GlobalUsing.cs - QdLayout项目
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
// LightCAD核心命名空间
global using LightCAD.MathLib; // 数学库:Vector2, Matrix3, Box2等
global using LightCAD.Core; // 核心:LcElement, LcDocument等
global using LightCAD.Runtime; // 运行时:命令系统、常量等
global using LightCAD.Drawing; // 绘图:LcCanvas2d, LcPaint等
global using LightCAD.Drawing.Actions; // 操作:Action基类等
global using LightCAD.Model; // 模型:组件定义等
global using LightCAD.Core.Elements; // 元素:基础元素类型
global using ThreeJs4Net; // 三维:Shape, Mesh等
global using LightCAD.RenderUtils; // 渲染工具
// 类型别名解决命名冲突
global using Constants = LightCAD.Runtime.Constants;
global using Color = LightCAD.MathLib.Color;
global using Shape = ThreeJs4Net.Shape;
// 项目内部静态导入
global using static QdLayout.QdLayoutCategorySettings;
2.5.2 命名空间说明
| 命名空间 | 核心类 | 用途 |
|---|---|---|
| LightCAD.MathLib | Vector2, Vector3, Matrix3, Box2, Polyline2d | 几何计算 |
| LightCAD.Core | LcDocument, LcElement, ElementType, LcGuid | 文档模型 |
| LightCAD.Runtime | ILcPlugin, CommandClass, AppRuntime | 运行时 |
| LightCAD.Drawing | LcCanvas2d, LcPaint, LcTextPaint | 二维绘图 |
| LightCAD.Drawing.Actions | DirectComponentAction, PointInputer | 交互操作 |
| LightCAD.Model | DirectComponent, LcParameterSet | 组件模型 |
| ThreeJs4Net | Shape, Mesh, Material, Geometry | 三维渲染 |
2.6 编译和调试配置
2.6.1 编译配置
-
Debug配置
- 包含完整调试信息
- 不启用代码优化
- 适合开发调试
-
Release配置
- 启用代码优化
- 最小调试信息
- 适合发布部署
编译步骤:
1. 打开解决方案
2. 选择配置(Debug/Release)
3. 选择平台(Any CPU)
4. 生成 → 生成解决方案(F6)
5. 检查输出窗口确认编译成功
2.6.2 调试配置
方法一:直接调试(推荐)
-
设置QdLayout为启动项目
-
配置调试属性:
右键项目 → 属性 → 调试 → 打开调试启动配置文件UI
{ "profiles": { "QdLayout": { "commandName": "Executable", "executablePath": "$(SolutionDir)飞扬主程序\\lightcad.EXE", "workingDirectory": "$(SolutionDir)飞扬主程序" } } } -
设置断点
-
按F5开始调试
方法二:附加进程调试
- 启动飞扬主程序:
lightcad.EXE - 在VS中:调试 → 附加到进程
- 选择
lightcad.exe进程 - 确保选择"托管(.NET Core, .NET 5+)代码"
- 点击"附加"
2.6.3 调试技巧
-
条件断点
// 右键断点 → 条件 // 设置条件:element.Name == "草坪" -
日志断点(Tracepoint)
// 右键断点 → 操作 // 输出:$"Element: {element.Name}, Type: {element.Type}" -
即时窗口
// 调试时打开:调试 → 窗口 → 即时 ? element.BoundingBox ? lawn.Outline.Curve2ds.Count
2.7 创建新的插件项目
2.7.1 项目创建步骤
-
添加新项目
- 右键解决方案 → 添加 → 新建项目
- 选择"类库 (.NET)"
- 项目名称:
MyCustomPlugin - 框架:.NET 8.0
-
配置项目文件
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0-windows</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <BaseOutputPath>..\Build</BaseOutputPath> </PropertyGroup> <ItemGroup> <!-- 添加LightCAD引用 --> <Reference Include="LightCAD.Core"> <HintPath>..\Libs\LightCAD.Core.dll</HintPath> </Reference> <!-- 添加其他需要的引用... --> </ItemGroup> </Project> -
添加GlobalUsing.cs
global using System; global using System.Collections.Generic; global using System.Linq; global using LightCAD.Core; global using LightCAD.Runtime; global using LightCAD.Drawing; global using LightCAD.MathLib; -
创建插件入口类
namespace MyCustomPlugin { public class MyPlugin : ILcPlugin { public void InitUI() { // UI初始化 } public void Loaded() { // 插件加载时执行 Console.WriteLine("MyPlugin Loaded!"); } public void Completed() { // 完成初始化后执行 } public void OnInitializeDocRt(DocumentRuntime docRt) { // 文档运行时初始化 } public void OnDisposeDocRt(DocumentRuntime docRt) { // 文档运行时销毁 } } }
2.7.2 插件注册
LightCAD会自动扫描并加载实现了ILcPlugin接口的类。确保:
- 编译输出的DLL放置在正确的插件目录
- 所有依赖的DLL都已复制
- 程序集名称已注册
2.8 常见问题排查
2.8.1 编译错误
问题1:找不到引用的程序集
错误 CS0246: 未能找到类型或命名空间名"LightCAD"
解决方案:检查Libs目录是否完整,引用路径是否正确。
问题2:.NET版本不匹配
错误 NETSDK1045: 当前 .NET SDK 不支持将 .NET 8.0 设定为目标
解决方案:安装.NET 8.0 SDK。
2.8.2 运行时错误
问题1:无法加载程序集
System.IO.FileNotFoundException: 未能加载文件或程序集
解决方案:确保所有依赖DLL都已复制到输出目录。
问题2:OpenGL初始化失败
OpenTK.Graphics.GraphicsContextException: ...
解决方案:更新显卡驱动,确保支持OpenGL 3.3+。
2.8.3 调试问题
问题1:断点不命中
解决方案:
- 确保编译配置为Debug
- 清理并重新编译
- 确认调试符号文件存在
问题2:附加进程后无法调试
解决方案:
- 确保选择正确的代码类型
- 以管理员身份运行VS
- 禁用"仅我的代码"选项
2.9 本章小结
本章详细介绍了FY_Layout开发环境的搭建过程,包括:
- 环境准备:Visual Studio 2022的安装和配置
- 源码获取:克隆和导入项目
- 项目配置:csproj文件详解和依赖管理
- 全局Using:简化代码的命名空间配置
- 编译调试:多种调试方式和技巧
- 新建项目:创建自定义插件的完整流程
- 问题排查:常见问题的解决方案
掌握了开发环境的配置后,下一章我们将深入学习FY_Layout的核心架构与模块设计。

浙公网安备 33010602011771号