নুগেট অটো প্যাকেজ পুনরুদ্ধার এমএসবিল্ডের সাথে কাজ করে না


111

আমি এমএসবিল্ড 12.0 এর সাথে packagesসামগ্রীর অনুপস্থিত (অভ্যন্তরীণ ব্যতীত repositories.config) একটি সমাধান তৈরি করার চেষ্টা করছি । আমি আশা করি এটি বিল্ডিংয়ের আগে সমস্ত অনুপস্থিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে পুনঃস্থাপন করবে তবে এটি তেমন নয় - এমএসবাইল্ড অনেকগুলি ত্রুটি রিপোর্ট করে:

"আপনি কি কোনও ব্যবহারের নির্দেশিকা বা কোনও সমাবেশের রেফারেন্স মিস করছেন?"

নিউগেট ম্যানেজারটি 2.7 (বাক্স সম্পর্কে আমি ভিজ্যুয়াল স্টুডিও 2013 এ এটি দেখতে পাচ্ছি)। এমনকি আমি EnableNuGetPackageRestore=trueপ্যারামিটারটিও পাশ করার চেষ্টা করেছি - ভাগ্য নেই। আমি কী মিস করছি?


আপনি কি ভিজ্যুয়াল স্টুডিওতে সমাধান তৈরি করছেন? এছাড়াও কি প্যাকেজ রিস্টোর বিভাগে প্যাকেজ ম্যানেজার সেটিংসে টিক দেওয়া আছে? আপনি যদি ভিজ্যুয়াল স্টুডিওর মধ্যে তৈরি করছেন এবং নুগেট ২.7 বা তার বেশি ব্যবহার করছেন তবে আপনার .nuget ফোল্ডারের দরকার নেই।
ম্যাট ওয়ার্ড 13

1
না, আমি সর্বশেষ MsBuild (ব্যবহার করছি msdn.microsoft.com/en-us/library/hh162058.aspx কমান্ড লাইন থেকে) সংস্করণ। ভিএস এর মধ্যে থেকে 2.8 এ আপডেট করা নিউজ - কোনও ভাগ্য নেই।
ইউজারকন্ট্রোল

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

উত্তর:


36

V3.3.0 হিসাবে সর্বশেষ অফিসিয়াল নুগেট ডকুমেন্টেশন সহ আপডেট হয়েছে

প্যাকেজ পুনরুদ্ধার পদ্ধতির

নিউগেট প্যাকেজ পুনরুদ্ধার ব্যবহারের জন্য তিনটি পদ্ধতির প্রস্তাব দেয় ।


অটোমেটিক প্যাকেজ রিস্টোর হ'ল নিউজেট টিমের ভিজ্যুয়াল স্টুডিওর মধ্যে প্যাকেজ পুনরুদ্ধারের প্রস্তাবিত পদ্ধতির, এবং এটি নুগেট ২.7 এ প্রবর্তিত হয়েছিল। নুগেট ২.7 দিয়ে শুরু করে, নুগেট ভিজ্যুয়াল স্টুডিও এক্সটেনশন ভিজ্যুয়াল স্টুডিওর বিল্ড ইভেন্টগুলিতে একীভূত হয় এবং বিল্ড শুরু হওয়ার পরে অনুপস্থিত প্যাকেজগুলি পুনরুদ্ধার করে। এই বৈশিষ্ট্যটি ডিফল্টরূপে সক্ষম করা হয়েছে, তবে বিকাশকারীরা চাইলে অনির্বাচন করতে পারেন।


