.NET:加载同一个 DLL 的两个版本
Posted
技术标签:
【中文标题】.NET:加载同一个 DLL 的两个版本【英文标题】:.NET: Load two version of the same DLL 【发布时间】:2010-01-06 22:57:25 【问题描述】:我需要加载同一个 DLL 的两个版本来比较它们的输出。我假设我可以为此使用 AppDomains,但我需要一些指导。
【问题讨论】:
您要比较的程序集是否有其他引用?程序集是否强命名? 不,程序集没有强名称。 不,程序集没有其他引用。 【参考方案1】:好的,实际上比我想象的要容易得多。
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")
从现在开始,我使用后期绑定和/或反射来运行我的测试。
【讨论】:
【参考方案2】:查看 MSDN 上的 Activator.CreateInstance()。内的代码示例。
http://msdn.microsoft.com/en-us/library/ms224132.aspx
【讨论】:
【参考方案3】:Here 是这样做的指南:
extern alias oldVer;
extern alias newVer;
当你编译时:
csc /r:oldVer=Somepath\ClassLibrary.dll /r:newVer=AnotherPath\ClassLibrary.dll program.cs
或在 Visual Studio 中更改项目引用的属性选项卡中的“别名”字段
【讨论】:
如果 ClassLibrary.dll 引用另一个程序集,我们会遇到这种方法的一些问题,clr 只会解析第一个版本的依赖项,第二个版本的依赖项被解析为第一个版本。我们不得不订阅 AppDomain.ResolveAssembly 并做一些讨厌的事情来解决这个问题。 我的测试工具已经用 VB 编写,所以当然这必须是 C# 独有的功能。以上是关于.NET:加载同一个 DLL 的两个版本的主要内容,如果未能解决你的问题,请参考以下文章
使用 Side-by-Side 程序集加载 x64 或 x32 版本的 DLL
解决NopCommerce 在iis缓存目录Temporary ASP.NET Files下存在两个版本的dll问题