यह सामान्य समस्या है जो मैं आमतौर पर पढ़ता हूं, जो लोग NuGet पैकेज में फ़ाइलों को शामिल करने का प्रयास कर रहे हैं। मैं फ़ाइल को स्वचालित रूप से शामिल होने से रोकने की कोशिश कर रहा हूं।NuGet पैक: डिफ़ॉल्ट रूप से अनदेखा करें
मैं पूर्व-संकलित एमवीसी व्यू टेम्पलेट्स (RazorGenerator.Mvc का उपयोग करके), .less
फ़ाइलों का उपयोग कर रहा हूं, और जावास्क्रिप्ट को आवश्यकतानुसार इन्हें समर्थन देने के लिए बना रहा हूं। विचार यह है कि ये बुनियादी चीजें हैं जो हमारी सभी साइटों में जाती हैं।
डिफ़ॉल्ट रूप से, nuget pack
शामिल किसी भी फाइल कार्रवाई बिल्ड चिह्नित: अपनी परियोजना है, जो किसी भी नव निर्मित देखने के लिए, .less
फ़ाइल, या स्क्रिप्ट होगा में सामग्री। इस व्यवहार को ओवरराइड करने का कोई विकल्प नहीं लगता है। यहां एक संबंधित प्रश्न ने empty <files>
node in the .nuspec
to stop all includes का समाधान प्रस्तुत किया है, लेकिन मैं कुछ फ़ाइलों को शामिल करना चाहता हूं, केवल वही जिन्हें मैं चुनता हूं।
अब, एक कामचलाऊ के रूप में, मैं के माध्यम से जा सकते हैं, सब कुछ स्पष्ट रूप से सेट होने के लिए नहीं सामग्री, तो स्पष्ट रूप से सेटअप जो फाइलें मैं करता हूँ और कॉपी किया जाना नहीं चाहते हैं और जहां मैं उन्हें चाहते हैं (कोई नहीं बजाय का उपयोग) .nuspec
फ़ाइल का उपयोग करने के लिए कॉपी किया गया। हालांकि, यदि कोई अन्य डेवलपर मेरे भविष्य के साथ आता है, और इस चरण को भूल जाता है, तो नई-जोड़े वाली फ़ाइलों को पैकेज में कॉपी किया जाएगा, और उसके बाद अगले प्रोजेक्ट या अपडेट के दौरान गंतव्य प्रोजेक्ट में कॉपी किया जाएगा।
मैं OctoPack, और डिफ़ॉल्ट रूप से कुछ भी नहीं है जैसे ही यह .nuspec
में एक <files>
नोड का पता लगाता है कि सहित इच्छा पाया है, लेकिन मैं और कुछ का उपयोग कर रहा नहीं TeamCity से, और अपने निर्माण सर्वर स्क्रिप्ट को फिर से लिखने के लिए कैसे को समझने के लिए न्यूज पैक के बजाय ऑक्टोपैक का आह्वान करें मुझे एक महान विकल्प के रूप में नहीं मारा जाता है। ऑक्टोपैक में भी सीमाएं हैं; निर्भरताओं को मैन्युअल रूप से सूचीबद्ध किया जाना चाहिए, .nuspec फ़ाइल के प्रतिस्थापन टोकन को कमांड लाइन पर पास किया जाना चाहिए (AssemblyInfo.cs
से पढ़ने के बजाय), और ऐसा लगता है कि उपकरण इस उपयोग के लिए नहीं था - वे यहां तक कि "ऑक्टोपैक केवल उन परियोजनाओं पर स्थापित होना चाहिए जिन्हें आप तैनात करने जा रहे हैं - इसका मतलब है कंसोल एप्लिकेशन प्रोजेक्ट, विंडोज सर्विस प्रोजेक्ट्स, और एएसपी.नेट वेब अनुप्रयोग। यूनिट परीक्षण, कक्षा पुस्तकालय, और अन्य सहायक परियोजनाओं का चयन नहीं किया जाएगा । " (OctoPack Documentation)
अगले विकल्प मैं msbuild
उपयोग कर रहा था बस BeforeBuild
घटना के दौरान सामग्री समूह का सफाया करने की कोशिश की:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Remove="**\*.*" />
<None Include="**\*.*" />
</ItemGroup>
<Message Text="Content files: @(Content)" Importance="High" />
</Target>
संदेश पुष्टि करता है कि सामग्री समूह रिक्त है, लेकिन nuget pack
प्रतीत नहीं होता देखभाल करने के लिए; इसमें अभी भी सभी फाइलें शामिल हैं।
क्या किसी ने मैन्युअल रूप से सबकुछ चिह्नित किए बिना इस तरह के पैकेज को सफलतापूर्वक बनाया है बिल्ड बिल्ड: कोई नहीं और ऑक्टोपैक का उपयोग किए बिना?
"तो यह एक सही समाधान नहीं है, जो '--no-default-content'' जैसा कुछ होगा - एक और सही समाधान आपको इसे नियंत्रित करने के लिए .nuspec फ़ाइल में कुछ लिखने देगा। हर बार 'nuget' पास करने के लिए पैरामीटर याद रखने के काम पर कौन जा रहा है? – binki
निरंतर एकीकरण सर्वर का उपयोग करने वाले किसी को भी याद रखना नहीं है। अब मुझे याद रखना होगा कि यदि मैं एक नई निर्भरता जोड़ता हूं या एक निर्भरता संस्करण बदलता हूं, तो मुझे पैकेज.config से उस डेटा को पढ़ने में सक्षम होने के बजाय मैन्युअल रूप से इसे nuspec में जोड़ना होगा। –