এখানে কিভাবে এটা কাজ করে:

  1. প্রকল্প বা সমাধান বিল্ডে, ভিজ্যুয়াল স্টুডিও একটি ইভেন্ট উত্থাপন করে যা সমাধানের মধ্যে একটি বিল্ড শুরু হয়।
  2. নিউগেট এই ইভেন্টটির প্রতিক্রিয়া জানায় এবং সমাধানে অন্তর্ভুক্ত প্যাকেজগুলি.কনফিগ ফাইলগুলি পরীক্ষা করে।
  3. পাওয়া প্রতিটি প্যাকেজ.কনফিগ ফাইলের জন্য, এর প্যাকেজগুলি গণিত করা হয় এবং সমাধানের প্যাকেজ ফোল্ডারে উপস্থিত রয়েছে কিনা তা পরীক্ষা করা হয়।
  4. যে কোনও অনুপস্থিত প্যাকেজ ব্যবহারকারীর কনফিগার করা (এবং সক্ষম) প্যাকেজ উত্সের ক্রমানুসারে ডাউনলোড করা হয় are
  5. প্যাকেজগুলি ডাউনলোড করার সাথে সাথে সেগুলি সমাধানের প্যাকেজ ফোল্ডারে আনজিপ করা হয়।

আপনি যদি নুগেট ২.7++ ইনস্টল করেছেন; > ভিজ্যুয়াল স্টুডিওতে স্বয়ংক্রিয় প্যাকেজ রিস্টোর পরিচালনা করার জন্য একটি পদ্ধতি বেছে নেওয়া গুরুত্বপূর্ণ।

দুটি পদ্ধতি উপলব্ধ:

  1. (নিউগেট ২.7+): ভিজ্যুয়াল স্টুডিও -> সরঞ্জাম -> প্যাকেজ পরিচালক -> প্যাকেজ ম্যানেজার সেটিংস -> স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধার সক্ষম করুন
  2. (২.6 এবং নীচে নোট) সমাধানটিতে ডান ক্লিক করে "এই সমাধানের জন্য প্যাকেজ পুনরুদ্ধার সক্ষম করুন" ক্লিক করুন।


কমান্ড-লাইন থেকে সমাধান তৈরি করার সময় কমান্ড-লাইন প্যাকেজ পুনরুদ্ধার প্রয়োজন; এটি নুগেটের প্রথম সংস্করণে প্রবর্তিত হয়েছিল, তবে নুগেট ২.7-এ উন্নত হয়েছিল।

nuget.exe restore contoso.sln

এমএসবিল্ড-ইন্টিগ্রেটেড প্যাকেজ পুনরুদ্ধার পদ্ধতিটি মূল প্যাকেজ পুনরুদ্ধার বাস্তবায়ন এবং যদিও এটি অনেক পরিস্থিতিতে কাজ করে চলেছে, তবে এটি অন্য দুটি পদ্ধতির দ্বারা বর্ণিত দৃশ্যের পুরো সেটটি আবরণ করে না।


63
এটি আর নুগেট দ্বারা সুপারিশ করা হয় না। দস্তাবেজগুলি দেখুন। docs.nuget.org/docs/workflows/…
ওভেন জনসন

@ ওয়ান জনসন, সেই দস্তাবেজটি তারিখযুক্ত নয় যে আমি দেখতে পাচ্ছি এবং আমি দেখতে পাচ্ছি না যে এটি কীভাবে এটি এখন প্রস্তাবিত নয়? আমি ভিএস ২০১৩ এ আছি এবং সেই বোতামটি ঠিকঠাকভাবে কাজ করছে বলে মনে হচ্ছে। আমার কাছে সমস্যাটি উল্লেখ করা হয়নি, "সুতরাং, আপনি" নিউগেট প্যাকেজ পুনরুদ্ধার সক্ষম করুন "ক্লিক করেছেন এবং এখন আপনার জিনিসগুলি তৈরি করে না it এটি ঠিক করার পদক্ষেপগুলি বেদনাদায়ক তবে এই স্ক্রিপ্টটির সাথে কম বেদনাদায়ক" " github.com/owen2/ অটোমেটিকপ্যাকেজরেস্টোর মাইগ্রেশনস্ক্রিপ্ট সম্ভবত আরও একটি ডক রয়েছে যা এটি আরও ব্যাখ্যা করে।
অ্যানিএজিলে

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

1
এই উত্তরটি ব্যবহার করে এবং docs.nuget.org/consume/package-restore/… এ "মাইগ্রেশন সম্পাদন" নির্দেশাবলী "পুরানো জিনিসগুলি সরান" নির্দেশনাগুলি সম্পাদন করে আমি সাফল্য পেতে সক্ষম হয়েছি।
গ্রানাডা কোডার

