.Net 4.0 से 4.5 तक समाधान का पुन: निर्धारण - नुगेट पैकेज को कैसे पुन: प्राप्त करें?


205

मैंने एक समाधान माइग्रेट किया है जो वर्तमान में VS2010 से VS2012 में .NET 4.0 को लक्षित कर रहा है और अब मैं इसे .Net 4.5 पर फिर से लक्षित करना चाहूंगा।

क्या मुझे यकीन नहीं है कि NuGet पैकेज है। उदाहरण के लिए EF5, जिसे मैंने VS2010 में EF4 से अपडेट किया था, वास्तव में EF 4.4 निकला, जैसा कि आप यहाँ देख सकते हैं:

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

मैं निम्नलिखित में भी देख सकता हूँ। परियोजना के लिए पैकेज:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

तो मेरा सवाल है:

उन सभी NuGet पैकेजों को फिर से लक्षित करने के लिए सबसे अच्छा अभ्यास क्या है जो वर्तमान में .NET 4.5 को लक्षित करने के लिए .NET 4.5 को लक्षित करने के लिए निर्धारित हैं?


जवाबों:


266

NuGet 2.1 एक सुविधा प्रदान करता है जो इसे बहुत सरल बनाता है: बस update-package -reinstall -ignoreDependenciesपैकेज प्रबंधक कंसोल से करें।

NuGet 2.0 आपके एप्लिकेशन को बहुत अच्छी तरह से पुन: लक्ष्यित नहीं करता है। अपने संकुल के लक्ष्य ढाँचे को बदलने के लिए, आपको संकुल को अनइंस्टॉल करना होगा और पुन: स्थापित करना होगा (आपके द्वारा स्थापित पैकेजों पर ध्यान दें ताकि आप उनमें से प्रत्येक को पुनः स्थापित कर सकें)।

पैकेज को अनइंस्टॉल और रीइंस्टॉल करना चाहिए:

  • पैकेज स्थापित करते समय, हम आपकी परियोजना की लक्ष्य रूपरेखा निर्धारित करते हैं
  • हम तब पैकेज सामग्री के साथ मेल खाते हैं, उपयुक्त \ lib \ folder (और \ content \ folder) को खोजते हैं
  • असेंबली संदर्भ हिंट पथ के साथ जोड़े जाते हैं जो पैकेज के \ lib \ फ़ोल्डर को इंगित करते हैं, दाएं सबफ़ोल्डर (उदाहरण के लिए \ lib \ net40) के साथ
  • सामग्री फ़ाइलों को सही सबफ़ोल्डर (उदाहरण के लिए \ content \ net40) के साथ संकुल \ content \ फ़ोल्डर से कॉपी किया जाता है
  • हम package.config फ़ाइल के भीतर पैकेज को स्थापित करने के लिए उपयोग किए जाने वाले targetFramework को रिकॉर्ड करते हैं
  • आपके द्वारा अपनी परियोजना के लक्ष्य ढांचे को बदलने के बाद, हिंट पाथ अभी भी net40 को इंगित करता है
  • जब आप पैकेजों की स्थापना रद्द करते हैं, तो हम targetFramework की जांच करते हैं जो पैकेजों में दर्ज किया गया था। यह देखने के लिए कि आपके प्रोजेक्ट से हटाने के लिए लक्ष्य फ्रेमवर्क के लिबास / सामग्री क्या है।
  • जब आप पैकेज को फिर से स्थापित करते हैं, तो हम आपके अपडेट किए गए लक्ष्य ढांचे और संदर्भ का पता लगाते हैं / सही लिबास / सामग्री की प्रतिलिपि बनाते हैं

