2009-06-23 10 views
33

मैं DLLSystem.Reflection.Assembly.LoadFile के माध्यम से लोड कर रहा हूं और प्लगइन-एस्क्यू सिस्टम में इसके सदस्यों को प्रतिबिंबित कर रहा हूं। सिस्टम चल रहा है, जबकि मुझे इन DLL को अद्यतन/ओवरराइट करने में सक्षम होना चाहिए, लेकिन ऐसा लगता है कि System.Reflection.Assembly.LoadFile पर कॉल करने के बाद फ़ाइल को बाद में लॉक किया गया है।
क्या कोई फ़ाइल को अनलॉक करने का तरीका जानता है?
मैंने फ़ाइल को एक अलग एपडोमेन में लोड करने के बारे में पढ़ा है? क्या इस दृष्टिकोण के लिए कोई नुकसान है?System.Reflection.Assembly.LoadFile ताले फ़ाइल

उत्तर

63

आप इस का उपयोग करते हैं:

System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path)) 

यह फ़ाइल ताला नहीं होंगे।

संपादित


हालांकि यह काम करता है, यह सबसे अच्छा समाधान, लेकिन ऐसा करने का बेहतर तरीका नहीं है, यह एक बहुत अधिक शामिल (बस इसके लिए यहाँ सभी कोड पेस्ट करने के लिए बहुत अधिक) है ।

मैं एक सार्वजनिक भंडार Github पर यहाँ सब कोड के साथ इस को ठीक से करने के लिए बनाया है:

Loading Assemblies without Locking by using Shadow Copying.

+0

वास्तव में?! अगर यह काम करता है तो यह अच्छा होगा! +1 –

+0

यह पूरी तरह से काम किया! मैं यह देखने के लिए सिर्फ यह खुला छोड़ूंगा कि कोई अन्य बिंदुओं को कवर करता है ... –

+0

खुशी है कि यह आपके लिए काम करता है :) मैंने कभी भी ऐपडॉमेन विधि की कोशिश नहीं की है, हालांकि मैंने इसके समाधान के दौरान थोड़ा सा पढ़ा है यह बहुत समस्या है। – Pondidum

0

उपयोग Microsoft.Cci माइक्रोसॉफ्ट FxCop में शामिल

संस्करण 1.35 के लिए नमूना:

using Microsoft.Cci; 
// [...] 
AssemblyNode assembly = AssemblyNode.GetAssembly(path); 
संबंधित मुद्दे