দেখে মনে হচ্ছে নুগেট 4 এবং নেট মানক দিয়ে জিনিসগুলি আবার পরিবর্তিত হয়েছে।
ওভেন জনসন

239

আপনি যদি ভিজ্যুয়াল স্টুডিও 2017 বা তার পরে ব্যবহার করছেন যা এমএসবিল্ড 15 বা তার পরে পাঠানো হয় এবং আপনার .csproj ফাইলগুলি নতুন PackageReferenceফর্ম্যাটে থাকে তবে সবচেয়ে সহজ পদ্ধতিটি হ'ল নতুন এমএসবিল্ড Restoreলক্ষ্য ব্যবহার করা


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

তবে কাঙ্ক্ষিত আচরণ পাওয়ার জন্য কিছুটা রাউন্ডআউট উপায় রয়েছে:

  1. Https://dist.nuget.org/win-x86-commandline/latest/nuget.exe থেকে এক্সিকিউটেবল সর্বশেষ নুগেট ডাউনলোড করুন এবং এটিকে আপনার রাস্তায় কোথাও রাখুন। (আপনি এটি প্রাক-বিল্ড পদক্ষেপ হিসাবে করতে পারেন))
  2. চালান nuget restoreযা সমস্ত অনুপস্থিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করবে।
  3. msbuildআপনার সমাধান তৈরি করতে দৌড় ।

একদিকে: অটো প্যাকেজ পুনরুদ্ধার করার নতুন ও প্রস্তাবিত উপায়ে আপনার সংস্করণ নিয়ন্ত্রণে কম বিশৃঙ্খলা জড়িত রয়েছে, এটি কমান্ড-লাইন প্যাকেজটিকে পুনরুদ্ধার করা অসম্ভব করে তোলে যতক্ষণ না আপনি ডাউনলোড এবং চলমান অতিরিক্ত হুপের মধ্যে ঝাঁপ দেন nuget.exe। প্রগতি?


