Visual Studio 2008 - framework 3.5 - Visual Basic
嗨! 我有一个由反射调用的静态方法的问题。 在加载我的win-wpf时,我在原始目录中创建了一个名为“_temp.dll”的“A4Library.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})
但是只有当.exe文件不在.dll文件的同一目录中时才能正常工作,否则我会收到此错误(已翻译):
InnerException {“[B] MyType上[A] MyType的不可能。类型A源自......位置'F:\ MyPath \ A4Library.dll'中的'Default'。类型B源自......在'LoadFrom'上下文中的位置'F:\ MyPath_temp.dll'。“}
奇怪的是:它似乎与原始.dll中的相同方法存在冲突,但我无法确定为什么它会查看原始而不是副本。如果相对于主程序集的.exe文件放在另一个目录中,则所有目录都运行良好。
我想把.exe放在.dll的同一个文件夹中,我该如何解决这个问题呢?
谢谢! Pileggi
答案 0 :(得分:1)
为什么在执行静态方法之前创建程序集的副本?如果需要创建副本,请将该程序集加载到另一个AppDomain
中并在其中执行该方法。