2012-12-29 5 views
7

मैं एक WP8 ऐप पर काम कर रहा हूं जो लाइव टाइल अपडेट करने के लिए शेड्यूल्ड टास्कएजेंट का उपयोग करता है। यह वास्तव में एक बहुत ही सरल ऐप है। समस्या यह है कि जब मैंने सीधे WP7 प्रोजेक्ट से WP8 प्रोजेक्ट में कोड कॉपी किया है, तो यह अनुसूचित कार्य को लॉन्च नहीं करेगा। इतना ही नहीं, लेकिन अगर मैं डिबगिंग कर रहा हूं तो मुझे एक त्रुटि मिलती है और मैं परीक्षण के लिए निर्धारित कार्य लॉन्च करने का प्रयास करता हूं।System.Windows.ni.dll क्या है?

'System.InvalidOperationException'

इतना ही नहीं System.Windows.ni.dll

में हुई है, लेकिन यह मुझे के माध्यम से देखने के लिए किसी भी ढेर नहीं देता है, और कहता है कि स्रोत नहीं है उपलब्ध है, कि मैं disassembly खिड़की में disassembly देख सकते हैं, जिसका मतलब मेरे लिए कुछ भी नहीं है। तो, एक बहुत उपयोगी त्रुटि नहीं, आईएमओ।

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

var taskName = "TileUpdater"; 
      var oldTask = ScheduledActionService.Find(taskName) as PeriodicTask; 
      if (oldTask != null) 
      { 
       ScheduledActionService.Remove(taskName); 
      } 
      if (useLiveTile) 
      { 
       //GenerateTileInfo(); 
       PeriodicTask task = new PeriodicTask(taskName); 
       task.Description = AppResources.BackgroundTaskDescription; 
       oldTask = ScheduledActionService.Find(taskName) as PeriodicTask; 
       if (oldTask == null) 
       { 
        ScheduledActionService.Add(task); 
       } 
#if DEBUG 
       ScheduledActionService.LaunchForTest(taskName, TimeSpan.FromSeconds(10)); 
#endif 
      } 

कोड WP7 के संस्करण में ठीक काम करता है:

यहाँ मेरी कोड है। :/

यह मेरा WMAppManifest.xml फ़ाइल में है:

<ExtendedTask Name="BackgroundTask"> 
     <BackgroundServiceAgent Specifier="ScheduledTaskAgent" 
           Name="xxxScheduledTask" 
           Source="xxxScheduledTask" 
           Type="xxxScheduledTask.SecheduledAgent" /> 
    </ExtendedTask> 

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

GenerateTileInfo(); 

    #if DEBUG 
     ScheduledActionService.LaunchForTest(task.ToString(), TimeSpan.FromSeconds(60)); 
    #endif 

    NotifyComplete(); 

GenerateInfo विधि कुछ भी है कि एक समस्या का कारण होता है ऐसा नहीं करता है, लेकिन निश्चित रूप से, यह कभी नहीं वैसे भी वहाँ हो रही है। मैंने टाइल जानकारी को उत्पन्न करने और इसे लागू करने का परीक्षण किया, उस कोड को MainPage.xaml.cs में रखकर और इसे अभी कॉल करने के लिए, यह देखने के लिए कि यह काम करता है या नहीं, और जिस कोड को मैं कॉल कर रहा हूं वह ठीक काम करता है। तो अगर मैं ऐप खोलता हूं, तो टाइल अपडेट हो जाती है। अब मुझे काम करने के लिए पृष्ठभूमि कार्य प्राप्त करने की आवश्यकता है।

कोई भी मदद जो कोई भी पेशकश कर सकता है उसकी सराहना की जाती है। एक अन्य सुराग यह है कि कल रात मुझे एक त्रुटि मिल रही थी जिसमें पीडीबी फ़ाइल का पता लगाने में सक्षम नहीं था - मुझे लगता है कि यह माइक्रोसॉफ्ट था। फोन पीडीबी, लेकिन जो कुछ भी था, उसे सिस्टम.Windows.ni.dll भी कहा जाता है। फ़ाइल, लेकिन अब मुझे वह पीडीबी मुद्दा नहीं मिल रहा है, बस यह अवैधऑपरेशन अपवाद। कल रात डिबगिंग सिंबल (मुझे नहीं पता कि इसका मतलब क्या है) लोड नहीं हो रहा था। आज वे हैं। मुझे नहीं पता कि मैंने इसे ठीक करने के लिए क्या किया। मुझे पता चल सकता है कि सभी को पुनरारंभ किया जा सकता था।

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

फिर से, किसी भी मदद की सराहना की जाती है। धन्यवाद।

