2013-05-08 11 views
5

लिंक करना मुझे परेशान करने वाला मुद्दा है, अगर मैं केवल लिंकर एसडीके असेंबली का उपयोग xamarin स्टूडियो में करता हूं तो मुझे अपवाद मिलता है, अगर मैं अपवाद को लिंक नहीं करता हूं तो ऐसा नहीं हो रहा है। मैंने इस मुद्दे को तीसरे पक्ष के डीएल का हिस्सा बनने के लिए स्थापित किया है जिसका उपयोग मैं कर रहा हूं (एक वीडियो स्ट्रीमिंग सेवा के लिए एपीआई)। मेरा मानना ​​है कि लिंकर इस डीएल द्वारा उपयोग की जाने वाली कुछ विधियों को अलग कर रहा है। क्या यह कुछ पुस्तकालयों के संभावित लिंक को छोड़ सकता है और यह देखना संभव है कि इस स्टैकट्रैक से कौन सा है।xamarin.ios/monotouch, mvvmcross के साथ समस्या और

2013-05-08 14:40:54.688 AppsfabrikkenTouch[5662:907] mvx: Diagnostic: 18,23 Exception masked NullReferenceException: Object reference not set to an instance of an object 
     at System.Delegate.Combine (System.Delegate a, System.Delegate b) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/Delegate.cs:473 
    at Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged.add_PropertyChanged (System.ComponentModel.PropertyChangedEventHandler value) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.Source.MvxBasePropertyInfoSourceBinding..ctor (System.Object source, System.String propertyName) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.Source.MvxPropertyInfoSourceBinding..ctor (System.Object source, System.String propertyName) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.Source.Construction.MvxSourceBindingFactory.CreateBinding (System.Object source, IEnumerable`1 childPropertyNames) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.Source.Construction.MvxSourceBindingFactory.CreateBinding (System.Object source, System.String combinedPropertyName) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Binders.MvxFullBinding.CreateSourceBinding (System.Object source) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Binders.MvxFullBinding..ctor (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingRequest bindingRequest) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder.BindSingle (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingRequest bindingRequest) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder+<>c__DisplayClass1.<Bind>b__0 (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingDescription description) [0x00000] in <filename unknown>:0 
    at System.Linq.Enumerable+<CreateSelectIterator>c__Iterator1D`2[Cirrious.MvvmCross.Binding.Interfaces.MvxBindingDescription,Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].MoveNext() [0x00000] in <filename unknown>:0 
    at System.Collections.Generic.List`1[Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].AddEnumerable (IEnumerable`1 enumerable) [0x00000] in <filename unknown>:0 
    at System.Collections.Generic.List`1[Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].AddRange (IEnumerable`1 collection) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, IEnumerable`1 bindings) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, System.Object source, System.Object target, System.String bindingText) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, System.Object source, IDictionary`2 bindingMap) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, IDictionary`2 bindingMap) [0x00000] in <filename unknown>:0 
    at CmsApp.Touch.TabTextView.ViewDidLoad() [0x00074] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/Views/UmbracoViews/TabTextView.cs:45 
    at MonoTouch.UIKit.UINavigationController.PushViewController (MonoTouch.UIKit.UIViewController viewController, Boolean animated) [0x00019] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UINavigationController.g.cs:178 
    at CmsApp.Touch.AppPhonePresenter.Show (IMvxTouchView view) [0x0007b] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/AppPhonePresenter.cs:62 
    at Cirrious.MvvmCross.Touch.Views.Presenters.MvxTouchViewPresenter.Show (Cirrious.MvvmCross.Views.MvxShowViewModelRequest request) [0x00000] in <filename unknown>:0 
    at CmsApp.Touch.AppPhonePresenter.Show (Cirrious.MvvmCross.Views.MvxShowViewModelRequest request) [0x00000] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/AppPhonePresenter.cs:37 
    at Cirrious.MvvmCross.Touch.Views.MvxTouchViewDispatcher+<>c__DisplayClass1.<RequestNavigate>b__0() [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Touch.Views.MvxTouchUIThreadDispatcher+<>c__DisplayClass1.<InvokeOrBeginInvoke>b__0() [0x00000] in <filename unknown>:0 

किसी भी मदद की सराहना की जाती है।

अद्यतन: स्टुअर्ट (धन्यवाद स्टुअर्ट) द्वारा सुझाए गए अनुसार मैंने निम्नलिखित में एक लिंकरप्ली शामिल फ़ाइल शामिल की है: लेकिन यह अभी भी एक अपवाद प्राप्त है।

class LinkerIncludePlease 
    { 
     private void DelegateCombine(Delegate a, Delegate b) 
     { 
      var d = Delegate.Combine(a,b); 
     } 

     private void DelegateCombine(params Delegate[] delegates) 
     { 
      var d = Delegate.Combine(delegates); 
     } 

     private void DelegateCombine() 
     { 
      var d = Delegate.Combine(); 
     } 

    } 

मेरे बारे में सोचा है कि यह स्टैकट्रेस

Exception masked NullReferenceException: Object reference not set to an instance of an object 
      at System.Delegate.Combine (System.Delegate a, System.Delegate b) [0x00018] 

से संबंधित कुछ करना पड़ा लेकिन यह चाल नहीं करने के लिए लगता है - किसी भी संकेत दिए गए क्या बाहर छीन लिया है लगता है?

+0

अद्यतन के बाद> मुझे लगता है कि आपने अपने लिंकरप्लेसेइन में गलत ऑब्जेक्ट/प्रॉपर्टी जोड़ दी है - आपको उस संपत्ति को प्राप्त करने/सेट करने की आवश्यकता है जो आप सदस्यता ले रहे हैं - उदाहरण के लिए। टेक्स्ट,। वीडियो,। जो भी – Stuart

+0

आप हमेशा स्टुअर्ट के रूप में पूरी तरह से सही हैं, लेकिन दुर्भाग्य से यहां मेरी समस्या नहीं है :( – Bjarke

उत्तर

1

मैं जो खो रहा था उसे ढूंढने में सक्षम नहीं था, जब लिंकर अपना काम कर रहा था।

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

आपकी मदद के लिए बहुत बहुत धन्यवाद।

4

अनामित वीडियो एपीआई में सहायता नहीं कर सकता।

लेकिन Mvvmcross जोड़ने मुद्दों को हल करने के लिए:

  • आप बाहर काम करने के क्या पेज/लिंकर ViewController त्रुटि पर हो रहा है की आवश्यकता होगी।

  • तो फिर तुम बस को हटाने नहीं जो कुछ भी प्रतीक यह अलग करना है

यहाँ एक उदाहरण है में लिंकर को ठगने के लिए एक LinkerPleaseInclude.cs फ़ाइल जोड़ने की जरूरत: https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/DailyDilbert/DailyDilbert.Touch/LinkerPleaseInclude.cs

5

यह संभव छोड़ है कुछ पुस्तकालयों का लिंक

हां। --linkskip=ASSEMBLY विकल्प (में अतिरिक्त mtouch तर्क अपने प्रोजेक्ट के विकल्पों में) का उपयोग करके आप अपनी तीसरी पार्टी में इस मुद्दे को अलग कर सकते हैं (और इसकी उत्पत्ति का 100% सुनिश्चित करें)। इसे रिलीज वर्कअराउंड के रूप में भी उपयोग किया जा सकता है (लेकिन आप लिंकर से पूर्ण लाभ प्राप्त करने के लिए बेहतर सटीक समाधान ढूंढते हैं)।

उदा। --linkskip=mscorlib mscorlib.dll (अर्थात् कोई फाइल एक्सटेंशन) को छोड़ होगा

यह जो इस स्टैकट्रेस से देखने के लिए संभव है?

काफी नहीं। मुद्दा System.Delegate.Combine के साथ नहीं है। चूंकि इसका नाम स्टैक ट्रेस में रखा गया है, तो आप जानते हैं कि यह लिंकर द्वारा नहीं हटाया गया है।

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

एक बार जब आप इसे पाते हैं तो आप लिंकर को इसे रखना चाहते हैं। आप अतिरिक्त, अनियंत्रित कोड जोड़कर ऐसा कर सकते हैं (जैसे @ स्टुअर्ट सुझाए गए)। मेरा अपना सुझाव के लिए कर रहे हैं:

  • उपयोग विशेषताओं [Preserve] आप स्रोत कोड है जब;

  • XML file (और --xml=file) का उपयोग करें जब आपके पास स्रोत कोड नहीं है;

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