অনুরূপ সমাধানের সাথে শেষ হয়েছে (তবে nuget.exeএটি / ট্রাঙ্ক / এক্সটাকে দেওয়া হয়েছে)। এক ধাপ এগিয়ে - দুই ধাপ পিছনে :(
ইউজারকন্ট্রোল

40
এটি একটি সঠিক আনওয়ার হওয়া উচিত, চিহ্নিত চিহ্নযুক্ত নয়।
ওোল্যান্ড

এটি নেমে আসলে এটিকে কিছুটা স্বজ্ঞাত বলে মনে হয়, তবে আপনি কমান্ড লাইনটি ব্যবহার করে সুনির্দিষ্ট নুগেট প্যাকেজ যুক্ত করতে আরও কার্যকারিতা পাবেন। অটো পুনরুদ্ধার ব্যর্থ হওয়ার সময় এই সমাধানটি আমার পক্ষে কাজ করেছিল।
টিগ্রারিট

2
আমি জেনকিন্স ব্যবহার করছিলাম এবং এটি করতে হয়েছিল, মিসবিল্ড কল করার আগে এটি একটি সাধারণ বিল্ড স্টেপ ছিল - উইন্ডোজ ব্যাচ ফাইলটি ছিল বিল্ড স্টেপ টাইপ এবং: সেমিডি.এক্সে / সি "সি: \ প্রোগ্রাম ফাইলগুলি u nuget u nuget.exe" পুনরুদ্ধার < RelativePathToSln> .sln - SLN ফাইলটি স্লান ফাইল না পাওয়া সেক্ষেত্রে আমি অভ্যাস / পদ্ধতি হিসাবে পাথ করেছি did
স্টিভ র্যাডিচ- বিটশপ ডটকম

1
জেনকিনস বিল্ডে পুনরুদ্ধার স্থাপনের সময় এই পদ্ধতিরটি আমার পক্ষে কাজ করেছিল। আমার জন্য একটা গুরুত্বপূর্ণ কী NuGet.Config ছিল ছিল আমার .SLN ফাইল হিসাবে একই ডিরেক্টরির মধ্যে যাবে। কমান্ড লাইনে-কনফিগফাইলে নির্দিষ্টকরণ সহ অন্যান্য কনফিগার ফাইলের অবস্থানগুলির কোনও সমন্বয় কাজ করবে না।
গেরি

56

নুগেটের স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধার এমএসবিল্ড নয়, ভিজ্যুয়াল স্টুডিওর (2013 সালে শুরু) একটি বৈশিষ্ট্য। nuget.exe restoreকমান্ড লাইন থেকে প্যাকেজগুলি পুনরুদ্ধার করতে চাইলে আপনাকে দৌড়াতে হবে।

আপনি সক্ষম ন্যুগেট প্যাকেজ পুনরুদ্ধার বৈশিষ্ট্যটিও ব্যবহার করতে পারেন তবে নুগেট লোকেরা এটির আর সুপারিশ করেন না কারণ এটি প্রকল্পের ফাইলগুলিতে অন্তর্ভুক্তিমূলক পরিবর্তন করে এবং যদি আপনি এই প্রকল্পগুলি অন্য সমাধানে তৈরি করেন তবে সমস্যা হতে পারে।


2
আপনার নুগেট সংস্করণটি কমপক্ষে ২. isn't না হলে পুনরুদ্ধার-কমান্ডটি ব্যবহার করার আগে আপনাকে "নুগেট আপডেট-নিজেই" চালানো দরকার। আমার নিউগেটটি সংস্করণ ২.১ ছিল এবং আপডেট করার আগে "পুনরুদ্ধার" কমান্ডটি স্বীকৃত হয়নি।
টেকনিকাল

2
"যদি আপনি সেই প্রকল্পগুলিকে অন্য সমাধানে তৈরি করেন তবে সমস্যার সৃষ্টি করে" আমি এখনও কোনও সমস্যার মুখোমুখি হইনি এবং আমাদের প্রতি কয়েক ডজন প্রকল্পের সাথে 3 টি সমাধান রয়েছে (সমাধানগুলিতে অনেকগুলি ভাগ করে নেওয়া হয়েছে)। আমি ভাগ্যবান পেয়েছি?
নেলসন রোদারমেল

@ নেলসনরোডর্মেল সবচেয়ে উল্লেখযোগ্য সমস্যাযুক্ত পরিস্থিতি হ'ল হ'ল প্রকল্পগুলি নুগেট-ডেলিভারি ডেলগুলি একটি বিদেশী সমাধানের প্যাকেজ ফোল্ডারে রেফারেন্স করে, যা আপনি যখন কোনও সমাধান তৈরি করেন তখন উপলভ্য নাও হতে পারে।
ওভেন জনসন

2
@ ওউইন জনসন সকল সমাধানের জন্য আমাদের একটি সাধারণ প্যাকেজ ফোল্ডার রয়েছে, তাই সম্ভবত আমরা ইস্যুতে প্রবেশ করি নি।
নেলসন রোদারমেল

17

পুরো ছবিটি বের করতে আমার কিছুটা সময় লেগেছে এবং আমি এখানে ভাগ করতে চাই।

ভিজ্যুয়াল স্টুডিওতে প্যাকেজ পুনরুদ্ধার ব্যবহারের জন্য দুটি পদ্ধতি রয়েছে: স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধার এবং এমএসবাইল্ড-ইন্টিগ্রেটেড প্যাকেজ পুনরুদ্ধার। 'এমএসবিল্ড-ইন্টিগ্রেটেড প্যাকেজ রিস্টোর' বিল্ডিং প্রক্রিয়া চলাকালীন প্যাকেজগুলি পুনরুদ্ধার করে যা কিছু পরিস্থিতিতে সমস্যার কারণ হতে পারে। 'স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধার' হ'ল নুগেট টিমের প্রস্তাবিত পদ্ধতি

'স্বয়ংক্রিয় প্যাকেজ পুনঃস্থাপন' কাজ করার জন্য কয়েকটি পদক্ষেপ রয়েছে:

  1. ভিজ্যুয়াল স্টুডিওতে, সরঞ্জামগুলি -> এক্সটেনশানগুলি এবং আপডেটগুলিতে, নতুন সংস্করণ থাকলে সংস্করণ আপগ্রেড করুন (সংস্করণ ২.7 বা তার পরে)

  2. আপনি যদি আপনার সমাধানের .nuget ফোল্ডারে টিএফএস ব্যবহার করেন তবে অনুগেট.এক্সি এবং নুগেট.টারাজ ফাইলগুলি সরান। তারপরে নুগেট প্যাকেজগুলিতে চেক না করার জন্য নুগেট.কনফিগ সম্পাদনা করুন:

    <configuration>  
      <solution>  
        <add key="disableSourceControlIntegration" value="true" />  
      </solution>  
    </configuration> 

    আপনি যদি এর আগে টিএফএসে সমাধানের প্যাকেজ ফোল্ডারে চেক করেন তবে ফোল্ডারটি মুছুন এবং প্যাকেজ ফোল্ডার মোছার মুছে ফেলা পরীক্ষা করুন।

    আপনি যদি টিএফএস ব্যবহার না করেন তবে .নুগেট ফোল্ডারটি মুছুন।

  3. আপনার সমাধানে প্রতিটি প্রকল্প ফাইল (.csproj বা .vbproj) এ, NuGet.targets ফাইলের উল্লেখ রেখাটি সরিয়ে ফেলুন। রেফারেন্সটি এর মতো দেখাচ্ছে:

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

    আপনার সমাধানের প্রতিটি প্রকল্পের ফাইলে এই লাইনটি সরান।

  4. ভিজ্যুয়াল স্টুডিও মেনুতে হয় হয়

    সরঞ্জাম -> বিকল্প -> প্যাকেজ পরিচালক -> সাধারণ বা সরঞ্জাম -> নিউগেট প্যাকেজ ম্যানেজার -> প্যাকেজ পরিচালকের সেটিংস

    অনুগ্রহ করে নিম্নলিখিত দুটি বিকল্প সক্ষম করুন 1) 'অনুগেট প্যাকেজগুলি ডাউনলোড করতে নুগেটকে অনুমতি দিন' 2) 'ভিজ্যুয়াল স্টুডিওতে বিল্ড করার সময় অনুপস্থিত প্যাকেজগুলির জন্য স্বয়ংক্রিয়ভাবে পরীক্ষা করুন'

  5. নিম্নলিখিত পদক্ষেপের মাধ্যমে আপনার প্যাকেজ পুনরুদ্ধার কনফিগারেশন পরীক্ষা করুন

    • আপনার সমাধানটি সংরক্ষণ করুন এবং ভিজ্যুয়াল স্টুডিওটি বন্ধ করুন
    • আপনার সমাধানের প্যাকেজ ফোল্ডারটি মুছুন
    • ভিজ্যুয়াল স্টুডিও শুরু করুন, আপনার সমাধানটি খুলুন এবং এটি পুনর্নির্মাণ করুন।

