【发布时间】:2010-01-06 22:57:25
【问题描述】:
我需要加载同一个 DLL 的两个版本来比较它们的输出。我假设我可以为此使用 AppDomains,但我需要一些指导。
【问题讨论】:
-
您要比较的程序集是否有其他引用?程序集是否强命名?
-
不,程序集没有强名称。
-
不,程序集没有其他引用。
我需要加载同一个 DLL 的两个版本来比较它们的输出。我假设我可以为此使用 AppDomains,但我需要一些指导。
【问题讨论】:
好的,实际上比我想象的要容易得多。
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")
从现在开始,我使用后期绑定和/或反射来运行我的测试。
【讨论】:
查看 MSDN 上的 Activator.CreateInstance()。内的代码示例。
【讨论】:
Here 是这样做的指南:
extern alias oldVer;
extern alias newVer;
当你编译时:
csc /r:oldVer=Somepath\ClassLibrary.dll /r:newVer=AnotherPath\ClassLibrary.dll program.cs
或在 Visual Studio 中更改项目引用的属性选项卡中的“别名”字段
【讨论】: