चेतावनी का एक शब्द है, इस पर मेरे अनुभव विंडोज फोन 7 के लिए विकसित करने से आता है, तो यह सामान्य सिल्वरलाइट 3.
JaredPar सिल्वरलाइट CLR ने कहा है सामान्य CLR के साथ असंगत है से आसानी से अलग हो सकता है। यह 100% सही नहीं है क्योंकि विंडोज लाइब्रेरीज़ के रूप में संकलित असेंबली अभी भी चांदी की रोशनी के तहत काम करेंगे, यह मानते हुए कि वे समर्थित API का उपयोग करते हैं। आप चांदी की परियोजना को मैन्युअल रूप से संपादित कर सकते हैं और सामान्य .NET असेंबली का संदर्भ जोड़ सकते हैं। ध्यान दें कि आप केवल संकलित असेंबली का संदर्भ जोड़ सकते हैं, न कि प्रोजेक्ट।
चांदी की रोशनी ऐप संकलित और दौड़ जाएगी, लेकिन जैसे ही यह सिल्वरलाइट में मौजूद कक्षा का उपयोग करने की कोशिश करता है, आपको रन-टाइम त्रुटि मिलती है।
एपीआई में अंतर प्रदर्शित करने के लिए, स्क्रीनशॉट का पालन करें। जैसा कि आप देख सकते हैं कि दो असेंबली में कुछ आम एपीआई हैं, लेकिन सिल्वरलाइट में कुछ गायब हैं। जैसे ही आपकी असेंबली उन एपीआई को मारने की कोशिश करती है, ऐप बूम जाता है!
पूर्ण .NET 4.0 mscorlib (System.serialization
नाम स्थान):
Full .NET 4.0 mscorlib http://img188.imageshack.us/img188/2131/fullmscorlib.png
सिल्वरलाइट 3 mscorlib (System.serialization
नाम स्थान):
Silverlight 3 mscorlib http://img526.imageshack.us/img526/4254/sl3mscorlib.png
एक पूर्ण नेट विधानसभा जोड़ने का नुकसान है कि आप रनटाइम तक नहीं जान पाएंगे जो एपीआई समर्थित नहीं हैं। यह मानते हुए कि संभावित रूप से कुछ समर्थित सिस्टम एपीआई असमर्थित सिस्टम एपीआई का उपयोग कर सकते हैं, समय से पहले इसे बाहर करने का कोई आसान तरीका नहीं है।
समानांतर विकास को आसान बनाने के लिए आप कुछ कर सकते हैं। माइक्रोसॉफ्ट द्वारा अनुशंसित दृष्टिकोण .NET और Silverlight के लिए अलग प्रोजेक्ट है जो समान स्रोत कोड साझा करता है। आप परियोजना के लिंक के रूप में फ़ाइलों को जोड़कर इसे मैन्युअल रूप से कर सकते हैं। यह एक रखरखाव दुःस्वप्न का थोड़ा सा है, लेकिन कम से कम अधिकांश त्रुटियों को संकलित समय पर पकड़ा जाएगा।
तो अब जब आप कुछ सिल्वरलाइट में लापता संदर्भ एपीआई संकलन आपको कोई त्रुटि मिलती:
public class SerializableExample: IEquatable<string>, System.Runtime.Serialization.ISerializable
{
}
error CS0234: The type or namespace name 'ISerializable' does not exist in the namespace 'System.Runtime.Serialization' (are you missing an assembly reference?)
सशर्त संकलन की मदद से
(एक-la अच्छा ol 'C/C++ दिन) आप कर सकते हैं अक्षम सामान जो समर्थित नहीं है:
public class SerializableExample: IEquatable<string>
#if !SILVERLIGHT
, System.Runtime.Serialization.ISerializable
#endif
{
}
माइक्रोसॉफ्ट भी एक परियोजना संयोजक उपकरण है जो परियोजनाओं फ़ाइलें लिंक कर लिया है के स्वत: रखरखाव के लिए अनुमति देता है प्रदान करते हैं। दुर्भाग्यवश वर्तमान रिलीज वीएस -2010 पर नहीं चलती है, आप शायद स्रोत को संकलित कर सकते हैं और ऐसा कर सकते हैं, लेकिन मैंने कोशिश नहीं की है।
http://msdn.microsoft.com/en-us/library/dd458870.aspx
डायरेक्ट डाउनलोड लिंक:
http://download.microsoft.com/download/6/3/8/6382E28D-2EBD-4A4E-BB76-6F425E1C9DB9/MicrosoftPracticesProjectLinkerFeb2009.msi
यह Microsoft page कष्टदायी विस्तार से अनेक-लक्षित करने का वर्णन है।
तो मैं सिल्वरलाइट ऐप और बैक एंड के बीच संवाद करने के लिए अपने व्यापार परत में वेब सेवा मुखौटा जोड़ने का बेहतर उपयोग कर रहा हूं? – norbertB
@norbertB हाँ, यह एक अच्छा दृष्टिकोण की तरह लगता है। – JaredPar
यह पूरी तरह से सच है, हालांकि यदि आप मेरी पोस्ट में दूसरा लिंक देखते हैं, तो कोई संकलित .NET (डेस्कटॉप) असेंबली को सिल्वरलाइट में आसानी से परिवर्तित करने का एक चालाक तरीका है। आपको सावधान रहना चाहिए कि आप असेंबली में किस कोड का उपयोग करते हैं (और शायद सशर्त बयान का उपयोग करें)। – Noldorin