2012-08-07 10 views
36

मैं यहां कुछ प्रश्नों को बाहर करने जा रहा हूं ... सबसे पहले, NuGet के साथ कुछ डीएलएल से पैकेज बनाना संभव है? कोई दृश्य स्टूडियो प्रोजेक्ट नहीं है, केवल कमांड लाइन और कुछ पूर्व-संकलित डीएलएल फाइलें हैं।lib फ़ोल्डर के बाहर NuGet असेंबली

दूसरा, यह मानते हुए कि संभव है, मैं लगातार "lib फ़ोल्डर के बाहर असेंबली" चेतावनी क्यों प्राप्त करूं? मैंने NuGet पैकेज के अंदर संदर्भों के रूप में खुद को जोड़ने के लिए संबंधित असेंबली प्राप्त करने के बारे में सोचने के बारे में सोचने की हर चीज की कोशिश की है।

मेरे फ़ाइल संरचना इस

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>File1.dll</id> 
    <version>1.0.0</version> 
    <authors>thisguy</authors> 
    <owners>thisguysmom</owners> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>This is some library</description> 
    <releaseNotes>Porting to NuGet</releaseNotes> 
    <copyright>Copyright 2012</copyright> 
    <references> 
     <reference file="File2.dll" />  
     <reference file="File3.dll" /> 
    </references> 
    </metadata> 
</package> 

मुझे लगता है कि चेतावनी प्राप्त की तरह एक .nuspec का उपयोग कर इसे पैक करने के लिए इस

Root 
    - File1.dll 
    - lib 
    - File2.dll 
    - File3.dll 

तरह लग रहा है जब मैं NuGet बताओ। जो मैं पढ़ रहा हूं, उससे मुझे अपनी किसी भी परियोजना में संदर्भ नोड को भी परिभाषित नहीं करना चाहिए, क्योंकि lib फ़ोल्डर आइटम को संदर्भों के रूप में स्वचालित रूप से जोड़ा जाना चाहिए?

क्या कोई भी इस NuGet गड़बड़ को समझता है?

उत्तर

9

किसी भी डीएल जिसे आप संदर्भित करना चाहते हैं वह lib फ़ोल्डर के अंतर्गत होना चाहिए। चेतावनी इसलिए है क्योंकि file1.dll lib के बाहर है और पैकेज स्थापना के दौरान अनदेखा कर दिया जाएगा।

Root 
    - lib 
    - File1.dll 
    - File2.dll 
    - File3.dll 

देखें: अतिरिक्त जानकारी के लिए http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions

मैं इस संरचना का इस्तेमाल किया था (अन्य विशेष फ़ोल्डर "सामग्री" और "उपकरण" कर रहे हैं)।

+19

क्षमा करें, लेकिन क्या lib फ़ोल्डर? मैं इस ट्यूटोरियल का पालन कर रहा हूं (http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package) किसी असेंबली से पैकेज बनाने के लिए और कोई lib फ़ोल्डर्स नहीं दिख रहा है - बस एक spec फ़ाइल बनाने के लिए एक आदेश और फिर एक nupkg फ़ाइल – DevDave

+2

@DevDave, देखें: http://docs.nuget.org/Create/Enforced- पैकेज- रूपांतरण –

0

अलेक्जेंड्रे "lib" फ़ोल्डर का जिक्र कर रहा है जो आपके द्वारा NuGet पैकेज बनाते समय बनाया जाता है। आप किसी भी ज़िप फ़ाइल की तरह .nupkg खोल सकते हैं। वहां, आपको एक lib \ netXX फ़ोल्डर दिखाई देगा जहां एक्सएक्स आपके द्वारा लक्षित .NET फ्रेमवर्क का संस्करण है। तो जब आप अपनी NuGet फ़ाइल पैक कर रहे हों, तो सुनिश्चित करें कि File1.dll lib फ़ोल्डर के अंदर है।

7

आप nuspec फ़ाइल में अंदर टैग नीचे जोड़कर एक और dll के लिए संदर्भ जोड़ सकते हैं

<package> 
    <metadata> 
     ... 
</metadata> 
<files> 
<file src="..\ReferencedFolder\*.*" target="lib\net40\" /> 
</files> 
</package> 
+0

