নিউট রেফারেন্স পুনরুদ্ধার করছেন?


182

আমার কাছে ভিজ্যুয়াল স্টুডিও ২০১২-তে সমাধান এবং প্রকল্প রয়েছে।

প্রকল্পের মূলটিতে একটি ফাইল packages.configরয়েছে।

এই প্রশ্নের উদ্দেশ্যগুলির জন্য, ধরে নেওয়া যাক আমি ঘটনাক্রমে Referencesআমার প্রকল্পের বিভাগ থেকে এই গ্রন্থাগারগুলি সরিয়েছি ।

নুগেট প্যাকেজ ম্যানেজারে যাওয়ার সময়, ইন্টারফেসটি এখনও এই প্যাকেজগুলির পাশে একটি টিকের প্রতিবেদন করে যা সেগুলি ইনস্টল রয়েছে তা নির্দেশ করে।

এই পরিস্থিতিটি কীভাবে ঠিক করা যায় তার একমাত্র উপায় হ'ল হ'ল সমস্ত এন্ট্রি মুছে ফেলা packages.config, যা সেগুলি ইনস্টল হিসাবে নুগেট ইন্টারফেসের প্রতিবেদন করার বিষয়টি ঠিক করবে এবং প্রত্যেকে পুনরায় যুক্ত করবে।

একটি স্মার্ট উপায় আছে? আমি আশা করেছি যে 'নিখোঁজ প্যাকেজগুলি পুনরুদ্ধার করতে সক্ষম করুন' সক্ষম করবে এটি সমাধান করবে তবে এটি কিছুই করার মতো মনে হচ্ছে না।

উত্তর:


329

প্যাকেজগুলি পুনরায় ইনস্টল করার চেষ্টা করুন

নিউগেট প্যাকেজ ম্যানেজার কনসোলে নিম্নলিখিত কমান্ডটি প্রবেশ করুন:

Update-Package -Reinstall -ProjectName Your.Project.Name

আপনি যদি প্যাকেজগুলি পুনরায় ইনস্টল করতে চান এবং পুরো সমাধানটির জন্য রেফারেন্সগুলি পুনরায় ইনস্টল করতে চান তবে -ProjectNameপ্যারামিটারটি বাদ দিন ।


10
লিঙ্কটির ইংরেজি অনুবাদ: অনুবাদ
ttext.com/.com/

18
দ্রষ্টব্য: এই কমান্ডটি কনসোলটিতে কেবলমাত্র নির্বাচিত প্রকল্পের পরিবর্তে ভিজ্যুয়াল স্টুডিওতে খোলা সমস্ত প্রকল্পের রেফারেন্সগুলি পুনরায় ইনস্টল করবে ।
সিম্বোলো

3
এই কমান্ডটি কেবলমাত্র একটি নির্বাচিত প্রকল্পে নয়, পুরো সমাধানগুলিতে প্যাকেজগুলি পুনরায় ইনস্টল করবে!
অ্যালেক্স সোরোকোলেটোভ

14
চরম বিপদজনক !!!! যদি প্রক্রিয়াটি ব্যাহত হয়, আপনি আপনার সমস্ত প্যাকেজ উল্লেখ হারিয়ে ফেলবেন এবং আপনার সমাধানের প্রতিটি প্রকল্পে একে একে যুক্ত করতে হবে।
বিল ভেলাস্কেজ

2
@ বিলভেলাস্কিজ এই জিনিসটি আমার সমস্ত উল্লেখ খেয়েছে। ভাল, গিটের জন্য thankশ্বরের ধন্যবাদ, আমার ধারণা।
গ্লেনো

44

আপনাকে করার প্রয়োজন সক্ষম NuGet প্যাকেজ বনাম সমাধান পর্যায়ে পুনঃস্থাপন কাজ ফিরিয়ে অনুপস্থিত প্যাকেজের জন্য।

এখানে চিত্র বর্ণনা লিখুন


