15

में टीपीएल डेटाफ्लो और टीपीएल के संदर्भों में समस्याएं मैंने विजुअल स्टूडियो 11 बीटा को नए विजुअल स्टूडियो 2012 आरसी में अपग्रेड किया है और टीपीएल डेटाफ्लो को संदर्भित करने में समस्याएं हैं।वीएस 2012 आरसी

सबसे पहले, मैंने डेटाफ्लो को संदर्भित करने की कोशिश की जैसा कि मैंने पहले किया था, ढांचे से संदर्भ जोड़कर।

A reference to 'System.Threading.Tasks.Dataflow' could not be added.

और फिर पूरे दृश्य स्टूडियो फ्रीज़: लेकिन जब मैं ऐसा करने की कोशिश, मैं एक त्रुटि बॉक्स मिलता है।

MEF and TPL Dataflow NuGet Packages for .NET Framework 4.5 RC पढ़ने के बाद, मैंने डेटाफ्लो का संस्करण माना जो संदर्भ सूची में दिखाया गया था पिछली स्थापना का कुछ प्रकार का आर्टिफैक्ट था। तो, मैं NuGet, जो काम करने के लिए, जब तक मैं वास्तव में मेरी कोड संकलन करने की कोशिश की लग रहा था से Dataflow उपयोग करने की कोशिश है, क्योंकि मैं एक त्रुटि मिली:

The type 'System.Threading.Tasks.Task' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

यह भ्रामक है, क्योंकि Task mscorlib में है, कोई अन्य संदर्भ चाहिए आवश्यक होना। लेकिन संदर्भ सूची में System.Threading.Tasks नामक एक संदर्भ असेंबली है, इसलिए मैंने इसे जोड़ने का प्रयास किया। दुर्भाग्यवश, एक परिचित त्रुटि से पता चला:

A reference to 'System.Threading.Tasks' could not be added.

और फिर विजुअल स्टूडियो फिर से जम गया।

क्या मैं कुछ गलत कर रहा हूं? मैं वीएस 2012 आरसी के साथ टीपीएल डेटाफ्लो का उपयोग कैसे कर सकता हूं?

+0

क्या यह एक नई परियोजना है या मौजूदा है? –

+0

नई परियोजना बनाने के दौरान समस्या होती है। वीएस 11 बीटा के साथ बनाई गई एक परियोजना को खोलना जो पहले से ही टीपीएल डेटाफ्लो का उपयोग करता है ठीक काम करता है। – svick

+0

