c# - पूर्वनिर्धारित प्रकार 'System.ValueTuple´2 not परिभाषित या आयातित नहीं है
visual-studio-2017 c#-7.0 (6)
.NET 4.6.2 या उससे कम के लिए, .NET कोर 1.x, और .NET मानक 1.x के लिए आपको NuGet पैकेज
System.ValueTuple
स्थापित करने की आवश्यकता है
System.ValueTuple
:
Install-Package "System.ValueTuple"
या वीएस 2017 में एक पैकेज संदर्भ का उपयोग कर:
<PackageReference Include="System.ValueTuple" Version="4.4.0" />
.NET फ्रेमवर्क 4.7, .NET कोर 2.0 और .NET मानक 2.0 में ये प्रकार शामिल हैं।
मैंने विजुअल स्टूडियो 15 प्रीव्यू 3 स्थापित किया है और नई ट्यूपल सुविधा का उपयोग करने की कोशिश की है
static void Main(string[] args)
{
var x = DoSomething();
Console.WriteLine(x.x);
}
static (int x, int y) DoSomething()
{
return (1, 2);
}
जब मैं संकलित करता हूं तो मुझे त्रुटि मिलती है:
पूर्वनिर्धारित प्रकार 'System.ValueTuple´2 not परिभाषित या आयातित नहीं है
ब्लॉग पोस्ट के अनुसार, यह सुविधाएँ डिफ़ॉल्ट रूप से "चालू" होनी चाहिए।
मैंने गलत क्या किया?
ValueTuple प्रकार नए फ्रेमवर्क में बनाए गए हैं:
- .NET फ्रेमवर्क 4.7
- .NET कोर 2.0
- मोनो 5.0
- .नेट स्टैंडर्ड 2.0
जब तक आप उन नए फ्रेमवर्क संस्करणों में से एक को लक्षित नहीं करते हैं, तब तक आपको ValueTuple पैकेज को संदर्भित करना होगा।
अधिक जानकारी http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html
मैं .net फ्रेमवर्क परियोजनाओं के लिए पैकेज संदर्भ के रूप में
ValueTuple
जोड़ने की सलाह नहीं
ValueTuple
।
जैसा कि आप जानते हैं कि यह असेंबली 4.7 .NET फ्रेमवर्क से उपलब्ध है।
ऐसी कुछ परिस्थितियाँ हो सकती हैं जब आपकी परियोजना पैकेज फ़ोल्डर के बजाय .NET फ्रेमवर्क फ़ोल्डर से सभी लागत
ValueTuple
को शामिल करने का प्रयास करेगी और यह कुछ असेंबली त्रुटियों का कारण नहीं बन सकती है।
कंपनी में आज हमें यह समस्या थी। हमारे पास 2 परियोजनाओं के साथ समाधान था (मैं इसकी देखरेख करता हूं):
-
Lib
-
Web
Lib
वैल्यूटल सहित था और
Web
Lib
का उपयोग कर रहा था।
यह पता चला है कि किसी अज्ञात कारण से जब
ValueTuple
लिए पथ को हल करने की कोशिश में
HintPath
.NET फ्रेमवर्क निर्देशिका में था और गलत संस्करण ले रहा था।
उस वजह से हमारा एप्लिकेशन क्रैश हो रहा था।
ValueTuple
को उस विधानसभा के लिए
Web
और न ही
HintPath
में परिभाषित नहीं किया गया था।
समस्या बहुत अजीब थी।
आम तौर पर यह पैकेज फ़ोल्डर से असेंबली की प्रतिलिपि बनाता है।
यह समय सामान्य नहीं था।
मेरे लिए यह हमेशा
System.*
को जोड़ने का जोखिम है
System.*
पैकेज संदर्भ।
वे अक्सर टाइम-बम की तरह होते हैं।
वे शुरुआत में ठीक हैं और वे सबसे खराब क्षण में आपके चेहरे पर विस्फोट कर सकते हैं।
मेरे अंगूठे का नियम:
System.*
उपयोग न करें
System.*
.NET फ्रेमवर्क के
लिए नगेट पैकेज यदि उनके लिए कोई वास्तविक आवश्यकता नहीं है।
हमने
Web
प्रोजेक्ट के अंदर मैन्युअल रूप से
ValueTuple
.csproj
फ़ाइल में जोड़कर अपनी समस्या का समाधान किया।
यदि दूसरों की समस्या एक जैसी है, तो मैं 4.7 पर प्रोजेक्ट को अपडेट करने के बाद इस त्रुटि में भाग गया। अजीब तरह से, मुझे इस त्रुटि को दूर करने के लिए System.ValueTuple संदर्भ को हटाना पड़ा।
सुनिश्चित करें कि आपके पास वी.एस. स्थापित के लिए
.NET 4.6.2 डेवलपर पैक
है और फिर NuGet से
System.ValueTuple
पैकेज में खींचें।
हम अपनी पुरानी परियोजनाओं में इसी मुद्दे को देख रहे थे जो फ्रेमवर्क 4.5.2 को लक्षित कर रहा था। मैंने ऊपर सूचीबद्ध सभी सहित कई परिदृश्यों की कोशिश की: लक्ष्य 4.6.1, System.ValueTuple पैकेज जोड़ें, बिन, obj, और .vs फ़ोल्डर हटाएँ। कोई पाँसा नहीं। 4.7.2 के लिए एक ही प्रक्रिया को दोहराएं। तब मैंने System.ValueTuple पैकेज को हटाने की कोशिश की, क्योंकि मैं एक टिप्पणीकार के सुझाव के अनुसार 4.7.2 को लक्षित कर रहा था। अब तक कुछ भी नहीं। जाँच की गई csproj फ़ाइल संदर्भ पथ। सही लग रहा है। यहां तक कि वापस 4.5.2 पर वापस गिरा और पैकेज को फिर से स्थापित किया। कई वी.एस. के साथ यह सब कई बार एक ही फ़ोल्डर को पुनरारंभ और डिलीट करता है। सचमुच कुछ भी काम नहीं किया।
मुझे इसके बजाय एक संरचना का उपयोग करने के लिए रिफ्लेक्टर करना पड़ा। मुझे आशा है कि अन्य लोग भविष्य में इस मुद्दे पर भागना जारी नहीं रखेंगे, लेकिन यह सोच सकते हैं कि अगर आप अंत में हम जैसे थे, तो यह मददगार हो सकता है।