43
এটি নিউগেটকে অনুপস্থিত প্যাকেজগুলি \ \ প্যাকেজ \ ডিরেক্টরিতে পুনরায় ডাউনলোড করার অনুমতি দেবে, তবে অনুপস্থিত প্রকল্পের রেফারেন্সগুলি পুনরুদ্ধার করার সাথে কিছুই করার নেই , যা পোস্টারটি জিজ্ঞাসা করছে।
ব্রান্ট ববি

13

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

এখানে দৃশ্যটি রয়েছে (ভিজ্যুয়াল স্টুডিও 2012 ব্যবহার করে):

আপনি একটি সমাধান খুলুন যা প্যাকেজ হারিয়েছে। তথ্যসূত্রগুলি দেখায় যে ভিএস তাদের খুঁজে পাচ্ছে না। হারিয়ে যাওয়া প্যাকেজগুলি পুনরুদ্ধার করার জন্য অনেকগুলি উপায় রয়েছে including

  • স্বয়ংক্রিয় পুনঃস্থাপনে সেট করা একটি সমাধান তৈরি করা
  • প্যাকেজ ম্যানেজার কনসোলটি খুলুন এবং দুর্দান্ত "পুনরুদ্ধার" বোতামটি ক্লিক করুন
  • nuget restoreআপনার যদি কমান্ড লাইন nuget ইনস্টল করা থাকে তা করছেন

তবে পদ্ধতির কীভাবেই আসে না কেন, সেই উল্লেখগুলি এখনও অনুপস্থিত হিসাবে দেখানো হবে। এবং আপনি এটি নির্মাণ যখন ব্যর্থ হবে। দীর্ঘশ্বাস. তবে আপনি যদি সমাধানটি বন্ধ করে দেন এবং এটি আবার খোলেন, এখন ভিএস সেগুলি <HintPath>আবার ভাল করে পরীক্ষা করে দেখেছে যে প্যাকেজগুলি যেখানে রয়েছে সেগুলি আবার ফিরে এসেছে এবং বিশ্বের সমস্ত কিছুই ঠিক আছে।

হালনাগাদ

আপনার কাছে প্যাকেজটি এখনও ভিজুয়াল স্টুডিও দেখতে পাচ্ছে না? এখনও একটি রেফারেন্স দেখাচ্ছে যা এটি সমাধান করতে পারে না? আপনার পুনরুদ্ধারকৃত প্যাকেজের সংস্করণটি <HintPath>আপনার .csproj ফাইলে ঠিক একইরকম রয়েছে তা নিশ্চিত করুন। এমনকি একটি ছোট্ট বাগ ফিক্স নম্বর (উদাহরণস্বরূপ 1.10.1 থেকে 1.10.2) রেফারেন্সটিকে ব্যর্থ করে দেবে। আপনি সরাসরি আপনার সিএসপ্রোজ এক্সএমএল সম্পাদনা করে অন্যথায় রেফারেন্সটি সরিয়ে এবং প্যাকেজ ডিরেক্টরিতে নতুন-পুনরুদ্ধারকৃত সংস্করণটিতে নতুন একটি নির্দেশক দিয়ে এটি ঠিক করতে পারেন।


1
প্যাকেজগুলি প্যাকেজ ফোল্ডারে রয়েছে তা নিশ্চিত করে পুনরুদ্ধার সম্পর্কে আপনি খুব গুরুত্বপূর্ণ বিষয়টি (অবশ্যই অনেকগুলি স্থান হতে পারে)। তবে ক্লোজিং এবং পুনরায় খোলার পরেও সঠিক প্যাকেজ সংস্করণগুলি নিয়ে আমার পক্ষে কাজ করা হয়নি, আমি প্রতিটি সিএসপোজ ফাইলটিতে ইঙ্গিতের রাস্তাগুলি ম্যানুয়ালি সংশোধন করে নিয়েছি। আমি বিশ্বাস করি এটি প্রকল্পের তুলনায় প্যাকেজ ফোল্ডারটি সরানোর কারণে ঘটেছিল।
শান

