2012-02-01 16 views
14

क्या मौजूदा फ़ाइलों को ओवरराइट करने के लिए nuGet संकुल को मजबूर करना संभव है? मुझे 3 समान परियोजनाओं में पैच (फाइलें, डीएलएल, संसाधन) लगाने का एक अच्छा तरीका चाहिए और इसके माध्यम से यह एक अच्छा समाधान हो सकता है।nuget फ़ाइलों को ओवरराइट करें

उत्तर

12

यह powershell और एक पैकेज निर्भरता के साथ पूरा किया जा सकता है ...

मैं एक NuGet पैकेज है कि मैं ASP.NET MVC के लिए बनाने के लिए यह सभी फ़ाइलों है कि मैं मानक MVC परियोजना में जोड़ना चाहते हैं है है (डिस्प्ले टेम्पलेट्स, संपादक टेम्पलेट, एक्सटेंशन, बेसकंट्रोलर, आदि)। मान लें कि इसे "कंपनी। वेबएमवीसी" कहा जाता है

मैंने "Company.WebMvc-Prep" नामक एक और NuGet पैकेज बनाया है जिसमें एक install.ps1 स्क्रिप्ट है जो मानक एमवीसी प्रोजेक्ट से कुछ भी नहीं चाहता है। यहाँ मौजूदा स्क्रिप्ट को हटाने के लिए एक कोड उदाहरण फ़ाइलें है ...

param($installPath, $toolsPath, $package, $project) 

#Remove Script Files 

$scripts = $project.ProjectItems | Where-Object { $_.Name -eq "Scripts" } 

if ($scripts) { 

    $scripts.ProjectItems | ForEach-Object { $_.Delete() } 

} 

मैं तो "Company.WebMvc-प्रेप" "Company.WebMvc" का एक निर्भरता बनाते हैं। क्यूं कर? क्योंकि NuGet सामग्री फ़ोल्डर से फ़ाइलों को जोड़ने के बाद Install.ps1 (सामान्यतः) चलाया जाता है। मुझे पहले फ़ाइलों को हटाने के लिए इसकी आवश्यकता है और फिर नए जोड़ें। तो जब आप फोन ...

स्थापित-पैकेज Company.WebMvc

Company.WebMvc-प्रेप पहले स्थापित किया गया है, क्योंकि यह एक निर्भरता (Install.ps1 चलता है)

फिर Company.WebMvc स्थापित है जो आपकी सामग्री जोड़ता है।

लंबा और छोटा यह है ... आप अपने प्रोजेक्ट पर एक NuGet पैकेज के माध्यम से मौजूदा सामग्री को ओवरराइट कर सकते हैं।

पीएस याद रखें कि आप NuGet पैकेज कोड बनाम प्रोजेक्ट विशिष्ट कोड को अलग करने के लिए आंशिक कक्षाएं भी कर सकते हैं।

+0

इसके लिए बहुत धन्यवाद। यह वही है जो मैं खोज रहा था।निर्भरता मार्ग के बारे में सोचा नहीं था। यह यह भी सुनिश्चित करता है कि मैं स्पष्ट रूप से बताता हूं कि कौन सी फाइलों को हटाने और अद्यतन करने की आवश्यकता है जो त्रुटि से कम प्रवण है। – keeney

+0

मैंने इस तरह के समाधान की कोशिश की, हालांकि मेरे मामले में, हर बार पैकेज का एक नया संस्करण स्थापित होता है, मैं पुरानी फाइलों को हटाना चाहता हूं और नई फाइलों को जगह में रखना चाहता हूं। यह मुझे मुख्य पैकेज अद्यतन होने पर हर बार संस्करण प्रेप पैकेज को अपडेट करने की आवश्यकता है ... मैं सोच रहा था कि क्या मैं इससे बच सकता हूं। – rekna

5

सामग्री फ़ाइलों को ओवरराइट करना आज समर्थित नहीं है।

+0

कोई विचार अगर/कब? हम किसी साझा (तृतीय पक्ष) कॉन्फ़िगरेशन के वितरण/सिंक के साथ सहायता करने के लिए nuget का उपयोग करना चाहते हैं, जिस पर हम निर्भर करते हैं। अगर में ऐसी विशेषता थी, तो इस तरह की ओवरराइट = "सत्य", या कुछ इसी तरह की विशेषता थी। इस तरह हम विशेष हो सकते हैं कि हम किस फाइल को ओवरराइट करने की अनुमति देते हैं (डिफ़ॉल्ट व्यवहार अब जैसा है।) यदि इसके लिए पहले से ही एक कोडप्लेक्स मुद्दा है तो मैंने इसे याद किया है। –

+0

यदि आपको कोई – davidfowl

+1

नहीं जोड़ना चाहिए http://nuget.codeplex.com/workitem/278 - vNext (2.3) के लिए स्लेटेड प्रतीत होता है :) –

4

डेविड फाउलर के रूप में इस चर्चा http://nuget.codeplex.com/discussions/252305 आप एक अस्थायी फ़ोल्डर में आपकी फ़ाइलों को तैनात है और फिर PowerShell स्क्रिप्ट का उपयोग करके मूल स्थान पर उन्हें ओवरराइट कर सकते में सुझाव देते हैं।

1

हालांकि आप स्पष्ट रूप से पैकेज के सभी इंस्टॉलेशन (अन्य उत्तरों के अनुसार) के लिए इसे निर्दिष्ट नहीं कर सकते हैं, लेकिन वास्तव में इसे एक ही इंस्टॉल के लिए निर्दिष्ट करना संभव है। पैकेज को इंस्टॉल करें:

Install-Package com.company.mypackage -FileConflictAction Overwrite 

यह स्वचालित रूप से इंस्टॉल प्रक्रिया के दौरान होने वाली सभी फ़ाइलों को ओवरराइट कर देगा।

+0

विचार के लिए धन्यवाद, लेकिन यह मेरे लिए काम नहीं करता है। [आधिकारिक डॉक्टर] के अनुसार (https://docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package) -फाइलकोनफ्लिक्टेशन प्रोजेक्ट में संदर्भित फ़ाइलों पर लागू किया जाएगा। दुर्भाग्य से यह मेरा मामला नहीं है। –

संबंधित मुद्दे