2009-09-22 11 views
10

मेरे पास कुछ सी # कोड है (चलिए इसे "स्क्रिप्ट" कहते हैं) मैं रनटाइम पर संकलन कर रहा हूं। यह मेरे मुख्य कार्यक्रम में एक इंटरफ़ेस का उपयोग करता है जिसका उपयोग मैं अपने कार्यों तक पहुंचने के लिए करता हूं। एक बार जब संकलन किया जाता है मैं जिस स्थिति मैं CreateInstance(Type) में CompilerResults.CompiledAssembly है।कोडलोड-संकलित असेंबली अनलोड करें

एक बार जब मैं स्क्रिप्ट का उपयोग कर रहा हूं तो मैं पूरी तरह से अनलोड करना चाहता हूं। Loading DLLs into a separate AppDomain

मैं कुछ सवाल मेरे क्रियान्वयन के लिए विशिष्ट था: से क्या मैं समझता हूँ, मैं केवल अगर मैं अलग ऐप्स डोमेन बना यह कर सकते हैं

  1. अगर मैं संकलन और अनलोड करने के लिए चाहते हैं कि अनेक स्क्रिप्ट उन्हें स्वतंत्र रूप से, क्या मुझे प्रत्येक के लिए अलग-अलग ऐप डोमेन बनाना है?
  2. मैं क्या एप्लिकेशन डोमेन नाम का उपयोग करना चाहिए? क्या GUID एक अच्छा विचार होगा? क्या कोई नाम है जो मुझे टालना चाहिए इससे संघर्ष हो सकता है?
  3. विधानसभा अलग ऐप्स डोमेन में है, तो यह मुख्य कार्यक्रम में इंटरफ़ेस तक पहुँचने में कोई समस्या हो जाएगा? मैं संकलन से पहले वर्तमान में ReferencedAssemblies.Add(typeof(Interface).Assembly.Location) कर रहा हूं।
  4. क्या मैं CompilerParameters GenerateInMemory=true का उपयोग कर सकता हूं, या क्या मुझे इसे कहीं सेव करना है? क्रम में

उत्तर

2

उत्तर:

  1. हाँ, अगर आप उन्हें स्वतंत्र रूप से अनलोड करने के लिए चाहते हैं आप अलग एप्लिकेशन डोमेन की आवश्यकता होगी।
  2. उपयोग जो कुछ भी। यदि आप इसे वापस करने के लिए स्क्रिप्ट की पहचान कर सकते हैं डिबगिंग में मदद मिल सकती है, लेकिन वह क्रियान्वित थ्रेड के लिए और अधिक सही होगा।
  3. जब तक आप डोमेन सेटअप का बेस पथ स्वयं के लिए सेट नहीं करते हैं।

    AppDomainSetup.AplicationBase = AppDomain.CurrentDomain.SetupInformation.AplicationBase;

  4. नहीं, आपको इसे सहेजने की आवश्यकता नहीं है और ऐसा नहीं लगता है कि इससे आपको फायदा होगा।

+0

मुझे इसे काम करने में परेशानी थी इसलिए मैंने कुछ और शोध किया। ऐसा लगता है कि इसे काम करने के लिए मुझे कुछ और काम करने की आवश्यकता होगी: http://www.devsource.com/c/a/Using-VS/Dynamic-Plugins-Using-the-codeAppDomaincode-Class-to-Load -और-अनलोड-कोड /। जब तक कि बाद के संस्करणों में कुछ नया न हो? –

+0

ऐसा लगता है कि मैं भाग्य में हूं। चूंकि मैं .NET 3.5 का उपयोग कर रहा हूं, मैं प्रबंधित एक्सटेंसिबिलिटी फ्रेमवर्क का उपयोग कर सकता हूं। बेशक, मुझे अब इसे सीखना है। :) –

+1

ऐसा लगता है कि मैं गहरी में हो रही है की तुलना में मैं चाहता था/उम्मीद। एमईएफ वास्तव में असेंबली को अनलोड नहीं कर सकता क्योंकि यह एक अलग ऐपडोमेन का उपयोग नहीं करता है। एमएएफ (System.AddIn) कर सकते हैं, लेकिन उपयोग करने के लिए और अधिक जटिल है। एमएएफ और एमईएफ का एक साथ इस्तेमाल किया जा सकता है। जबकि मैं वास्तव में एक असेंबली को उतारने में सक्षम होना चाहता हूं, मुझे लगता है कि इसे कम से कम संस्करण 2 के लिए इंतजार करना होगा। –

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