2016-02-06 11 views
8

यूनिट परीक्षण चलाते समय, मेरे पोर्टेबल रनटाइम लाइब्रेरी डीएलएल में किसी भी विधि को कॉल करने से "सिस्टम। रिफ्लेक्शन। टाइप एक्सटेन्शंस" संदर्भित करता है, "सिस्टम" के लिए खोज करते हुए फ़ाइल नॉटफाउंड अपवाद उत्पन्न करता है .Reflection.TypeExtensions "। त्रुटि तब नहीं होती है जब एक ही कोड को Windows 10 यूनिवर्सल ऐप में निष्पादित किया जाता है।विंडोज 10 यूनिवर्सल विंडोज लाइब्रेरी में बाइंडिंगफ्लैग प्रकार का संदर्भ देते समय असेंबली लोड करने में असमर्थ

प्रोजेक्ट एक सी # पोर्टेबल रनटाइम लाइब्रेरी है, जो .NET Framework 4.6 और Windows Universal 10.0 का समर्थन करने के लिए कॉन्फ़िगर किया गया है। टेस्ट प्रोजेक्ट को .NET Framework 4.6 का उपयोग करने के लिए कॉन्फ़िगर किया गया है।

जब भी मैं सिस्टम का उपयोग करने वाली विधि को कॉल करने का प्रयास करता हूं। Reflection.BindingFlags प्रकार, मुझे निम्न अपवाद मिलता है। अपवाद तब होता है जब कॉल शुरू होता है (संभवतः फ़ंक्शन को jit-ing करते समय)।

Test method Sfx.Test.SignalExpressionTest.TestAddExpressions threw exception: 
System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.=== Pre-bind state information === 
LOG: DisplayName = System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
(Fully-specified) 
+4

मैं इसे देखता हूं, बदसूरत बग। निदान करने के लिए मुश्किल है,।नेटकोर निर्भरता अब और उलझन में असंभव है। कामकाज आपकी परियोजना में Nuget पैकेज जोड़ने के लिए है। –

+0

मुझे यह भी मिला (यूनिट टेस्ट इश्यू? मैं यूनिट टेस्ट भी चला रहा हूं): https://social.msdn.microsoft.com/Forums/windowshardware/en-US/37f248bb-c45c-4b17-ae45-45913e7ce4b8/portable -class-library-fails-to-jit-when-referencing-systemreflectionbindingflags-when-running? forum = vsunittest – eschneider

+0

