যখন কয়েকটি প্রকল্প একাধিক সমাধানে অন্তর্ভুক্ত থাকে তখন সমস্ত সমস্যার জন্য একটি সাধারণ নুগেট প্যাকেজ ফোল্ডার সেট আপ করা


137

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

আমি দেখেছি যে নুগেটের ২.১ এর রিলিজের সাথে একটি সাধারণ প্যাকেজ অবস্থানটি চিহ্নিত করার উপায় রয়েছে (সম্ভবত প্রকল্পের মূল স্তরে, আমরা টিএফএস উত্স নিয়ন্ত্রণ ব্যবহার করছি), রিলিজ নোট দেখুন । আমি নুগেট ভি 2.7 ব্যবহার করছি

তবে আমি এর কোনও প্রভাব না দেখে নুগেট কনফিগ ফাইল যুক্ত করার চেষ্টা করেছি। প্যাকেজগুলি এখনও সমাধান ফোল্ডারে জমা থাকে। আমি কি কিছু মিস করেছি? Nuget.config ফাইলটিতে যোগ করার জন্য xML নোডের বিভিন্ন কাঠামো রয়েছে বলে মনে হচ্ছে, কে এই প্রশ্নের উত্তর দিচ্ছে তার উপর নির্ভর করে: শোয়ার্জি আরও একটি স্ট্যাকওভারফ্লো থ্রেডের পরামর্শ দেয় :

<settings>
  <repositoryPath>..\..\[relative or absolute path]</repositoryPath>
</settings>

নুগেট ২.১-এর জন্য প্রকাশিত নোটগুলি (উপরে লিঙ্কটি দেখুন) এই ফর্ম্যাটটির পরামর্শ দেয়:

<configuration>
  <config>
    <add key="repositoryPath" value="..\..\[relative or absolute path]" />
  </config>
</configuration>

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

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


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

এটি কঠিন বলে মনে হচ্ছে। পেকেট
Tuomas Hietanen

দেরিতে মন্তব্য। কেবল এটি যুক্ত করতে চেয়েছিলেন যে এই পরিবর্তনটি শুরু করার সময় আপনার যদি চলমান থাকে তবে ভিজ্যুয়াল স্টুডিওটি পুনরায় চালু করা দরকার, যেহেতু nuget.config ফাইলগুলি ভিএস স্টার্টআপের সময় পড়তে পারে। এছাড়াও, $ ছাড়া আমার কোনও সমস্যা ছিল না, কেবল ব্যাকস্ল্যাশ দিয়ে শুরু করবেন না।
এমবিওয়াইজ

উত্তর:


147

বহিরাগত এবং অভ্যন্তরীণ প্যাকেজ উত্সগুলির একাধিক সমাধানে রেফারেন্সযুক্ত প্রকল্পগুলির সাথে আমার একই অবস্থা 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 আপনার নতুন কনফিগার করা \ প্যাকেজগুলি \ ফোল্ডারটি কোথায় রাখছে তা দেখতে আরও সহজ করে তোলে এবং নিশ্চিত করে যে ভুল \ প্যাকেজগুলি \ ফোল্ডারের কোনও লিঙ্ক ব্যর্থ হবে এবং তারপরে এটি ঠিক করা যেতে পারে।

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

এখন, আপনার সমাধানের প্রতিটি প্রকল্পের জন্য আপনি এটি করতে চাইবেন:

  1. প্রকল্পে ডান ক্লিক করুন এবং আনলোড প্রকল্পটি নির্বাচন করুন
  2. প্রকল্পে ডান ক্লিক করুন এবং আপনার xxx.csproj সম্পাদনা নির্বাচন করুন
  3. \ প্যাকেজগুলি to এর জন্য কোনও রেফারেন্স খুঁজুন এবং সেগুলিকে নতুন স্থানে আপডেট করুন।
    • এর মধ্যে বেশিরভাগ <হিন্টপ্যাথ> রেফারেন্স হবে তবে সেগুলি সব নয়। উদাহরণস্বরূপ, ওয়েবগ্রিজ এবং মাইক্রোসফ্ট.বিসিএল.বিল্ডের পৃথক পাথ সেটিংস থাকবে যা আপডেট করা দরকার।
  4. .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

আমার দীর্ঘ সমস্যার দীর্ঘ উত্তর দেওয়ার জন্য ধন্যবাদ। আমি এই সমাধানটি চেষ্টা করব এবং আপনার কাছে ফিরে যাব।
ম্যাটস ইসাকসন

