2010-01-06 10 views
10

Necesito cargar dos versiones de la misma DLL para comparar sus resultados. Supongo que puedo usar AppDomains para esto, pero necesito alguna guía..NET: carga dos versiones de la misma DLL

+0

¿El conjunto que desea comparar tiene otras referencias? ¿El ensamble es fuerte? –

+0

No, los ensamblados no tienen nombres fuertes. –

+0

No, los ensamblajes no tienen otras referencias. –

Respuesta

7

Ok, en realidad fue mucho más fácil de lo que imaginaba.

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") 

De aquí en adelante utilicé el encuadernado tardío y/o reflejo para ejecutar mis pruebas.

2

Here es una guía para hacer eso:

extern alias oldVer; 
extern alias newVer; 

y al compilar:

csc /r:oldVer=Somepath\ClassLibrary.dll /r:newVer=AnotherPath\ClassLibrary.dll program.cs 

o en Visual Studio cambie el campo "alias" en la pestaña de la propiedad de su proyecto referencias alt text http://www.code-magazine.com/ArticleImage.aspx?QuickID=0507041&Image=Figure%202.bmp

+4

Tuvimos algunos problemas con este enfoque si ClassLibrary.dll hace referencia a otro ensamblado, clr solo resolvería la primera versión de la dependencia, la segunda dependencia de la versión se resolvió como la primera versión. Tuvimos que suscribirnos a AppDomain.ResolveAssembly y hacer algunas cosas desagradables para superar este problema. –

+0

Mi arnés de prueba ya está escrito en VB, por lo que, por supuesto, tendría que ser una característica de C#. –

Cuestiones relacionadas