tags:

views:

212

answers:

3

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.

+3  A: 

Check out Activator.CreateInstance() on MSDN. Code samples within.

http://msdn.microsoft.com/en-us/library/ms224132.aspx

No Refunds No Returns
+2  A: 

Here is a guide to do that

extern alias oldVer;
extern alias newVer;

and when 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 proyect references alt text

Kristian Damian
We 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.
SelflessCoder
My test harness is already written in VB, so of course that would have to be a C#-only feature.
Jonathan Allen
+1  A: 

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