能否不调用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
相关产品推荐
相关产品推荐

