সংস্করণ নিয়ন্ত্রণে নুগেট থেকে প্যাকেজগুলি পরীক্ষা করা হচ্ছে?


87

নুগেটের আগে, কোনও প্রকল্পে ব্যবহৃত সমস্ত বাহ্যিক ডিএলএল চেক-ইন করা সাধারণভাবে 'সেরা অনুশীলন' ছিল। সাধারণত একটি Libsবা3rdParty ডিরেক্টরিতে।

নুগেটের সাথে কাজ করার সময়, আমি কি packagesডিরেক্টরিটি চেক-ইন করার কথা বলছি বা এমএসবাইল্ডের পক্ষে নুগেট ফিড থেকে প্রয়োজনীয় প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করার কোনও উপায় আছে?


4
এই মতামত একটি উত্তর। "বাদ দিন / না" শিবিরটি বজায় রাখে যে সরবরাহিত বৈশিষ্ট্য সেটটি বিকাশের সময় সহজ করে তোলে এবং কেবল প্যাকেজ সংগ্রহস্থল (যেমন nuget.org) থেকে টানতে পারে, এটি কেবল বিল্ড টাইম এ সম্পন্ন করা যায়। "অন্তর্ভুক্ত / হ্যাঁ" শিবির রক্ষণাবেক্ষণ করে যে বাহ্যিক সংগ্রহস্থলটি অনুপলব্ধ হয়ে গেলে প্যাকেজগুলি ছাড়াই কোডটি তৈরি করা হবে না। সিদ্ধান্ত নেওয়ার আগে উভয় পক্ষই পড়ুন। আরও দেখুন: সফ্টওয়্যারেনজেনারিং.স্ট্যাকেক্সেঞ্জাওন.কম
সেকশনস

উত্তর:


68

না

যেহেতু এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল এখন প্যাকেজগুলি সোর্স নিয়ন্ত্রণে না নিয়েই নুগেট ব্যবহারের সহজ ওয়ার্কফ্লো রয়েছে

আপনার প্যাকেজ ম্যানেজার কনসোল থেকে আপনাকে 'নিউগেটপাওয়ারটুলস' ইনস্টল করতে হবে :

Install-Package NuGetPowerTools

তারপরে আপনার প্রকল্পগুলিকে প্যাকটি পুনরুদ্ধার করতে সহায়তা করতে সক্ষম করতে আপনাকে আর একটি কমান্ড চালাতে হবে:

Enable-PackageRestore

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

উৎস

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


41
নুগেট-১. of হিসাবে, আপনার আর এটি করতে নুগেটপাওয়ারটুলের আর প্রয়োজন নেই। সলিউশন ইন সলিউশন এক্সপ্লোরারটিতে কেবল ডান ক্লিক করুন এবং নির্বাচন করুন Enable NuGet Package Restore,। দস্তাবেজগুলি দেখুন ।
কালেব পেডারসন

4
হ্যাঁ, আপনাকে অবশ্যই। নোটিশ ফোল্ডার এবং এর নীচে ফাইলগুলিতে চেক করতে হবে।
অবসন্নতা

11
@ অ্যাডওয়ার্ড - দার্শনিকভাবে, কেন আপনি নিউগেট প্যাকেজগুলিকে উত্স নিয়ন্ত্রণে অন্তর্ভুক্ত করবেন না যেহেতু সেগুলি নির্ভরতা? উত্স নিয়ন্ত্রণে যা যাচাই করা হয়েছে তা কোনও বিল্ডের জন্য পর্যাপ্ত কোডের 100% হওয়া উচিত। নিউগেট প্যাকেজগুলি অন্তর্ভুক্ত না করে তৈরি করা হয়েছে বাহ্যিক নির্ভরতা, যেমন। যদি প্যাকেজ ডাউনলোডের স্থান পরিবর্তন হয় বা কোনও অদ্ভুত কারণে এটি আর উপলভ্য হয় না ইত্যাদি Or বা পরবর্তী সময়ে পুনরায় ডাউনলোড করা প্যাকেজটিতে কিছুটা পরিবর্তন আসে এবং এটি বিল্ড ভেঙে যায় তবে কী হতে পারে? প্রকল্পটি তৈরির জন্য প্রয়োজনীয় সমস্ত কিছু যদি সোর্স নিয়ন্ত্রণে থাকে তবে তা এড়ানো যেত।
হাওইক্যাম্প

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

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

30