एक ASP.NET MVC 4 परियोजना के साथ वीएस 2012 का उपयोग करना और 4.0 से 4.5 तक .NET फ्रेमवर्क को फिर से लक्षित करने के बाद, मैंने update-package -reinstallपैकेज मैनेजर कंसोल में निष्पादित किया। सभी पैकेजों को अनइंस्टॉल और अपडेट किया जाने लगा और अचानक विंडोज 8 को फिर से शुरू किया गया और जब यह वापस मिला तो यह बताया कि "आपका पीसी एक समस्या में चला गया और फिर से शुरू हो गया। क्या आप Microsoft को जानकारी भेजना चाहते हैं?" :( डराते हुए ... वैसे, यह NuGet संस्करण है जिसे मैंने अभी स्थापित किया 2.2.40116.9051है: यहाँ एक समस्या खोली: nuget.codeplex.com/workitem/3049
लेनियल मैककैफ़री

12
-reinstall विकल्पों ने कभी भी मेरे लिए काम नहीं किया है। यह या तो गलत क्रम में निकालता है और "X को हटा नहीं सकता क्योंकि Y इस पर निर्भर करता है" या कभी-कभी सिर्फ पेक पैकेज नहीं पढ़ता है। पिछली बार मैंने इसे आज़माया था, इसने EntityFramework को हटा दिया और फिर इसे फिर कभी नहीं जोड़ा।
कोडिंगविट्स्पाइक

4
अद्यतन-पैकेज-स्थापना मेरे लिए कोई समाधान नहीं था। इसने बहुत सारे पैकेजों को भी अपडेट किया , बजाय उन्हें उन संस्करणों पर छोड़ने के जिनके हमने उपयोग किया था और जिनके खिलाफ परीक्षण किया था। उदाहरण के लिए, Ninject को v3 तक ले जाया गया, और यह एक ब्रेकिंग वर्जन परिवर्तन है।
स्टीव ओवेन

13
अपडेट-पृष्ठ-स्थापना रद्द करने का भी प्रयास न करें। यह चीज़ एक ऐसी गड़बड़ी थी जब यह मेरी स्थानीय मशीन पर चलती थी कि मुझे नुगेट पैकेज मैनेजर को आगे जाने से रोकना था। इसने मेरे jQuery 1.10 संस्करण को हटा दिया और इसे किसी कारण से 1.4.4 के साथ बदल दिया। बस इसे मैन्युअल रूप से करें और अपने आप को परेशानी से बचाएं।
जस्टिन मिचेल्स 17

2
गड़बड़ करने के लिए सहमत हैं, और इस पोस्ट से दो साल भी है। इसमें कुछ नगेट्स के निचले संस्करण पाए गए, और बहुत सारे संदर्भों को खराब कर दिया। और वह लगभग दो घंटे के अपडेट के बाद था (2014 की शुरुआत से एक उच्च अंत वर्कस्टेशन पर)। समाधान में 20 परियोजनाएं।
सिस्तेद

42

जिन लोगों को update-package -reinstall <packagename>कमांड की समस्या थी , वे इसे -ignoreDependenciesध्वज के साथ चलाने पर विचार करें , जैसे:

update-package -reinstall <packagename> -ignoreDependencies

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

अधिक जानकारी यहाँ


धन्यवाद, जो वास्तव में बहुत परेशानी से बचाता है। Nuget को 10 या इतनी निर्भरता को पुन: स्थापित करने की कोशिश करते हुए देखना जो एंटरप्राइजलाइंस 30+ परियोजनाओं पर बनाता है, एक दिन की नौकरी की ओर बढ़ रहा था। यह मिनटों के लिए इसे नीचे लाता है।
डेविड कीवेनी

जैसा कि दूसरों ने उल्लेख किया है, सब कुछ टूटने की संभावना है।
ग्लेनो

9
पैकेज मैनेजर कंसोल के नीचे चलने पर आप इसे थोड़ा बदलकर पूरे समाधान के लिए इसे स्वचालित कर सकते हैं:get-package | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies }
कालेब पेडरसन

2
@KalebPederson मेरे अनुभव में कमांड समाधान विस्तृत है?

