我的问题:我有两个版本的程序集,想在我的 Python 项目中同时使用它们。
.NET 库安装在 GAC (MSIL) 中,具有相同的公共(public) token :
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() 可能会失败...
最佳答案
好吧,我找到了一个解决方案:Python for .NET 也支持反射!
代替
clr.AddReference("lib, Version=1.0.0.0, ...")
你必须使用
assembly1 = clr.AddReference("lib, Version=1.0.0.0, ...")
通过该程序集,您可以像在 C# 中一样使用所有反射功能。在我的示例中,我必须使用以下代码(与版本 2 相同):
from System import Type
type1 = assembly1.GetType(...)
constructor1 = type1.GetConstructor(Type.EmptyTypes)
myClass1 = constructor1.Invoke([])
关于c# - Python for .NET : Using same . 多个版本的 NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31408391/