1
আপনার পদক্ষেপের একটি হ'ল <আমদানি প্রকল্প = "$ (এমএসবিল্ডটুলসপথ) \ মাইক্রোসফট.সিএসআরপি.টারাজেটস" /> সরান। তুমি ওটা কেন করবে?
ইব্রাহিম হাশমি

3
আমি মনে করি আপনি ভুল হয়ে গেছেন যে এটি টেমপ্লেটেই রয়েছে। এটি ছাড়া আপনার উত্স ফাইলগুলি মোটেই নির্মিত হবে না।
সাইয়েদ ইব্রাহিম হাশিমি

3
আমি মনে করি তিনি মাইক্রোসফট.সিএসআরপি.টারজেটসের পরিবর্তে নুগেট স্টার্টস বোঝালেন।
ওভেন জনসন

2
docs.nuget.org/docs/workflows/… <- ইয়িং কী বলার চেষ্টা করেছিল তার অফিসিয়াল ডক্স এখানে।
ওভেন জনসন

1
ইয়িং ঠিকই ... সবাই যা উপেক্ষা করেছে তা হ'ল কন্টিনিউজ ইন্টিগ্রেশন বিল্ড-প্রাক ইভেন্টগুলির পরে তাদের অস্থায়ী কর্মক্ষেত্র তৈরি করে, উত্স পান এবং পরে নুগেটের রেফারেন্সগুলিতে শ্বাসরোধ করে। এটি টিএফএস বিল্ড অটোমেশনের ফিক্স।
সিজাহরোবস্কি