এটি একই ডিরেক্টরিতে .sln উভয়ই কাজ করবে? তারা কি একই প্যাকেজ ডিরেক্টরি ভাগ করে নেবে?
tofutim

7
আমি মনে করি এই উত্তরটি প্রমাণ করে যে কতটা কড়া কড়া। এ জাতীয় একটি সহজ ধারণা সক্ষম করার জন্য একটি জটিল, অনমনীয় কাঠামো তৈরি করা: - "সমাধানগুলির মধ্যে একই সমাহারগুলি ভাগ করে নেওয়া" পুরো জিনিসটির দুর্বল নকশার ইঙ্গিত দেয়।
মিক

1
ইঙ্গিতপথগুলি ঠিক করার জন্যও কী কাজ করে - আপনি প্যাকেজ-ম্যানেজার কনসোলে "আপডেট-প্যাকেজ-পুনরায় ইনস্টল করুন" তে নিজের পছন্দ অনুযায়ী নিউগেট.কনফিগ আপডেট করার পরে। এটি সমস্ত প্যাকেজ পুনরায় ইনস্টল করবে, তাদের হিন্টপথগুলিও ঠিক করবে। এর পরে - আপনার কিছু প্রতিকৃতি অবশিষ্ট থাকতে পারে (আমার কিছু রৌপ্যলাইট প্রকল্পে ছিল - লক্ষ্য / বিল্ডগুলির "পুরানো" আমদানি এখনও ছিল)
johannes.colmsee

1
@ ভাইর্মিস যদি আমি আমার সমস্ত সমাধানের জন্য সাধারণ নুগেট প্যাকেজ ফোল্ডার সেটআপ করি। আমার অ্যাজুরি ডিভাইসগুলি এর উপর কী প্রভাব ফেলবে?
পঙ্কজ দেবরানী

39

সমস্ত প্রকল্পের জন্য সাধারণ প্যাকেজের অবস্থান নির্ধারণের পরিবর্তে প্রকল্পের মধ্যে হিন্টপথকে নিম্নলিখিত রূপে পরিবর্তন করা সম্ভব:

<HintPath>$(SolutionDir)\packages\EntityFramework.6.1.0\lib\net40\EntityFramework.dll</HintPath>

বেশিরভাগ ক্ষেত্রে ভাগ করা প্রকল্পে কেবলমাত্র কয়েকটি প্যাকেজ থাকবে, তাই আপনি সহজেই এটিকে পরিবর্তন করতে পারবেন।

আমি মনে করি এটি আরও ভাল সমাধান, যখন আপনি ব্রাঙ্কিং কোড করবেন, সাধারণ রেপো সেট করার সময় আপনাকে অবশ্যই আপেক্ষিক পথ পরিবর্তন করতে হবে, এই সমাধানে আপনার এটি করার দরকার নেই।


2
আদম ঠিক আছে। এটি একটি অবিশ্বাস্য বোকা সমস্যার সর্বাধিক সরল সমাধান solution
ল্যাপসাস

1
এটি উজ্জ্বল সমাধান। সহজ এবং স্পষ্ট যে কোনও কোডের কাঠামো পুনর্নির্মাণের প্রয়োজন হয় না।
RredCat

2
আফাইক $ (সলিউশনডির) কেবল তখনই সেট করা হয় যখন ভিএস এর মাধ্যমে বিল্ডিং করা হয় সুতরাং এমএসবিল্ড.এক্সইয়ের মাধ্যমে সরাসরি কোনও বিল্ডিং নেই, যদি না আপনি সেটিং / পি করছেন: সমাধানডির = পাথ
লার্স নিলসন

এটি এখানে স্বয়ংক্রিয়ভাবে সেট করা যেতে পারে% APPDATA% \ রোমিং \ নুগেট \ নুগেট
C

15
আপনি প্যাকেজ আপডেট না করা এবং নতুন আপেক্ষিক পাথের সাহায্যে হিন্টপথ ওভাররাইট করা পর্যন্ত এটি দুর্দান্ত কাজ করে। প্রচুর প্যাকেজ সহ একটি বিশাল দ্রবণে বেশ ক্লান্তিকর হয়ে ওঠে। Forbশ্বর আপনাকে একটি আপডেট-প্যাকেজ চালানোর জন্য নিষেধ করুন
পুনরায়

22