यह बिल्कुल सही समस्या है। यह मुझे स्पष्ट नहीं है कि आप Nuget पैकेज क्यों नहीं जोड़ना चाहते हैं। ऐसा लगता है कि यह 15 जनवरी को मेलिनो से प्रतिबद्धता से बोर्कन मिला जिसने बाइंडिंगफ्लैग को स्थानांतरित किया। बस बग की रिपोर्ट करें, उसे जाने के लिए [इस वेब पेज] (https://github.com/dotnet/corefx/issues) पर नया समस्या बटन क्लिक करें। ध्यान रखें कि इस तरह की बग बहुत सामान्य हैं, कोरफैक्स तेजी से आगे बढ़ रहा है और मुश्किल से परीक्षण किया जाता है। आप अपनी पीठ में तीरों के साथ अग्रणी हैं। –

उत्तर

2

उन पैकेज जोड़ना ऐसा करना सही है।

  1. BindingFlags वर्तमान में [1] System.Reflection.TypeExtensions में सामने आ रहा है: यहाँ तुम क्यों इस व्यवहार देखते हैं।
  2. जब आप एक .NET कोर क्लास लाइब्रेरी संकलित करते हैं, तो संकलक प्रकार संदर्भ को System.Reflection.TypeExtensions!System.Reflection.BindingFlags के रूप में रिकॉर्ड करता है।
  3. जब आप किसी .NET Framework अनुप्रयोग से क्लास लाइब्रेरी का उपभोग करते हैं, तो आपको System.Reflection.TypeExtensions पर कोई संदर्भ जोड़ने की आवश्यकता है अन्यथा संकलक प्रकार को हल नहीं कर सकता है। यूनिट परीक्षण प्रोजेक्ट के लिए भी यही सच है जिसे चलाने के लिए सभी कोड को तैनात करना है।
  4. रनटाइम पर, सीएलआर प्रकार को हल करेगा, एक प्रकार आगे खोजें जो mscorlib!System.Reflection.BindingFlags पर इंगित करता है और खुशी से अपना कोड चलाता है।

अंगूठे का एक सामान्य नियम के रूप: .NET कोर एप्लिकेशन-स्थानीय फैशन में ढांचे को तैनात करने के लिए बनाया गया है दूसरे शब्दों में, जब आपके आवेदन एक फ़ोल्डर में तैनात किया जाता है में, अपने सभी निर्भरता को बंद करने की जरूरत है भी तैनात किया जाना चाहिए। यद्यपि इकाई परीक्षण परियोजनाएं अवधारणात्मक कक्षा पुस्तकालय हैं, वही लागू होती है क्योंकि उन्हें एप्लिकेशन की तरह निष्पादित किया जाता है।

बेशक, हम उम्मीद नहीं करते हैं कि लोग संदर्भों को मैन्युअल रूप से ट्विक कर दें और निर्भरताओं का शिकार करें। जो आप वर्तमान में देखते हैं वह प्री-रिलीज बिट्स हैं जहां हमारे टूलींग अनुभवों में सभी टुकड़े सही काम नहीं करते हैं।

दो मेरी तरफ से सवाल:

  1. कौन सा इकाई परीक्षण रूपरेखा उपयोग करते हैं? मुझे लगता है कि यह एमएसटीएटी (माइक्रोसॉफ्ट.विज़ुअल स्टूडियो। टेस्टटूल। यूनिट टेस्टिंग) है, एक्सयूनीट या न्यूटिट के विपरीत?

  2. आप किस धावक का उपयोग कर रहे हैं? मुझे लगता है कि यह अंतर्निहित विजुअल स्टूडियो टेस्ट एक्सप्लोरर (रीशेर्पर या टेस्टड्रिवेन.नेट के विपरीत) है?


[1] मैं वर्तमान में ग्राहकों की प्रतिक्रिया के आधार पर क्योंकि कहते हैं कि हम decided इसे वापस ले जाने के लिए System.Reflection में एपीआई कि BindingFlags लेने के साथ एक साथ,।

+0

हां मैं विजुअल स्टूडियो यूनिट परीक्षण के साथ अपने सभी यूनिट परीक्षण कर रहा हूं, कोई तीसरा पक्ष शामिल नहीं है। – eschneider

+0

धन्यवाद। मैं यह सुनिश्चित कर दूंगा कि यह वीएस की रिहाई के लिए काम करेगा। –

+1

मेरी लाइब्रेरी लक्ष्य .NET मानक 1.4 और कॉलर एक पूर्ण ढांचा 4.6.1 कंसोल ऐप है। कोई "प्री-रिलीज बिट्स" शामिल नहीं है लेकिन मैं अभी भी इसी मुद्दे पर भाग गया हूं। वास्तव में यह तय करना अच्छा लगेगा। – HappyNomad

4

ऐड संकुल nuget के संदर्भ:

System.Reflection 
System.Reflection.Extensions 
System.Reflection.Primitives 
+0

बेकार है कि मैंने 100 अंक खो दिए, भले ही मैंने इसका उत्तर दिया। बाउंटी लॉजिक त्रुटिपूर्ण है ... – eschneider

+1

इसे जोड़ें, सिस्टम। रिफ्लेक्शन। टाइप एक्सटेंशन, और फिर यह काम करेगा। – CrusherJoe

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