2013-10-31 10 views
15

में मौजूद नहीं है, मैंने वीबी, वीएस2012 में एक पीसीएल स्थापित किया है और इसे प्रोफाइल 78 (WinRT, WinPhone8, .NET 4.5) के लिए सेट किया है। मेरे पास Assembly पर उपलब्ध नहीं है। this के अनुसार, यह पीसीएल के लिए उपलब्ध होना चाहिए। उपलब्ध एकमात्र विधि Assembly.Load() है।विधानसभा.GetExecutingAssembly पीसीएल

क्या कोई मुझे इसके साथ क्या करना चाहिए? जैसे क्या यह सच है, क्या मेरा पर्यावरण खराब हो गया है, Imports System.Reflection के अलावा GetExecutingAssembly तक पहुंचने का कोई और तरीका है? कोई अन्य विचार?

+0

यह उपलब्ध है, सिल्वरलाइट और डेस्कटॉप को उदाहरण के लिए लक्षित करें। विनआरटी या फोन, नहीं। –

+0

Async/Await की आवश्यकता है, इसलिए SL को लक्षित नहीं कर सकता। एसएल की जरूरत नहीं है। –

+0

[यह] (http://stackoverflow.com/a/14754653/650012) SO उत्तर केवल Windows Store ऐप्स के लिए 'GetExecutingAssembly() 'से संबंधित है, लेकिन फिर भी यह उपयोगी हो सकता है। –

उत्तर

28

सामान्य रूप से, आपको Assembly.GetExecutingAssembly() के बजाय typeof(MyType).GetTypeInfo().Assembly जैसे कुछ का उपयोग करना चाहिए। GetExecutingAssembly को मूल रूप से कॉल स्टैक की जांच करना है कि यह पता लगाने के लिए कि कौन सी विधि कॉल कर रही है और फिर संबंधित असेंबली को देखें। यदि विधानसभा सीमाओं में विधियों को कभी भी रेखांकित किया जाता है, तो यह तोड़ सकता है, यही कारण है कि GetExecutingAssembly विधि "नया" प्रतिबिंब सतह क्षेत्र में नहीं है, जो प्रोफ़ाइल 78 (साथ ही साथ Windows Store ऐप्स के लिए .NET) का उपयोग करता है।

+1

बिल्कुल सही, धन्यवाद डैनियल! –

1

पृथक्करण पीएलसी के भीतर वास्तव में गहरा और काफी सावधानीपूर्वक चलता है।

यह समझने के लिए यहां महत्वपूर्ण है कि पोर्टेबल क्लास लाइब्रेरी/पीएलसी प्लेटफ़ॉर्म प्रोफ़ाइल के रूप में मौजूद नहीं है। आपके पीएलसी प्रोजेक्ट को संकलित करने पर, चल रहे एप्लिकेशन को संकलक के समान प्रतिबंध नहीं होंगे।

using System; 
... 
try { 
    var getExecutingAssembly = typeof(Assembly).GetRuntimeMethods() 
           .Where(m => m.Name.Equals("GetExecutingAssembly")) 
           .FirstOrDefault(); 
    var assemblies = getExecutingAssembly.Invoke(null, null); 
} catch(Exception exc){ 
    ... try something else 
} finally{ 
    ... time for some alternative 
} 

यह दृष्टिकोण केवल आप सैंडबॉक्स विधानसभा पर्यावरण के भीतर सुलभ विधानसभाओं निकलेगा:

यहाँ एक तरह से बाधा के माध्यम से तोड़ने के लिए है। लेकिन यह आपको "सामान" तक पहुंचने के तरीके पर एक प्रारंभिक बिंदु देता है जिसे आप नहीं मानते हैं।

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