惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
T
Threatpost
G
Google Developers Blog
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
The Exploit Database - CXSecurity.com
H
Heimdal Security Blog
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
Hacker News: Ask HN
Hacker News: Ask HN
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Schneier on Security
B
Blog
V2EX - 技术
V2EX - 技术
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Y
Y Combinator Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Spread Privacy
Spread Privacy
The Last Watchdog
The Last Watchdog
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
S
Security @ Cisco Blogs
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
Project Zero
Project Zero
I
Intezer
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
SecWiki News
SecWiki News
Martin Fowler
Martin Fowler

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
开发环境搭建与项目配置
我才是银古 · 2026-06-19 · via 博客园 - 我才是银古

第二章:开发环境搭建与项目配置

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 软件要求

  1. 操作系统

    • Windows 10 64位(版本1909或更高)
    • Windows 11 64位
  2. 开发工具

    • Visual Studio 2026 社区版/专业版/企业版
    • 版本要求:17.14 或更高
    • 必须安装".NET桌面开发"工作负载
  3. 运行时环境

    • .NET 10 SDK
    • .NET Desktop Runtime 10
  4. 版本控制

    • Git 2.30 或更高版本
    • 推荐使用Git GUI工具(如SourceTree、GitKraken)

2.2 Visual Studio 2026 安装配置

2.2.1 下载安装

  1. 下载安装程序

  2. 选择工作负载
    在安装程序中选择以下工作负载:

    ☑ .NET 桌面开发
       ├── .NET Framework 4.8 开发工具
       ├── .NET 10 运行时
       └── Windows Forms 设计器
    
    ☑ 使用C++的桌面开发(可选,用于调试原生代码)
    
  3. 选择单个组件
    确保包含以下组件:

    • .NET 10 SDK
    • NuGet包管理器
    • 文本模板转换

2.2.2 VS2022 配置优化

  1. 配置文本编辑器

    工具 → 选项 → 文本编辑器 → C# → 高级

    ☑ 在键入时显示行分隔符
    ☑ 启用完整解决方案分析
    ☑ 使用EditorConfig设置(推荐)
    
  2. 配置调试选项

    工具 → 选项 → 调试 → 常规

    ☑ 启用"仅我的代码"
    ☐ 启用.NET Framework源单步执行(调试框架时启用)
    ☑ 启用源服务器支持
    
  3. 配置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

  1. 启动Visual Studio 2026
  2. 选择"克隆存储库"
  3. 输入仓库URL:https://gitee.com/qidaosoft/FY_Layout.git
  4. 选择本地路径
  5. 点击"克隆"

2.3.2 解决方案结构说明

打开LightBIM.sln后,可以看到以下项目结构:

解决方案 'LightBIM'
├── WorkingDrawing(解决方案文件夹)
│   ├── Plugins(解决方案文件夹)
│   │   └── QdLayout(项目)- 主插件项目
│   └── Providers(解决方案文件夹)
│       └── QdLayoutProvider(项目)- 三维Provider项目

2.3.3 项目文件详解

QdLayout.csproj 完整配置:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- 目标框架:.NET 10 Windows专用 -->
    <TargetFramework>net10.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 编译配置

  1. Debug配置

    • 包含完整调试信息
    • 不启用代码优化
    • 适合开发调试
  2. Release配置

    • 启用代码优化
    • 最小调试信息
    • 适合发布部署

编译步骤:

1. 打开解决方案
2. 选择配置(Debug/Release)
3. 选择平台(Any CPU)
4. 生成 → 生成解决方案(F6)
5. 检查输出窗口确认编译成功

2.6.2 调试配置

方法一:直接调试(推荐)

  1. 设置QdLayout为启动项目

  2. 配置调试属性:

    右键项目 → 属性 → 调试 → 打开调试启动配置文件UI

    {
      "profiles": {
        "QdLayout": {
          "commandName": "Executable",
          "executablePath": "$(SolutionDir)飞扬主程序\\lightcad.EXE",
          "workingDirectory": "$(SolutionDir)飞扬主程序"
        }
      }
    }
    
  3. 设置断点

  4. 按F5开始调试

方法二:附加进程调试

  1. 启动飞扬主程序:lightcad.EXE
  2. 在VS中:调试 → 附加到进程
  3. 选择lightcad.exe进程
  4. 确保选择"托管(.NET Core, .NET 5+)代码"
  5. 点击"附加"

2.6.3 调试技巧

  1. 条件断点

    // 右键断点 → 条件
    // 设置条件:element.Name == "草坪"
    
  2. 日志断点(Tracepoint)

    // 右键断点 → 操作
    // 输出:$"Element: {element.Name}, Type: {element.Type}"
    
  3. 即时窗口

    // 调试时打开:调试 → 窗口 → 即时
    ? element.BoundingBox
    ? lawn.Outline.Curve2ds.Count
    

2.7 创建新的插件项目

2.7.1 项目创建步骤

  1. 添加新项目

    • 右键解决方案 → 添加 → 新建项目
    • 选择"类库 (.NET)"
    • 项目名称:MyCustomPlugin
    • 框架:.NET 10
  2. 配置项目文件

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>net10.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>
    
  3. 添加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;
    
  4. 创建插件入口类

    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接口的类。确保:

  1. 编译输出的DLL放置在正确的插件目录
  2. 所有依赖的DLL都已复制
  3. 程序集名称已注册

2.8 常见问题排查

2.8.1 编译错误

问题1:找不到引用的程序集

错误 CS0246: 未能找到类型或命名空间名"LightCAD"

解决方案:检查Libs目录是否完整,引用路径是否正确。

问题2:.NET版本不匹配

错误 NETSDK1045: 当前 .NET SDK 不支持将 .NET 10 设定为目标

解决方案:安装.NET 10 SDK。

2.8.2 运行时错误

问题1:无法加载程序集

System.IO.FileNotFoundException: 未能加载文件或程序集

解决方案:确保所有依赖DLL都已复制到输出目录。

问题2:OpenGL初始化失败

OpenTK.Graphics.GraphicsContextException: ...

解决方案:更新显卡驱动,确保支持OpenGL 3.3+。

2.8.3 调试问题

问题1:断点不命中
解决方案:

  1. 确保编译配置为Debug
  2. 清理并重新编译
  3. 确认调试符号文件存在

问题2:附加进程后无法调试
解决方案:

  1. 确保选择正确的代码类型
  2. 以管理员身份运行VS
  3. 禁用"仅我的代码"选项

2.9 本章小结

本章详细介绍了FY_Layout开发环境的搭建过程,包括:

  1. 环境准备:Visual Studio 2026的安装和配置
  2. 源码获取:克隆和导入项目
  3. 项目配置:csproj文件详解和依赖管理
  4. 全局Using:简化代码的命名空间配置
  5. 编译调试:多种调试方式和技巧
  6. 新建项目:创建自定义插件的完整流程
  7. 问题排查:常见问题的解决方案

掌握了开发环境的配置后,下一章我们将深入学习FY_Layout的核心架构与模块设计。