Prerequisites
- .NET environment
- A
Common
assembly with an interfaceIModule
Main
project, referencingCommon
Implementor
project, referencingCommon
, but not referenced fromMain
When everything is built, theCommon.dll
is present in bothMain
andImplementor
.
Now the Main
project tries to load the class implementing IModule
at runtime. What I could achieve so far:
Dim asm = Assembly.LoadFrom(asmFile)
For Each asmType in asm.GetExportedTypes()
If asmType.IsClass AndAlso
asmType.GetInterfaces().Any(Function(i) i.Name = GetType(IModule).Name) Then
Dim handle = AppDomain.CurrentDomain.CreateInstanceFrom(asmFile, asmType.FullName)
Dim inst = CType(handle.Unwrap(), IModule) ' EXCEPTION
End If
Next
So I can load the Implementor
assembly and find the type implementing IModule
. But I can't create an instance of it such that I can cast it to my local IModule
. Is this at all possible?
Workaround
I found a workaround - in Implementor
project, click on reference to Common
and clear "Copy Local" flag. Then I can even use simpler code, like IsAssignableFrom()
. But is this the only way? What if I get a DLL from third party, where the IModule
is compiled into it?
Aucun commentaire:
Enregistrer un commentaire