You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不调用clr.AddReference而使用pythonnet加载程序集?

Pythonnet 实现非全局导入程序集的方式

常规的pythonnet集成会将程序集命名空间全局导入,写法如下:

import clr
clr.AddReference('My.Assembly')
import My.Assembly

My.Assembly.DoSomething()

如果不想让命名空间全局可用,可以通过.NET的反射机制直接加载程序集,再获取目标类型调用方法,实现类似你想要的效果:

import clr
from System.Reflection import Assembly

# 直接加载指定路径的程序集
my_assembly = Assembly.LoadFrom('My.Assembly.dll')

# 获取程序集中的目标类型(替换成实际包含DoSomething方法的类的完整命名空间+类名)
target_class = my_assembly.GetType('My.Assembly.MyClass')

# 调用静态方法DoSomething
target_class.DoSomething()

# 如果是实例方法,需要先创建对象实例
instance = target_class()
instance.DoSomething()

另外也可以用pythonnet自带的clr.LoadAssembly方法加载,效果类似:

import clr

# 加载程序集
my_assembly = clr.LoadAssembly('My.Assembly.dll')
# 后续步骤和上面一致,获取类型并调用方法
target_class = my_assembly.GetType('My.Assembly.MyClass')
target_class.DoSomething()

这种方式不会将程序集的命名空间导入到全局作用域,所有调用都通过加载后的程序集对象和类型对象完成,完全符合你想要的调用形式。

内容的提问来源于stack exchange,提问作者Ax_6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:36:18