নেট নেট 4.0.০ থেকে ৪.৪ থেকে পুনরুদ্ধার সমাধান - নিউগেট প্যাকেজগুলি কীভাবে পুনরুদ্ধার করবেন?


205

আমি একটি সমাধান স্থানান্তরিত করেছি যা বর্তমানে VS2010 এ .NET 4.0 কে ভিএস2012 এ টার্গেট করছে এবং এখন আমি এটিকে আবার লক্ষ্য করতে চাই। নেট 4.5

আমি যে বিষয়ে নিশ্চিত নই তা হ'ল নুগেট প্যাকেজগুলি। উদাহরণস্বরূপ EF5, যা আমি VS2010 এ EF4 থেকে আপডেট করেছি তা বাস্তবে EF 4.4 হিসাবে দেখা যাচ্ছে আপনি এখানে দেখতে পাচ্ছেন:

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

প্রকল্পের জন্য আমি প্যাকেজস কনফিগ-এ নিম্নলিখিতগুলি দেখতে পাচ্ছি:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

সুতরাং আমার প্রশ্নটি হ'ল:

.NET 4.0 টার্গেটে .NET 4.5 টার্গেটে সেট করা সমস্ত নুগেট প্যাকেজগুলি পুনরায় টার্গেট করার সেরা অনুশীলনটি কী?


উত্তর:


266

নুগেট ২.১ এমন একটি বৈশিষ্ট্য সরবরাহ করে যা এটিকে অনেক সহজ করে তোলে: update-package -reinstall -ignoreDependenciesপ্যাকেজ ম্যানেজার কনসোল থেকে স্রেফ করুন ।

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

প্যাকেজগুলি আনইনস্টল এবং পুনরায় ইনস্টল করার কারণটি হ'ল:

  • প্যাকেজ ইনস্টল করার সময়, আমরা আপনার প্রকল্পের লক্ষ্য কাঠামো নির্ধারণ করি
  • তারপরে আমরা উপযুক্ত package lib \ ফোল্ডার (এবং \ বিষয়বস্তু \ ফোল্ডার) সন্ধান করে প্যাকেজ সামগ্রীর সাথে মিলে যাই
  • সমাবেশের উল্লেখগুলি হিন্ট পাথের সাথে যুক্ত করা হয়েছে যা ডান সাবফোল্ডার সহ প্যাকেজের \ lib \ ফোল্ডারে নির্দেশ করে (উদাহরণস্বরূপ \ lib \ নেট 40)
  • ডান সাবফোল্ডার সহ প্যাকেজগুলি \ সামগ্রী \ ফোল্ডার থেকে সামগ্রী ফাইলগুলি অনুলিপি করা হয়েছে (উদাহরণস্বরূপ \ সামগ্রী \ নেট 40)
  • আমরা প্যাকেজগুলি প্যাকেজ ইনস্টল করতে ব্যবহৃত লক্ষ্য ফ্রেমওয়ার্কটি রেকর্ড করি on
  • আপনি আপনার প্রকল্পের লক্ষ্য কাঠামো পরিবর্তন করার পরে, ইঙ্গিতের পথগুলি এখনও নেট 40 এ নির্দেশ করে
  • আপনি যখন প্যাকেজ আনইনস্টল করেন, আমরা লক্ষ্যগুলি ফ্রেমওয়ার্ক যা আপনার প্রকল্প থেকে অপসারণ করতে হবে তা লক্ষ্য করার জন্য প্যাকেজস.কনফাইগে রেকর্ড করা আছে check
  • আপনি যখন প্যাকেজটি পুনরায় ইনস্টল করেন, আমরা আপনার আপডেট হওয়া লক্ষ্য ফ্রেমওয়ার্কটি সনাক্ত করি এবং সঠিক লিবস / সামগ্রীটি রেফারেন্স / অনুলিপি করি

