First of all, let me try to convince you that getting some type or members from an assembly using its string representation is bad thing. The question is: where can you get those names? If such names come from code, you don't really need them, as this is not the only style Reflection can use (yes, this is used -- in serialization, for example). But when a string representation of a name is really needed, it comes from data where it can be misspelled. And the compiler won't give you a single warning. So, such techniques are very unreliable, first of all, unacceptable from the maintenance perspective.
So, I simply hope that I can explain you the right idea, you can change you whole approach, and then you might not need to solve your problem again. (Or you will ask a different question(s) later.)
The the right approach is to recognize certain types declared in a dynamically loaded assembly by interfaces they implement. This way, you fully avoid dependency on any names. You can declare some interfaces in an assembly used by both "host" and dynamically loaded assemblies (let me call then "plug-in assemblies", and "host" is the one loading other assemblies dynamically) in separate assembly referenced by both host and plug-in assemblies, but you can simply declare those plug-in interfaces in a host assembly and reference a host assembly by all plug-in assemblies. If you think about it, you will see that it does not create any circular references, because referential dependencies between assemblies are static and has nothing to do with run-time dependencies.
You can recognize if a type of a plug-in assembly implements some interface using
System.Type.GetInterfaces
:
http://msdn.microsoft.com/en-us/library/system.type.getinterfaces.aspx[
^].
Are you getting the idea?
Please see my past answers to related questions:
Create WPF Application that uses Reloadable Plugins...[
^],
AppDomain refuses to load an assembly[
^],
code generating using CodeDom[
^],
Create WPF Application that uses Reloadable Plugins...[
^],
Dynamically Load User Controls[
^],
C# Reflection InvokeMember on existing instance[
^],
Projects and DLL's: How to keep them managable?[
^].
—SA