হ্যাঁ. "প্যাকেজগুলি" ডিরেক্টরিটি আপনার প্রশ্নে উল্লিখিত আপনার "libs" ডিরেক্টরিটির সমতুল্য বলে বিবেচনা করুন। আমার ব্যক্তিগত ওএসএস প্রকল্পগুলির সাথে আমি ব্যক্তিগতভাবে এটি গ্রহণ করি।

আমরা এমন বৈশিষ্ট্যগুলি খতিয়ে দেখছি যা এমএসবিল্ডকে প্রয়োজনীয় প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করতে দেয় তবে এটি কার্যকর হয়নি (নুগেট ১.১ হিসাবে)।

আমি মনে করি কিছু লোক ইতিমধ্যে তাদের নিজস্ব বৈশিষ্ট্যগুলি প্রয়োগ করেছে, তবে আমাদের পরিকল্পনাটি সেই বৈশিষ্ট্যটি নুগেট ১.২ বা ১.৩ এ আশায় আশা করা উচিত look


10
আমি অবশ্যই এই বৈশিষ্ট্যটি যুক্ত দেখতে চাই। সিআই সার্ভার বা ডেভ পিসিতে প্রয়োজনীয়ভাবে প্যাকেজগুলি টেনে আনতে সক্ষম হবেন যাতে আপনি তৃতীয় পক্ষের ডিএলএলগুলির সাথে সোর্স কন্ট্রোল রিপোজিটরিটি ব্লোট করা এড়াতে পারেন।
জন মিলস

4
যদি ভিজ্যুয়াল স্টুডিওতে প্যাকেজ পরিচালক এবং কমান্ড-লাইন সরঞ্জাম উভয় "প্যাকেজগুলি মেরামত" করতে পারে তবে দুর্দান্ত।
শন উইলসন

4
সম্ভবত এখন এই উত্তরটি অপসারণ / সম্পাদনা করা ভাল হবে
লেক্স

4
@ টিম উত্তরটি বর্তমান ইমো নয়
এডওয়ার্ড উইল্ড

4
এই উত্তর এখনও বিদ্যমান। প্যাকেজগুলি বিবেচনা করুন যা বৈশ্বিক সংগ্রহস্থলগুলিতে নেই (সেগুলি মেরামত / ডাউনলোড করার কোনও উপায় নেই)। আইএমএইচও সংস্করণ সিস্টেমে প্যাকেজগুলি সংরক্ষণ করা ভাল অনুশীলন।
পাভেল হোদেক

6

এখানে সমস্ত উত্তর থাকা সত্ত্বেও, সংস্করণ নিয়ন্ত্রণের "কিছু ধরণের" এর অধীনে আপনার সমস্ত নির্ভরতা না থাকার জন্য এটি এখনও একটি সরল ওলে'র ভয়ঙ্কর সমাধান।

জিআইটি-র জন্য, এর অর্থ জিআইটি-এলএফএস হবে।

এনপিএমের সাম্প্রতিক পর্বটি কেন দেখায় যে: যে ইন্টারনেট ভাণ্ডারগুলি আপনি বিরতি নির্ভর করে তা যদি উপলভ্য হয় না, তবে ভাল তবে আপনি কী ভুল?

আপনি আর আপনার জিনিস তৈরি করতে সক্ষম নন - এবং তাই বিতরণ করতে সক্ষম নন।


4
এটি একটি খুব ভাল দিক. আমাদের নিজস্ব অভ্যন্তরীণ নুগেট সার্ভার থাকলেও, আমরা কী বিল্ড চলাকালীন সর্বদা উপলব্ধ থাকার জন্য নির্ভর করতে পারি? এছাড়াও, আমাদের প্যাকেজগুলি কীভাবে প্রায়শই পরিবর্তন করে যে আমাদের প্রতি বিল্ডের জন্য একটি নতুন কপি পাওয়া দরকার?
জোশ পি

npmভেঙে গেছে কারণ এটি প্যাকেজ তালিকাভুক্ত হয়নি, এটি আসলে সেগুলি মুছে ফেলে। নিউগেট এটি করে না; যদি কোনও মুহুর্তে আপনি নিউগেট অ্যাক্সেস করতে না পারেন তবে কিছু ভীষণ ভুল। আমি মনে করি না যে গিটে নির্ভরতার ক্র্যাপটোন সংরক্ষণ করা একটি ভাল সমাধান: কেবলমাত্র আপনার নির্ভরতা নির্দিষ্ট সংস্করণে লক করুন এবং যদি আপনার কাছে গুরুত্বপূর্ণ হয় তবে আপনার এবং ইন্টারনেটের মধ্যে একটি আয়না রাখুন।
ড্যান

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