.csprojফাইলটি সম্পাদনা করা ভার্সন নম্বরগুলি আমার সাথে কাজ করেছে তা নিশ্চিত করার জন্য। ধন্যবাদ!
মতিন উলহাক

11

@Jmfenoll দ্বারা সরবরাহিত সমাধান কাজ করার সময় এটি সর্বশেষ প্যাকেজগুলিতে আপডেট হয়। আমার ক্ষেত্রে, বিটা 2 ইনস্টল করে (পূর্বরূপ) এটি সমস্ত লিবসকে আরসি 1 এ আপডেট করেছে (যার মধ্যে একটি বাগ ছিল)। সুতরাং উপরের সমাধানটি কাজের অর্ধেকটি করে।

আপনি যদি আমার মতো একই পরিস্থিতিতে থাকেন এবং আপনি নিজের প্রকল্পটি / বা আপনার নির্দিষ্ট করে থাকা নুগেট প্যাকেজগুলির সঠিক সংস্করণটির সাথে আপনার প্রকল্পটি সিঙ্ক্রোনাইজ করতে চান packages.configতবে এই স্ক্রিপ্টটি আপনাকে সহায়তা করতে পারে। আপনার প্যাকেজ ম্যানেজার কনসোলে এটি অনুলিপি করে অনুলিপি করুন

function Sync-References([string]$PackageId) {
  get-project -all | %{
    $proj = $_ ;
    Write-Host $proj.name; 
    get-package -project $proj.name | ? { $_.id -match $PackageId } | % { 
      Write-Host $_.id; 
      uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
      install-package -projectname $proj.name -id $_.id -version $_.version
    }
  }
}

এবং তারপরে এটি একটি নির্ধারিত প্যাকেজ নামের মতো কার্যকর করুন

Sync-References AutoMapper

বা সমস্ত প্যাকেজগুলির মতো

Sync-References

ক্রেডিটগুলি ড্যান হেইউড এবং তার ব্লগ পোস্টে যায়


8

নিম্নলিখিত স্ক্রিপ্টটি প্যাকেজ ম্যানেজার কনসোল উইন্ডোতে চালানো যেতে পারে এবং পুনরায় ইনস্টল করার পূর্বে আপনার সমাধানের প্রতিটি প্রকল্প থেকে সমস্ত প্যাকেজ সরিয়ে ফেলবে।

foreach ($project in Get-Project -All) { 
    $packages = Get-Package -ProjectName $project.ProjectName
    foreach ($package in $packages) {
        Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
    }
    foreach ($package in $packages) {
        Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
    }
}

এটি প্রতিটি প্যাকেজের ইনস্টল স্ক্রিপ্টটি আবার চালাবে, যা অনুপস্থিত সমাবেশ উল্লেখগুলি পুনরুদ্ধার করা উচিত। দুর্ভাগ্যক্রমে, স্ক্রিপ্টগুলি ইনস্টল করা অন্যান্য সমস্ত জিনিস যেমন ফাইল তৈরি এবং কনফিগারেশন সংশোধন করা - আবারও ঘটবে। আপনি সম্ভবত একটি পরিষ্কার ওয়ার্কিং কপি দিয়ে শুরু করতে এবং আপনার প্রকল্পে কী পরিবর্তন রাখতে হবে এবং কোনটি উপেক্ষা করবেন তা বাছাই করতে এবং বেছে নিতে আপনার এসসিএম সরঞ্জামটি ব্যবহার করতে চাইবেন।


3

আমি নিজে ডিএলএল যুক্ত করেছি। প্রজেক্টের রেফারেন্সগুলিতে ডান ক্লিক করা, রেফারেন্স যুক্ত করুন এবং তারপরে ডায়লগে ব্রাউজ বোতামটি টিপুন। নুগেট ডিএলএল যেখানে সমাধানের প্যাকেজ ডিরেক্টরিতে থাকে। তাদের নাম পেতে আপনি সঠিকভাবে কাজ করে এমন অন্য প্রকল্পের রেফারেন্সগুলিতে ডান ক্লিক করতে পারেন এবং বৈশিষ্ট্যগুলি নির্বাচন করতে পারেন এবং পথের সম্পত্তিটি দেখতে পারেন।


