পূর্বনির্ধারিত প্রকারের 'সিস্টেম.ভ্যালিউটুপ্লি´2´ সংজ্ঞায়িত বা আমদানীকৃত নয়


385

আমি ভিজ্যুয়াল স্টুডিও 15 পূর্বরূপ 3 ইনস্টল করেছি এবং নতুন টিপল বৈশিষ্ট্যটি ব্যবহার করার চেষ্টা করেছি

static void Main(string[] args)
{
    var x = DoSomething();
    Console.WriteLine(x.x);
}

static (int x, int y) DoSomething()
{
    return (1, 2);
}

আমি যখন সংকলন করি তখন ত্রুটিটি পাই:

পূর্বনির্ধারিত প্রকারের 'সিস্টেম.ভ্যালিউটুপ্লি´2´ সংজ্ঞায়িত বা আমদানীকৃত নয়

ব্লগ পোস্ট অনুসারে , এই বৈশিষ্ট্যগুলি ডিফল্টরূপে "চালু" হওয়া উচিত।

আমি কি ভুল করছি?


3
কেউ কি জানেন যে নুগেট প্যাকেজটি এমনকি ২০১৪ সালেও আরটিএম ৪..2.২ লক্ষ্য করে প্রয়োজন? দেখে মনে হচ্ছে আপনার এখনও এটির প্রয়োজন আছে এবং আমি প্রত্যাশা করেছি যে আপনি চূড়ান্ত সংস্করণে আসবেন না।
dmeglio

আপনি তার পরিবর্তে System.Tuple <int, int> ব্যবহার করার চেষ্টা করতে পারেন
কেভিন জিয়াও

আমার জন্য এই স্ট্যাকওভারফ্লো . com/a/46533630/4383425 ছিল সমাধান।
আন্দ্রে

উত্তর:


527

.NET 4.6.2 বা নিম্নের জন্য .NET কোর 1.x, এবং .NET স্ট্যান্ডার্ড 1.x আপনাকে নুগেট প্যাকেজ ইনস্টল করতে হবে System.ValueTuple:

Install-Package "System.ValueTuple"

বা ভিএস 2017 তে একটি প্যাকেজ রেফারেন্স ব্যবহার করছে:

<PackageReference Include="System.ValueTuple" Version="4.4.0" />

.NET ফ্রেমওয়ার্ক 4.7,। নেট কোর 2.0 এবং। নেট স্ট্যান্ডার্ড 2.0 এ এই ধরণের অন্তর্ভুক্ত করে।


3
ধন্যবাদ। এর অর্থ কী এটি 4.6.2 এর সাথে কাজ করবে? ডিবাগারটি এখনও x.Item1 x.I আইটেম 2 দেখায়। (Xx এবং xy) এর পরিবর্তে আপনি কি জানেন যে এটি পরিবর্তন হবে কিনা?
gsharp

2
ইনস্টল-প্যাকেজ "সিস্টেম.ভ্যালিউটুপল"
ফ্রিসন আলেকজান্ডার

14
ঠিক আছে, এটি 4.6.2 এ বলে মনে হচ্ছে না।
বিনকি

12
4.6.2 দিয়ে কাজ করে, এখনও এই প্যাকেজটির প্রয়োজন।
এলিজাবেথ

8
.NET 4.7 সহ, প্যাকেজটি স্থানীয়ভাবে অন্তর্ভুক্ত।
মাফাই

40

এটা অংশ .NET Framework 4.7

যতক্ষণ না আপনি উপরের কাঠামো বা উচ্চতর (বা .NET Core 2.0/ .NET Standard 2.0) টার্গেট না করেন , আপনার রেফারেন্স করতে হবে ValueTuple। যোগ করে এটি করুনSystem.ValueTuple NuGet Package