(संपादित करें - नई 11:34 am EST पर इस बिंदु 12/29 नीचे टिप्पणियां जोड़ी) ========================= ================================================== ======

मैंने एक और एक्सप्रिमेंट की कोशिश की।मैंने एक नया प्रोजेक्ट बनाया है, और यह देखने के लिए कि क्या मैं ऐप डीबग कर सकता हूं, http://www.jeffblankenburg.com/2011/11/25/31-days-of-mango-day-25-background-agents/ से कॉपी/चिपका हुआ कोड बनाया है। मुझे कोड में कुछ मामूली परिवर्तन करना पड़ा जो जेफ ब्लैंकनबर्ग ने लिखा था, क्योंकि वह कहता है कि जब आप निर्धारित कार्य प्रोजेक्ट जोड़ते हैं, तो यह स्वचालित रूप से WMAppManifest.xml फ़ाइल को निम्न कोड में जोड़ देगा, जो ऐसा नहीं था। मैंने मैन्युअल रूप से ऐसा किया।

मैं भी FlipTileData को StandardTileData प्रकार बदल कोड कि ScheduledAgent.cs को चिपकाया जाता है में (के बाद से है कि क्या WP8 परियोजना में डिफ़ॉल्ट था है)।

इसके अलावा, केवल एक चीज मैंने किया है कि जेफ अपने लेख में उल्लेख नहीं करता है, निर्देशों का उपयोग करके आवश्यक जोड़ना है।

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

अद्यतन (2012/01/04) ==================================== ============================

अनइंस्टॉल किया गया वीएस, रजिस्ट्री के माध्यम से चला गया, फिर VS2012 को पुनर्स्थापित किया गया, और एसडीके फोन किया गया। !

[प्रबंधित संक्रमण के मूल निवासी] System.Windows.ni.dll MS.Internal.JoltHelper.OnUnhandledException (वस्तु प्रेषक, System.UnhandledExceptionEventArgs: कम से कम अब यह मेरे स्टैक ट्रेस दिखाएगा - यहाँ अब मैं क्या मिलता है args) [मूल संक्रमण के लिए प्रबंधित] mscorlib.ni.dll! System.Reflection.RuntimeAssembly.nLoad (System.Reflection.AssemblyName फ़ाइल नाम, स्ट्रिंग कोडबेस, सिस्टम.Security.Policy.Evidence असेंबली सुरक्षा, सिस्टम। Reflection.RuntimeAssembly स्थान संकेत, रेफरी System.Threading.StackCrawlMark stackMark, System.IntPtr pPrivHostBinder, bool throwOnFileNotFound, bool forIntrospection, bool suppressSecurityChecks) mscorlib.ni.dll! System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (System.Reflection.AssemblyName assemblyRef, System.Se Curity.Policy.Evidence असेंबली सुरक्षा, सिस्टम। रिफ्लेक्शन। रनटाइम एस्प्लोर्स reqAssembly, ref system.hreading.StackCrawlMark stackMark, System.IntPtr pPrivHostBinder, bool throwOnFileNotFound, बूल फॉर इंट्रोस्पेक्शन, बूल दबाने की सुरक्षा जांच) mscorlib.ni.dll! सिस्टम। रिफ्लेक्शन। रनटाइमएस्क्रिप्ट। आंतरिक लोड (स्ट्रिंग असेंबलीस्ट्रिंग, सिस्टम.Security.Policy.Evidence असेंबली सुरक्षा, रिफ सिस्टम। थ्रेडिंग .StackCrawlMark स्टैकमार्क, सिस्टम। INTPtr pPrivHostBinder, इंट्रोस्पेक्शन के लिए बूल) mscorlib.ni.dll! System.Reflection.RuntimeAssembly.InternalLoad (स्ट्रिंग असेंबलीस्ट्रिंग, सिस्टम। सुरक्षा .Policy.Evidence असेंबली सुरक्षा, रिफ सिस्टम। थ्रेडिंग .StackCrawlMark स्टैकमार्क, इंट्रोस्पेक्शन के लिए बूलमार्क) mscorlib.ni.dll! सिस्टम। रिफ्लेक्शन.एस्प्लोरर। लोड (स्ट्रिंग असेंबली स्ट्रिंग) माइक्रोसॉफ्ट.फोन.निडेल! माइक्रोसॉफ्ट.फोन। बैकग्राउंडएजेंटएक्टिवेटर। LoadEntryPointAssembly (स्ट्रिंग असेंबलीनाम) माइक्रोसॉफ्ट.फोन.निएल.एल.एल. माइक्रोसॉफ्ट.फोन.बैकग्राउंडएजेंटएक्टिवेटर.लोडएजेंट (स्ट्रिंग असेंबलीनाम, स्ट्रिंग टाइपनाम) माइक्रोसॉफ्ट.फोन.नी.dll! माइक्रोसॉफ्ट.फोन.बैकग्राउंडएजेंटएक्टिवेटर.मिक्रोस.फोन.आईबैकग्राउंडएजेंटएक्टिवेटर। क्रिएटबैकग्राउंडएजेंट (स्ट्रिंग असेंबली, स्ट्रिंग typeinfo) Microsoft.Phone.ni.dll! Microsoft.Phone.BackgroundAgentDispatcher.AgentRequest.Invoke() Microsoft.Phone.ni.dll! Microsoft.Phone.BackgroundAgentDispatcher.InvocationThread() mscorlib.ni.dll! System.Threading .ThreadHelper.ThreadStart_Context (ऑब्जेक्ट स्टेट) mscorlib.ni.dll! सिस्टम। थ्रेडिंग। निष्पादन कॉन्टेक्स्ट.रुनरनेट (सिस्टम। थ्रेडिंग। एक्सेक्यूशन कॉन्टेक्स्ट निष्पादन कॉन्टेक्स्ट, सिस्टम। थ्रेडिंग।ContextCallback कॉलबैक, वस्तु राज्य, bool preserveSyncCtx) mscorlib.ni.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback कॉलबैक, वस्तु राज्य, bool preserveSyncCtx) mscorlib.ni.dll ! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback कॉलबैक, वस्तु राज्य) mscorlib.ni.dll! System.Threading.ThreadHelper.ThreadStart() [प्रबंधित संक्रमण के मूल निवासी]

