适用于.NET的Python:在多个版本中使用相同的.NET程序集
问题内容:
我的问题:我有2个版本的程序集,并希望在我的Python项目中同时使用它们。
.NET库安装在GAC(MSIL)中,具有相同的公共令牌:
lib.dll (1.0.0.0)
lib.dll (2.0.0.0)
在Python中,我想要这样的东西:
import clr
clr.AddReference("lib, Version=1.0.0.0, ...")
from lib import Class
myClass1 = Class()
myClass1.Operation()
*magic*
clr.AddReference("lib, Version=2.0.0.0, ...")
from lib import class
myClass2 = Class()
myClass2.Operation()
myClass2.OperationFromVersion2()
*other stuff*
# both objects should be accessibly
myClass1.Operation()
myClass2.OperationFromVersion2()
有没有办法做到这一点?有AppDomains或bindingRedirect吗?
注意:当然,myClass1.operationFromVersion2()可能会失败…
问题答案:
好吧,我找到了一个解决方案:.NET的Python也支持反射!
代替
clr.AddReference("lib, Version=1.0.0.0, ...")
你必须用
assembly1 = clr.AddReference("lib, Version=1.0.0.0, ...")
通过该程序集,您可以像在C#中一样使用所有Reflection东西。在我的示例中,我必须使用以下代码(与版本2相同):
from System import Type
type1 = assembly1.GetType(...)
constructor1 = type1.GetConstructor(Type.EmptyTypes)
myClass1 = constructor1.Invoke([])