No contiene un método 'principal' estático adecuado para un punto de entrada

83

Comencé a organizar mi código hoy en archivos .cs separados, y para permitir que los métodos que funcionan con la interfaz de usuario continúen haciéndolo, crearía el código .cs bajo el mismo espacio de nombres y el mismo nombre de clase parcial pública para que los métodos pudieran ser interoperables.

Mi encabezado se ve así en cuatro archivos, incluido mi archivo principal principal que llama:

public shell()
{
InitializeComponent(); 
}

Área de encabezado de los archivos .cs que funcionan con la interfaz de usuario (y parecen estar causando este nuevo conflicto):

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
    {

Ahora, cuando trato de depurar / obtener una vista previa de mi aplicación (por cierto, esta es una aplicación de Windows dentro de Visual Studio 2010 Express) aparece este mensaje de error:

No contiene un método 'principal' estático adecuado para un punto de entrada

Busqué en las propiedades de la aplicación en Aplicación-> Objeto de inicio, pero no me ofrece opciones. ¿Cómo puedo informar a la aplicación que comience en el archivo .cs que tiene mi InitializeComponent (); ¿mando?

  • He mirado a mi alrededor hasta ahora sin una solución.
  • Las propiedades de cada archivo .cs se establecen en 'Compilar'.
  • No veo un archivo App.xaml en mi Explorador de soluciones, pero veo un archivo app.config.

Todavía soy muy nuevo y este es mi primer intento de un método de organización con código c #.

atwellpub
fuente
12
¿tienes un método principal?
Bobek
Para ser honesto, no veo un método llamado Main en ninguna parte de mi código. También he estado trabajando en este proyecto durante un par de meses.
atwellpub
1
Necesita un método estático llamado main, con la firma correcta. Así es como el compilador sabe cómo iniciar su programa.
David Heffernan
5
intente agregar algo como esto a su proyecto[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
LB
1
@LB: Crea eso como respuesta para que pueda aceptarlo.
Joshua

Respuestas:

128

También estaba analizando este problema y, en mi caso, la solución fue demasiado fácil. Agregué un nuevo proyecto vacío a la solución. El proyecto recién agregado se configura automáticamente como una aplicación de consola. Pero como el proyecto agregado era un proyecto "vacío", no existía Program.cs en ese nuevo proyecto. (Como se esperaba)

Todo lo que necesitaba hacer era cambiar el tipo de salida de las propiedades del proyecto a la biblioteca de clases

Arne
fuente
Una solución un poco exagerada, creo. Sería mucho más fácil seguir la solución de @ eyossi.
TimWagaman
¿Pero querías una aplicación de consola o una biblioteca de clases? No se limite a cambiar el tipo de aplicación para corregir un error; sepa lo que le está diciendo el error. Las aplicaciones de consola necesitan un punto de entrada ( static void main()) para determinar dónde comenzar a ejecutar el código; las bibliotecas de clases no lo hacen: son llamadas por otras bibliotecas que ya se están ejecutando.
KyleMit
Esta es la versión exagerada de lo que sugiere @pixaloop. Después de leer esta respuesta, recordé que al agregar un proyecto vacío, la salida predeterminada es Console. Así que fui y lo cambié. Quería publicarlo como respuesta (ya que es mucho más simple), pero vi que alguien más ya lo hizo.
EternalWulf
Gracias hombre. ¡Ese hubiera sido el último lugar donde hubiera mirado!
eaglei22
No es exagerado en absoluto. Este era el problema exacto en mi situación. El compilador estaba buscando mainen mis otros dos proyectos que eran aplicaciones de consola como el proyecto StartUp. Cambiar esos dos proyectos de "asistencia" a la Biblioteca de clases en su pantalla Propiedades lo solucionó de inmediato.
Ctrl S
81

Cambie el Tipo de salida en Proyecto> Propiedades por el de una "Biblioteca de clases". De forma predeterminada, esta configuración puede haberse establecido en una "Aplicación de consola".

Automatizado probado
fuente
1
Esto es exactamente lo que hice, funciona perfecto. Si agregó un proyecto 'Vacío', el valor predeterminado es Consola.
EternalWulf
21

Intente agregar este método a una clase y vea si aún recibe el error:

[STAThread]
static void Main()
{
}
eyossi
fuente
13

Tuve este error y lo resolví usando esta solución.

  1. Haga clic derecho en el proyecto
  2. Seleccione "Propiedades"
  3. Establezca "Tipo de salida" en "Biblioteca de clases".
Ali Ahmadi
fuente
sí, pero necesitas otro proyecto para depurar la biblioteca de clases. Derrota el propósito
Fandango68
Funcionó para mí, porque solo recibía este error en un proyecto de servicios públicos, no en el proyecto de inicio
Joshua Swain
11

Si no tiene un archivo con nombre Program.cs, simplemente agregue una nueva clase y asígnele un nombre Program.cs.

Luego pega este código:

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

 }
ROM
fuente
9
  1. Seleccione App.xaml y muestre sus propiedades. Establezca Acción de compilación en ApplicationDefinition .
  2. App.xaml y su archivo * .cs correspondiente deben colocarse en el directorio raíz del archivo * .csproj, es decir, no en una carpeta "Fuente".
Roman Volkov
fuente
1
Este es mi caso. Ctrl + c copié un App.xml en el proyecto y la acción de compilación se estableció en "Página".
Jacky Cheng
7

Si tiene un método Main pero sigue recibiendo este error, asegúrese de que el archivo que contiene el método Main tenga "Acción de compilación" configurada en "Compilar" y "Copiar al directorio de salida" configurado como "No copiar".

Simonbs
fuente
¡Gracias! Quizás en un par de horas más, me daría cuenta de que no podía generar un error de sintaxis y, por lo tanto, miré allí ..
Gerard ONeill
6

Editar archivo .csproj

<OutputType>Library</OutputType>

salud !

bereket gebredingle
fuente
1
Esto realmente funciona, pero tiene que ser Library(con mayúscula L)
desactivado el
Se supone que es el predeterminado en .net core docs.microsoft.com/fr-fr/visualstudio/msbuild/… Resulta que cuando su proyecto es <Project Sdk = "Microsoft.NET.Sdk.Web"> el valor predeterminado La biblioteca se reemplaza por Exe durante la compilación. Resolviendo SDK 'Microsoft.NET.Sdk.Web.ProjectSystem' ... Reasignación de propiedad: $ (OutputType) = "Exe" (valor anterior: "Biblioteca")
Romain Hautefeuille
En lugar de editar .csproj, puede usar la GUI en Visual Studio 2019. 1. Seleccione el proyecto en el Explorador de soluciones 2. Haga clic en "Proyecto" -> "Propiedades de <nombre_proyecto>" en la barra de herramientas principal 3. Tipo de salida: Clase Biblioteca 4. Guardar
Joshua Swain
5

Para mí, el error fue realmente producido por "La característica 'async main' no está disponible en C # 7.0. Utilice la versión de idioma 7.1 o superior". Este problema provocaba el mensaje "No contiene un método 'principal' estático adecuado para un punto de entrada" en la Lista de errores, pero la ventana Salida mostraba el error "no disponible". Para corregir esto, cambié la versión de idioma de 'C # última versión menor (predeterminada)' a 'C # última versión menor (última)' en Configuración de compilación avanzada.

Moondog 2112
fuente
Buena atrapada. El problema de la versión real solo se indica en la ventana de salida
int-i
4

hey obtuve el mismo error y la solución a este error es simplemente escribir M mayúscula en lugar de m pequeña .. por ejemplo: - static void Main () espero que ayude ..

Chetan Soni
fuente
3

Tuve este problema en VS 2017 causado por:

estática asíncrona Tarea principal (cadena [] argumentos)

(La función 'async main' no está disponible en C # 7.0. Utilice la versión de idioma 7.1 o superior )

Añadiendo

<LangVersion>latest</LangVersion>

to app.csproj ayudó.

Tom
fuente
Tuve lo mismo, creo que porque inicialmente creé la solución con VS2019 y luego intenté abrirla en VS2017. La mía es una aplicación de consola dotnetcore.
trebor
2

Parece un proyecto de Windows Forms que está intentando usar un formulario de inicio, pero por alguna razón las propiedades del proyecto están configuradas para que el inicio sea Principal.

Si ha habilitado el marco de la aplicación, es posible que no pueda ver que Main está activo (esta es una configuración no válida).

Joshua
fuente
Me interesaría escuchar un poco más sobre la configuración de Application Framework y cualquier cosa que pueda decirle al software que busque Main () cuando un método Main no parece existir en ninguna parte.
atwellpub
Creo que la configuración de Application Framework solo se aplica a VB.NET. Las aplicaciones de C # Forms siempre tienen "main" como punto de entrada.
A. Wilson
2

Salaam, tengo ambos Visual Studio 2017yVisual Studio 2019

Visual Studio 2019 no muestra este error, pero 2017 sí. Intente instalar Visual Studio 2019.


Visual Studio 2017

Visual Studio 2017


Visual Studio 2019

Visual Studio 2019

Ali Jamal
fuente
1

Cuando desee permitir que se especifiquen parámetros desde el comando, deben tener este aspecto:

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

no puede especificar más de un parámetro, de lo contrario, esto también causará el error informado anteriormente.

Gerrie Pretorius
fuente
1

Para algunos otros que vienen aquí:

En mi caso, había copiado un .csproj de un proyecto de muestra que se incluía <EnableDefaultCompileItems>false</EnableDefaultCompileItems>sin incluir el archivo Program.cs. La solución fue eliminar EnableDefaultCompileItems o incluir Program.cs en la compilación explícitamente

Madison Haynie
fuente
1

hola, su clase principal fue eliminada, así que agregue una nueva clase con el nombre establecido como Main.cs y elimine ese código o si hay un problema en la ventana, por lo que el mismo problema en eso

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");

            }
        }
}
yash patel
fuente
h'whoops, accidentalmente arrastré mi archivo principal fuera del proyecto de iOS. Gracias
Dan Beaulieu
1