নুগেট (২.)) এবং ভিএস ২০১২ এর সর্বশেষতম সংস্করণ দিয়ে এটির চেষ্টা করার আমার অভিজ্ঞতা:

  • .Nuget ফোল্ডারটি মুছুন (ডিস্কে এবং সমাধানে)
  • সমস্ত সমাধানের একটি সাধারণ পিতা ফোল্ডারে একটি নুগেট.কনফিগ ফাইল রাখুন Put
  • যে কোনও বিদ্যমান প্যাকেজ ফোল্ডার মুছুন
  • সমস্ত সিএসপিজেজ ফাইলের মধ্য দিয়ে যান এবং হিন্টপ্যাথগুলিকে নতুন অবস্থানে দেখানোর জন্য পরিবর্তন করুন
  • মুনাফা

আমার ক্ষেত্রে, আমি সমস্ত প্যাকেজ ভিতরে রাখতে চেয়েছিলাম .packages, তাই আমার নিউগেট.কনফিগটি নীচের মত দেখতে পেল।

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositorypath" value=".packages" />
   </config>
 </configuration>

নোট করুন যে কয়েকটি 'অদ্ভুত' জিনিস ঘটতে পারে তবে আমি মনে করি সেগুলি সহনীয়:

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

দাবি অস্বীকার : আমি আজই এটি চেষ্টা করেছি, এটির ব্যাক আপ করার জন্য আমার কোনও দীর্ঘমেয়াদী অভিজ্ঞতা নেই!


4
এটি এটি করার প্রস্তাবিত উপায়। গৃহীত উত্তরে নুগেট পুনরুদ্ধার করার পুরাতন এমএসবিল্ড ইন্টিগ্রেশন উপায়টি একটি পিটা এবং আমি স্বয়ংক্রিয় প্যাকেজ পুনঃস্থাপনের জন্য স্লান-এর পাশাপাশি নুগেট.কনফিগ লাগানোর বিষয়টি নিশ্চিত করতে পারি। এটি একটি সাধারণ পিতামহ ডিরেক্টরিতে রেখেছি তা আমি নিশ্চিত করতে পারছি না।
9swampy

1
কীভাবে নুগেট.কনফিগকে সমস্ত সমাধানের জন্য (টিএফএসে) সাধারণ পিতা ফোল্ডারে রাখবেন যাতে তারা উল্লেখ করতে পারে? আমি জানি কেবলমাত্র নুগেট কনফিগ ফাইল থাকা প্রতিটি সমাধানের অধীনে .nuget ফোল্ডার; এবং যদি "repositorypath মান =। প্যাকেজস" থাকে তবে এটি .nuget এর মতো একটি সাবফোল্ডার তৈরি করে: সি: \ টিএফএস \ কমপ্লেক্স \ সল্যাবসি nu। ন্যাজেট \। প্যাকেজস - এটি নেস্টেড প্রকল্পগুলি / সমাধানগুলি একটি পরিষ্কার উপায়ে সমাধান করে না does এটি স্বয়ংক্রিয় টিএফএস বিল্ডেও কাজ করা উচিত। স্বীকৃত উত্তরের জন্য কিছু হ্যান্ড-কোডড কাজ প্রয়োজন, প্লাস "সংগ্রহস্থলপথ মান = $ \ .. \ .. \ .. \ বিভিন্ন আপেক্ষিক
পাথযুক্ত

2
ভিজ্যুয়াল স্টুডিও 2015 এবং নিউজ 3.4.3 এর সাথে কাজ করে
হেসেইন ইয়াালি

এটি কেবল পুরানো প্যাকেজটি তাত্ক্ষণিকভাবে মুছে ফেলবে তা নয়, এটি ওভাররাইট এবং হিস্টপথটি ভেঙে দেবে যা আপনি সিএসপোজ ফাইলটিতে হ্যান্ডকোড করেছেন। @ hB0 সঠিক is এটি কেবল অপেক্ষাকৃত সহজ সমাধানের জন্য কাজ করে। একবার আপনি শাখা, শেয়ারড প্রজেক্টস ইত্যাদির সাথে একটি জটিল টিএফএস ওয়ার্কস্পেস কাঠামোতে পৌঁছে গেলে এটি দক্ষতার সাথে স্কেল করতে ব্যর্থ হয়।
gravidThoughts

20

আমার কাছে ভিএস 2013 এর সাথে নুগেট সংস্করণ 2.8.50926 আছে You আপনার একাধিক নুগেটকনফিগ ফাইলগুলি ব্যবহার করা বা জটিল ডিরেক্টরি স্ট্রাকচার ব্যবহার করার দরকার নেই। এখানে অবস্থিত ডিফল্ট ফাইলটি কেবল পরিবর্তন করুন:

