2010-01-06 17 views
10

के दो संस्करण लोड करें, मुझे उनके आउटपुट की तुलना करने के लिए उसी DLL के दो संस्करणों को लोड करने की आवश्यकता है। मुझे लगता है कि मैं इसके लिए ऐपडोमेन का उपयोग कर सकता हूं, लेकिन मुझे कुछ मान्यताओं की आवश्यकता है।.NET: उसी DLL

+0

क्या असेंबली आप तुलना करना चाहते हैं अन्य संदर्भ हैं? असेंबली मजबूत नामित है? –

+0

नहीं, असेंबली के पास मजबूत नाम नहीं हैं। –

+0

नहीं, असेंबली में अन्य संदर्भ नहीं हैं। –

उत्तर

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

यहां से बाहर मैंने अपने परीक्षण चलाने के लिए देर से बाध्यकारी और/या प्रतिबिंब का उपयोग किया।

2

Here कि करने के लिए एक गाइड है:

extern alias oldVer; 
extern alias newVer; 

और जब आप संकलन:

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

या दृश्य स्टूडियो में संपत्ति टैब में "अन्य नामों" फ़ील्ड बदलें आपके प्रोजेक्ट संदर्भों के alt text http://www.code-magazine.com/ArticleImage.aspx?QuickID=0507041&Image=Figure%202.bmp

+4

यदि क्लासLibrary.dll किसी अन्य असेंबली का संदर्भ देता है, तो हमें इस दृष्टिकोण के साथ कुछ समस्या थी, क्लियर केवल निर्भरता के पहले संस्करण को हल करेगा, दूसरी संस्करण निर्भरता को पहले संस्करण के रूप में हल किया गया था। हमें AppDomain.ResolveAssembly की सदस्यता लेनी पड़ी और इस समस्या को दूर करने के लिए कुछ ग़लत चीजें करें। –

+0

मेरा टेस्ट दोहन पहले से ही वीबी में लिखा गया है, इसलिए निश्चित रूप से इसे सी # -ऑनली फीचर होना होगा। –

संबंधित मुद्दे