5

এমএসবিল্ড 15 এর একটি / টি: পুনরুদ্ধার বিকল্প রয়েছে যা এটি করে। এটি ভিজ্যুয়াল স্টুডিও 2017 এর সাথে আসে।

আপনি যদি এটি ব্যবহার করতে চান তবে আপনাকে নতুন প্যাকেজ রেফারেন্সটিও ব্যবহার করতে হবে , যার অর্থ packages.configফাইলটিকে প্রতিস্থাপনের মতো উপাদানগুলির সাথে করা হচ্ছে (এটি * .csproj এ করুন):

<ItemGroup>
  <!-- ... -->
  <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
  <!-- ... -->
</ItemGroup>

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


আপনাকে বিবেচনা করতে হবে যে এমএসবিল্ডের পুনরুদ্ধার বিকল্পটিতে নুগেট পুনরুদ্ধার থেকে সূক্ষ্ম পার্থক্য রয়েছে - উদাহরণস্বরূপ github.com/NuGet/Home/issues/7651#issuecomment-500842049 দেখুন ।
ম্যাথিউউ

4

আয়ান কেম্পের উত্তর রয়েছে (কিছু পয়েন্ট বিটিডাব্লু আছে ..), এটি কেবল তার একটি পদক্ষেপে কিছু মাংস যুক্ত করা।

আমি এখানে পৌঁছানোর কারণটি হ'ল দেবের মেশিনগুলি ভাল তৈরি করছিল, তবে বিল্ড সার্ভারটি প্রয়োজনীয় প্যাকেজগুলি (খালি প্যাকেজ ফোল্ডার) নীচে টানছিল না এবং তাই বিল্ডটি ব্যর্থ হয়েছিল। বিল্ড সার্ভারে লগ ইন করা এবং ম্যানুয়ালি সমাধান তৈরির কাজটি হয়েছে।

ইয়ানস 3 পয়েন্টের দ্বিতীয় ধাপটি ( নুগেট পুনরুদ্ধার চলমান ) দ্বিতীয়টি পূরণ করতে, আপনি নীচে যেমন নুগেট পুনরুদ্ধার কমান্ডটি চালাতে এক্সিকিউট কমান্ডটি চালাচ্ছেন একটি এমএসবিল্ড টার্গেট তৈরি করতে পারেন (এই ক্ষেত্রে nuget.exe .nuget ফোল্ডারে রয়েছে, পরিবর্তে পথে), যা এরপরে সমাধান তৈরির অবিলম্বে একটি TeamCity বিল্ড স্টেপ (অন্যান্য সিআই উপলব্ধ ...) চালানো যেতে পারে

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

রেকর্ডের জন্য আমি ইতিমধ্যে "নুগেট ইনস্টলার" রানার ধরণের চেষ্টা করেছিলাম তবে এই পদক্ষেপটি ওয়েব প্রকল্পগুলিতে ঝুলছিল (ডিএলএল এবং উইন্ডোজ প্রকল্পগুলির জন্য কাজ করেছে)


1
যদি আপনি ক্রমাগত একটি নতুন সেট কোড (সিআই) থেকে বিল্ডিং করে থাকেন তবে এটি যাওয়ার উপায়।
জহমিক