%APPDATA%\Roaming\NuGet\NuGet.Config

আমার ফাইলটির বিষয়বস্তু এখানে:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Projects\nugetpackages" />
  </config>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
</configuration>

সুতরাং সমস্ত প্যাকেজগুলি "সি: \ প্রকল্পগুলি u নুগেটপ্যাকেজ" ফোল্ডারে যায়, সমাধান যেখানেই হোক না কেন।

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


এটি এখন পর্যন্ত সবার সহজ সমাধান এবং এটি আরও ভালবাসার দাবি রাখে!
Korayem

2
এটি আজ সত্যিই সহজ সমাধান তবে আপনার উত্তরে একটি জিনিস অনুপস্থিত। প্রতিটি প্রকল্পের সিএসপোজ ফাইলগুলিতে আপনাকে এখনও হিন্টপথের সাথে ডিল করতে হবে। এগুলি স্বয়ংক্রিয়ভাবে নতুন পথে লক্ষ্যবস্তু হবে না। আমি কি সঠিক?
ব্যাটম্যাচী

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



3

ভিজ্যুয়াল স্টুডিও থেকে 2013 আপডেট 4 এবং নুগেট প্যাকেজ ম্যানেজার সংস্করণ> 2.8.5 ...

সংগ্রহস্থলের মূলটিতে nuget.config ফাইল তৈরি করুন।

ফাইল সামগ্রী:

<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

এর ফলে সমস্ত প্যাকেজগুলি আপনার nuget.config ফাইলের স্তরের প্যাকেজ ফোল্ডারে যাবে।

এখন আপনি প্রতিটি আপডেট।

আপনার যদি একই স্তরের একাধিক সংগ্রহের পছন্দ থাকে এবং তাদের একই প্যাকেজ ফোল্ডারটি কী ভাগ করে নিতে হয় তবে একটি ফোল্ডার উপরে যাওয়ার উপায় ব্যবহার করে চেষ্টা করুন।

 <add key="repositoryPath" value="..\packages" />

তবে এইভাবে আপনি সেই নুগেট প্যাকেজগুলি রেফারেন্সের কারণ ঘটান সিএসপ্রোজ আপনার ফোল্ডারগুলির বাইরে একটি ফোল্ডার দেখায়।


3

আমি এমন একটি নুগেট প্যাকেজ তৈরি করেছি যা প্রকল্পের সমস্ত নিউগেট রেফারেন্সকে স্বচ্ছভাবে একটি S (সলিউশনডির)-সম্পর্কিত সম্পর্কিত ফর্ম্যাটে রূপান্তর করে। এটি বিল্ড-টাইম এক্সএসএলটি ট্রান্সফর্ম ব্যবহার করে এটি করে, তাই আপনাকে নিজের প্রকল্প ফাইলটি হ্যাক করার দরকার নেই। আপনি আপনার প্যাকেজগুলি অবাধে আপডেট করতে পারেন, এটি কিছুই ভাঙ্গবে না।

https://www.nuget.org/packages/NugetRelativeRefs

অথবা আপনি যদি ভিজ্যুয়াল স্টুডিও 2015 আপডেট 3 ব্যবহার করেন তবে আপনি project.jsonএখানে বর্ণিত হিসাবে আপনার প্যাকেজ রেফারেন্সগুলি ফর্মটিতে স্থানান্তর করতে পারেন : https://oren.codes/2016/02/08/project-json- all-thethings


দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে মাইক্রোসফ্ট প্রজেক্ট.জসন থেকে দূরে চলেছে । এছাড়াও, আমি আপনার nuget প্যাকেজ পছন্দ। কিছু সময় আগে আমি নিউগেটরাইফারেন্সহিন্টপ্যাথ রাইরাইট ব্যবহার করেছি যা একই জিনিসটি ভিন্ন ভিন্ন উপায়ে করে
অ্যান্ড্রে বোরিস্কো

2

নুগেট ২.৮.৩ সহ আমার অভিজ্ঞতা আপডেট করা। এটি তুলনামূলকভাবে সহজ ছিল। সমস্ত ডান ক্লিক সমাধান থেকে প্যাকেজ পুনরুদ্ধার সক্ষম ছিল । নিউগেট.কনফিগ সম্পাদনা করেছে এবং এই লাইনগুলি যুক্ত করেছে:

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

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

প্যাকেজ পুনরুদ্ধার সক্ষম করার জন্য এক ধাপে ধাপে প্রক্রিয়াটি এখানে।

