使用C#从CAD库文件获取块时生成dll后运行报错求助

问题根源
你使用的相对路径是相对于程序当前工作目录的:
- 调试时工作目录默认是项目输出目录(如
bin/Debug),和你预设的相对路径层级匹配,因此可以正常读取文件 - 编译为dll被其他程序调用时,工作目录会变为调用方程序的启动目录,和dll实际存放目录不匹配,因此找不到dwg文件
修复代码
改为获取当前执行dll自身所在的目录,再拼接dwg文件名即可,只要保持dll和CadLibrary.dwg在同一目录下就不会出现路径错误:
using System.Reflection; using Autodesk.AutoCAD.DatabaseServices; // 其他原有逻辑 using (Database OpenDb = new Database(false, true)) { // 获取当前dll所在目录路径 string dllDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 拼接dwg文件完整路径 string sPath = Path.Combine(dllDir, "CadLibrary.dwg"); // 可选:新增文件存在校验,方便后续排查问题 if (!File.Exists(sPath)) { throw new FileNotFoundException("未找到CAD库文件", sPath); } OpenDb.ReadDwgFile(sPath, System.IO.FileShare.ReadWrite, true, ""); // 后续原有块提取逻辑 }
注意事项
- 调用
Assembly相关API需要先引用System.Reflection命名空间 - 用
Path.Combine拼接路径可以避免不同场景下的路径分隔符不兼容问题 - 后续如果需要调整dwg存放位置,仅需修改拼接的子路径即可,不需要修改基础目录获取逻辑
内容的提问来源于stack exchange,提问作者PhilipZone
相关产品推荐
相关产品推荐

