2013-05-08 7 views
5

आवेदन 1 में मैं धारावाहिक और deserialize और वस्तु और यह ठीक काम करता है। मैं फिर भी चाहते आवेदन 2 में आवेदन 1 से एक वस्तु deserialize करने के लिए मैं कक्षा है कि आवेदन 2. करने के लिए उस वस्तु को परिभाषित करता है जब मैं यह deserialize करने के लिए मैं इस त्रुटि मिलती है की कोशिश कहा:अनुप्रयोगों के बीच एक धारावाहिक वस्तु साझा करना

Could not find assembly 'WindowsFormsApplication6, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

मैं एक कैसे साझा कर सकता फिर दो अनुप्रयोगों के बीच serialized वस्तु?

+1

यदि आप .NET बाइनरी क्रमबद्धता का उपयोग कर रहे हैं, तो आपको वास्तव में उसी अंतर्निहित प्रकार (जैसा कि एक ही डीएलएल से एक में) संदर्भित करना होगा। यदि आपको किसी भिन्न प्रकार में स्थानांतरित करने की आवश्यकता है तो आपको एक अलग क्रमबद्धता प्रोटोकॉल का उपयोग करने की आवश्यकता होगी। –

+2

आपको धारावाहिक वर्ग की परिभाषा को एक अलग वर्ग लाइब्रेरी असेंबली में रखना होगा, जिसे आप दोनों अनुप्रयोगों से संदर्भित करते हैं (इस प्रकार कक्षा परिभाषा साझा करते हैं)। –

उत्तर

7

धारावाहिक वस्तु के लिए परिभाषा को एक अलग असेंबली में रखें और फिर प्रत्येक प्रोजेक्ट में साझा असेंबली का संदर्भ जोड़ें। (फॉर्मेटर आपके पहले प्रोजेक्ट में असेंबली का संदर्भ जोड़ रहा है - वास्तव में उन्हें कक्षा की एक समान प्रति न केवल एक ही कक्षा का संदर्भ देना चाहिए)

+0

अच्छा समाधान। ध्यान दें कि यह एक तंग युग्मन बनाता है क्योंकि दोनों संस्करणों को एक ही संदर्भित असेंबली का उपयोग करना चाहिए। आपको संस्करण की समीक्षा करनी होगी। – Aphelion

5

यदि आप BinaryFormatter का उपयोग कर रहे हैं, तो यह पूर्ण शामिल है डेटा में टाइप करें, जिसमें डीटीओ की असेंबली शामिल है (प्रकारों को हमेशा उनकी असेंबली द्वारा परिभाषित किया जाता है)। यहां एक विकल्प एक अलग डीटीओ लाइब्रेरी बनाना है जिसे आप प्रत्येक से संदर्भित करते हैं - लेकिन ध्यान दें कि BinaryFormatter संस्करण के आने पर अभी भी अविश्वसनीय है: मैंने लोगों को डेटा खो दिया है क्योंकि उन्होंने अपना डीटीओ संपादित किया है और सब कुछ काम करना बंद कर दिया है।

मैं दृढ़ता से एक गैर-प्रकार-निर्भर धारावाहिक का उपयोग करने की सलाह दूंगा; उदाहरण के लिए, XmlSerializer/DataContractSerializer/JSON.NET/सर्विसस्टैक JsonSerializer, या प्रोटोबफ-नेट। इन सभी के ठीक से काम करेंगे, लेकिन महत्वपूर्ण बात आप झगड़ा ना करें, दो अलग अलग तरीकों:

  • वे कर रहे हैं बहुत संस्करण के अनुकूल
  • वे परवाह नहीं है अगर आप विधानसभाओं के बीच ले जाने के प्रकार

के साथ यह संभवतः सीरियलाइज्ड प्रकारों के लिए एक अलग डीटीओ असेंबली को बनाए रखने के लिए सबसे सुविधाजनक है, लेकिन यह बल नहीं है। आखिरकार, चूंकि ये धारावाहिक क्रॉस-ओएस/क्रॉस-वर्जन/क्रॉस-लैंग्वेज/क्रॉस-सीपीयू काम करने में सभी खुश हैं, इसलिए "अलग-अलग असेंबली" का तथ्य केवल "मेह, जो भी हो" है।

कुंजी टेकवे: BinaryFormatter भंगुर हो सकता है। मैं इन-फ्लाइट डेटा को छोड़कर किसी भी चीज़ के लिए कभी भी इसकी अनुशंसा नहीं करता (उदाहरण के लिए, दो AppDomain उदाहरणों के बीच रिमोटिंग)। मैं निश्चित रूप से किसी भी समय के लिए किसी भी चीज के लिए इसका उपयोग नहीं करता, क्योंकि मैं बस गारंटी नहीं दे सकता कि मैं इसे भविष्य में फिर से लोड कर पाऊंगा।

+0

क्या इनमें से कोई भी अन्य धारावाहिक आपको system.drawing.bitmap जैसे संग्रहीत छवि ऑब्जेक्ट को क्रमबद्ध करने की अनुमति देता है? – AndyD273

+0

@ एंडी मैं कहूंगा कि आप वहां गलत समस्या को हल कर रहे हैं। बिटमैप वर्ग कार्यान्वयन है। आपको धारावाहिक होना चाहिए बाइट [] वह वास्तविक छवि पेलोड है (संभवतः एक प्रसिद्ध प्रारूप में)। अधिकांश धारावाहिक एक बाइट संभाल सकते हैं [] –

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