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


83

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

मेरा हेडर चार फाइलों में इस तरह दिखता है, जिसमें मेरी मुख्य कोर फाइल भी शामिल है:

public shell()
{
InitializeComponent(); 
}

UI के साथ काम करने वाली .cs फ़ाइलों का हेडर क्षेत्र (और लगता है कि यह नया विरोध पैदा कर रहा है):

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Data.SqlServerCe;
using System.Diagnostics;
using System.Threading;
using System.Collections.Specialized;
using System.Net;
using System.Runtime.InteropServices;
using watin = WatiN.Core;
using WatiN.Core.Native.InternetExplorer;
using System.Web; 


namespace WindowsFormsApplication1
{

    public partial class shell : Form
    {

अब जब मैं अपने एप्लिकेशन को डीबग / पूर्वावलोकन करने का प्रयास करता हूं (BTW यह एक विंडोज एप्लीकेशन है विजुअल स्टूडियो 2010 एक्सप्रेस के भीतर) मुझे यह त्रुटि संदेश मिलता है:

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

मैंने एप्लिकेशन-> स्टार्टअप ऑब्जेक्ट में एप्लिकेशन गुणों को देखा, लेकिन यह मुझे कोई विकल्प नहीं देता है। मैं .cs फ़ाइल पर शुरू करने के लिए आवेदन को कैसे सूचित कर सकता हूं जिसमें मेरा प्रारंभकॉम्पैक्ट () है; कमांड?

