2012-03-07 11 views
43

ho iniziato organizzando il mio codice al giorno in file seperarate Cs, e al fine di consentire i metodi che funzionano con l'interfaccia utente di continuare a farlo vorrei creare il codice .cs sotto lo stesso spazio dei nomi e il nome del pubblico classe parziale in modo che i metodi potrebbero essere inter-operabile.non contiene un metodo statico 'main' adatto per un punto di ingresso

Il mio colpo di testa simile a questa in quattro file, compreso il mio file core principale che le chiamate:

public shell() 
{ 
InitializeComponent(); 
} 

zona di intestazione dei file Cs che lavorano con l'interfaccia utente (e sembrano essere la causa di questo nuovo conflitto):

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 
    { 

Ora in cui provo a eseguire il debug/anteprima mia domanda (BTW questo è un applicazione di Windows all'interno di Visual Studio 2010 Express) ottengo questo messaggio di errore:

Does not contain a static 'main' method suitable for an entry point

ho guardato nelle proprietà applicative a Application-> oggetto di avvio, ma mi offre alcuna opzione. Come posso informare l'applicazione per iniziare il file .cs che ha il mio InitializeComponent(); comando?

  • Mi sono guardato intorno senza una soluzione.
  • Gli immobili in ciascun file .cs è impostato su 'Compile'.
  • non vedo un file App.xaml nel mio Solutions Explorer ma lo faccio vedere un file app.config.

Sono ancora molto nuovo e questo è il mio primo tentativo di un metodo di organizzazione con codice C#.

+9

hai un metodo principale ?? –

+0

Ad essere sincero, non vedo un metodo chiamato Main ovunque nel mio codice. Ho lavorato anche a questo progetto per un paio di mesi. – atwellpub

+1

È necessario un metodo statico chiamato 'main', con la firma corretta. Ecco come il compilatore sa come avviare il tuo programma. –

risposta

2

Sembra un progetto Windows Form, che sta cercando di utilizzare un form di avvio, ma per qualche motivo il le proprietà del progetto sono impostate all'avvio come Principale.

Se è stato abilitato il framework dell'applicazione, potrebbe non essere possibile vedere che Main è attivo (questa è una configurazione non valida).

+0

Sarei interessato a saperne un po 'di più sulle impostazioni di Application Framework e su tutto ciò che potrebbe dire al software di cercare Main() quando un metodo Main non sembra esistere da nessuna parte. – atwellpub

+0

Credo che l'impostazione Framework dell'applicazione si applica solo a VB.NET. Le applicazioni C# Forms hanno sempre "main" come entry point. –

72

Stavo guardando anche questo problema, e nel mio caso la soluzione era troppo facile. Ho aggiunto un nuovo progetto vuoto alla soluzione. Il nuovo progetto aggiunto viene automaticamente impostato come un'applicazione console. Ma poiché il progetto aggiunto era un progetto "vuoto", nessun Program.cs esisteva in quel nuovo progetto. (Come previsto)

Tutto quello che dovevo fare era cambiare il tipo di uscita di proprietà del progetto di libreria di classi

+0

Un po 'eccessivo di una soluzione, penso. Sarebbe molto più facile da seguire la soluzione di @ eyossi. – TimWagaman

+0

Fantastico, mi ha aiutato molto, grazie. – casaout

+0

Ma volevi un'applicazione console o una libreria di classi? Non basta cambiare il tipo di applicazione per correggere un errore; sapere cosa ti sta dicendo l'errore. Le applicazioni della console necessitano di un punto di ingresso ('static void main()') per determinare da dove iniziare l'esecuzione del codice; le librerie di classi non lo fanno - vengono chiamate da altre librerie già in esecuzione. – KyleMit

13

Prova ad aggiungere questo metodo per una classe e vedere se è ancora ottenere l'errore:

[STAThread] 
static void Main() 
{ 
} 
4

hey ho ottenuto lo stesso errore e la soluzione a questo errore è solo scrivere Capital m invece di piccolo m .. ad esempio: - static void Main() Spero che aiuta ..

10

Se non si dispone di un file chiamato Program.cs, basta aggiungere una nuova classe e nome it Program.cs.

quindi incollare questo codice:

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

} 
-2

semplice soluzione.

1.BUILD -> PULITO nome-progetto (sarà chiaro il vostro precedente Corporatura non completata "E 'simile a rinfrescare")

2.BUILD -> BUILD nome-progetto.

quindi puoi semplicemente iniziare lo script che funzionerà. Si prega di trovare allegato !!

42

Modificare il tipo di uscita in Progetto> Proprietà con quello di una "Libreria di classi". Per impostazione predefinita, questa impostazione potrebbe essere stata impostata su una "Applicazione console".

+0

Questo è esattamente quello che ho fatto, funziona perfettamente. Se hai aggiunto un progetto 'Vuoto', per impostazione predefinita Console. – HowlinWulf

+0

Ho fatto anche questa semplice soluzione e ha funzionato per me. – jjones150

4

Se si dispone di un metodo Main ma si ottiene ancora questo errore, assicurarsi che il file contenente il metodo Main abbia "Build action" impostato su "Compile" e "Copy to ouput directory" impostato su "Do not copy" .

+0

Grazie! Forse in un altro paio di ore, mi sarei reso conto che non potevo generare un errore di sintassi e quindi ho guardato lì .. –

0

Anche io ho affrontato questo problema. Poi ho capito che stavo scegliendo Console Application (Package) piuttosto che Console Application.

1
  1. Selezionare App.xaml e visualizzarne le proprietà. Imposta Crea azione a ApplicationDefinition.
  2. App.xaml e il corrispondente file * .cs devono essere inseriti nella directory principale del file * .csproj, i. e. non in una cartella "Sorgente".
0

Sto utilizzando Visual Studio e ho riscontrato questo problema. Mi ci è voluto un po 'di tempo, ma nel mio programma è stato causato perché ho cancellato per errore una classe chiamata "Programma" che viene generata automaticamente.

0

Per i lettori futuri che hanno affrontato lo stesso problema con Windows moduli di domanda, una soluzione è quella di aggiungere queste righe al tuo principale/start up classe form:

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

Poi vai a proiettare immobili> Applicazioni> Oggetto di avvio a discesa , dovrebbe vedere lo spazio dei nomi.MyMainForm, selezionarlo, pulire e creare la soluzione. E dovrebbe funzionare.

0

Verificare se il progetto è impostato come "progetto di avvio"

Fare clic destro sul progetto e scegliere "Imposta come progetto di avvio" dal menu.

0

Quando si desidera consentire paramaters da specificare dal comando, si deve guardare in questo modo:

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

non è possibile specificare più di un paramater, altrimenti questo sarà anche causare l'errore sopra riportato.

0

Per alcuni altri provenienti qui:

Nel mio caso avevo copiato un csproj da un progetto di esempio che comprendeva falso senza includere il file Program.cs. Quale era per rimuovere EnableDefaultCompileItems il nostro include Program.cs nella compilazione esplicitamente

Problemi correlati