2009-03-23 13 views
5

असेंबली - मैं सर्वर से क्लाइंट (प्रत्यक्ष टीसीपी कनेक्शन के माध्यम से) से एक असेंबली फ़ाइल भेजने की कोशिश कर रहा हूं। लेकिन बड़ी समस्या यह है कि मैं इस असेंबली को बाइट्स में कैसे परिवर्तित करूं ताकि इसे आसानी से स्थानांतरित किया जा सके? मैं निम्नलिखित इस्तेमाल किया -बाइट्स

byte[] dllAsArray; 
using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(stream,loCompiled.CompiledAssembly); 
    dllAsArray = stream.ToArray(); 
} 

लेकिन जब मैं का उपयोग करें -

Assembly assembly = Assembly.Load(dllAsArray); 

मैं एक अपवाद मिल -

फ़ाइल या विधानसभा '165 बाइट्स कोड जनरेटर सर्वर से लोड लोड नहीं कर सका, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = शून्य 'या इसकी निर्भरताओं में से एक। एक गलत प्रारूप के साथ एक प्रोग्राम लोड करने के लिए एक प्रयास किया गया था। कृपया मदद करें !!!

उत्तर

6

क्या यह कच्चे डीएलएल सामग्री नहीं होगा, भले ही आपने इसे डिस्क पर सहेजा था? यानी File.ReadAllBytes के बराबर?

ऐसा लगता है जैसे डीएल उत्पन्न होता है - क्या आप इसे कहीं से भी बचा सकते हैं? (अस्थायी क्षेत्र, स्मृति धारा, आदि)?

संपादित चूंकि वह आपकी कोड-डोम का उपयोग कर रहे है, (संकलक-परिणामों पर) PathToAssembly उपयोग का प्रयास करें और File.ReadAllBytes (या इसी तरह की स्ट्रीमिंग का तंत्र)।

4

बस ReadAllBytes के माध्यम से फ़ाइल लोड करें और WriteAllBytes के माध्यम से लिखें। बाइट [] नेटवर्क पर स्थानांतरित किया जा सकता है।

// Transfer to byte[] 
byte[] data = System.IO.File.ReadAllBytes(@"C:\ClassLibaryOne.dll"); 

// Write to file again 
File.WriteAllBytes(@"C:\ClassLibaryOne.dll", data); 

संपादित: यदि आप अपने dll बनाने के लिए एक AssemblyBuilder का उपयोग करते हैं, तो आप इसे लागू करने के लिए करने के लिए इससे पहले कि आप हार्डड्राइव .save (फ़ाइल का नाम) का उपयोग कर सकते हैं।

AssemblyBuilder a = ... 
a.Save("C:\ClassLibaryTwo.dll); 
संबंधित मुद्दे