在IronPython中引用AutoCAD进程内程序集及Civil库的问题求助
第一个问题:加载acdbmgd.dll等进程内程序集报错(IOError: Errno 127)
你猜的没错,问题核心就出在进程内程序集的运行环境上。acdbmgd.dll、acmgd.dll这类属于AutoCAD的进程内托管库,它们必须依附于AutoCAD的主进程才能运行——这些库深度依赖AutoCAD内部的原生核心模块,独立的IronPython进程根本没有加载这些模块,自然会找不到需要导入的过程。
解决这个问题的关键是:必须让你的IronPython脚本在AutoCAD/Civil 3D的进程内部执行,而不是单独启动IronPython运行脚本。具体可以这么做:
- 用IronPython的
pyc.py工具把脚本打包成.NET程序集,然后在AutoCAD/Civil 3D里用NETLOAD命令加载。 - 或者通过AutoCAD的脚本功能(.scr文件)调用IronPython解释器并执行你的脚本,确保脚本在AutoCAD进程上下文里运行。
- 额外注意版本匹配:AutoCAD 2016基于.NET 4.5,你需要使用支持.NET 4.x的IronPython版本(比如IronPython 2.7.5及以上),避免版本不兼容导致的加载失败。
第二个问题:加载AeccDbMgd.dll报错(IOError: Errno 2)
解决版本问题后遇到这个错误,通常是以下几个原因导致的:
1. 路径或文件存在性问题
先确认AeccDbMgd.dll确实在你添加的C:\Program Files\Autodesk\AutoCAD 2016\C3D路径里——这个库是AutoCAD Civil 3D专属的,如果你只安装了普通AutoCAD,这个文件根本不存在,必须安装完整的AutoCAD Civil 3D 2016。
2. 依赖项缺失
AeccDbMgd.dll依赖Civil 3D的多个原生库,这些库默认可能不在系统PATH中。如果是在Civil 3D进程内运行脚本,这个问题通常会自动解决,因为Civil 3D启动时会把自身目录添加到进程的PATH里;但如果是通过外部脚本调用,你需要先把以下路径添加到系统环境变量PATH中,再运行脚本:
C:\Program Files\Autodesk\AutoCAD 2016C:\Program Files\Autodesk\AutoCAD 2016\C3D
3. 必须在Civil 3D进程内运行
即使你打开的是AutoCAD 2016,而非AutoCAD Civil 3D,也会加载失败——因为普通AutoCAD进程不会加载Civil 3D的核心模块,自然找不到AeccDbMgd.dll的依赖。你必须启动AutoCAD Civil 3D 2016,然后在这个进程内运行你的脚本。
调整后的参考代码
import sys import clr # 添加AutoCAD和Civil 3D的安装路径到搜索路径 cad_install_path = r'C:\Program Files\Autodesk\AutoCAD 2016' c3d_install_path = r'C:\Program Files\Autodesk\AutoCAD 2016\C3D' sys.path.append(cad_install_path) sys.path.append(c3d_install_path) # 按依赖顺序加载程序集:先基础AutoCAD库,再Civil 3D库 clr.AddReferenceToFile('accoremgd.dll') clr.AddReferenceToFile('acmgd.dll') clr.AddReferenceToFile('acdbmgd.dll') clr.AddReferenceToFile('AecBaseMgd.dll') clr.AddReferenceToFile('AeccDbMgd.dll') # 导入所需命名空间 # AutoCAD相关 import Autodesk.AutoCAD.Runtime import Autodesk.AutoCAD.ApplicationServices import Autodesk.AutoCAD.DatabaseServices import Autodesk.AutoCAD.EditorInput # Civil 3D相关 import Autodesk.Civil import Autodesk.Civil.ApplicationServices
内容的提问来源于stack exchange,提问作者TJames




