I have the following assemblies in my solution:
- The main assembly (not very named);
- Class Library 1 (with a strong name with v.1.0.0.0);
- Class Library 1 (with a strong name with v.2.0.0.0);
- Class Library 2 (not very named).
These assemblies are connected to each other as shown below: 
"Main assembly" depends on "Class Library 1" (v.2.0.0.0) and "Class Library 2", "Class Library 2" depends on "Class Library 2" (v.1.0.0.0).
Class Library 1 code (both for v.1.0.0.0 and v.2.0.0.0):
namespace ClassLibrary1
{
public class Class
{
}
}
Class Library 2:
namespace ClassLibrary2
{
public class Class(ClassLibrary1.Class c)
{
}
}
Main assembly code:
namespace MainAssembly
{
public static class Program
{
public static void Main(string[] args)
{
ClassLibrary1.Class c1 = new ClassLibrary1.Class();
ClassLibrary2.Class c2 = new ClassLibrary2.Class(c1);
}
}
}
This code compiles and runs without errors, despite the fact that the versions of the "Class Library 1" collectors do not match! Why?
, ClassLibrary2.Class Reflection ( ), runtime System.ArgumentException:
"ClassLibrary1.Class" "ClassLibrary1.Class".
namespace MainAssembly
{
public static class Program
{
public static void Main(string[] args)
{
ClassLibrary1.Class c1 = new ClassLibrary1.Class();
typeof(ClassLibrary2.Class).GetConstructors()[0].Invoke(new[]{ c1 });
}
}
}
UPDATE
, . IL , , c1 , " 1" (v.2.0.0.0), ClassLibrary2.Class, 1 '(v.2.0.0.0).
.assembly extern ClassLibrary1
{
.publickeytoken = (F3 A6 02 4F 9E A4 F3 DB )
.ver 2:0:0:0
}
.assembly extern ClassLibrary2
{
.ver 1:0:0:0
}
.assembly extern ClassLibrary1 as ClassLibrary_3
{
.publickeytoken = (F3 A6 02 4F 9E A4 F3 DB )
.ver 1:0:0:0
}
.class private auto ansi beforefieldinit MainAssembly.Program
extends [mscorlib]System.Object
{
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 1
.locals init (
[0] class [ClassLibrary1]ClassLibrary1.Class c1,
[1] class [ClassLibrary2]ClassLibrary2.Class c2,
[2] class MainAssembly.Class c3)
IL_0000: nop
IL_0001: newobj instance void [ClassLibrary1]ClassLibrary.Class::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: newobj instance void [ClassLibrary2]ClassLibrary2.Class::.ctor(class [ClassLibrary_3]ClassLibrary.Class)
IL_000d: stloc.1
IL_000e: ldloc.0
IL_000f: newobj instance void MainAssembly.Class::.ctor(class [ClassLibrary1]ClassLibrary.Class
IL_0014: stloc.2
IL_0015: ret
}
}