Si está utilizando un proyecto de biblioteca de clases, configure Biblioteca de clases como tipo de salida en las propiedades en la sección de aplicación del proyecto.

Manveer Singh
fuente
1

Después de colocar el código anterior en Program.cs, siga estos pasos:

  1. Haga clic derecho en el proyecto

  2. Seleccione "Propiedades"

  3. Establezca "Tipo de salida" en "Aplicación de Windows"

  4. Objeto de inicio: espacio de nombres.Programa

Siddhi Dilip Kamat
fuente
0

Yo también me he enfrentado a este problema. Luego me di cuenta de que estaba eligiendo Aplicación de consola (Paquete) en lugar de Aplicación de consola.

Subrahmanya Prasad
fuente
0

Estoy usando Visual Studio y también tuve este problema. Me tomó algo de tiempo, pero en mi programa se debió a que borré accidentalmente una clase llamada "Programa" que se genera automáticamente.

MaChaToc
fuente
0

Para los lectores futuros que enfrentaron el mismo problema con la aplicación Windows Forms, una solución es agregar estas líneas a su clase de formulario principal / de inicio:

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

Luego vaya a propiedades del proyecto> Aplicación> menú desplegable de Objeto de inicio, debería ver el espacio de nombres MyMainForm, selecciónelo, limpie y cree la solución. Y debería funcionar.