5

প্রশ্ন জিজ্ঞাসা করার পরে, আমি নীচের পদ্ধতিটি রেখেছি যাতে আমাকে শীর্ষস্থানীয় প্যাকেজগুলি পরীক্ষা করতে না হয় check ডিরেক্টরিতে ।

শীর্ষ স্তরের বিল্ড.এমএস বিল্ড ফাইলটিতে:

<Target Name="NuGet">
    <ItemGroup>
       <NuGetPackage Include="*\packages.config" />
    </ItemGroup>
    <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages'  />

    <!-- optional for project that has JavaScript content -->
    <CreateItem Include="Packages\*\Content\Scripts\*">
       <Output TaskParameter="Include" ItemName="NuGetJSFiles"/>
    </CreateItem>
    <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" />
    <Delete Files="MainProj\Scripts\.gitignore" />
    <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" /
    <Delete Files="@(PostNuGetFiles)" />
</Target>

প্রতিটি প্রকল্পে। Csproj ফাইল

<Target Name="BeforeBuild">
    <Error Condition="!Exists('..\Packages\')" Text="You must run &gt; msbuild build.msbuild to download required NuGet
Packages" />

    <!-- optional for project that has JavaScript content -->
   <ReadLinesFromFile File="Scripts\.gitignore">
     <Output TaskParameter="Lines" ItemName="ReqJSFiles" />
   </ReadLinesFromFile>
   <Message Text="@(ReqJSFiles)" />
   <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run &gt; msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" />
 </Target>

4
এটি কাজ করে, তবে এই দিনগুলিতে কেবল বিল্ট-ইন সক্ষম প্যাকেজ পুনরুদ্ধারটি ব্যবহার করা ভাল
স্কট ওয়েইনস্টাইন

4

আমি বুঝতে পারি যে বাস্তবতাটি অন্যরকম ছিল যখন এই প্রশ্নটি মূলত পোস্ট করা হয়েছিল এবং উত্তর দেওয়া হয়েছিল, তবে ভাগ্যক্রমে উত্তরটি কিছুটা বদলেছে। প্রাক-বিল্ড ইভেন্টটি ব্যবহার করে এমএসবিল্ডের মাধ্যমে নির্ভরতা ডাউনলোড করতে এখন নিউগেট ব্যবহার করা সম্ভব। আপনার কোড ভান্ডারে আপনাকে প্যাকেজ ফোল্ডারটি লাগানোর দরকার নেই, সমস্ত নির্ভরতা ডাউনলোড হবে এবং / অথবা বিল্ডে আপডেট হবে। এটি কার্যকর হতে পারে তবে এটি যথেষ্ট শালীন দেখায়। বিস্তারিত জানার জন্য নিম্নলিখিত ব্লগ পোস্টটি দেখুন: http://blog.davidebbo.com/2011/03/ using-nuget-without-committing-packages.html


4
আমি যতক্ষণ না মনে করলাম আমি উত্তেজিত ছিলাম এর জন্য নুগেট সংগ্রহস্থলটি অ্যাক্সেস করার জন্য বিল্ড সার্ভারের প্রয়োজন, এবং যেখানে আমি বিল্ড সার্ভারগুলি ইন্টারনেট দেখতে পাচ্ছি না সেখানেই এটি কাজ করেছি। আমি কেবল প্যাকেজ গাছটি পরীক্ষা করে ফিরে যাব ...
piers7

3

09/20/13 এর হিসাবে, "নিউটেট রিস্টোর" নামে কিছু আছে। আপনি যদি এটি করতে চান তবে আপনাকে অবশ্যই প্যাকেজ ফোল্ডারে চেক করতে হবে না। (বিশেষ করে যদি আপনি ডিভিসিএস ব্যবহার করছেন)

এটি পরীক্ষা করে দেখুন: উত্স নিয়ন্ত্রণে প্যাকেজগুলি ছাড়াও নুগেট ব্যবহার করুন http://docs.nuget.org/docs/workflows/used-nuget-without-committing-packages


3

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

http://docs.nuget.org/docs/references/package-restore

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

.Nuget ফোল্ডারটি সংস্করণ নিয়ন্ত্রণে যুক্ত করা উচিত?

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