একটি এএসপি.নেট এমভিসি 4 প্রকল্পের সাথে ভিএস 2012 ব্যবহার করে এবং 4.0 থেকে 4.5 পর্যন্ত .NET ফ্রেমওয়ার্কটিকে পুনরায় টার্গেট করার পরে, আমি update-package -reinstallপ্যাকেজ ম্যানেজার কনসোলে কার্যকর করেছি । সমস্ত প্যাকেজগুলি আনইনস্টল এবং আপডেট হওয়া শুরু হয়েছিল এবং হঠাৎ উইন্ডোজ 8 এর সমস্ত পুনরায় চালু হয়েছিল এবং এটি ফিরে এলে এটি "আপনার পিসি কোনও সমস্যার মধ্যে পড়ে এবং পুনরায় চালু হয় told আপনি কি মাইক্রোসফ্টে তথ্য প্রেরণ করতে চান?" :( ভীতি প্রদর্শন ... যাইহোক, এটি এখনই ইনস্টল করা নুগেট সংস্করণ: 2.2.40116.9051এখানে একটি সমস্যা খোলা হয়েছে: nuget.codeplex.com/workitem/3049
লেনিয়েল ম্যাককাফেরি

12
-ইনস্টল বিকল্পগুলি আমার জন্য একবারও কাজ করে নি। এটি হয় ভুল ক্রমে মুছে ফেলে এবং "এক্স মুছে ফেলতে পারে না কারণ ওয়াই তার উপর নির্ভর করে" বা কখনও কখনও কেবল প্যাকেজগুলি পঠন করে না। গতবার চেষ্টা করার পরে এটি সত্ত্বা ফ্রেমওয়ার্কটি সরিয়ে নিয়েছিল এবং এরপরে আর পুনরায় যুক্ত হয়নি।
কোডিংবিথস্পাইক

4
আপডেট-প্যাকেজ -ইনস্টল আমার পক্ষে সমাধান ছিল না। এটি আমাদের ব্যবহার করা সংস্করণগুলিতে রেখে দেওয়ার পরিবর্তে অনেকগুলি প্যাকেজ আপডেট করেছে। উদাহরণস্বরূপ, নিনজেকে ভি 3-তে স্থানান্তরিত করা হয়েছিল এবং এটি একটি ব্রেকিং সংস্করণ পরিবর্তন।
স্টিভ ওভেন

13
এমনকি আপডেট-পৃষ্ঠা পুনরায় ইনস্টল করার চেষ্টা করবেন না। এটি আমার লোকাল মেশিনে চলার সময় এই জিনিসটি এমন গোলমাল করেছিল যে আমাকে নুগেট প্যাকেজ ম্যানেজারকে আরও কিছুটা যেতে বাধা দিতে হয়েছিল। এটি আমার jQuery 1.10 সংস্করণটি সরিয়েছে এবং কোনও কারণে এটি 1.4.4 দিয়ে প্রতিস্থাপিত করেছে। কেবল এটি নিজেই করুন এবং ঝামেলা বাঁচান।
জাস্টিনমিচেলস

2
গণ্ডগোলের সাথে সম্মত, এবং এই পোস্টটি থেকে এটি এখনও দু'বছর পরে। এটি নির্দিষ্ট nugets এর নিম্ন সংস্করণ খুঁজে পেয়েছে এবং প্রচুর উল্লেখ খুঁজে পেয়েছে। এবং এটি আপডেট হওয়ার প্রায় দুই ঘন্টা পরে ছিল (২০১৪ সালের প্রথম দিকের একটি উচ্চ শেষ ওয়ার্কস্টেশনে)। সমাধানে 20 টি প্রকল্প।
Systad আগস্ট

42

update-package -reinstall <packagename>কমান্ড নিয়ে যাদের সমস্যা ছিল তাদের জন্য -ignoreDependenciesপতাকা হিসাবে এটি চালানো বিবেচনা করুন :

update-package -reinstall <packagename> -ignoreDependencies

এই পতাকাটি আপনার প্যাকেজ নির্ভরতা একা ছেড়ে দেবে, অন্যথায় আপনি সম্ভবত প্যাকেজটি পুনরায় ইনস্টল করতে চেয়েছিলেন এমন প্যাকেজটি এখনও এর সংস্করণটিকে একইভাবে রাখলে তা আপডেট হতে পারে।

আরও তথ্য এখানে


ধন্যবাদ, এটি সত্যিই অনেক ঝামেলা বাঁচায়। এন্টারপ্রাইজলিবারি 30+ প্রজেক্টগুলিতে 10 বা তার বেশি নির্ভরতা পুনরায় ইনস্টল করার চেষ্টা করছে নুগেট একটি দিনব্যাপী কাজের দিকে যাচ্ছে। এটি কয়েক মিনিটের মধ্যে এনে দেয়।
ডেভিড কেভেনি

অন্যরা যেমন উল্লেখ করেছে, খুব সম্ভবত সমস্ত কিছু ভাঙার।
গ্লেনো

9
আপনি প্যাকেজ ম্যানেজার কনসোলের অধীনে চলার সময় সামান্য কিছুটা পরিবর্তন করে পুরো সমাধানের জন্য এটি স্বয়ংক্রিয় করতে পারেন:get-package | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies }
কালেব পেডারসন

2
@ কালেবপিডারসন আমার অভিজ্ঞতায় কমান্ডটি ব্যাপকভাবে সমাধানের কাজ করে?

