2015-07-14 3 views
2

Моя проблема: у меня есть сборка в 2 версиях и вы хотите использовать их одновременно в моем проекте Python.Python для .NET: использование одной и той же сборки .NET в нескольких версиях

В .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() может не ...

+0

Как бы вы добавили 2 версии сборок к ссылкам в .NET? – denfromufa

+1

Я могу использовать отражения там. – Matthias

ответ

2

Ну я нашел решение: Python для .NET также поддерживает Reflection!

Вместо

clr.AddReference("lib, Version=1.0.0.0, ...") 

Вы должны использовать

assembly1 = clr.AddReference("lib, Version=1.0.0.0, ...") 

С этой сборке вы можете использовать все Reflection вещи, как в C#. В моем примере я должен использовать следующий код (тот же, что и для версии 2):

from System import Type 
type1 = assembly1.GetType(...) 
constructor1 = type1.GetConstructor(Type.EmptyTypes) 
myClass1 = constructor1.Invoke([]) 
+0

Это отличный ответ и, безусловно, должен быть добавлен в документацию pythonnet! – denfromufa

 Смежные вопросы

  • Нет связанных вопросов^_^