2010-01-19 18 views
5

मैं वीएस -2010 बीटा 2 के साथ खेल रहा था। मैंने देखा कि यदि मैं किसी प्रोजेक्ट में System.Core.dll को जोड़ने का प्रयास करता हूं, जिसमें पहले से ही इसका संदर्भ नहीं है, तो VS2010 में, यह शिकायत करता है कि मैं उस असेंबली को जोड़ नहीं सकता क्योंकि यह पहले से ही प्रोजेक्ट सिस्टम द्वारा संदर्भित है। कोई विचार क्यों वे VS2010/4.0 में ऐसा कर रहे हैं? ऐसा इसलिए है क्योंकि उन्होंने सिस्टम से कुछ प्रकार को mscorlib को अग्रेषित किया है। अधिक?4.0 में System.Core.dll डिफ़ॉल्ट रूप से जोड़ा गया?

+0

इस प्रश्न के लिए धन्यवाद , हमने बनाम 2010 के साथ .NET4 की कोशिश की, लेकिन हमारे समाधान में बहुत अधिक सामान था जो काम नहीं करेगा इसलिए हम 3.5 पर वापस चले गए। आपके द्वारा उठाए गए बग के बाद, मुझे वर्कअराउंड मिला ताकि मैं सिस्टम के संदर्भ को जोड़ सकूं। किसी ऐसे प्रोजेक्ट में वापस आएं जो इसके बिना निर्माण नहीं करेगा। –

+0

एसएल 5 परियोजना को एसएल 5 परियोजना को पोर्ट करते समय VS2012 में एक ही समस्या का सामना करना पड़ा। –

उत्तर

3

सिस्टम। कोर 3.5 के बाद से आवश्यक ढांचे का हिस्सा रहा है, क्योंकि इसमें एक्सटेंशन एट्रिब्यूट और LINQ मानक क्वेरी ऑपरेटर जैसी चीजें शामिल हैं। इसी प्रकार, यदि आप वीएस -2008 में 3.5 प्रोजेक्ट बनाते हैं, तो यह स्वचालित रूप से सिस्टम के लिए एक संदर्भ जोड़ देगा। आपके लिए कोर।

+0

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

+0

यह एक बग की तरह लगता है: या तो यह आपको इस आवश्यक संदर्भ को हटाने नहीं देना चाहिए, या यदि आप संदर्भ को हटाते हैं तो इसे आपको इसे वापस जोड़ने देना चाहिए। कनेक्ट पर रिपोर्टिंग लायक हो सकता है। – itowlson

+3

बग उठाया गया: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan

5

"वे ऐसा क्यों कर रहे हैं" के लिए कोई जवाब नहीं है, लेकिन सहायक हो सकता है।

इस तरह मैं कार्यों की श्रृंखला है कि निहित संदर्भित System.Core.dll करके देखें:

  • आप एक परियोजना दृश्य स्टूडियो 2010 में यह ToolsVersion=4.0 साथ .csproj उत्पन्न करते हैं। मान लीजिए कि यह एमएसबील्ड का उपयोग .NET 4.
  • से आपके .csproj आयात Microsoft.CSharp.targets$(MSBuildBinPath) से होगा। मुझे लगता है कि यह c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets आयात Microsoft.Common.targets
  • नेट 4 में हो जाएगा, Microsoft.Common.targets आयात Microsoft.NETFramework.props
  • Microsoft.NETFramework.props में आप AdditionalExplicitAssemblyReferences नोड है, जो एक अर्धविराम है पा सकते हैं असेंबली की अलग सूची। मैंने वहां System.Core.dll और बाद में प्रतिस्थापन के लिए एक चर पाया।

तो, System.Core.dll की अक्षम अंतर्निहित संदर्भ लिए, आप इसे सूची से AdditionalExplicitAssemblyReferences नोड में c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props में निकाल सकते हैं।

इस के बाद, यदि आप उपयोग करते हैं, उदाहरण के लिए, System.Linq और अपनी परियोजना में System.Core.dll के लिए कोई संदर्भ है, तो आप तार्किक त्रुटि संकलन, बस दृश्य स्टूडियो में की तरह मिल जाएगा 2008

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