I need to load two versions of the same DLL in order to compare their outputs. I assume that I can use AppDomains for this, but I need some guidence.
Asked
Active
Viewed 3,421 times
10
-
Does the assembly you want to compare has other references? Is the assembly strong named? – Jeff Cyr Jan 06 '10 at 23:16
-
No, the assemblies don't have strong names. – Jonathan Allen Jan 07 '10 at 03:44
-
No, the assemblies don't have other references. – Jonathan Allen Jan 07 '10 at 03:45
3 Answers
7
Ok, it was actually a lot easier than I imagined.
m_Assembly1 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "Old Version\Some.dll"))
m_Assembly2 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "New Version\Some.dll"))
Console.WriteLine("Old Version: " & m_Assembly1.GetName.Version.ToString)
Console.WriteLine("New Version: " & m_Assembly2.GetName.Version.ToString)
m_OldObject = m_Assembly1.CreateInstance("FullClassName")
m_NewObject = m_Assembly2.CreateInstance("FullClassName")
From here on out I used late binding and/or reflection to run my tests.

Jonathan Allen
- 68,373
- 70
- 259
- 447
3
Check out Activator.CreateInstance() on MSDN. Code samples within.

No Refunds No Returns
- 8,092
- 4
- 32
- 43
2
Here is a guide to do that:
extern alias oldVer;
extern alias newVer;
and when you compile:
csc /r:oldVer=Somepath\ClassLibrary.dll /r:newVer=AnotherPath\ClassLibrary.dll program.cs
or in Visual Studio change the "aliases" field in the property tab of your project references

Glorfindel
- 21,988
- 13
- 81
- 109

Kristian Damian
- 1,360
- 3
- 22
- 43
-
4We had some problem with this approach if ClassLibrary.dll references another assembly, the clr would only resolve the first version of the dependency, the second version dependency was resolved as the first version. We had to subscribe to AppDomain.ResolveAssembly and do some nasty things to overcome this problem. – Jeff Cyr Jan 06 '10 at 23:09
-
My test harness is already written in VB, so of course that would have to be a C#-only feature. – Jonathan Allen Jan 07 '10 at 03:48