http://blogs.4ward.it/enable-nuget-package-restore-in-visual-studio-and-tfs-2012-rc-to-building-windows-8-metro-apps/


2

পছন্দসই ভাগ করা অবস্থানের জন্য কেবল হার্ডলিঙ্ক / প্যাকেজগুলি। তারপরে আপনার প্রকল্পটি অন্য ব্যবহারকারীদের জন্য ভাঙা হবে না, যার কোনও বিশেষ প্যাকেজের অবস্থান নেই।

প্রশাসক এবং ব্যবহার হিসাবে একটি কমান্ড প্রম্পট খুলুন

mklink /prefix link_path Target_file/folder_path

2

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

(Olution সলিউশনডির) ব্যবহার করা সঠিক দিকের এক ধাপ, তবে নিয়মিত আপডেট হওয়া শত শত প্যাকেজ সহ একটি কোড বেসে (ro সলিউশনডির) হাতে কোডিং করা বেশ ক্লান্তিকর হয়ে উঠবে (প্রতিবারের আপডেটের সাথে সাথে, হিন্টপথের সাথে ওভাররাইট করা হবে) একটি নতুন আপেক্ষিক পাথ)। আপডেট-প্যাকেজ -ইনস্টল চালাতে হলে কী হয়।

নিউগেটরফারেন্সহিন্টপ্যাথরাইউইট নামে একটি দুর্দান্ত সমাধান রয়েছে । এটি (the সলিউশনডির) ইনজেকশনটি হিন্টপ্যাথগুলিতে তৈরি করার ঠিক আগে (আসলে সিএসপ্রোজ ফাইলটি পরিবর্তন না করে) স্বয়ংক্রিয় করে। আমি সহজেই এটি স্বয়ংক্রিয় বিল্ড সিস্টেমগুলিতে সংহত হতে পারে imagine


1

সেই জন্য একটি সংক্ষিপ্ত সারাংশ বনাম 2013 পেশাদারী সঙ্গে NuGet সংস্করণ: 2.8.60318.667

আপনি কীভাবে প্যাকেজগুলি। নোট ফোল্ডারের সাথে সম্পর্কিত পথে পরিচালনা করবেন:

<configuration>
  <config>
    <add key="repositoryPath" value="../Dependencies" />
  </config>
</configuration>

উদাহরণস্বরূপ, যদি আপনার সমাধান (.sln ফাইল) সিটিতে থাকে: \ প্রকল্পগুলি \ মাইসোলিউশন, আপনি যখন ন্যুগেট প্যাকেজ পুনরুদ্ধার সক্ষম করবেন, .nuget ফোল্ডারটি এমনভাবে তৈরি করা হবে: সি: jects প্রকল্পসমূহ \ মাইসোলিউশন.নুগেট এবং প্যাকেজগুলি ডাউনলোড হবে এর মতো একটি ডিরেক্টরিতে: সি: \ প্রকল্পগুলি \ মাইসোলিউশন \ নির্ভরতা

দ্রষ্টব্য: কিছু (অজানা) কারণে, প্রতিবার আমি "সংগ্রহশালা" আপডেট করি, পরিবর্তনগুলি কার্যকর হওয়ার জন্য সমাধানটি আমাকে বন্ধ করে আবার খুলতে হবে


নোট করুন যে সমাপনী কনফিগারেশন ট্যাগটিতে একটি স্ল্যাশ নেই missing
মূ


0

যারা প্যাকেটকে তাদের প্যাকেজ ম্যানেজার হিসাবে ব্যবহার করছেন তাদের জন্য আপনার নির্ভরতা ফাইলের জন্য একটি অটো-সিমলিংক বিকল্প রয়েছে:

storage: symlink

বিটিডব্লিউ: পেকেট লিভারেজ নুগেট

তথ্যসূত্র: https : // fspro پروژې. github.io/Paket/d dependferences- file.html

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


0

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

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


-1

এগুলি হ'ল নুগেট ২.১-এর নির্দেশাবলী: http://docs.nuget.org/docs/re कृपया-notes/nuget-2.1

সমাধান স্তরের ফাইলগুলি সম্পাদনা করার দরকার নেই।

ভিজ্যুয়াল স্টুডিও 2013 এবং তিনটি সমাধান ভাগ করে নেওয়ার প্রকল্পগুলির সাথে কাজ করে।

সমাধান স্তরের নুগেট (.nuget ফোল্ডারে প্রতিটি nuget.exe) আপডেট করতে ভুলবেন না।

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