1
@ BjörnAliGöransson - क्षमा करें यदि मैं पर्याप्त स्पष्ट नहीं था। उत्तर समाधान के पार एकल पैकेज को अद्यतन करने का एक तरीका प्रदान करता है। मेरी स्क्रिप्ट समाधान में प्रत्येक NuGet पैकेज से गुजरेगी और समाधान के दौरान उसे पुन: पेश करेगी। उत्तर किसी एक परियोजना के लिए एकदम सही है, लेकिन मैंने जो स्क्रिप्ट प्रदान की है वह बेहतर हो सकती है यदि आपके पास बहुत सारे पैकेज हैं जिन्हें फिर से तैयार करने की आवश्यकता है।
कालेब पेडरसन

22

असफल उत्तर को स्वीकार करने की कोशिश करने के बाद मैं एक कम जोखिम वाले आदेश का सुझाव देना चाहूंगा:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

अधिक जानकारी के लिए: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html


1
लिंक किए गए प्रलेखन के अनुसार -reinstallकेवल एक ही संस्करण स्थापित होगा, इसलिए उपयोग करने के लिए कोई लाभ नहीं देखें -safe। क्या मैं कुछ भूल रहा हूँ?
कालेब पेडरसन

4

जब तक संकुल समाधान को पुनः स्थापित करने का प्रयास किया जाता है, मुझे एक निर्भरता त्रुटि ( -ignoreDependenciesझंडे का उपयोग करने के बावजूद ) का सामना करना पड़ा , और हर परियोजना के लिए सभी संकुल .config फाइलें हटा दी गई थीं। VS2013 में, ऐसा लगता है कि packages.config उन्नत बनाया निर्भरता / संदर्भ फिर से संलग्न परियोजना के लिए कर रहे हैं डिस्क और फिर से जोड़ा प्लावित वापस सब जब तक नहीं मिलता है।

मेरे मामले में क्या काम किया जोड़कर प्रत्येक परियोजना एक-पर-एक समय के उन्नयन के लिए था -ProjectName ProjectName के update-packageआदेश। इस मामले में प्रत्येक प्रोजेक्ट के अपग्रेड होने पर पैकेज.कॉन्फिग को अपडेट किया जाता है।

बहुत बड़े समाधानों के लिए व्यावहारिक नहीं हो सकता है, लेकिन यह संभव है कि अभी भी यथासंभव अधिक से अधिक परियोजनाओं के लिए स्वचालित अपग्रेड का लाभ उठाएं और विफलता पर हटाए गए आपके समाधान में हर पैकेज के बिना समस्याग्रस्त लोगों को अलग करें ।


3
मैं उसी मुद्दे में भाग गया। UpdatePackage -Reinstallकुछ प्रोजेक्ट्स के लिए package.config और प्रोजेक्ट रेफरेंस को डिलीट कर दिया (विशेष रूप से वे जिनके फेक असेंबली जेनरेट किए गए थे)। हमने इस परियोजना के लिए सभी परिवर्तनों को पूर्ववत करने और चलाने के द्वारा चारों ओर काम किया:Update-Package -reinstall -ProjectName "PROJECTNAME" -IgnoreDependencies
एमएससी

1

मैक 2019 के लिए विज़ुअल स्टूडियो के साथ, मेनू में संकुल फ़ोल्डर को राइट-क्लिक करने से 'रिटारगेट' विकल्प दिखाई देता है। इसने उस परियोजना के सभी पैकेजों के लिए रिटारगेट समस्या को हल कर दिया, जिसे रिटारगेटिंग की आवश्यकता थी। ऐसा लगता है कि मैक के लिए विज़ुअल स्टूडियो में टूल मेनू के तहत कोई NuGet पैकेज मैनेजर नहीं था (कम से कम मेरा), इसलिए मैं पैकेज मैनेजर कंसोल लॉन्च नहीं कर सका।

पैकेज राइट-क्लिक मेनू के तहत मेनू का विकल्प

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