109 votes

Ne contient pas de méthode statique "main" convenant à un point d'entrée

J'ai commencé à organiser mon code quotidien dans des fichiers .cs séparés, et pour permettre aux méthodes qui fonctionnent avec l'interface utilisateur de continuer à le faire, j'ai créé le code .cs sous le même espace de noms et le même nom de classe partielle publique afin que les méthodes puissent être interopérables.

Mon en-tête se présente comme suit dans quatre fichiers, dont mon fichier principal qui appelle :

public shell()
{
InitializeComponent(); 
}

Zone d'en-tête des fichiers .cs qui fonctionnent avec l'interface utilisateur (et qui semblent être à l'origine de ce nouveau conflit) :

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
    {

Maintenant, quand j'essaie de déboguer/afficher mon application (BTW c'est une application Windows dans Visual Studio 2010 Express) j'obtiens ce message d'erreur :

Ne contient pas de méthode statique "main" convenant à un point d'entrée

J'ai regardé dans les propriétés de l'application dans Application->Objet de démarrage, mais il n'y a pas d'options. Comment puis-je informer l'application de commencer au fichier .cs qui contient ma commande InitializeComponent(); ?

  • J'ai cherché jusqu'à présent sans trouver de solution.
  • Les propriétés de chaque fichier .cs sont définies sur "Compiler".
  • Je ne vois pas de fichier App.xaml dans mon explorateur de solutions mais je vois un fichier app.config.

Je suis encore très novice et c'est ma première tentative de méthode d'organisation avec du code c#.

12 votes

Avez-vous une méthode principale ?

0 votes

Pour être honnête, je ne vois nulle part dans mon code une méthode appelée Main. Je travaille sur ce projet depuis quelques mois maintenant.

1 votes

Vous avez besoin d'une méthode statique appelée main avec la signature correcte. C'est ainsi que le compilateur sait comment démarrer votre programme.

158voto

Arne Points 297

Je me suis également penché sur cette question et, dans mon cas, la solution était trop simple. J'ai ajouté un nouveau projet vide à la solution. Le projet nouvellement ajouté est automatiquement défini comme une application console. Mais comme le projet ajouté était un projet "vide", aucun Program.cs n'existait dans ce nouveau projet. (Comme prévu)

Tout ce que j'avais à faire, c'était de changer le type de sortie des propriétés du projet en bibliothèque de classes.

1 votes

Je pense que cette solution est un peu excessive. Il serait beaucoup plus simple de suivre la solution de @eyossi.

2 votes

Mais vouliez-vous une application console ou une bibliothèque de classes ? Ne changez pas simplement le type d'application pour corriger une erreur ; sachez ce que l'erreur vous dit. Les applications console ont besoin d'un point d'entrée ( static void main() ) pour déterminer où commencer l'exécution du code, ce qui n'est pas le cas des bibliothèques de classes, qui sont appelées par d'autres bibliothèques déjà en cours d'exécution.

0 votes

C'est la version exagérée de ce que suggère @pixaloop. Après avoir lu cette réponse, je me suis souvenu que lors de l'ajout d'un projet Empty, la sortie par défaut est Console. Je l'ai donc modifié. Je voulais le poster en tant que réponse (car c'est beaucoup plus simple), mais j'ai vu que quelqu'un d'autre l'avait déjà fait.

99voto

pixaloop Points 51

Modifiez le type de sortie sous Projet > Propriétés pour qu'il devienne une "bibliothèque de classes". Par défaut, ce paramètre peut avoir été réglé sur "Application console".

2 votes

C'est exactement ce que j'ai fait, cela fonctionne parfaitement. Si vous avez ajouté un projet 'Empty', il est par défaut sur Console.

0 votes

Merci, cela a parfaitement fonctionné pour moi. Une dernière chose que j'aimerais ajouter est que, lorsque vous faites un clic droit sur votre projet et que vous allez dans les propriétés, le "Type de sortie" sera disponible sous "Général". Le chemin d'accès est donc le suivant : [Nom du projet] > Propriétés > Application > Général > Type de sortie.

26voto

eyossi Points 2777

Essayez d'ajouter cette méthode à une classe et voyez si vous obtenez toujours l'erreur :

[STAThread]
static void Main()
{
}

0 votes

Dans mon cas, je voulais une application pour la console. L'ajout du point d'entrée à ma classe a donc fait l'affaire. Je suis un noob de VS 2022 mais je préférais les anciens templates de console. C'est déroutant et les applications de console devraient fonctionner sans avoir à écrire de code. Mauvaise décision d'interface utilisateur de la part de Microsoft IMO.

0 votes

Cela m'a aidé. Ma méthode Main() n'était pas statique.

13voto

ROM Points 42

Si vous n'avez pas de fichier nommé Program.cs Il suffit d'ajouter une nouvelle classe et de la nommer Program.cs .

Collez ensuite ce code :

 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());
         }
     }

 }

4voto

Chetan Soni Points 21

J'ai eu la même erreur et la solution à cette erreur est d'écrire M majuscule au lieu de m minuscule. par exemple:- static void Main() J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X