  • मैं एक समाधान के बिना अब तक चारों ओर देखा है।
  • प्रत्येक .cs फ़ाइल के गुण 'संकलन' पर सेट हैं।
  • मैं अपने समाधान एक्सप्लोरर में एक App.xaml फ़ाइल नहीं देखता, लेकिन मुझे एक app.config फ़ाइल दिखाई देती है।

मैं अभी भी बहुत नया हूँ और यह सी # कोड के साथ एक आयोजन विधि पर मेरा पहला प्रयास है।


12
क्या आपके पास एक मुख्य विधि है ??
बोबेक

ईमानदार होने के लिए मुझे अपने कोड में कहीं भी मेन नामक विधि नहीं दिखती है। मैं इस परियोजना पर कुछ महीनों से काम कर रहा हूं।
atwellpub

1
आपको mainसही हस्ताक्षर के साथ एक स्थिर विधि की आवश्यकता है । यह है कि संकलक जानता है कि आपके कार्यक्रम को कैसे शुरू किया जाए।
डेविड हेफर्नन

5
अपनी परियोजना के लिए कुछ इस तरह जोड़ने की कोशिश[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
पौंड

1
@ एलबी: उत्तर के रूप में बनाएं ताकि वह इसे स्वीकार कर सके।
जोशुआ

जवाबों:


129

मैं इस मुद्दे को भी देख रहा था, और मेरे मामले में समाधान बहुत आसान था। मैंने समाधान के लिए एक नया खाली प्रोजेक्ट जोड़ा। नए जोड़े गए प्रोजेक्ट स्वचालित रूप से कंसोल एप्लिकेशन के रूप में सेट हो जाते हैं। लेकिन चूंकि जोड़ा गया प्रोजेक्ट एक 'खाली' प्रोजेक्ट था, इसलिए उस नए प्रोजेक्ट में कोई Program.cs मौजूद नहीं था। (जैसा सोचा था)

मुझे केवल इतना करने की ज़रूरत थी कि परियोजना के गुणधर्मों को वर्ग पुस्तकालय में बदल दिया जाए


एक समाधान का थोड़ा ओवरकिल, मुझे लगता है। @ Eyossi के समाधान का पालन करना बहुत आसान होगा।
तिमवागमन

लेकिन क्या आप एक कंसोल एप्लीकेशन या एक क्लास लाइब्रेरी चाहते थे? किसी त्रुटि को ठीक करने के लिए केवल आवेदन के प्रकार को न बदलें; जानते हैं कि त्रुटि आपको क्या बता रही है। कंसोल एप्लिकेशन static void main()को कोड निष्पादित करने के लिए निर्धारित करने के लिए एक प्रवेश बिंदु ( ) की आवश्यकता होती है ; क्लास लाइब्रेरीज़ नहीं - उन्हें अन्य लाइब्रेरीज़ द्वारा बुलाया जाता है जो पहले से ही निष्पादित हो रही हैं।
काइलमिट

यह @pixaloop जो सुझाव देता है वह ओवरकिल संस्करण है। इस उत्तर को पढ़ने के बाद, मुझे याद आया कि खाली प्रोजेक्ट को जोड़ने पर आउटपुट कंसोल को डिफॉल्ट करता है। इसलिए मैंने बस जाकर इसे बदल दिया। एक उत्तर के रूप में पोस्ट करना चाहता था (जैसा कि यह बहुत सरल है), लेकिन देखा कि किसी और ने पहले से ही किया था।
अनन्तवुल्फ

धन्यवाद दोस्त। वह आखिरी जगह होती जिसे मैंने देखा होता!
ईगलीन 22

ओवरकिल बिल्कुल नहीं। यह मेरी स्थिति में सटीक मुद्दा था। कंपाइलर mainमेरे दो अन्य प्रोजेक्ट्स में तलाश कर रहा था जो स्टार्टअप प्रोजेक्ट की तरह कंसोल एप्लीकेशन थे । अपनी प्रॉपर्टी स्क्रीन में क्लास लाइब्रेरी में उन दो "असिस्टिंग" प्रोजेक्ट्स को बदलते हुए इसे तुरंत ठीक कर दिया।
Ctrl S

81

प्रोजेक्ट के तहत आउटपुट टाइप को बदलें> गुण "क्लास लाइब्रेरी" के। डिफ़ॉल्ट रूप से, यह सेटिंग "कंसोल एप्लिकेशन" पर सेट की गई हो सकती है।


1
यह वही है जो मैंने किया था, सही काम करता है। यदि आपने 'खाली' प्रोजेक्ट जोड़ा है, तो यह कंसोल को डिफॉल्ट करता है।
अनन्तवुल्फ

21

इस विधि को एक कक्षा में जोड़ने का प्रयास करें और देखें कि क्या आपको अभी भी त्रुटि मिलती है:

[STAThread]
static void Main()
{
}

13

मेरे पास यह त्रुटि थी और इस समाधान का उपयोग करके इसे हल किया।

  1. प्रोजेक्ट पर राइट क्लिक करें
  2. "गुण" चुनें
  3. "आउटपुट प्रकार" को "क्लास लाइब्रेरी" पर सेट करें।

हाँ, लेकिन आपको क्लास लाइब्रेरी को डीबग करने के लिए किसी अन्य प्रोजेक्ट की आवश्यकता है। उद्देश्य को पराजित करता है
Fandango68

मेरे लिए काम किया है, क्योंकि मैं केवल एक उपयोगिता परियोजना पर यह त्रुटि प्राप्त कर रहा था, न कि स्टार्टअप परियोजना
जोशुआ स्वैन

11

यदि आपके पास कोई फ़ाइल नहीं है Program.cs, तो बस एक नया वर्ग जोड़ें और उसे नाम दें Program.cs

फिर इस कोड को पेस्ट करें:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace Sales {
     static class Program {

         /// <summary>
         /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main() {
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());
         }
     }

 }

9
  1. App.xaml का चयन करें और इसके गुणों को प्रदर्शित करें। सेट कार्रवाई बिल्ड को ApplicationDefinition
  2. App.xaml और इसकी संबंधित * .cs फ़ाइल को * .csproj फ़ाइल की मूल निर्देशिका में रखा जाना चाहिए, अर्थात "स्रोत" फ़ोल्डर में नहीं।

1
यह मेरे लिए मामला है। मैंने ctrl + c प्रोजेक्ट में एक App.xml कॉपी किया और बिल्ड एक्शन "पेज" पर सेट किया गया।
जैकी चेंग

7

यदि आपके पास एक मुख्य विधि है, लेकिन फिर भी यह त्रुटि मिलती है, तो सुनिश्चित करें कि मुख्य विधि वाली फ़ाइल में "कंपाइल" के लिए "बिल्ड एक्शन" सेट है और "कॉपी टू ouput डायरेक्टरी" को "कॉपी न करें" पर सेट करें।


धन्यवाद! शायद घंटे के एक और जोड़े में, मुझे एहसास होगा कि मैं एक वाक्यविन्यास त्रुटि उत्पन्न नहीं कर सकता था और इस तरह वहाँ देखा ..
जेरार्ड ONeill

6

.Csproj फ़ाइल संपादित करें

<OutputType>Library</OutputType>

चीयर्स!


1
यह वास्तव में काम करता है, लेकिन यह Library(एक पूंजी के साथ L) होना है
19 detunized

यह .net कोर docs.microsoft.com/fr-fr/visualstudio/msbuild/… में डिफ़ॉल्ट माना जाता है कि जब आपकी परियोजना <प्रोजेक्ट Sdk = "Microsoft.NET.Sdk.Web"> डिफ़ॉल्ट मान हो जाती है निर्माण के दौरान पुस्तकालय Exe के लिए बहुत महत्वपूर्ण है। SDK 'Microsoft.NET.Sdk.Web.ProjectSystem' को हल करना ... संपत्ति का पुनर्मूल्यांकन: $ (OutputType) = "Exe" (पिछला मान: "लाइब्रेरी")
Romain Hautefeuille

संपादन .csproj के बजाय, आप दृश्य स्टूडियो 2019 में GUI का उपयोग कर सकते हैं। 1. समाधान एक्सप्लोरर में प्रोजेक्ट का चयन करें 2. मुख्य टूलबार से "प्रोजेक्ट" -> "<प्रोजेक्ट_नाम> गुण" पर क्लिक करें 3. आउटपुट प्रकार: वर्ग लाइब्रेरी 4. सेव
जोशुआ स्वैन

5

मेरे लिए, त्रुटि वास्तव में "फ़ीचर 'async मुख्य' द्वारा उत्पादित थी # C 7.0 में उपलब्ध नहीं है। भाषा संस्करण 7.1 या अधिक का उपयोग करें।" यह समस्या "लिस्ट में एंट्री पॉइंट के लिए उपयुक्त स्टैटिक 'मेन' ​​मेथड में शामिल नहीं है" संदेश त्रुटि सूची में था, लेकिन आउटपुट विंडो में "उपलब्ध नहीं" त्रुटि दिखाई गई। इसे ठीक करने के लिए, मैंने उन्नत बिल्ड सेटिंग्स के तहत भाषा संस्करण को 'सी # नवीनतम लघु संस्करण (डिफ़ॉल्ट)' से 'सी # नवीनतम लघु संस्करण (नवीनतम)' में बदल दिया।


अच्छी पकड़। वास्तविक संस्करण समस्या केवल आउटपुट विंडो में बताई गई है
int-i

4

हे, मुझे एक ही त्रुटि मिली और इस त्रुटि का हल सिर्फ छोटे मीटर के बजाय कैपिटल एम लिखा है .. जैसे: - स्टेटिक शून्य मेन () मुझे आशा है कि यह मदद करता है ..


3

VS 2017 में हुई थी यह समस्या:

स्थिर async टास्क मेन (स्ट्रिंग [] args)

( फ़ीचर 'async main' C # 7.0 में उपलब्ध नहीं है। कृपया भाषा संस्करण 7.1 या अधिक का उपयोग करें )

जोड़ा जा रहा है

<LangVersion>latest</LangVersion>

app.csproj में मदद की।


मेरे पास भी ऐसा ही था, मुझे लगता है क्योंकि मैंने शुरुआत में VS2019 के साथ समाधान बनाया था और फिर इसे VS2017 में खोलने की कोशिश की। माइन एक डॉटनेटकोर कंसोल ऐप है।
ट्रेबोर

2

एक विंडोज फॉर्म प्रोजेक्ट की तरह दिखता है, जो स्टार्टअप फॉर्म का उपयोग करने की कोशिश कर रहा है, लेकिन किसी कारण से प्रोजेक्ट गुण स्टार्टअप के लिए मुख्य है।

यदि आपने एप्लिकेशन फ्रेमवर्क सक्षम किया है तो आप यह नहीं देख पाएंगे कि मेन सक्रिय है (यह एक अमान्य कॉन्फ़िगरेशन है)।


मैं एप्लीकेशन फ्रेमवर्क सेटिंग के बारे में थोड़ा और सुनने में रुचि रखता हूं और कुछ भी हो सकता है जो सॉफ्टवेयर को मेन () देखने के लिए कहे जब एक मुख्य विधि कहीं भी मौजूद नहीं थी।
atwellpub

मेरा मानना ​​है कि एप्लीकेशन फ्रेमवर्क सेटिंग केवल VB.NET पर लागू होती है। C # फ़ॉर्म एप्लिकेशन में हमेशा एक प्रविष्टि बिंदु के रूप में "मुख्य" होता है।
ए। विल्सन

2

सलाम, मेरे पास दोनों हैं Visual Studio 2017औरVisual Studio 2019

विजुअल स्टूडियो 2019 इस त्रुटि को नहीं दिखाता है लेकिन 2017 करता है। Visual Studio 2019 स्थापित करने का प्रयास करें।


Visual Studio 2017

विजुअल स्टूडियो 2017


Visual Studio 2019

विजुअल स्टूडियो 2019


1

जब आप कमांड से पैरामाटर्स को निर्दिष्ट करने की अनुमति देना चाहते हैं, तो उन्हें इस तरह दिखना चाहिए:

 [STAThread]
 static void Main(params string[] paramaters)
 {

आप एक से अधिक पैरामाटर निर्दिष्ट नहीं कर सकते, अन्यथा यह भी ऊपर उल्लिखित त्रुटि का कारण होगा।


1

यहाँ आने वाले कुछ अन्य लोगों के लिए:

मेरे मामले में मैंने एक नमूना परियोजना से .csproj की प्रतिलिपि बनाई थी, <EnableDefaultCompileItems>false</EnableDefaultCompileItems>जिसमें Program.cs फ़ाइल शामिल किए बिना शामिल थी। फिक्स या तो EnableDefaultCompileItems को हटाने या संकलन में Program.cs को स्पष्ट रूप से शामिल करना था


1

नरक आपके मुख्य वर्ग को नष्ट कर दिया गया था, इसलिए उस वर्ग के नाम के रूप में नए वर्ग को जोड़ें, जिसका नाम Main.cs और कीट है या यदि खिड़की में पोरबलम है तो उस पर भी यही समस्या है

using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;

namespace your_PKG_name.iOS
{
       public class Application
        {
            // This is the main entry point of the application.
            static void Main(string[] args)
            {
                // if you want to use a different Application Delegate class from "AppDelegate"
                // you can specify it here.
                UIApplication.Main(args, null, "AppDelegate");

            }
        }
}

h'whoops, गलती से मेरी मुख्य फ़ाइल को iOS प्रोजेक्ट से बाहर खींच ले गया। धन्यवाद
डैन ब्यूलियू २

1

यदि आप क्लास लाइब्रेरी प्रोजेक्ट का उपयोग कर रहे हैं, तो प्रोजेक्ट के एप्लिकेशन सेक्शन के तहत प्रॉपर्टी टाइप में क्लास लाइब्रेरी सेट करें।


1

उपरोक्त कोड Program.cs में रखने के बाद, इन चरणों का पालन करें:

  1. प्रोजेक्ट पर राइट क्लिक करें

  2. "गुण" चुनें

  3. "Windows अनुप्रयोग" के लिए "आउटपुट प्रकार" सेट करें

  4. स्टार्टअप ऑब्जेक्ट: namepace.Program


0

यदि आपके पास वास्तव में एक सार्वजनिक स्थैतिक मुख्य विधि है, तो यह आपकी बिल्ड सेटिंग्स हो सकती है जैसा कि इस प्रश्न में बताया गया है: समस्या निवारण "प्रोग्राम में एक स्थिर 'मुख्य' विधि नहीं होती है जब यह स्पष्ट रूप से होता है ...?


0

मैंने भी इस समस्या का सामना किया है। तब मुझे एहसास हुआ कि मैं कंसोल एप्लीकेशन के बजाय कंसोल एप्लीकेशन (पैकेज) चुन रहा था।


0

मैं विजुअल स्टूडियो का उपयोग कर रहा हूं और यह समस्या भी थी। मुझे कुछ समय लगा, लेकिन मेरे कार्यक्रम में यह कारण था क्योंकि मैंने गलती से "प्रोग्राम" नामक एक वर्ग को हटा दिया था जो स्वचालित रूप से उत्पन्न होता है।


0

भविष्य के पाठकों के लिए जो विंडोज फॉर्म एप्लीकेशन के साथ एक ही समस्या का सामना करते थे, एक समाधान इन पंक्तियों को आपके मुख्य / स्टार्ट अप फॉर्म क्लास में जोड़ना है:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyMainForm());
    }

फिर प्रोजेक्ट प्रॉपर्टीज पर जाएं> एप्लिकेशन> स्टार्टअप ऑब्जेक्ट ड्रॉपडाउन, नामस्थान देखना चाहिए। MYMainForm, इसका चयन करें, साफ करें और समाधान का निर्माण करें। और यह काम करना चाहिए।


0

यह देखने के लिए जांचें कि क्या परियोजना "स्टार्टअप प्रोजेक्ट" के रूप में सेट है

प्रोजेक्ट पर राइट क्लिक करें और मेनू से "स्टार्टअप प्रोजेक्ट के रूप में सेट करें" चुनें।


0

यदि आप मेरे जैसे हैं, तो हो सकता है कि आपने क्लास लाइब्रेरी से शुरुआत की हो, और फिर इसे कंसोल एप्लिकेशन पर स्विच किया हो। यदि हां, तो इसे बदल दें ...

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

इसके लिए...

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

0

एक मान्य प्रविष्टि इस तरह दिखती है:

public static class ConsoleProgram
    {
        [STAThread]
        static void Main()
        {
            Console.WriteLine("Got here");
            Console.ReadLine();
        }
    }

मेरे पास एक वेब एप्लिकेशन लिखने के रूप में समस्याएं थीं, लेकिन अत्यधिक लोडिंग समय के लिए, मैं जल्दी से एक ही प्रोजेक्ट को कंसोल एप्लिकेशन में परिवर्तित करना चाहता था और पूरे समाधान को लोड किए बिना त्वरित विधि परीक्षण करता था।

मेरा प्रवेश बिंदु /App_Code/Main.cs में रखा गया था, और मुझे निम्नलिखित कार्य करने थे:

