বহিরাগত এবং অভ্যন্তরীণ প্যাকেজ উত্সগুলির একাধিক সমাধানে রেফারেন্সযুক্ত প্রকল্পগুলির সাথে আমার একই অবস্থা situation আমি আজই আমাদের একটি কোড ঘাঁটির সাথে এই কাজটি পেয়েছি এবং মনে হয় এটি বিকাশকারী ওয়ার্কস্টেশন এবং আমাদের বিল্ড সার্ভারের সাথে কাজ করছে। নীচের প্রক্রিয়াটির এই দৃশ্যটি মনে আছে (যদিও সাধারণ প্যাকেজ ফোল্ডার অন্য কোথাও এটির সাথে মানিয়ে নেওয়া শক্ত হওয়া উচিত নয়)।
- কোডবেস
- প্রকল্প এ
- প্রকল্প বি
- প্রকল্প সি
- সলিউশন
- সমাধান ঘ
- সমাধান 2
- সমাধান 3
- প্যাকেজগুলি (এটি সমস্ত সমাধানের দ্বারা ভাগ করা সাধারণ)
ভিজুয়াল স্টুডিও 2015 আপডেট 3 সহ নুগেট 3.5.0.1484 হিসাবে উত্তর আপডেট হয়েছে
আমি যখন প্রাথমিকভাবে এটি মোকাবেলা করেছি এবং ভেবেছিলাম এটি আপডেট করার সময় এসেছে তখন তার চেয়ে এখন এই প্রক্রিয়াটি কিছুটা সহজ। সাধারণভাবে, প্রক্রিয়াটি কম পদক্ষেপের সাথে একই। ফলাফলটি এমন একটি প্রক্রিয়া যা নিম্নলিখিতগুলি সমাধান করে বা সরবরাহ করে:
- উত্স কোড নিয়ন্ত্রণে কমিট করার দরকার রয়েছে এমন সমস্ত কিছুই সমাধানটিতে দৃশ্যমান এবং ট্র্যাক
- ভিজ্যুয়াল স্টুডিওতে প্যাকেজ ম্যানেজার ব্যবহার করে নতুন প্যাকেজ ইনস্টল করা বা প্যাকেজ আপডেট করা সঠিক সংগ্রহস্থল পথ ব্যবহার করবে
- প্রাথমিক কনফিগারেশনের পরে .csproj ফাইলগুলির কোনও হ্যাকিং নেই
- বিকাশকারী ওয়ার্কস্টেশনের কোনও পরিবর্তন নেই (কোড চেক আউট তৈরিতে প্রস্তুত)
সচেতন হওয়ার জন্য কয়েকটি সম্ভাব্য ডাউনসাইড রয়েছে (ওয়াইএমএমভি আমি এখনও সেগুলি অনুভব করি না)। দেখুন Benol এর উত্তর এবং নীচের মন্তব্য।
NuGet.Config যোগ করুন
আপনি \ সমাধানগুলি \ ফোল্ডারের মূলটিতে একটি নুগেট.কনফিগ ফাইল তৈরি করতে চাইবেন। নিশ্চিত করুন এটি আপনার তৈরি করা একটি ইউটিএফ -8 এনকোডযুক্ত ফাইল, এটি কীভাবে করবেন তা আপনি যদি নিশ্চিত না হন তবে ভিজ্যুয়াল স্টুডিওর ফাইল-> নতুন-> ফাইল মেনু ব্যবহার করুন এবং তারপরে এক্সএমএল ফাইল টেম্পলেটটি চয়ন করুন। নিউগেটে যুক্ত করুন। নিম্নলিখিতটি কনফিগ করুন:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="$\..\Packages" />
</config>
</configuration>
সংগ্রহস্থলপথ সেটিংয়ের জন্য, আপনি $ টোকেন ব্যবহার করে একটি নিখুঁত পাথ বা আপেক্ষিক পাথ (প্রস্তাবিত) নির্দিষ্ট করতে পারেন। $ টোকেনটি যেখানে নুগেট.কনফিগ অবস্থিত তার উপর ভিত্তি করে তৈরি করা হয়েছে (দ্য টোকেনটি আসলে নুগেট.কনফিগের অবস্থানের নীচে এক স্তরের তুলনায়)। সুতরাং, যদি আমার কাছে \ সলিউশনস \ নুগেট.কনফিগ থাকে এবং আমি \ সমাধানগুলি \ প্যাকেজগুলি চাই I \ .. \ প্যাকেজগুলি মান হিসাবে নির্দিষ্ট করে।
এরপরে, আপনি "নুগেট" এর মতো কিছু বলা সমাধানে একটি সলিউশন ফোল্ডার যুক্ত করতে চান (আপনার সমাধানটিতে ডান ক্লিক করুন, অ্যাড-> নতুন সমাধান ফোল্ডার)। সলিউশন ফোল্ডারগুলি ভার্চুয়াল ফোল্ডার যা কেবলমাত্র ভিজ্যুয়াল স্টুডিও সমাধানে বিদ্যমান এবং ড্রাইভে একটি আসল ফোল্ডার তৈরি করবে না (এবং আপনি কোথাও থেকে ফাইলগুলি রেফারেন্স করতে পারেন)। আপনার "নুগেট" সমাধান ফোল্ডারে ডান ক্লিক করুন এবং তারপরে বিদ্যমান আইটেমটি যুক্ত করুন এবং \ সমাধানগুলি \ নুগেট.কনফিগ নির্বাচন করুন।
আমরা এটি করার কারণটি এটি সমাধানটিতে দৃশ্যমান এবং এটি আপনার উত্স কোড নিয়ন্ত্রণে যথাযথভাবে প্রতিশ্রুতিবদ্ধ তা নিশ্চিত করার সাথে সহায়তা করা উচিত। আপনার ভাগ করা প্রকল্পগুলির সাথে অংশ নিচ্ছে এমন আপনার কোডবেসের প্রতিটি সমাধানের জন্য আপনি এই পদক্ষেপটি করতে চাইতে পারেন।
যে কোনও .sln ফাইলের উপরে \ সলিউশনস Nu এ নুগেট.কনফিগ ফাইলটি রেখে আমরা নুগেট নুগেট.কনফিগ ফাইলটি অনুসন্ধান করার জন্য "বর্তমান কার্যনির্বাহী ডিরেক্টরি" থেকে ফোল্ডার কাঠামোটিকে উপরের দিকে নেভিগেট করে নেওয়ার বিষয়টি গ্রহণ করছি। "বর্তমান কার্যনির্বাহী ডিরেক্টরি" এর অর্থ এখানে কয়েকটি ভিন্ন ভিন্ন জিনিস, একটি হ'ল নুগেট.এক্সির সম্পাদনের পথ এবং অন্যটি .sln ফাইলের অবস্থান।
আপনার প্যাকেজ ফোল্ডারটি স্যুইচ করছে
প্রথমে, আমি আপনাকে প্রতিটি সলিউশন ফোল্ডার দিয়ে যাওয়ার এবং যে কোনও \ প্যাকেজস \ ফোল্ডার উপস্থিত রয়েছে তা মুছে ফেলার পরামর্শ দিচ্ছি (আপনাকে প্রথমে ভিজ্যুয়াল স্টুডিওটি বন্ধ করতে হবে)। এটি NuGet আপনার নতুন কনফিগার করা \ প্যাকেজগুলি \ ফোল্ডারটি কোথায় রাখছে তা দেখতে আরও সহজ করে তোলে এবং নিশ্চিত করে যে ভুল \ প্যাকেজগুলি \ ফোল্ডারের কোনও লিঙ্ক ব্যর্থ হবে এবং তারপরে এটি ঠিক করা যেতে পারে।
ভিজ্যুয়াল স্টুডিওতে আপনার সমাধানটি খুলুন এবং একটি পুনর্নির্মাণ সমস্তকে সরিয়ে দিন। আপনি যে বিল্ড ত্রুটিগুলি পাবেন তা সব উপেক্ষা করুন, এটি এই মুহুর্তে প্রত্যাশিত। এটি তবে বিল্ড প্রক্রিয়াটির শুরুতে নিউগেট প্যাকেজ পুনরুদ্ধার বৈশিষ্ট্যটি বন্ধ করে দেওয়া উচিত। আপনার \ সমাধান \ প্যাকেজগুলি \ ফোল্ডারটি আপনি যে জায়গাতে চান সেখানে তৈরি করা হয়েছে তা যাচাই করুন। যদি তা না হয় তবে আপনার কনফিগারেশনটি পর্যালোচনা করুন।
এখন, আপনার সমাধানের প্রতিটি প্রকল্পের জন্য আপনি এটি করতে চাইবেন:
- প্রকল্পে ডান ক্লিক করুন এবং আনলোড প্রকল্পটি নির্বাচন করুন
- প্রকল্পে ডান ক্লিক করুন এবং আপনার xxx.csproj সম্পাদনা নির্বাচন করুন
- \ প্যাকেজগুলি to এর জন্য কোনও রেফারেন্স খুঁজুন এবং সেগুলিকে নতুন স্থানে আপডেট করুন।
- এর মধ্যে বেশিরভাগ <হিন্টপ্যাথ> রেফারেন্স হবে তবে সেগুলি সব নয়। উদাহরণস্বরূপ, ওয়েবগ্রিজ এবং মাইক্রোসফ্ট.বিসিএল.বিল্ডের পৃথক পাথ সেটিংস থাকবে যা আপডেট করা দরকার।
- .Csproj সংরক্ষণ করুন এবং তারপরে প্রকল্পে ডান ক্লিক করুন এবং পুনরায়লোড প্রকল্পটি নির্বাচন করুন
আপনার সমস্ত .csproj ফাইল আপডেট হয়ে গেলে, পুনরায় অন্য সমস্ত পুনর্নির্মাণ করুন এবং আপনার অনুপস্থিত রেফারেন্সগুলি সম্পর্কে আর কোনও ত্রুটি থাকা উচিত নয়। এই মুহুর্তে আপনার কাজ শেষ হয়েছে, এবং এখন একটি ভাগ করা প্যাকেজ ফোল্ডার ব্যবহারের জন্য নুগেট কনফিগার করা আছে।
ভিস্টুডিও 2012 এর সাথে নিউগেট 2.7.1 (2.7.40906.75) হিসাবে
প্রথমে মনে রাখা জিনিসটি হ'ল nuget.config nuget প্যাকেজ সিস্টেমের সমস্ত পাথ সেটিংস নিয়ন্ত্রণ করে না। এটি নির্দিষ্ট করে বিভ্রান্তিকর ছিল। বিশেষত, সমস্যাটি হ'ল এমএসবিল্ড এবং ভিজ্যুয়াল স্টুডিও (কলিং মিসবিল্ড) nuget.config এ পাথটি ব্যবহার করে না বরং বরং এটি nuget.targets ফাইলে ওভাররাইড করছে।
পরিবেশ প্রস্তুতি
প্রথমত, আমি আপনার সমাধানের ফোল্ডারটি দিয়ে যাব এবং উপস্থিত সমস্ত \ প্যাকেজগুলি \ ফোল্ডারগুলি সরিয়ে ফেলব। এটি নিশ্চিত করতে সহায়তা করবে যে সমস্ত প্যাকেজ দৃশ্যমানভাবে সঠিক ফোল্ডারে ইনস্টল করছে এবং আপনার সমাধানগুলির মধ্যে কোনও খারাপ পথের রেফারেন্স আবিষ্কার করতে সহায়তা করবে। পরবর্তী, আমি নিশ্চিত করব যে আপনার কাছে সর্বশেষতম নুগেট ভিজ্যুয়াল স্টুডিও এক্সটেনশন ইনস্টল রয়েছে। আমি এটিও নিশ্চিত করব যে আপনি প্রতিটি সমাধানে সর্বশেষতম nuget.exe ইনস্টল করেছেন। একটি কমান্ড প্রম্পট খুলুন এবং প্রতিটি $ (সলিউশনডির) \। ন্যাজেট \ ফোল্ডারে যান এবং নিম্নলিখিত কমান্ডটি কার্যকর করুন:
nuget update -self
নিউগেটের জন্য সাধারণ প্যাকেজ ফোল্ডার পাথ সেট করা হচ্ছে
প্রতিটি S (সলিউশনডির) \ .নুগেট \ নুগেট.কনফিগ খুলুন এবং <কনফিগারেশন> বিভাগের মধ্যে নিম্নলিখিতটি যুক্ত করুন:
<config>
<add key="repositorypath" value="$\..\..\..\Packages" />
</config>
দ্রষ্টব্য: আপনি একটি পরম পথ বা আপেক্ষিক পথ ব্যবহার করতে পারেন। মনে রাখবেন, আপনি যদি এর সাথে আপেক্ষিক পথটি ব্যবহার করছেন $ যে এটিনুগেট.কনফিগের অবস্থানের নীচে এক স্তরের সাথে আপেক্ষিক(বিশ্বাস করুন এটি কোনও বাগ) is
এমএসবিল্ড এবং ভিজ্যুয়াল স্টুডিওর জন্য সাধারণ প্যাকেজ ফোল্ডার পাথ সেট করা
প্রতিটি S (সলিউশনডির) \। নুগেট tar স্টারজেটগুলি খুলুন এবং নিম্নলিখিত বিভাগটি সংশোধন করুন (নন-উইন্ডোজের জন্য এটির নীচে আরও একটি বিভাগ রয়েছে) নোট করুন:
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
<!-- Windows specific commands -->
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
<PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
<PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>
প্যাকেজ আপডেট করুন
<PackagesDir>$([System.IO.Path]::GetFullPath("$(SolutionDir)\..\Packages"))</PackagesDir>
দ্রষ্টব্য: গেটফুলপথ আমাদের আপেক্ষিক পথটিকে একটি নিখুঁত পথে সমাধান করবে।
সমস্ত নুগেট প্যাকেজগুলি সাধারণ ফোল্ডারে পুনরুদ্ধার করা হচ্ছে
একটি কমান্ড প্রম্পট খুলুন এবং প্রতিটি S (সমাধানডায়ার) \ .Nget এবং নিম্নলিখিত আদেশটি কার্যকর করুন:
nuget restore ..\YourSolution.sln
এই মুহুর্তে, আপনার সাধারণ স্থানে আপনার একক \ প্যাকেজগুলি \ ফোল্ডার থাকা উচিত এবং আপনার কোনও সমাধান ফোল্ডারের মধ্যে কোনওটিই নেই। যদি তা না হয় তবে আপনার পাথগুলি যাচাই করুন।
প্রকল্পের রেফারেন্স ঠিক করা
প্রতিটি .csproj ফাইলটি একটি পাঠ্য সম্পাদকের মধ্যে খুলুন এবং \ প্যাকেজগুলির জন্য কোনও রেফারেন্স সন্ধান করুন এবং সেগুলি সঠিক পথে আপডেট করুন। এর মধ্যে বেশিরভাগ <হিন্টপ্যাথ> রেফারেন্স হবে তবে সেগুলি সব নয়। উদাহরণস্বরূপ, ওয়েবগ্রিজ এবং মাইক্রোসফ্ট.বিসিএল.বিল্ডের পৃথক পাথ সেটিংস থাকবে যা আপডেট করা দরকার।
আপনার সমাধান তৈরি করুন
ভিজ্যুয়াল স্টুডিওতে আপনার সমাধানটি খুলুন এবং একটি বিল্ড বন্ধ করুন। যদি এটি অনুপস্থিত প্যাকেজগুলি পুনরুদ্ধার করা প্রয়োজন সম্পর্কে অভিযোগ করে তবে ধরে নিবেন না যে প্যাকেজটি অনুপস্থিত এবং পুনরুদ্ধার করা দরকার (ত্রুটি বিভ্রান্তিকর হতে পারে)। এটি আপনার .csproj ফাইলগুলির মধ্যে একটিতে খারাপ পথ হতে পারে। প্যাকেজটি পুনরুদ্ধার করার আগে এটি প্রথমে পরীক্ষা করে দেখুন।
হারিয়ে যাওয়া প্যাকেজগুলি সম্পর্কে বিল্ড ত্রুটি আছে?
আপনি যদি ইতিমধ্যে যাচাই করে ফেলেছেন যে আপনার .csproj ফাইলগুলির পাথগুলি সঠিক, তবে আপনার কাছে চেষ্টা করার দুটি বিকল্প রয়েছে। যদি এটি আপনার কোডটি উত্স কোড নিয়ন্ত্রণ থেকে আপডেট করার ফলাফল হয় তবে আপনি একটি পরিষ্কার অনুলিপি পরীক্ষা করে দেখতে পারেন এবং তারপরে এটি নির্মাণ করতে পারেন। এটি আমাদের বিকাশকারীদের একজনের জন্য কাজ করেছিল এবং আমি মনে করি .suo ফাইল বা এর অনুরূপ কিছুতে একটি শৈল্পিক ছিল। অন্য বিকল্পটি হ'ল প্রশ্নের মধ্যে সমাধানটির .nuget ফোল্ডারে কমান্ড লাইনটি ব্যবহার করে ম্যানুয়ালি প্যাকেজটিকে পুনঃস্থাপন করতে বাধ্য করা হবে:
nuget restore ..\YourSolution.sln
$
আপেক্ষিক পথের সামনে হারিয়ে যাচ্ছিলেন । এছাড়াও, নুগেট.কনফিগ ফাইলগুলি সম্পর্কে আপনার প্রশ্নের উত্তর এখানে । এটি প্রথমে .nuget, তারপরে সমস্ত অভিভাবক ডিরেক্টরিতে, তারপরে আপনার AppData- এর 'গ্লোবাল' ফাইলটিতে দেখবে: তারপরে সেগুলি প্রয়োগ করুন যথাযথভাবে ( যার অর্থ যাই হোক না কেন )।