वहाँ समाधान के लिए NuGet पैकेज स्रोत सेटिंग्स बनाने के लिए एक रास्ता है?


84

क्या किसी को विजुअल स्टूडियो बनाने के तरीके के बारे में पता है कि सभी समाधानों के बजाय प्रति समाधान में NuGet पैकेज स्रोत कॉन्फ़िगरेशन लागू होता है? मुझे समस्याएँ आती रहती हैं क्योंकि मैं कई परियोजनाओं पर काम करता हूँ जिनमें से प्रत्येक की अपनी निजी NuGet रिपॉजिटरी है। यह एक दर्द है *** यह याद रखने के लिए कि कौन सा NuGet रेपो किस प्रोजेक्ट से संबंधित है और वापस जाकर सही प्रोजेक्ट को सही तरीके से लागू करना है।


पक्का नहीं आपका क्या मतलब है। आप केवल सभी समाधानों के लिए नगेट पैकेज स्रोतों को कॉन्फ़िगर कर सकते हैं। आपकी पैकेज.कॉन्फ़िग फ़ाइल में आपकी परियोजना की ज़रूरतों को पूरा करने वाले नगेट के संस्करण होंगे। स्वचालित रूप से अपडेट न करें। क्या आप एक उदाहरण दे सकते हैं कि आप क्या करना चाहते हैं।
श्यामल देसाई

1
@ श्यामल मैं नूगेट पैकेज स्रोतों के बारे में बात कर रहा था, न कि खुद पैकेजों के बारे में ... मुझे लगा कि यह कैसे करना है।
बेनालास्टर

जवाबों:


138

TLDR: हाँ

NuGet आपके Windows उपयोगकर्ता प्रोफ़ाइल के स्तर पर NuGet.config से शुरू होने वाले पैकेज स्रोतों का एक पदानुक्रमित अनुप्रयोग का उपयोग करता है और फिर फ़ाइल समाधान के मूल में शुरू होने वाले अधिक से अधिक दानेदार कॉन्फ़िगरेशन को लागू करता है जिसमें आपका समाधान होता है, अंत में आपकी निर्देशिका युक्त निर्देशिका के साथ समाप्त होता है। समाधान फ़ाइल।

तो यहाँ मैं क्या पता लगाने में कामयाब रहा हूँ - इस दस्तावेज़ की ओर इशारा करते हुए एक मददगार ट्वीटर के सौजन्य से:

https://docs.nuget.org/consume/nuget-config-file

जब आप Visual Studio के Tools > NuGet Package Manager > Package Manager Settings: Package Sourcesविकल्प में NuGet पैकेज स्रोतों को संपादित करते हैं , तो यह आपकी %APPDATA%\NuGetनिर्देशिका में पाई गई NuGet.config फ़ाइल में डिफ़ॉल्ट रूप से उन परिवर्तनों को लागू करता है । प्रति-समाधान (या समाधान के समूह) के आधार पर इन सेटिंग्स को ओवरराइड करने के लिए, आपको अपने समाधान या समाधान के मार्ग के साथ कहीं न कहीं रणनीतिक रूप से रखा गया NuGet.config फ़ाइल जोड़ना होगा।

सभी स्पष्ट हो जाएगा यदि आप NuGet दस्तावेज़ पढ़ते हैं, तो मैं नीचे दिए गए समाधान को जल्दी से एक एकल स्टूडियो स्टूडियो के लिए कॉन्फ़िगरेशन निर्दिष्ट करने की अनुमति देगा:

  1. % APPDATA% \ NuGet पर नेविगेट करें और NuGet.config की एक प्रति पकड़ो
  2. अपने समाधान की जड़ में एक प्रति डंप करें - यानी जहां Application.sln रहता है।
  3. अपने उपयोगकर्ता प्रोफ़ाइल पर लागू किए गए डिफॉल्ट को कॉपी को संपादित करके कॉपी करें जिसमें केवल NuGet पैकेज स्रोत हैं जो इस समाधान के लिए प्रासंगिक हैं - उदाहरण के लिए, निजी NuGet स्रोत जिसमें इस समाधान के लिए स्वामित्व पैकेज हैं, लेकिन अन्य परियोजनाओं पर लागू नहीं किया जाना चाहिए - उदाहरण के लिए:
<?xml version="1.0" encoding="utf-8"?>
<configuration>

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

  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>

  <packageSources>

    <!-- Ditch all the Global NuGet package sources we only want a 
         single private NuGet repo for this project -->
    <clear />

    <!-- Add the private NuGet package source for this solution -->
    <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />

  </packageSources>

  <disabledPackageSources>

    <!-- Add any package sources to ignore here using the same keys as 
         defined in the packageSources list above-->

    <!--<add key="nuget.org" value="true" />-->

    <add key="Microsoft and .NET" value="true" />

  </disabledPackageSources>

</configuration>

यदि आप कई समाधानों पर लागू करने के लिए कॉन्फ़िगरेशन चाहते हैं, तो सुनिश्चित करें कि आपके समाधान फ़ोल्डर सभी एक सामान्य निर्देशिका में निहित हैं और उन सामान्य निर्देशिका में उन समाधानों के लिए प्रासंगिक पैकेज स्रोतों के लिए NuGet.config डालते हैं, यह सुनिश्चित करते हैं कि परियोजनाओं के लिए कोई भी समाधान फ़ोल्डर जो उत्पन्न होते हैं 'टी का उपयोग करने के लिए इन पैकेज स्रोतों इस आम फ़ोल्डर में निहित नहीं हैं।


31
धन्यवाद बेनलास्टर। यदि आप इसे सरल रखना चाहते हैं, तो आपके पास बस एक फ़ाइल हो सकती है:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
रुबेनिज्म

13
इन परिवर्तनों को प्रभावी करने के लिए आपको Visual Studio को बंद और पुनः खोलना पड़ सकता है। मैंने अपना समाधान बंद करने की कोशिश की और यह पर्याप्त नहीं था।
जेस

1
अच्छा जवाब, बेहतर होगा यदि उदाहरण कॉन्फिगरेशन को केवल जरूरत के हिसाब से काट दिया जाए। इसके अलावा, मैंने VS2015 और @Jess की टिप्पणी के साथ कोई और लागू करने की कोशिश नहीं की, समाधान को फिर से खोलते हुए मेरे लिए नया पैकेज स्रोत उठाया।
डैनियो

6

मैं BenAlabaster द्वारा प्रदान किए गए उत्कृष्ट उत्तर में जोड़ना चाहता हूं । मैं कुछ हद तक विपरीत समस्या थी:

कंपनी ने वैश्विक रूप से डिफ़ॉल्ट रूप से सभी समाधानों पर उपयोग के लिए अपने कस्टम निजी नगेट फ़ीड को कॉन्फ़िगर किया था, और मैं सार्वजनिक नगेट फ़ीड का उपयोग करके "प्रोटोटाइप" ऐप बनाना चाहता था ।

इसके साथ (उस समाधान की निर्देशिका में), सार्वजनिक नगेट फ़ीड केवल मेरे विशिष्ट समाधान के लिए उपलब्ध है, जबकि कंपनी के फ़ीड को अन्य सभी समाधानों के लिए डिफ़ॉल्ट रखा गया है:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
    <!-- Make sure we use the public nuget -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <disabledPackageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
  </disabledPackageSources>
</configuration>

कुंजी सभी अपवर्ड विकलांग फ़ीड को साफ़ करने के लिए थी , क्योंकि उन्होंने जानबूझकर सार्वजनिक फ़ीड को उनके NuGet.config में% APPDATA% \ NuGet में अक्षम कर दिया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.