如何使用Python调用.dll文件?使用pythonnet调用时报错如何解决?
pythonnet调用C#动态链接库报错解决方案
问题背景
- 运行环境:Python 3.8.6,使用pythonnet包调用自定义
My.dll文件 - 项目文件结构:

- 报错信息:

- 原始报错代码:
import clr clr.AddReference("My") from My import *
排查与解决步骤
- 校验架构与版本匹配
- 确认Python位数(32位/64位)与
My.dll编译架构一致,架构不兼容会直接加载失败 - 安装适配Python3.8的pythonnet版本,执行命令:
pip install pythonnet==3.0.1
- 确认Python位数(32位/64位)与
- 显式指定dll加载路径
直接填写dll文件名容易出现路径查找失败问题,修改代码先将dll所在目录加入搜索路径:
import clr import os # 获取当前脚本所在目录,也就是dll存放目录 dll_dir = os.path.dirname(os.path.abspath(__file__)) # 加载dll时传入完整路径 clr.AddReference(os.path.join(dll_dir, "My.dll")) from My import *
- 适配不同.NET编译版本
- 如果
My.dll是基于.NET Framework编译的,上述代码即可正常运行 - 如果
My.dll是基于.NET Core/.NET 5+版本编译的,需要提前指定coreclr运行时,修改代码如下:
- 如果
from pythonnet import load load("coreclr") import clr import os dll_dir = os.path.dirname(os.path.abspath(__file__)) clr.AddReference(os.path.join(dll_dir, "My.dll")) from My import *
- 校验dll本身配置
确认dll编译时命名空间确实为My,需要导入的类、方法都使用了public修饰符,非公开成员pythonnet无法访问。
内容的提问来源于stack exchange,提问作者malu
相关产品推荐
相关产品推荐