1
আমি এই পদ্ধতির পছন্দ করি কারণ এটি গ্যারান্টি দেয় যে প্রতিটি সমাধান / প্রকল্প এটি তৈরি করা নুগেটের সংস্করণে নির্ভর করে। যথাযথ সময়ে আপনি যদি পুরানো প্রকল্পগুলির সাথে কোনও সংস্থায় কাজ করেন যা নুগেটের পুরাতন সংস্করণ ব্যবহার করে তৈরি করা হয়েছে তবে তা গুরুত্বপূর্ণ প্রমাণ করতে পারে। সিস্টেম-ব্যাপী নুগেট.এক্সই জিনিসগুলি ভেঙে দেবে কিনা তা নিয়ে কোনও চিন্তা ছাড়াই কোনও দেব এ জাতীয় প্রকল্পগুলি বজায় রাখতে পারবেন কারণ প্রতিটি প্রকল্পের নিজস্ব "স্থানীয় স্বাদ" nuget.exe রয়েছে। একটি সর্বশেষ টিপ হিসাবে এটি লক্ষণীয় যে নুগেট 3.x + এর সাথে আমরা এর মতো প্যাকেজগুলি পুনরুদ্ধার করতে পারি: nuget.exe প্যাকেজগুলি পুনরুদ্ধার করুন -প্যাকেজস ডিরেক্টরি প্যাকেজ থেকে \ প্যাকেজগুলিতে
এক্সডিএস

1
আমার এই পদ্ধতির সাথে সমস্যাটি হ'ল পুনরুদ্ধার পদক্ষেপটি যুক্ত করতে আপনাকে পরবর্তী কোনও প্রকল্প ফাইল সম্পাদনা করতে হবে। বিল্ড সার্ভারে এই পদক্ষেপটি কার্যকর করতে আপনি টিএফএস2012 এ একটি "ইনভোকপ্রসেস" ক্রিয়াকলাপ বা টিএফএস2013 বিল্ড টেম্পলেটে একটি "নুগেটরস্টোর" ক্রিয়াকলাপ যোগ করতে পারেন। ইনভোকপ্রসেসের জন্য, ২০১২ সালে "সোর্সডাইরেক্টরি" অ্যাট্রিবিউটটি পাস করুন T টিএফএস ২০১৩ সালে, কেবলমাত্র প্রয়োজনীয় মান পূরণ করুন। এটি করার জন্য প্রচুর ব্লগ রয়েছে।
নেভিল

3

মনে রাখবেন যে আপনি যদি টিমসিটিটি বিল্ড সার্ভার হিসাবে ব্যবহার করছেন তবে আপনি একটি "নিউগেট ইনস্টলার" পদক্ষেপ পাবেন যা আপনি বিল্ড স্টেপের আগে সমস্ত প্যাকেজ পুনরুদ্ধার করতে ব্যবহার করতে পারেন।


2

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

এছাড়াও একটি .nuget ফোল্ডার রয়েছে যাতে NuGet.exe এবং NuGet.targets রয়েছে । যদি ফাইলটির কোনও একটি অনুপস্থিত থাকে তবে এটি অনুপস্থিত প্যাকেজটি পুনরুদ্ধার করবে না এবং কারণ "আপনি কি কোনও নির্দেশিকা বা সমাবেশের রেফারেন্স ব্যবহার করছেন?" ত্রুটি


2
কোনও .nugetফোল্ডার নেই এবং কখনও ছিল না। packages.configপ্রকল্প ফোল্ডারগুলির মধ্যে থাকা সমস্ত ফাইল যথাযথ।
ব্যবহারকারীর নিয়ন্ত্রণ 12

আমি মনে করি নুগেট.এক্সএইচ এবং নুগেট.টরজেটস অ্যাপ্লিকেশনটি তৈরি করার সময় সমস্ত অনুপস্থিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করবে এবং আপনি নিজের নুগেট.এক্সে এবং নুগেট.আরগেটস ফাইলগুলি হারিয়েছেন,
এতেই

যাইহোক ধন্যবাদ - আমি কোন সাহায্যের প্রশংসা করি!
ব্যবহারকারীর নিয়ন্ত্রণ 13

.nuget ফোল্ডারটি একটি ভিজ্যুয়াল স্টুডিও উত্পন্ন ফোল্ডার, এটি কেবল তখনই প্রদর্শিত হয় যখন আপনি স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধার সক্ষম করে। আপনার কোড রেপোতে nuget.exe রাখা দরকারী, আপনি যেমনটি বিল্ডগুলিতে উল্লেখ করতে পারেন যেমন নুগেটকনফিগ (বিশেষত যদি আপনাকে একাধিক রেপো থেকে প্যাকেজ নিতে হয়)।
MytyMyky

2