यह भी माना जाता है कि मैं कम मेमोरी एमुलेटर का उपयोग कर रहा था और भूल गया था कि कम ज्ञात उपकरणों में पृष्ठभूमि एजेंटों की अनुमति नहीं है, लेकिन मेरे द्वारा उपयोग किए जाने वाले एमुलेटर (या डिवाइस) में कोई फर्क नहीं पड़ता।

उत्तर

4

इसके साथ लड़ने के इस समय के बाद, मुझे समस्या हल हो गई है। कोड को एक प्रोजेक्ट से दूसरी परियोजना में कॉपी करने में, मैं मुख्य प्रोजेक्ट में अनुसूचित कार्य परियोजना का संदर्भ जोड़ना भूल गया टी।

मैंने अपने प्रोजेक्ट के बाहर काम करने के लिए नमूना कोड पर काम करने की प्रक्रिया में कुछ और चीजें भी सीखी हैं। सबसे पहले, जब आप शेड्यूल्ड टास्क प्रोजेक्ट जोड़ते हैं तो यह WMAppManifest.xml फ़ाइल में आवश्यक मेटाडेटा नहीं जोड़ता है, इसलिए आपको इसे मैन्युअल रूप से जोड़ना होगा। दूसरी बात यह है कि पृष्ठभूमि एजेंटों से निपटने पर, त्रुटि संदेश बहुत गुप्त हो सकते हैं, और समस्या वास्तव में क्या है इसके बारे में कुछ नहीं कह सकते हैं।

अब से, जब मुझे एक त्रुटि दिखाई देती है जैसे मैंने देखा है (मैंने कई सुंदर क्रिप्टिक त्रुटियों को देखा है, सभी समान प्रतीत होते हैं, लेकिन काफी नहीं) अनुसूचित कार्य पर काम करते समय, यह एक संकेत होगा सुनिश्चित करें कि मुझे दूसरी परियोजना का संदर्भ मिला है, और सुनिश्चित करें कि आवश्यक जानकारी WMAppManifext.xml में है (वर्तनी सहित - यदि आप इसे गलत वर्तनी देते हैं, तो इसे रेखांकित नहीं किया जाएगा)।

2

हाँ, WP7.5 SDK पर यह कोड स्निपेट चलाने का कोई तरीका नहीं है। task.ToString() प्रकार का नाम होगा ("Microsoft.Phone.Scheduler.PeriodicTask") और इस तरह सही मूल्य नहीं है।

बदलें:

ScheduledActionService.LaunchForTest(task.ToString(), TimeSpan.FromSeconds(60)); 

करने के लिए:

ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(60)); 

और यह ठीक काम करता है।

अपने प्रश्न का उत्तर देने के लिए: * .ni.dlls NGENed .NET dlls हैं। फ्रेमवर्क एनजीएनएड हो जाता है और फोन पर तैनात किया जाता है, इसलिए आप देखे जाने वाले अधिकांश अपवाद * .ni फ्रेमवर्क डीएलएस से आएंगे। मुझे लगता है कि आपने एक सामान्य अपवाद देखा है।