এটি সহজ সমাধান। এটি কেবল প্যাকেজ ফোল্ডারটি ব্রাউজ করে আমার পক্ষে কাজ করে।
হাও

2

ভিজ্যুয়াল স্টুডিও 2015-এ (সোলিউশন সোর্স কন্ট্রোলের অধীনে, এমভিসি-প্রজেক্ট), সিসানো এর Update-Package -Reinstall -ProjectName Your.Project.Nameকাজ করেছে, তবে এটি কিছু লেখার তালার সাথে বিশৃঙ্খলা সৃষ্টি করেছিল।

আমাকে আগে "প্যাকেজগুলি"-ফোল্ডারটি নিজেই মুছতে হয়েছিল। (উত্স নিয়ন্ত্রণের কারণে এটি লক হয়ে গেছে বলে মনে হয়েছিল)।

এছাড়াও, আমাকে নিউগেট প্যাকেজ ম্যানেজারের থেকে পুনরায় ইনস্টল করতে হয়েছিল এমভিসি-প্যাকেজ।


2

এই স্ক্রিপ্টটি নির্ভরতা জগাখিচুড়ি না করে বা ইটিশিয়ালিজ মুছে ফেলা নির্ভরতাগুলি ইনস্টল না করে কোনও প্রকল্পের সমস্ত প্যাকেজ পুনরায় ইনস্টল করবে। (তাদের অংশ প্যাকেজ বিকাশকারীদের জন্য আরও বেশি))

Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies

1

এটি যদি কাউকে সহায়তা করে - আমার দৃশ্যে আমার কয়েকটি ভাগ করে নেওয়া গ্রন্থাগার রয়েছে (যার নিজস্ব টিএফএস প্রকল্প / সমাধান রয়েছে) সমস্ত একত্রে সমাধানের সাথে সংযুক্ত।

নাগেট প্রকল্পগুলি সফলভাবে পুনরুদ্ধার করবে, তবে ডিএলএল অনুপস্থিত।

অন্তর্নিহিত সমস্যাটি হ'ল, যদিও আপনার সমাধানটির নিজস্ব প্যাকেজ ফোল্ডার রয়েছে এবং সেগুলি সঠিকভাবে সেই ফোল্ডারে পুনরুদ্ধার করা হয়েছে, প্রকল্প ফাইল (যেমন। আপনার রেফারেন্সগুলি কোথা থেকে আসছে তা দেখার জন্য একটি পাঠ্য সম্পাদকে ফাইলটি খুলুন।

বিভিন্ন আন্তঃসংযোগযুক্ত ভাগ করা সমাধানগুলিতে প্যাকেজ পরিচালনা করার সময় এটি দেখা দিতে পারে - যেহেতু আপনি সম্ভবত নিশ্চিত করতে চান যে সমস্ত ডিএলএল একই স্তরে রয়েছে আপনি এটি শীর্ষ স্তরে সেট করতে পারেন। এর অর্থ এটি হ'ল কখনও কখনও এটি কোনও রেফারেন্সড ডিএলএল জন্য সম্পূর্ণ ভিন্ন সমাধানের সন্ধান করবে এবং সুতরাং আপনার যদি সমস্ত প্রকল্প / সমাধান ডাউনলোড না করে এবং আপ-টু-ডেট থাকে তবে আপনি উপরের সমস্যাটি পেতে পারেন।


1

আমাকে @ জুড়ির সাথে একমত হতে হবে যে জেএমফেনল দ্বারা বিস্তৃত জনপ্রিয় উত্তরটি সম্পূর্ণ নয়। ভাঙ্গা রেফারেন্সের ক্ষেত্রে, আমি জমা যে সময় আপনি কি অধিকাংশ না করতে আপডেট করতে চান সর্বশেষ প্যাকেজ, কিন্তু শুধুমাত্র আপনার রেফারেন্স ঠিক বর্তমান যে আপনি ব্যবহার করে থাকতে ঘটতে সংস্করণ। এবং জুরি Sync-Referencesঠিক এটি করার জন্য একটি কার্যকর ফাংশন সরবরাহ করেছিল।