[मैंने इस बग को कनेक्ट करने के लिए पोस्ट किया है।] (Https://connect.microsoft.com/VisualStudio/feedback/details/746558/problems-with-references-to-tpl-dataflow-and-tpl) – svick

उत्तर

23

स्पष्ट रूप से C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5 से "संदर्भ जोड़ें" का प्रयास करें। वैकल्पिक रूप से आप C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades निर्देशिका का उपयोग कर सकते हैं।

UPDATED: System.Runtime के संदर्भ NuGet पैकेज Microsoft.Tpl.Dataflow.4.5.1-rc की currect संस्करण में त्रुटि के कारण जोड़ दिया जाएगा: मैं System.Runtime के संदर्भ को दूर करने और मैं निम्नलिखित जोड़ सकते हैं के बारे में the answer के पढ़ने के बाद समस्या और अधिक जांच की। यदि कोई विज़ुअल स्टूडियो संख्या System.Runtime संदर्भ में सीधे उसी System.Threading.Tasks.Dataflow.dll का संदर्भ जोड़ता है तो संदर्भ जोड़ा जाएगा और कोई समस्या मौजूद नहीं है।

NuGet Package Explorer का उपयोग करके कोई भी "NuGet आधिकारिक पैकेज स्रोत" से मूल Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg डाउनलोड कर सकता है। पैकेज Matadata के अंत में एक

enter image description here

एक मेटाडाटा (प्रेस Ctrl-K) संशोधित कर सकते हैं देखेंगे और संदर्भ निकालें:

enter image description here

है कि एक के बाद कर सकते हैं कुछ निर्देशिका में संशोधित फ़ाइल Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg सहेजें। NuGet स्रोतों की सूची में नया स्थान (स्थानीय निर्देशिका) जोड़ने के बाद (here या here देखें) कोई स्थानीय स्रोत से नया पैकेज जोड़ने में सक्षम होगा (सभी संकुल पूर्व-रिलीज़ को प्रदर्शित करने के लिए सभी पैकेजों को प्रदर्शित करना न भूलें नीचे चित्र):

enter image description here

संशोधित Microsoft.Tpl.Dataflow.4.5.1-rc.nupkgSystem.Runtime नहीं जोड़ेंगे और परियोजना त्रुटियों के बिना संकलित किया जाएगा।

तो बग विजुअल स्टूडियो 2012 आरसी में नहीं है और यहां तक ​​कि Microsoft.Tpl.Dataflow.dll में भी नहीं है। बग Microsoft.Tpl.Dataflow के पूर्व-रिलीज़ संस्करण के मेटाडेटा में है, वर्तमान में "NuGet आधिकारिक पैकेज स्रोत" पर उपलब्ध NuGet पैकेज।

आप बग रिपोर्ट autors पर पोस्ट कर सकते हैं ताकि पैकेज ठीक हो जाए।

अद्यतन 2: यहां तक ​​कि यदि मेरा उत्तर पहले ही हल हो गया है और बाउंटी को समस्या से सम्मानित किया गया है, फिर भी मेरे सिर से नहीं निकलता है।

  1. क्यों अप्रयुक्त विधानसभा System.Runtime के अस्तित्व परियोजना के builging दौरान त्रुटि उत्पन्न कर सकते हैं: हकीकत में मैं दो खोला समस्याओं को देखते हैं।
  2. मुझे NuGet संकुल के अनइंस्टॉल या अपडेट के तरीके में कुछ सामान्य समस्याएं दिखाई देती हैं (बाद में विवरण देखें)।

आइए हम केवल इस तथ्य को स्वीकार करते हैं कि पहली समस्या कारण से स्वतंत्र है। दूसरी समस्या मुझे बेचैनी बनाती है। मैं यहाँ असली समस्या देखता हूं। हर कोई मुझे बेहतर समझने के लिए निम्नलिखित प्रयोग कर सकता है:

  1. विजुअल स्टूडियो 2012 आरसी में एक नया खाली कंसोल एप्लिकेशन बनाएं।
  2. सत्यापित करें कि परियोजना का System.Runtime का कोई संदर्भ नहीं है।
  3. "उपकरण"/"लाइब्रेरी पैकेज प्रबंधक" से "पैकेज प्रबंधक कंसोल" खोलें।
  4. "पैकेज प्रबंधक कंसोल" में "इंस्टॉल-पैकेज Microsoft.Tpl.Dataflow -Pre" आदेश निष्पादित करें।
  5. सत्यापित करें कि System.Runtime और System.Threading.Tasks.Dataflow दोनों परियोजनाओं के संदर्भों की सूची में शामिल हैं।
  6. "पैकेज प्रबंधक कंसोल" में "अनइंस्टॉल-पैकेज Microsoft.Tpl.Dataflow" आदेश निष्पादित करें।
  7. सत्यापित करें कि System.Threading.Tasks.Dataflow प्रोजेक्ट के संदर्भों की सूची से हटा दिए गए हैं, लेकिन System.Runtime संदर्भों की सूची में अभी भी है।

मैं एक और प्रयोग किया जाता है और मैं संशोधित Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg, जहां मैं 4.5.1-rc1 को System.Runtime के संदर्भ हटा दिया, 4.5.1-rc से है और यह स्थानीय रूप से सहेजा (यह Microsoft.Tpl.Dataflow.4.5.1-rc1.nupkg के अंतर्गत सहेजा जाएगा) संस्करण बदल दिया है। अगर मैं अद्यतन System.Runtime के संदर्भ में भी हटाया नहीं होगा स्थापित

enter image description here

: उसके बाद मैं 'नई' अपने प्रोजेक्ट के लिए नई जानकारियां की सूची में संस्करण देख सकता था।

तो NuGet के "अद्यतन" और "अनइंस्टॉल करें" के वर्तमान कार्यान्वयन में बग या सामान्य डिज़ाइन समस्या है। अगर हमने अपनी परियोजना में एक पैकेज जोड़ा और परियोजना के कुछ अपडेट किए हैं तो हमें सभी पुराने संस्करणों की सभी निर्भर असेंबली के संदर्भ मिलेंगे। पुराना संदर्भ, पैकेज के पुराने संस्करणों से NuGet द्वारा जोड़ा गया, अनइंस्टॉल या अद्यतन के दौरान हटाया नहीं जाएगा।सबसे पहले यह परियोजना संदर्भ में कचरा के लिए ही अच्छा नहीं है, लेकिन अस्तित्व पहली समस्या (संकलन के दौरान त्रुटि अगर unreferenced System.Runtime के संदर्भ में मौजूद हैं) की वजह से समस्या और भी अधिक गंभीर हो जाएगा।

इसलिए यदि NuGet में कुछ भी नहीं बदला जाएगा तो Microsoft.Tpl.Dataflow के अगले संस्करण में अपडेट संस्करण 4.5.1 (या शायद प्रारंभिक संस्करण) में Microsoft.Tpl.Dataflow स्थापित करने वाले उपयोगकर्ताओं के लिए समस्या का समाधान नहीं करेगा। सभी उपयोगकर्ताओं को मैन्युअल रूप से System.Runtime के संदर्भ को हटाना होगा। मुझे लगता है कि यह असली NuGet समस्या है जिसे NuGet डेवलपर्स द्वारा हल किया जाना है। मैं बाद में समस्या का विवरण http://nuget.org/ पर पोस्ट करूंगा।

बग रिपोर्ट जो मैं NuGet पर पोस्ट किए गए here (पाठ की नहीं सही स्वरूपण के लिए खेद है) पाया जा सकता है।

+0

धन्यवाद, ऐसा लगता है कि काम (मैंने दूसरा इस्तेमाल किया)। कोई विचार क्यों ऐसा होता है? – svick

+0

@ एसविक: मैंने विवरण में समस्या की जांच नहीं की है। संदर्भ के बिना 'System.Threading.Tasks.Dataflow' के नए संस्करण' System.hreading.Tasks.dll' के गलत संस्करण का उपयोग करने का प्रयास किया। मैं पहले टीपीएल डेटाफ्लो का उपयोग नहीं करता हूं। मैंने बस [पेज] से डेमो कोड कॉपी किया है (http://msdn.microsoft.com/en-us/library/hh194684 (v = vs.110) .aspx) और उस त्रुटि को प्राप्त करें जिसे आपने वर्णित किया है और त्रुटि लाइन 'वर्कर्सब्लॉक। कॉम्प्लेशन। वैट();': प्रतीक्षा विधि मौजूद नहीं है। यह स्पष्ट था कि माइक्रोसॉफ्ट ने कुछ वर्गों को बदल दिया और मैंने गलत असेंबली का इस्तेमाल किया। तो केवल एक को सही खोजने के लिए जरूरी है। – Oleg

+0

@svick: जिस तरह से मैंने [ब्लॉग] के अंत में पाया [http://blogs.microsoft.co.il/blogs/oshvartz/) उसी संदर्भ को जोड़ने के लिए टिप जैसा कि मैंने अपने उत्तर में वर्णित किया था। तो ऐसा लगता है कि आप पहले व्यक्ति नहीं हैं जिनके पास समस्या है। – Oleg

2

According to Alok Shriram from MS, the solution is to remove the reference to System.Runtime, और यह है कि अगली फिल्म में तय की जाएगी।

मैं पुष्टि कर सकता है कि संदर्भ को हटाने वास्तव में समस्या ठीक होती है।

+0

प्रोजेक्ट से 'System.Runtime.dll' के संदर्भ को हटाने के लिए नया संदर्भ' System.Threading.Tasks.dll' जोड़ने के लिए बेहतर है। दूसरी ओर से यह वास्तव में स्पष्ट नहीं है * क्यों * संघर्ष मौजूद है। मैंने "आईएल डिस्सेबलर" (ildasm.exe) के संबंध में 'System.Runtime.dll' के मैनिफेस्ट की जांच की और किसी भी विवाद को नहीं देख सका। तो मेरे लिए दोनों तरीके इस तरह हैं: "ऐसा करें और समस्या हल हो जाएगी"। तो मैं वही प्रश्न दोहरा सकता हूं जिसे आपने मुझसे पहले पूछा था: "कोई विचार क्यों ऐसा होता है?" – Oleg

+0

हाँ, मैं भी जानना चाहता हूं। एसआर में एसटीटी के लिए कोई असेंबली रिफ नहीं है, इसलिए मुझे नहीं पता कि इसे हटाने में मदद क्यों होती है। – svick

+0

इसके अलावा, 'System.Runtime' के संदर्भ को 'इंस्टॉल-पैकेज Microsoft.Tpl.Dataflow -Pre' ** के निष्पादन द्वारा ** जोड़ा गया था, लेकिन फ़ाइल' system.threading.tasks.dataflow.xml' don ' टी में कोई 'System.Runtime' टेक्स्ट नहीं है। अगर हमारे पास कुछ असेंबली लोडिंग समस्याएं होंगी तो हम ट्रेसिंग के लिए [Fuslogvw.exe] (http://msdn.microsoft.com/en-us/library/e74a18c4 (v = vs.110) .aspx) का उपयोग कर सकते हैं, लेकिन हमारे पास है * कंपाइलर त्रुटि *। जिस तरह से मैंने [ReSharper] (http://confluence.jetbrains.net/display/ReSharper/ReSharper+7+EAP) का उपयोग किया जो अप्रयुक्त संदर्भों को हटाने में मदद करता है, लेकिन यह अन्य संदर्भों की तरह 'System.Runtime' को नहीं हटाता है । – Oleg