1
আমি শুধু নেট 4.7 দিয়ে চেষ্টা করেছি এবং এটি কার্যকর হয়নি? System.ValueTuple`2খুঁজে পাওয়া যায় নি
বিদৌ

আমি। নেট ফ্রেমওয়ার্ক 4.7 এবং ভিজ্যুয়াল স্টুডিওর জন্য লক্ষ্য প্যাকটি ইনস্টল করেছি। আমি ড্রপ ডাউন এ 4.7 সংস্করণটিও নির্বাচন করেছিলাম তবে এটি এখনও সংকলন করে না।
বিদো

10
ঠিক আছে আমি সবেমাত্র সমস্যাটি পেয়েছি: dll System.ValueTuple আমার প্রকল্পের ফাইলে (csproj) হার্ডকড করা ছিল। প্রকল্প ফাইল থেকে এই এন্ট্রি সরানো সমস্যার সমাধান করে।
বিদো

ভাল সমাধান, তবে আপনি আরও বিশদ যুক্ত করতে পারেন। আমার ক্ষেত্রে, System.ValueTuple.dll এখনও আমার বিন ফোল্ডারে আউট ছিল। একবার আমি এটি মুছে ফেললাম, আমি যেতে ভাল ছিল। আমার ভাষার সংস্করণটি রয়েছে defaultএবং সমস্ত কাজ করছে।
টুডমো

13

ValueTuple প্রকারগুলি আরও নতুন ফ্রেমওয়ার্কগুলিতে অন্তর্নির্মিত:

  • .NET ফ্রেমওয়ার্ক 4.7
  • .NET কোর 2.0
  • মনো 5.0
  • .নেট স্ট্যান্ডার্ড 2.0

যতক্ষণ না আপনি এই নতুন ফ্রেমওয়ার্ক সংস্করণগুলির একটিটিকে লক্ষ্য করে না ফেলেছেন, আপনার ভ্যালুআপল প্যাকেজটি উল্লেখ করতে হবে।

Http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html এ আরও বিশদ


5

জন্য ভিসুয়াল স্টুডিও কোড সালে নির্মিত ব্যবহার টার্মিনাল এবং চালানোর সময়:

dotnet add package "System.ValueTuple"

dotnet restoreপরে চালাতে ভুলবেন না


আমি ভিএস কোড এ কাজ করতে সক্ষম হইনি।
JonathanPeel

10
নোট: দো নেট 4.7 সঙ্গে এই কাজ না
toddmo

3

নিশ্চিত হয়ে নিন যে আপনার কাছে .NET 4.6.2 বিকাশকারী প্যাক ভিএস ইনস্টল করা আছে এবং তারপরে System.ValueTupleনুগেট থেকে প্যাকেজটি টানুন ।


2
এমনকি নেট নেট 6.6.২ এর সাথে এটি এখনও মনে হচ্ছে সিস্টেম.ভালিউটুপল প্যাকেজ।
HaveSpacesuit

3
@ এমসুন্ডকুইস্ট, হ্যাঁ 4.7 এর নীচে কিছু আছে
টুডমো

3

অন্যের ক্ষেত্রেও যদি একই সমস্যা হয় তবে আমি একটি প্রকল্প ৪.7 এ আপডেট করার পরে এই ত্রুটির মধ্যে পড়েছিলাম। অদ্ভুতরূপে যথেষ্ট, এই ত্রুটিটি সরে যাওয়ার জন্য আমাকে সিস্টেমটি সরিয়ে ফেলতে হয়েছিল al ভ্যালুআপল রেফারেন্সটি।


3

ValueTuple। নেট ফ্রেমওয়ার্ক প্রকল্পগুলিতে প্যাকেজ রেফারেন্স হিসাবে যুক্ত করার পরামর্শ দেব না । আপনি জানেন যে এই সমাবেশটি 4.7 .NET ফ্রেমওয়ার্ক থেকে উপলব্ধ।

কিছু নির্দিষ্ট পরিস্থিতি থাকতে পারে যখন আপনার প্রকল্পটি ValueTupleপ্যাকেজ ফোল্ডারের পরিবর্তে .NET ফ্রেমওয়ার্ক ফোল্ডার থেকে সমস্ত মূল্যে অন্তর্ভুক্ত করার চেষ্টা করবে এবং এটি কিছু অ্যাসেম্বলির ত্রুটিগুলি খুঁজে না পাওয়ার কারণ হতে পারে।

আমাদের আজ এই সংস্থায় ছিল। আমাদের 2 টি প্রকল্পের সাথে সমাধান ছিল (আমি এটির ওপরে বোঝাই):

  • Lib
  • Web

LibValueTuple সহ ছিল এবং Webব্যবহার করছিল Lib। এটি দেখা গেল যে কোনও অজানা কারণে Webযখন NET ফ্রেমওয়ার্ক ডিরেক্টরিতে প্রবেশের পথটি সমাধান করার চেষ্টা করা ValueTupleহয়েছিল HintPathএবং ভুল সংস্করণটি নেওয়া হচ্ছে। আমাদের অ্যাপ্লিকেশনটির কারণে ক্রাশ হচ্ছে। ValueTupleসংজ্ঞায়িত করা হয় নি .csprojএর Webকিংবা HintPathযে সমাবেশ জন্য। সমস্যাটি খুব অদ্ভুত ছিল। সাধারণত এটি প্যাকেজ ফোল্ডার থেকে অ্যাসেম্বলিটি অনুলিপি করবে। এই সময়টি স্বাভাবিক ছিল না।

আমার জন্য System.*প্যাকেজ রেফারেন্স যুক্ত করা সর্বদা ঝুঁকিপূর্ণ । এগুলি প্রায়শই সময় বোমার মতো হয়। এগুলি শুরুতে ঠিক আছে এবং সবচেয়ে খারাপ মুহূর্তে তারা আপনার মুখে ফেটে যেতে পারে। আমার থাম্বের নিয়ম: নেট ফ্রেমওয়ার্কের জন্য যদি সত্যিকারের প্রয়োজন না হয় তবে System.*নিউট প্যাকেজটি ব্যবহার করবেন না ।

আমরা ম্যানুয়ালি যোগ করে আমাদের সমস্যা সমাধান ValueTupleমধ্যে .csprojফাইল ভিতরে Webপ্রকল্পের।


1

.NET 4.6.2 থেকে .NET 4.7.2 এ আপগ্রেড করার সাথে সাথে আমি এই ইস্যুটি জুড়ে এসেছি। দুর্ভাগ্যক্রমে, আমি প্যাকেজ রেফারেন্সটি মুছে ফেলতে পারিনি System.ValueTupleকারণ আমি ব্যবহার করি এমন আরও একটি নিউগেট প্যাকেজ তার উপর নির্ভর করে।

অবশেষে আমি মূল কারণটি সনাক্ত করতে সক্ষম হয়েছি: mscorlib.dllপ্রকল্প ফোল্ডারে (একটি প্রকাশ অপারেশনের আউটপুট) আশেপাশে একটি নেট নেট 6.6.২ সংস্করণ ছিল এবং এমএসবাইল্ড অফিসিয়াল .NET 4.7.2 রেফারেন্সের পরিবর্তে এই সমাবেশটি রেফারেন্স করার সিদ্ধান্ত নিয়েছে সমাবেশ মধ্যে অবস্থিত C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2

System.ValueTuple .NET 4.7-এ প্রবর্তিত হয়েছিল এই কারণে, এমএসবাইল্ডটি সংকলনটি ব্যর্থ করেছিল কারণ এটি নেট 4.6.2 এর রেফারেন্স অ্যাসেমব্লিতে টাইপটি খুঁজে পায়নি।

( https://stackoverflow.com/a/57777123/128709 এর সদৃশ )


0

আমাকে System.ValueTuple.dll ফাইলটি সোর্স নিয়ন্ত্রণে ছিল এবং .cssproj ফাইলগুলিতে এর উল্লেখটি সংশোধন করতে হয়েছিল:

  1. সমাধানে প্রতিটি প্রকল্পকে ডান ক্লিক করুন
  2. প্রকল্পটি আনলোড করুন
  3. .cssproj ফাইল সম্পাদনা করুন: পরিবর্তন করুন

<রেফারেন্স অন্তর্ভুক্ত = "সিস্টেম.ভ্যালিউটুপল">

<ইঙ্গিতপথ>

.... \ ProjectName \ ProjectName \ obj \ রিলিজ \ প্যাকেজ \ PackageTmp \ বিন \ System.ValueTuple.dll

</ HintPath>

</ রেফারেন্স>

মধ্যে

<রেফারেন্স অন্তর্ভুক্ত = "সিস্টেম.ভ্যালিউটুপল">

<ইঙ্গিতপথ>

.. \ প্যাকেজ \ System.ValueTuple.4.4.0 \ liberal এর সংক্ষিপ্ত রূপ \ netstandard1.0 \ System.ValueTuple.dll

</ HintPath>

</ রেফারেন্স>

  1. পরিবর্তনগুলি সংরক্ষণ করুন এবং প্রকল্পগুলি পুনরায় লোড করুন
  2. System.ValueTuple.dll সন্ধান করুন এবং এটিকে এই ফোল্ডারে সংরক্ষণ করুন
  3. উত্স নিয়ন্ত্রণে এই ফাইলটির রেফারেন্স যুক্ত করুন

(Ptionচ্ছিক): another. একইভাবে অন্য .dll ফাইলগুলির সাথে একই সমস্যার সমাধান করুন


1
একটি নির্দিষ্ট ফাইল পাথ (বা কোনও স্ট্রিং) হার্ড কোডিং কখনই ভাল সমাধান নয়।
আরঘ্যা সি

0

আমরা আমাদের পুরানো প্রকল্পগুলির একটিতে এই একই সমস্যাটি দেখছিলাম যা ফ্রেমওয়ার্ক 4.5.4 লক্ষ্য করে ছিল। আমি উপরে উল্লিখিত সমস্তগুলি সহ বেশ কয়েকটি দৃশ্যের চেষ্টা করেছি: লক্ষ্য 4.6.1, সিস্টেম.ভ্যালিউটুপল প্যাকেজ যুক্ত করুন, বিন, অবজেক্ট এবং .vs ফোল্ডারগুলি মুছুন। কোন পাশা. 4.7.2 এর জন্য একই প্রক্রিয়াটি পুনরাবৃত্তি করুন। তারপরে একজন মন্তব্যকারী প্রস্তাবিত হিসাবে আমি ৪.7.২ লক্ষ্যবস্তু করার পরে সিস্টেম.ভ্যালিউটুপল প্যাকেজটি সরিয়ে দেওয়ার চেষ্টা করেছি। এখনো কিছুনা. Csproj ফাইলের রেফারেন্স পাথটি পরীক্ষা করা হয়েছে। ঠিক মনে হচ্ছে। এমনকি নিচে নেমে গিয়ে 4.5.2 এ আবার প্যাকেজ ইনস্টল করা হয়েছে। বেশ কয়েকটি ভিএস পুনরায় চালু হওয়ার সাথে একইভাবে এবং একই ফোল্ডারগুলি বেশ কয়েকবার মুছে ফেলা হয়েছে। আক্ষরিক কিছুই কাজ করে না।

পরিবর্তে একটি স্ট্রাক ব্যবহার করতে আমাকে রিফ্যাক্টর করতে হয়েছিল। আমি আশা করি ভবিষ্যতে অন্যরাও এই সমস্যাটি অব্যাহত রাখবেন না তবে ভেবেছিলেন আপনি যদি আমাদের মতো স্ট্যাম্প আপ শেষ করেন তবে এটি কার্যকর হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.