  1. सेट परियोजना -> गुण -> अनुप्रयोग -> आउटपुट प्रकार = कंसोल अनुप्रयोग
  2. /App_Code/Main.cs बनाएं
  3. इसमें ऊपर कोड जोड़ें (और मेरी परियोजना में विधियों का संदर्भ दें)
  4. Main.cs फ़ाइल पर राइट क्लिक करें -> गुण -> एक्शन बनाएँ = संकलित करें

इसके बाद, मैं वेब साइट, या कंसोल एप्लिकेशन को कंसोल मोड में प्रवेश करने के लिए क्लास लाइब्रेरी में आउटपुट (चरण 1 में उल्लिखित) सेट कर सकता हूं।

मैंने 2 अलग परियोजनाओं के बजाय ऐसा क्यों किया?

केवल इसलिए कि मेरे पास एंटिटी फ्रेमवर्क और अन्य विशिष्ट संदर्भ थे जो 2 अलग-अलग परियोजनाओं को चलाने में समस्याएं पैदा करते थे।

आसान समाधानों के लिए, मैं अभी भी 2 अलग-अलग परियोजनाओं की सिफारिश करूंगा क्योंकि कंसोल आउटपुट मुख्य रूप से परीक्षण कोड है और आप संभवतः उत्पादन कोड में बाहर जाने का जोखिम नहीं उठाना चाहते हैं।


-1

शायद अनजाने में, लेकिन प्रोजेक्ट के बजाय मेरे फ़ोल्डर को समाधान फ़ोल्डर में स्थानांतरित करने से त्रुटि समाप्त हो गई। यह तब सहायक था जब मैं अभी भी स्वतंत्र रूप से डॉकटर का समाधान चलाना चाहता था

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