C# 解析 CAD 文件难ACadSharp 帮你 5 分钟搞定 DWG/DXF 读写【免费下载链接】ACadSharpC# library to read/write cad files like dxf/dwg.项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp把 200 份 DWG 图纸里的尺寸标注导成 Excel甲方下班前要。你打开 C# 项目发现连读取 DWG都要装 2GB 的 AutoCAD 二次开发套件瞬间心态崩了。别急ACadSharp这个纯 C# 的 CAD 文件读写库能让你只写 20 行代码就交差。一、它是什么C# 世界里最能打的 CAD 文件读写开源库ACadSharp 是一个基于 .NET Standard 2.0 的 C# 库核心能力一句话说清读取、创建、修改 DWG 与 DXF 文件。它面向三类人被图纸格式折磨的开发者需要批量解析图纸、提取几何数据做工具链的运维/测试/产品要把 CAD 数据接进自己的系统正在做技术选型的团队不想为读个文件就买昂贵的商业 SDK。它支持从 AC1009AutoCAD R12到 AC1032AutoCAD 2021的双向读写还能按需只加载指定实体类型来省内存。下图是它文档里展示的对齐尺寸标注解析效果红、黄、绿、青四色标记的正是FirstPoint、SecondPoint、DefinitionPoint等关键坐标点二、5 分钟快速上手ACadSharp 的安装与首个 DWG 读取跟着下面 4 步走你就能读出一个 DWG 文档建项目dotnet new console -n CadDemo cd CadDemo装包dotnet add package ACadSharpNuGet 一键安装无本地依赖准备文件git clone https://gitcode.com/gh_mirrors/ac/ACadSharp后把仓库samples/目录里的sample_AC1015.dwg拷到项目下写代码并运行在Program.cs里粘贴下面内容然后dotnet runusing ACadSharp; using ACadSharp.IO; // 用 DwgReader 读取文件using 保证资源自动释放 using (var reader new DwgReader(sample_AC1015.dwg)) { CadDocument doc reader.Read(); // 读取整个文档结构 Console.WriteLine($模型空间实体数量{doc.ModelSpace.Entities.Count}); }预期输出模型空间实体数量24。是不是比想象中简单关键点就是一行reader.Read()整个文档的图层、块、样式、实体全被组织成了对象树等你取用。三、真实实战批量提取图纸尺寸并导出 CSV业务痛点设计部有几十张图纸需要统计每张图里的尺寸标注情况人工数要一整天。预期结果一个控制台程序扫完整个目录自动生成带文件名、尺寸类型、测量值、图层的报表。完整可运行的代码如下带中文注释using System; using System.IO; using ACadSharp; using ACadSharp.Entities; using ACadSharp.IO; class DimensionExporter { public static void Main(string[] args) { string dir drawings; // 图纸所在目录 string output dimensions.csv; // 导出文件 using (var writer new StreamWriter(output)) { writer.WriteLine(文件,尺寸类型,测量值,所在图层); foreach (string file in Directory.GetFiles(dir, *.dwg)) { try { // 逐文件读取 DWG using (var reader new DwgReader(file)) { CadDocument doc reader.Read(); // 遍历模型空间实体只挑尺寸标注处理 foreach (var entity in doc.ModelSpace.Entities) { if (entity is Dimension dim) { writer.WriteLine(${Path.GetFileName(file)}, ${dim.GetType().Name},{dim.Measurement},{dim.Layer.Name}); } } } } catch (Exception ex) { Console.WriteLine($处理 {file} 失败{ex.Message}); } } } Console.WriteLine(导出完成请查看 dimensions.csv); } }运行输出与效果文件,尺寸类型,测量值,所在图层 sample_AC1015.dwg,DimensionAligned,10,0 sample_AC1015.dwg,DimensionRadius,25.5,0 ... 导出完成请查看 dimensions.csv这段代码里两个值得划重点的地方doc.ModelSpace.Entities是模型空间实体集合dim.Measurement是标注测量值dim.Layer.Name直接拿到所属图层名。整套逻辑不依赖 AutoCAD 环境扔到 Linux CI 服务器上也能跑。下面是另一种典型标注——三点角度标注的解析示意不同颜色点对应不同的几何含义如果业务更进一步要做格式转换也不难读取得到CadDocument后用DxfWriter写出的代码同样只有几行// 把 DWG 转成 DXF一套文档对象两用 using (var writer new DxfWriter(output.dxf, doc, binary: false)) { writer.Write(); // binary: false 表示写 ASCII DXF }四、新手避坑手册4 个高频问题的现象、原因与解法坑 1读取 DWG 直接抛异常现象DwgReader.Read()报CadNotSupportedException或DwgException。原因文件版本不受支持——比如 AC1009R12只支持 DXF 读写不支持 DWG 读取或者文件本身损坏。解法先看 README 里的版本兼容矩阵损坏文件可尝试先转存 DXF 再读或用DxfReader兜底。坑 2读出来的对象信息不全却没任何报错现象实体属性是默认值比如线没有端点、图层名空白。原因解析过程中有警告但你从没订阅过通知事件。解法像官方示例那样挂上reader.OnNotification (s, e) Console.WriteLine(e.Message);所有格式告警一目了然。坑 3尺寸标注的Measurement总是 0现象尺寸实体读出来了但测量值是 0。原因部分尺寸依赖关联实体或需要由样式计算更新直接读原始字段可能拿不到最终值。解法调用dim.GetMeasurementText()获取按样式格式化后的测量文本或用UpdateDimension()相关逻辑刷新。坑 4处理大文件时内存一路飙升现象循环读取几百个文件后程序越来越卡。原因CadDocument持有完整对象树且没有及时释放。解法每个文件处理完就结束其生命周期务必用using包住 reader还可以用DwgReaderConfiguration的IncludeEntities只加载你需要的实体类型从源头降内存。五、选型对比ACadSharp、netDXF 与商业 API 怎么选维度ACadSharpnetDXFAutoCAD .NET API上手成本低NuGet 即装即用低高必须先装 AutoCADDWG 支持读写AC1014~AC1032❌ 不支持✅ 完整DXF 支持读写AC1009 起读写✅ 完整运行环境无外部依赖可上 Linux/CI无外部依赖必须 Windows 授权授权方式开源免费开源免费商业付费选型结论如果你的需求是批处理 DWG/DXF、提取数据、格式互转且不想为工具链花一分钱——ACadSharp 就是最省事的选择尤其适合 Linux 服务器上的自动化任务。只处理 DXF 而不碰 DWGnetDXF 也可以作为备选。但要说实话如果你需要对极其冷门的自定义实体做 100% 无损的工业级兼容或者业务体量大到需要官方技术支持那商业 API 依然是兜底选项。预算有限又不需要它时别为它付费。六、总结与行动号召一句话记住 ACadSharp纯 C#、零依赖、开箱即用的 DWG/DXF 读写库让你半小时内搞定原本要折腾好几天的 CAD 数据处理。哪怕你是个刚入门的新手从读一个文件到批量产出报表也就一个下午的事。官方文档docs/index.md阅读示例docs/articles/samples/reading.md尺寸标注解析说明docs/articles/samples/dimensions.md完整示例代码samples/打开一个 DWG跑通第一段代码你就已经赢了 90% 还在观望的人。去试试吧这次不会再有 2GB 的安装包拦着你了。【免费下载链接】ACadSharpC# library to read/write cad files like dxf/dwg.项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考