2010-01-06 35 views
10

Tôi cần tải hai phiên bản của cùng một DLL để so sánh kết quả đầu ra của chúng. Tôi giả sử rằng tôi có thể sử dụng AppDomains cho điều này, nhưng tôi cần một số bằng chứng..NET: Tải hai phiên bản của cùng một DLL

+0

Hội đồng bạn muốn so sánh có các tham chiếu khác không? Hội đồng có tên mạnh không? –

+0

Không, hội đồng không có tên mạnh. –

+0

Không, các hội đồng không có tài liệu tham khảo khác. –

Trả lời

7

Ok, nó thực sự dễ dàng hơn nhiều so với tôi tưởng tượng.

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

Từ đây trở đi tôi đã sử dụng kết buộc trễ và/hoặc phản ánh để chạy thử nghiệm của mình.

2

Here là một hướng dẫn để làm điều đó:

extern alias oldVer; 
extern alias newVer; 

và khi bạn biên dịch:

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

hoặc trong Visual Studio thay đổi "bí danh" trường trong tab bất động sản tham chiếu dự án của bạn alt text http://www.code-magazine.com/ArticleImage.aspx?QuickID=0507041&Image=Figure%202.bmp

+4

Chúng tôi đã có một số vấn đề với cách tiếp cận này nếu ClassLibrary.dll tham chiếu đến một assembly khác, clr sẽ chỉ giải quyết phiên bản đầu tiên của sự phụ thuộc, phụ thuộc phiên bản thứ hai đã được giải quyết như phiên bản đầu tiên. Chúng tôi đã phải đăng ký AppDomain.ResolveAssembly và làm một số điều khó chịu để khắc phục vấn đề này. –

+0

Khai thác thử nghiệm của tôi đã được viết bằng VB, do đó, tất nhiên đó sẽ phải là một tính năng C# -only. –

Các vấn đề liên quan