资讯中心

获取当前dll路径

📅 2026/9/6 11:51:24
获取当前dll路径
问题根源说明AppDomain.CurrentDomain.BaseDirectory在ZWCAD插件环境下 CAD主程序启动目录不是你插件dll所在文件夹这就是找不到文件的元凶。throw抛出异常在CAD命令入口如果外层没有try‑catchCAD直接吞掉异常不会弹出弹窗、也看不到报错。方案1获取你DLL自身所在真实目录推荐通过当前执行程序集拿到dll物理路径不受CAD启动目录影响。usingSystem;usingSystem.IO;usingSystem.Reflection;//1. 获取本DLL所在文件夹100%指向插件dll生成目录不受CAD工作目录干扰AssemblyasmAssembly.GetExecutingAssembly();stringdllPathasm.Location;stringdllFolderPath.GetDirectoryName(dllPath);//2. 向上一级目录拼接 system\Config.dbstringdbRelativePath.Combine(dllFolder,..\system\Config.db);stringabsoluteDbFilePath.GetFullPath(dbRelative);//3. 文件检测 弹窗提示不用throwCAD不会吃掉弹窗if(!File.Exists(absoluteDbFile)){stringmsg$配置数据库没有找到\r\n预期路径{absoluteDbFile}\r\n\r\nDLL所在目录:{dllFolder};ZwSoft.ZwCAD.ApplicationServices.Application.ShowAlertDialog(msg);return;//终止初始化不要继续加载配置}//4. SQLite连接字符串stringconnStr$Data Source{absoluteDbFile};Version3;;PipeTopologyConfig.Instance.LoadAllFromDatabase(connStr);关键知识点对比代码取到的目录AppDomain.CurrentDomain.BaseDirectoryZWCAD.exe启动目录❌不要用Assembly.GetExecutingAssembly().Location你的插件DLL文件所在目录✅正确如果你仍然想保留 throw 抛异常版本带外层捕获弹窗必须包一层 try‑catch否则CAD静默吃掉异常看不到任何提示try{AssemblyasmAssembly.GetExecutingAssembly();stringdllFolderPath.GetDirectoryName(asm.Location);stringdbRelativePath.Combine(dllFolder,..\system\Config.db);stringabsoluteDbFilePath.GetFullPath(dbRelative);if(!File.Exists(absoluteDbFile)){thrownewFileNotFoundException(配置数据库文件不存在,absoluteDbFile);}stringconnStr$Data Source{absoluteDbFile};Version3;;PipeTopologyConfig.Instance.LoadAllFromDatabase(connStr);}catch(Exceptionex){ZwSoft.ZwCAD.ApplicationServices.Application.ShowAlertDialog($加载配置库失败:\r\n{ex.Message}\r\n{ex.StackTrace});}目录结构校验对照你文件夹Bin\ZWCADPlugin.dll ← DLL目录 system\Config.db ← DLL的上一级下面的system文件夹..\代表向上跳出Bin文件夹然后进入system路径完全匹配。如果你需要我还可以给你一段调试代码弹出消息框打印dll路径和解析后的数据库路径方便排查文件夹层级不对的问题。

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案