开发环境搭建与项目配置

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

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 2022 社区版/专业版/企业版
    • 版本要求:17.5.5 或更高
    • 必须安装".NET桌面开发"工作负载
  3. 运行时环境

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

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

2.2 Visual Studio 2022 安装配置

2.2.1 下载安装

  1. 下载安装程序

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

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

    • .NET 8.0 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 2022
  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 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 编译配置

  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 8.0
  2. 配置项目文件

    <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>
    
  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 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:断点不命中
解决方案:

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

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

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

2.9 本章小结

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

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

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


posted @ 2026-01-31 16:02  我才是银古  阅读(2)  评论(0)    收藏  举报