1
@ BjörnAliGöransson - দুঃখিত আমি যদি যথেষ্ট পরিমাণে পরিষ্কার না হত। উত্তরটি জুড়ে একটি একক প্যাকেজ আপডেট করার উপায় সরবরাহ করে a আমার স্ক্রিপ্টটি সমাধানের প্রতিটি নুগেট প্যাকেজটির মধ্য দিয়ে যাবে এবং সমাধানটি জুড়ে এটি পুনরায় তৈরি করবে। উত্তরটি একটি একক প্রকল্পের জন্য উপযুক্ত তবে আমার দেওয়া স্ক্রিপ্টটি আরও ভাল হতে পারে যদি আপনার কাছে প্রচুর প্যাকেজগুলি পুনঃসংশ্লিষ্ট করা দরকার।
কালেব পেডারসন

22

অনুমোদিত উত্তরটি অসফলভাবে চেষ্টা করার পরে আমি একটি কম ঝুঁকিপূর্ণ কমান্ড প্রস্তাব করতে চাই:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

আরও তথ্যের জন্য: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html


1
লিঙ্কযুক্ত ডকুমেন্টেশন অনুসারে -reinstallকেবল একই সংস্করণটি ইনস্টল হবে, সুতরাং ব্যবহারের কোনও সুবিধা দেখবেন না -safe। আমি কিছু অনুপস্থিত করছি?
কালেব পেডারসন

4

পুরোপুরি প্যাকেজ সমাধান পুনরায় ইনস্টল করার চেষ্টা করার সময়, আমি একটি নির্ভরতা ত্রুটির মুখোমুখি হয়েছিল ( -ignoreDependenciesপতাকা ব্যবহার সত্ত্বেও ), এবং প্রতিটি প্রকল্পের জন্য সমস্ত প্যাকেজ কোডসফিগ ফাইলগুলি মুছে ফেলা হয়েছিল। ভিএস ২০১৩-তে, মনে হয় যে সমস্ত আপগ্রেড করা নির্ভরতা / রেফারেন্সগুলি প্রকল্পের সাথে পুনরায় সংযুক্ত না করা পর্যন্ত প্যাকেজস কনফিগ ডিস্কে ফিরে আসবে না এবং পুনরায় যুক্ত হবে না।

আমার ক্ষেত্রে কি কাজ যোগ করে প্রতিটি প্রকল্পের এক-এ-এ-সময় আপগ্রেড করার ছিল -ProjectName projectname করার update-packageকমান্ড। এক্ষেত্রে প্রতিটি প্রকল্প আপগ্রেড হওয়ার সাথে সাথে প্যাকেজগুলি কনফিগ আপডেট করা হয়।

খুব বড় সমাধানের জন্য ব্যবহারিক নাও হতে পারে কিন্তু এটি একটি যুক্তিসঙ্গত আপস বলে মনে হয় তবুও হিসাবে অনেক প্রকল্প হিসাবে জন্য স্বয়ংক্রিয় আপগ্রেড সুবিধা গ্রহণ এবং প্রতি করেও সমস্যাযুক্ত বেশী বিছিন্ন packages.config আপনার সমাধান ব্যর্থতা উপর মোছা হয়েছে।


3
আমি একই ইস্যু মধ্যে দৌড়ে। UpdatePackage -Reinstallকয়েকটি প্রকল্পের জন্য প্যাকেজ.কনফিগ এবং প্রকল্পের রেফারেন্স মুছে ফেলা হয়েছে (বিশেষত যেগুলির মধ্যে ফেক এসেমসিলগুলি তৈরি হয়েছিল)। আমরা স্ক্রুড প্রকল্পে সমস্ত পরিবর্তন পূর্বাবস্থায় রেখে চলমান কাজ করেছি:Update-Package -reinstall -ProjectName "PROJECTNAME" -IgnoreDependencies
এমএসসি

1

ম্যাক 2019 এর জন্য ভিজ্যুয়াল স্টুডিও সহ, প্যাকেজগুলি ফোল্ডারে ডান ক্লিক করে মেনুতে 'রিটারেট' অপশনটি দেখায়। এটি প্রকল্পের সমস্ত প্যাকেজগুলির জন্য retargeting প্রয়োজন retarget সমস্যা সমাধান করেছে। দেখে মনে হচ্ছে ম্যাকের জন্য ভিজ্যুয়াল স্টুডিওতে সরঞ্জাম মেনুর অধীনে নিউগেট প্যাকেজ ম্যানেজার নেই (অন্তত খনিতে), তাই আমি প্যাকেজ ম্যানেজার কনসোল চালু করতে পারিনি।

প্যাকেজগুলির ডান-ক্লিক মেনুগুলির অধীনে পুনঃনির্ধারণ মেনু বিকল্প

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