gruñón
fuente
0

Verifique si el proyecto está configurado como "Proyecto de inicio"

Haga clic derecho en el proyecto y seleccione "Establecer como proyecto de inicio" en el menú.

James Wierzba
fuente
0

Si es como yo, es posible que haya comenzado con una biblioteca de clases y luego haya cambiado esto a una aplicación de consola. Si es así, cambie esto ...

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

A esto...

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
Adam Cox
fuente
0

Una entrada válida se ve así:

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

Tuve problemas mientras escribía una aplicación web, pero por el terrible tiempo de carga, quería convertir rápidamente el mismo proyecto en una aplicación de consola y realizar pruebas de métodos rápidos sin cargar la solución completa.

Mi punto de entrada se colocó en /App_Code/Main.cs, y tuve que hacer lo siguiente:

  1. Establecer proyecto -> Propiedades -> Aplicación -> Tipo de salida = Aplicación de consola
  2. Cree el /App_Code/Main.cs
  3. Agregue el código anterior en él (y haga referencia a los métodos en mi proyecto)
  4. Haga clic derecho en el archivo Main.cs -> Propiedades -> Acción de compilación = Compilar

Después de esto, puedo configurar la salida (como se menciona en el Paso 1) en Biblioteca de clases para iniciar el sitio web, o Aplicación de consola para ingresar al modo de consola.

¿Por qué hice esto en lugar de 2 proyectos separados?

Simplemente porque tenía referencias a Entity Framework y otras referencias específicas que crearon problemas al ejecutar 2 proyectos separados.

Para soluciones más fáciles, aún recomendaría 2 proyectos separados ya que la salida de la consola es principalmente código de prueba y probablemente no quiera arriesgarse a salir en código de producción.

Peter Kindberg
fuente
-1

Quizás no sea intencional, pero mover mi archivo de la ventana acoplable a la carpeta de la solución en lugar del proyecto eliminó el error. Esto fue útil cuando todavía quería ejecutar la solución independientemente de la ventana acoplable

ririvas
fuente