+0

आह ....... मैंने इसे बदल दिया। DOH! –

+0

ठीक है - इसे दोनों स्थानों पर आपके वाक्यविन्यास में बदल दिया गया है (वास्तव में गलत वाक्यविन्यास केवल अनुसूचित एग्जिट क्लास में था, जो कभी नहीं पहुंचा था), लेकिन मुझे अभी भी वही त्रुटि मिलती है, और मैं अभी भी निर्माता पर ब्रेक पॉइंट तक नहीं पहुंचता अनुसूचित एजेन्ट का, लेकिन लॉन्चफॉरटेस्ट के लिए सही समय पर त्रुटि होती है। –

+0

यहां एक और चीज है जिसके बारे में मुझे यकीन नहीं है ...अनुसूचित एजेन्ट के निर्माता में ब्रेकपॉइंट का कहना है कि ब्रेकपॉइंट हिट नहीं होगा - इस दस्तावेज़ के लिए कोई प्रतीक लोड नहीं किया गया है। मुझे नहीं पता कि इसका क्या अर्थ है - इस दस्तावेज़ के लिए कोई प्रतीक लोड नहीं किया गया है। और मैं एक चीज वापस लेता हूं ... टाइमपैन समाप्त होने के लिए त्रुटि बहुत जल्द होती है। समय सेट के बावजूद, मेनपेज.एक्सएमएल सीएस में लॉन्चफॉरटेस्ट से पहले लाइन ब्रेकपॉइंट जारी करने के बाद त्रुटि लगभग 3-4 सेकंड में होती है। इससे पहले, यह उस समय पर निर्भर था, लेकिन अब नहीं। :/ –

1

आप इस पर कैसे हो रहे हैं? मेरे पास एक बहुत ही समान समस्या है ('System.InvalidOperationException' System.Windows.ni.dll में हुई "जब मैं पृष्ठभूमि एजेंट कोड में जाता हूं ... यह WP7 में ठीक काम कर रहा था ... ऐप अभी भी WP7 को छोड़कर है मैं VS2012 के तहत चल रहा हूँ और WP8 एसडीके स्थापित किया है

मजेदार बात यह है कि मैं किसी अन्य ऐप्स कि बस ठीक काम करता है है -।। ठीक उसी परिदृश्य और पर्यावरण

आपकी समस्या का अभी तक हल कर मिल गया है यह हो गया है? बहुत निराशाजनक।

+0

मैंने अनइंस्टॉल किया है और पुनर्स्थापित किया है, प्रोग्राम फ़ाइलों (x86) \ Microsoft Visual Studio 11 निर्देशिका में छोड़ा गया लगभग 100 एमबी हटा रहा है, और फिर भी, जब मैंने पुनर्स्थापित किया था, तो इसमें एक्सटेंशन इंस्टॉल किए गए थे जो मैंने पहले किया था , मेरे सभी prefs उठाया, और मुझे एक ही त्रुटि दे दी। अब मैंने इस लिंक का उपयोग करके अनइंस्टॉल किया है, और मैं रजिस्ट्री के माध्यम से जा रहा हूं, वीएस 11.0 के सभी संदर्भों से छुटकारा पाने की कोशिश कर रहा हूं। काफी कठिन काम है। मैं अभी भी उस हिस्से पर काम कर रहा हूं। http://support.microsoft.com/kb/2771441/EN-US –

+0

ओह - और यदि आप नीचे स्क्रॉल करते हैं और देखते हैं, तो सभी अतिरिक्त अनइंस्टॉल करने के लिए एक कमांड लाइन तरीका है (मैंने यह नहीं देखा कि जब तक मैं मैन्युअल रूप से सूची को पहले से ही नीचे चला गया है)। –

+0

मैं कोड के पुराने संस्करण पर वापस गया (वीएस 10 में ठीक काम किया) और फिर उसे वीएस2012 में लाया। यह सब ठीक काम किया। इसके बाद मैंने पुराने संस्करण (अनुसूचित एजेंट कोड सहित) से कुछ कोड लिया और इसे अद्यतन कोड में डाल दिया और ऐसा लगता है कि अब यह काम कर रहा है। मैं अनुमान लगा रहा हूं कि किसी भी तरह के बाद के संस्करण में मेरे बदलाव ने इस समस्या को पेश किया। लेकिन कोई विचार नहीं है। ऐसा लगता है कि यह पर्यावरण के बजाय कोड से संबंधित है। मैं अभी भी चीजों के माध्यम से जांच रहा हूँ। आपको बताएगा कि मैं इसे कैसे प्राप्त करता हूं। – Peter

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