मैंने पाया कि 'src =" ../ xxx ".. । 'काम नहीं किया (भले ही दस्तावेज़ कहते हैं कि यह चाहिए); लेकिन चूंकि 'src'' बेसपाथ 'पैरामीटर के सापेक्ष है, इसलिए आप उन सभी फ़ाइलों की जड़ में' बेसपाथ 'को बदल सकते हैं जिन्हें आप शामिल करना चाहते हैं। –

17

मैं सिर्फ इस समस्या में पड़ गए। अपने .net संस्करण के लिए

root 
    - lib 
    - net40 
     - File1.dll 
     - File2.dll 
     - File3.dll 

net40 या net20 या के रूप में उपयुक्त net45: Nuget एक संरचना है कि तरह लग रहा है उम्मीद कर रही है।

रन

nuget pack yourlibrary.nuspec 

पैकेज पर निर्भर है।

वह डीआईआर थोक को पैक करेगा और इसे nupkg में रखेगा। उस बिंदु पर त्रुटि संदेश गायब हो जाएंगे।

+7

'net20',' net40', 'net45', समर्थित ... की समर्थित सूची कहां है? क्या इन्हें जोड़ते समय एक पुरानी परियोजना में असेंबली को शामिल करने से रोकें (जैसा कि फाइलों को 'lib' के तहत डालने का विरोध किया गया है)? पैकेज का निर्माण करते समय, क्या यह अतिरिक्त संरचना आम तौर पर मैन्युअल रूप से बनाए रखी जाती है, या असेंबली के .NET संस्करण का पता लगाया जा सकता है और उपयोग किया जा सकता है? – brianary

+2

@brianary मुझे विश्वास है कि सूची यहां है: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks और यह लिंक उपर्युक्त फ़ोल्डर संरचना को पूरी तरह से दस्तावेज करता है: https: // docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks –

+0

यहां net40 फ्रेमवर्क दिखाता है जिस पर फ़ाइल * .dll बनाया गया है ?? या प्रोजेक्ट का ढांचा जहां आप इन/फ़ाइल (.dd) dlls का उपयोग/संदर्भ करने जा रहे हैं ?? – gmuhammad

9

NuGet के संस्करण के साथ जो इस पोस्ट के रूप में चालू है (और मैं बाद के संस्करणों को भी मानता हूं), आप पैकेज बनाने के लिए .nuspec फ़ाइल के साथ .csproj फ़ाइल का उपयोग कर सकते हैं। हमने जो किया वह एक .nuspec फ़ाइल (nuget spec का उपयोग करके और फिर इसे अनुकूलित करना) बना था और इसे प्रोजेक्ट में शामिल किया गया था।

अनुकूलित के साथ।nuspec फ़ाइल, हम आदेश का प्रयोग किया:

nuget pack sample.csproj -IncludeReferencedProjects 

उस समय यह .nupkg बनाया गया है और मुद्दों का उत्सर्जन नहीं किया। .nupkg फ़ाइल सामान्य आउटपुट फ़ोल्डर में दिखाई दे रही है (मेरे डिफ़ॉल्ट मामले में, bin \ debug)।

+1

यह एक खराब जवाब है। वीएस 2015 के साथ nuget 3.3 और आपके सटीक कमांड का उपयोग करके, मुझे अभी भी यह त्रुटि मिलती है। – Mario

+0

यह मेरे लिए काम किया। धन्यवाद! –

0

वे आपके bin \ debug या bin \ release फ़ोल्डर में .NET में शामिल किए जाकर "lib" फ़ोल्डर में आते हैं। तो आपको बाहरी DLLs पर स्थानीय प्रतिलिपि बनाने के लिए प्रोजेक्ट संकलित करने की आवश्यकता है ताकि इसमें संकलन पर बिन फ़ोल्डर में शामिल हो।

0

मैंने प्रोफेसर वॉन लेमोन्गर्ग 'समाधान का उपयोग किया, और मेरे लिए एक अच्छा समाधान था। (Myproject.csproj, myproject.nuspec)

  1. कल्पना फ़ाइल परियोजना में (राइट-क्लिक-> परियोजना में शामिल के साथ) शामिल करें
  2. फ़ाइल विशिष्ट जानकारी के अनुसार अपनी परियोजना की उसी फ़ाइल नाम दें
  3. : महत्वपूर्ण

यह पूरी तरह से विजुअल स्टूडियो 2012 में काम करता है।

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