2016-04-17 9 views
6

के साथ क्लास लाइब्रेरी पिछले कुछ दिनों में मैं नई .NET CLI को आजमा रहा हूं और हालांकि यह कंसोल और वेब अनुप्रयोगों को बनाने के लिए काफी सरल है, यह बिल्कुल स्पष्ट नहीं है कि कक्षा पुस्तकालय कैसे बनाया जाए।.NET CLI

मैंने निम्न कार्य किया: सामान्य रूप से, कमांड लाइन पर मैंने का उपयोग project.json फ़ाइल बनाने के लिए किया है। मैंने इस परियोजना में एक साधारण वर्ग को कोड किया है और कुछ भी नहीं।

फिर मैंने .NET CLI के साथ एक कंसोल ऐप बनाया जिसमें पहली बार project.json पर निर्भरता के रूप में शामिल किया गया था और स्क्रीन पर एक संदेश दिखाने के लिए मैंने कक्षा पुस्तकालय में बनाई गई कक्षा का उपयोग किया था।

जब मैंने कंसोल ऐप चलाने की कोशिश की, तो दूसरी परियोजना स्थित थी और .NET CLI ने इसे बनाने का प्रयास किया था। कक्षा पुस्तकालय का निर्माण संदेश के साथ विफल रहा:

प्रोग्राम में एक प्रविष्टि बिंदु के लिए उपयुक्त स्थिर 'मुख्य' विधि नहीं है।

उस स्थिति में यह प्रोजेक्ट को कंसोल ऐप के रूप में पेश कर रहा था और मुख्य प्रविष्टि बिंदु खोजने का प्रयास कर रहा था।

मेरा मानना ​​है कि इस वजह से जब मैं dotnet new कमांड के साथ वर्ग पुस्तकालय बनाया यह project.json उत्पन्न इस प्रकार हुआ:

{ 
    "version": "1.0.0-*", 
    "compilationOptions": { 
    "emitEntryPoint": true 
}, 
    "dependencies": { 
     "Microsoft.NETCore.App": { 
      "type": "platform", 
      "version": "1.0.0-*" 
     } 
    }, 
    "frameworks": { 
     "netcoreapp1.0": {} 
    }  
} 

वहाँ की तलाश में मेरा मानना ​​है कि वहाँ इस के दो कारण हो सकते हैं: उनमें से एक तथ्य कि रनटाइम Microsoft.NETCore.App और दूसरा टीएफएम है।

मैंने टीएफएम को netstandard1.5 में बदलने की कोशिश की लेकिन यह एक ही त्रुटि देकर काम नहीं किया। उस मामले में मेरा मानना ​​है कि यह मुद्दा रनटाइम के साथ है। किसी भी तरह से मेरा मानना ​​है कि Microsoft.NETCore.App पर निर्भर करता है कि हम एक कंसोल ऐप बना रहे हैं, न कि लाइब्रेरी और फिर एक एंट्री पॉइंट आवश्यक है।

तब .NET कोर सीएलआई के साथ कक्षा पुस्तकालय बनाने का सही तरीका कैसा है? वास्तव में रनटाइम मुद्दा है? यदि हां, तो हम इससे कैसे निपट सकते हैं?

+2

क्या आपने 'emitEntryPoint' को गलत पर सेट करने का प्रयास किया है? –

+0

वैकल्पिक रूप से आपने 'dotnet new -t lib' के साथ लाइब्रेरी बनाने का प्रयास किया है। चूंकि [कंसोल प्रकार डिफ़ॉल्ट है।] (Https://github.com/dotnet/cli/tree/rel/1.0।0/src/dotnet/command/dotnet-new) –

+0

सुझाव @ माइकज़ के लिए धन्यवाद, यह वास्तव में काम करता है। इसे 'झूठी' पर सेट करना एक प्रविष्टि बिंदु की आवश्यकता के साथ समस्या हल करता है। मैंने इस 'डॉटनेट न्यू-लिब' की कोशिश की है लेकिन यह काम नहीं करता है। यह बताता है कि सी # के लिए उपलब्ध प्रकार सिर्फ कंसोल हैं। – user1620696

उत्तर

2

यहां दो मुद्दे "emitEntryPoint": true और आपके dependencies अनुभाग हैं।

एक कक्षा पुस्तकालय में प्रवेश बिंदु नहीं होगा (static void Main() विधि) ताकि emitEntryPoint को गलत पर सेट किया जाना चाहिए।

निर्भरता के लिए के रूप में, आप अपने आवश्यक निर्भरता विशेष रूप से

"dependencies" : { 
    "System.Console": "4.0.0-*" 
} 

या NETStandard.Library NuGet पैकेज

"dependencies" : { 
    "NETStandard.Library": "1.5.0-*" 
} 

NETStandard.Library पैकेज लक्षित कर सकते हैं या तो अभी तक तो NuGet से उपलब्ध नहीं है आपको आधिकारिक तौर पर रिलीज़ होने तक माईगेट को लक्षित करने की आवश्यकता होगी। निम्नलिखित को अपने प्रोजेक्ट फ़ोल्डर्स

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <clear /> 
    <add key="AspNetCI" value="https://www.myget.org/F/aspnetcirelease/api/v3/index.json" /> 
    <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" /> 
    </packageSources> 
</configuration>