কখনও কখনও এটি তখন ঘটে যখন আপনি "প্যাকেজগুলি" ফোল্ডারের অভ্যন্তরে প্যাকেজটির ফোল্ডারটি পুনরুদ্ধার করার চেষ্টা করছেন (অর্থাত "প্যাকেজস / সত্তা ফ্রেমওয়ার্ক .0.০.০ /" ) তবে "ডিএলএল" এর ভিতরে নেই (বেশিরভাগ সংস্করণ নিয়ন্ত্রণ সিস্টেমগুলি স্বয়ংক্রিয়ভাবে ".dll" ফাইলগুলি উপেক্ষা করে)। এটি ঘটে কারণ নুগেট প্রতিটি প্যাকেজটি পুনরুদ্ধার করার আগে এটি ফোল্ডারগুলি ইতিমধ্যে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখায়, তাই যদি এটি উপস্থিত থাকে, অনুগেট ধরে নেয় যে "dll" এর ভিতরে রয়েছে। সুতরাং আপনার যদি সমস্যা হয় তবে কেবল ফোল্ডারটি মুছুন যে নিউগেট এটি সঠিকভাবে পুনঃস্থাপন করবে।


1
ভিএস 2015 এবং টিএফএসের জন্য, এটি আপনাকে ঠিক করবে। সমস্যাটি সমাধান করা হয়নি এমন একটি রেফারেন্স হবে এবং প্রায়শই বিষয়টি হ'ল নুগেট প্যাকেজটি পুনরুদ্ধার করা হচ্ছে না কারণ প্যাকেজগুলির ফোল্ডারটি প্যাকেজ ফোল্ডারে ইতিমধ্যে উপস্থিত রয়েছে তবে প্যাকেজটি পুরোপুরি সঠিকভাবে প্রসারিত হয়নি। (যেমন .dll থাকা উচিত এমন একটি lib ফোল্ডার মিস করা)) প্যাকেজগুলির মধ্যে থাকা প্যাকেজের জন্য পুরো ফোল্ডারটি মুছুন এবং তারপরে সমাধানের স্তরে ডান ক্লিক করুন এবং প্যাকেজগুলি পুনরুদ্ধার করতে বেছে নিন।
গ্রেগ

1

আমার একটি নুগেট প্যাকেজগুলি স্ক্রিপ্টযুক্ত নাইট বিল্ডে অন্তর্ভুক্ত না হওয়ার সাথে একটি সমস্যা ছিল যা devenv.exe ব্যবহার করে স্লান ফাইল তৈরি করে।

আমি মাইক্রোসফ্টের পরামর্শ অনুসরণ করেছিলাম এবং মূল পদক্ষেপটি নুগেট কনফিগারেশনটি আপডেট করে %AppData%/NuGetযা এতে রয়েছে:

<configuration>
    <packageRestore>
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>

সুতরাং আমি যাচাই করেছি যে আপনি যখন ভিজ্যুয়াল স্টুডিওতে সেটিংস পরিবর্তন করেন (বেশিরভাগ উত্তর এখানে থাকে) .... উপরেরটি আসলে যা পরিবর্তিত হয়। অন্যান্য "কী" হ'ল <যোগ কী = "সক্ষম" মান = "মিথ্যা" />।
গ্রানাডা কোডার

0

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

তবে বিল্ড মেশিন সংকলনটি এমএসবিল্ড.এক্সই ব্যবহার করে করা হয়েছিল। সেক্ষেত্রে আমি nuget.exe ডাউনলোড করেছি এবং পথে রেখেছি।

Msbuild.exe চালানোর আগে প্রতিটি বিল্ড প্রক্রিয়া চলাকালীন। এটি চালিয়ে যাবে -> nuget.exe পুনরুদ্ধার করুন NAME_OF_SLN_File (যদি কেবলমাত্র একটি .SLN ফাইল থাকে তবে আপনি সেই পরামিতিটি উপেক্ষা করতে পারবেন)


0

আপনি ব্যবহার করতে পারেন

Update-Package -reinstall

ভিজ্যুয়াল স্টুডিওতে প্যাকেজ ম্যানেজমেন্ট কনসোলে নুগেট প্যাকেজগুলি পুনরুদ্ধার করতে।


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