2010-12-14 2 views
0

Visual Studio 2008 - каркас 3.5 - Visual Basicстранная проблема с отражением и статическим методом

Привет! У меня проблема со статическим методом, вызванным отражением. При загрузке моего win-wpf я создаю копию «A4Library.dll» с именем «_temp.dll» в том же каталоге оригинала. Затем на события нажатия кнопки мыши, я вызвать статический метод на _temp.dll таким образом:

Dim AssemblyFileName As String = Directory.GetCurrentDirectory() & "\_temp.dll" 
Dim oAssembly As Assembly = Assembly.LoadFrom(AssemblyFileName) 
Dim TypeName As String = "MyLibrary.MyService" 
Dim t As Type = oAssembly.GetType(TypeName) 
Dim mi As MethodInfo = t.GetMethod("MyMethod", BindingFlags.Static AndAlso BindingFlags.Public) 
Dim bResponse As Boolean = mi.Invoke(Nothing, New Object() {MyPar1, MyPar2}) 

Но это хорошо работает только тогда, когда я ЕХЕ файл не находится в той же директории .dll, в противном случае я получаю эту ошибку (в переводе):

InnerException {"Невозможно [My] MyType в [B] MyType. Тип A происходит от ... в контексте 'Default' в position 'F: \ MyPath \ A4Library.dll'. Тип B возникает из ... в контексте «LoadFrom» в позиции «F: \ MyPath_temp.dll». »

Странно: кажется, в быть конфликтом с тем же методом в исходном .dll, но я не могу согласиться с тем, почему он смотрит на оригинал, а не на копию. Если файл .exe относительно основной сборки помещен в другой каталог, все работает хорошо.

У меня есть файл .exe в той же папке .dll, как я могу решить проблему?

Спасибо! Pileggi

ответ

1

Зачем создавать копию сборки перед выполнением статического метода? Если требуется создать копию, загрузите эту сборку в другую AppDomain и выполните там метод.

+0

Большое спасибо! Мне нужно сделать это, потому что иногда мне нужно заменить .dll, и я думаю, что довольно сложно выгрузить среду выполнения уже загруженной сборки. – lamarmora

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