You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在IronPython中引用AutoCAD进程内程序集及Civil库的问题求助

解决IronPython加载AutoCAD/Civil 3D托管程序集的问题

第一个问题:加载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 2016
  • C:\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

火山引擎 最新活动