.NET:加载两个版本相同的DLL

10

我需要加载同一DLL的两个不同版本以比较它们的输出。我认为可以使用AppDomains来实现,但我需要一些指导。


你想要比较的程序集有其他引用吗?这个程序集是强命名的吗? - Jeff Cyr
不,这些程序集没有强名称。 - Jonathan Allen
不,这些程序集没有其他引用。 - Jonathan Allen
3个回答

7

好的,实际上比我想象的要容易得多。

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

从现在开始,我使用晚期绑定和/或反射来运行我的测试。


3

2
这里有一份指南,教你如何实现这一点:

点击这里


extern alias oldVer;
extern alias newVer;

当你编译时:

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

或者在Visual Studio中,在项目引用的属性选项卡中更改“别名”字段。 alt text


4
如果ClassLibrary.dll引用了另一个程序集,我们使用此方法会遇到问题,CLR将只解析依赖项的第一个版本,而第二个版本的依赖项将被解析为第一个版本。我们不得不订阅AppDomain.ResolveAssembly事件,并进行一些麻烦的处理来解决这个问题。 - Jeff Cyr
我的测试工具已经用VB编写完成,所以这当然必须是一个仅限于C#的功能。 - Jonathan Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接