তবে আমরা আরও কিছুটা এগিয়ে যেতে পারি, প্রজেক্টের পাশাপাশি প্যাকেজের মাধ্যমে ফিল্টার করার নমনীয়তাটিকে অনুমতি দেয়:

function Sync-References([string]$PackageId, [string]$ProjectName) {
    get-project -all | 
    Where-Object { $_.name -match $ProjectName } |
    ForEach-Object {
        $proj = $_ ;
        Write-Output ('Project: ' + $proj.name)
        Get-Package -project $proj.name |
        Where-Object { $_.id -match $PackageId } |
        ForEach-Object { 
            Write-Output ('Package: ' + $_.id)
            uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
            install-package -projectname $proj.name -id $_.id -version $_.version
        }
    }
}

1

অনুপস্থিত রেফারেন্স সহ আমার একই সমস্যা ছিল। আমার দৃশ্যের নীচে:

  • টাটকা উইন্ডোজ 10 মেশিন এবং ভিএস সম্প্রদায় 2015 ইনস্টল করুন
  • সবেমাত্র টিএফএসের মাধ্যমে সংগ্রহস্থল কোডটি চেক আউট করে
  • একটি সমাধান ঠিক জরিমানা নির্মিত, একটি সমাধানের অনুপস্থিত রেফারেন্সগুলির সাথে একটি প্রকল্প ছিল (উদাহরণস্বরূপ EF, System.Http), তবে সম্পর্কিত নুগেট প্যাকেজগুলি সঠিকভাবে ইনস্টল করা হয়েছিল।

প্রকল্প এবং প্যাকেজগুলির সমস্ত সংস্করণ নম্বর মেলে, নুগেট পুনরুদ্ধার (তার সমস্ত উপায়ে) কাজ করে না।

আমি কীভাবে এটি স্থির করেছি: সমাধানের মূলের প্যাকেজ ফোল্ডারগুলি মুছুন এবং নুগেট পুনরুদ্ধার করুন। এই সময়ে dlls সঠিকভাবে ডাউনলোড করা হয় এবং অনুপস্থিত রেফারেন্সের জন্য যুক্ত করা যেতে পারে।


0

আমি এই সমস্যাটি থেকে অনেক বেশি ভুগছি, আমার ক্ষেত্রে অনুপস্থিত নুগেট ডাউনলোড করা যাচাই করা হয়েছিল (তবে এটি পুনরুদ্ধার করা হচ্ছে না) এবং আমি ইনস্টল ও পুনরায় ইনস্টল করতে পারি না কারণ আমি কিছু ইনস্টল করা প্যাকেজ পরিবর্তন করেছি ... সুতরাং:

আমি কেবল ক্যাশে এবং পুনর্নির্মাণটি সাফ করেছি এবং এটি কার্যকর হয়েছে। (সরঞ্জাম-অপশন-নুগেট প্যাকেজ ম্যানেজার - সাধারণ)

এছাড়াও এই লিঙ্কটি https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore সহায়তা করে ।


0
  1. প্রকল্পের ফাইল প্যাকেজগুলি কনফিগ করুন এবং সমস্ত সংস্করণ পরিবর্তন করুন app
  2. সমস্ত প্যাকেজ আনইস্টল করুন এবং হতাশাগুলি সরান

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    
  3. প্রকল্পের মূলটিতে প্যাকেজ ফোল্ডার সাফ করুন

  4. ওয়েবসাইটের রুট ফোল্ডারে পরিবর্তনকারী প্যাকেজ.কনফিগটি অনুলিপি করুন

  5. প্রকল্পটি পুনরুদ্ধার করতে এই কোডটি চালান

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    foreach ($package in $packages) {
        install-package  $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version
    }
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.