Soy un principiante cuando se trata de programación pero estaba seguro de que una de las reglas universales era que un programa comienza con Main(). No veo uno cuando creo un proyecto de WPF. ¿Main() simplemente nombra algo diferente en WPF?Sin Main() en WPF?
Respuesta
Se genera durante la compilación, pero puede proporcionarla la suya (no necesita ambigüedad en las propiedades del proyecto). Busca en obj/debug un archivo de aplicación; Tengo (cortesía de "C# 2010 Express") App.g.i.cs
con:
namespace WpfApplication1 {
/// <summary>
/// App
/// </summary>
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public partial class App : System.Windows.Application {
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
#line 4 "..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
}
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main() {
WpfApplication1.App app = new WpfApplication1.App();
app.InitializeComponent();
app.Run();
}
}
}
Lo mismo existe en 'App.g.cs', también. Pero traté de agregar a 'Main()' y cada vez que reconstruía mi proyecto, volvería a lo que tienes, aquí. Intenté crear el mío en otra clase, pero Project Properties solo encuentra MyProject.App, no la otra clase, por lo que no puede redirigirlo. – vapcguy
Main()
se genera durante la compilación. Puede encontrarlo en App.g.cs
(en la carpeta obj/{Debug,Release}
).
main()
es un punto de entrada estándar para una aplicación, pero todas las aplicaciones están estructurados de esa manera. En un proyecto XAML, el archivo App.XAML especifica el punto de entrada donde dice StartupUri="MainWindow.xaml"
.
Como afirman otros, la función principal real se genera en función del contenido de los archivos XAML del proyecto.
Main()
es proporcionado automáticamente por el CLR y el WPF.
El compilador C# toma un modificador de línea de comandos /m
que especifica el tipo que contiene la implementación de Main()
. Por convención, si no se especifica explícitamente ningún objeto de inicio, el CLR buscará cualquier clase que tenga un método estático Main()
y lo llamará. (Como @Marc grava señalado en su comentario)
En el caso de WPF, la Main()
se genera automáticamente cuando App.xaml
se construye y el modificador/m se especifica para que el compilador de C# usar esa clase como punto de entrada. Sin embargo, si observa las propiedades del proyecto, encontrará una configuración para que elija el objeto de inicio. Entonces, si lo desea, puede proporcionar su propia clase que implemente Main()
.
Tenga en cuenta que esto le dará la responsabilidad de crear la instancia Application
y llamar a su método Run()
para asegurarse de que la infraestructura WPF se inicie correctamente.
En realidad, sin '/ m' no le importa * qué tipo se llama; si no eres explícito, simplemente intenta encontrar ** cualquier ** método 'Principal 'adecuado, y se queja si encuentra 0 o más de uno. Como ejemplo, el ejemplo "Hello World" en la especificación de idioma (§1.1) usa 'Hello' como nombre de tipo. –
Para ser pedante: no es realmente exacto decir que 'main()' es proporcionado por el CLR (el tiempo de ejecución), es realmente el compilador que lo genera. –
Agregué mi +1 para recordarle a la audiencia que ellos tendrán que agregar en su propia instancia de aplicación (es decir, 'Aplicación MyApp.App = new MyApp.App();') y llamar a '.Run()' sobre ella, como la anterior 'Main()' tendría. Buena llamada. Además, tendría que agregar 'app.InitializeComponent();' antes de 'app.Run()', y afortunadamente para nosotros, el método original 'InitializeComponent()' todavía está allí (visto en App.g.cs, entonces no necesito agregar esa otra vez!). – vapcguy
El método Main() se crea automáticamente. Si desea proporcionar su propio tienes que (probado en VS2013 y VS2017):
- Haga clic derecho en App.xaml en el explorador de soluciones, seleccione Propiedades
- cambio 'Construir Acción' a 'Página' (El valor inicial es 'ApplicationDefinition')
Luego, simplemente agregue un método Main() a App.xaml.cs. Podría ser así:
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
La sugerencia de acción de construcción fue la clave, gracias – joshcomley
¡Impresionante! debería ser la respuesta aceptada. – Jack
¿Qué es '[STAThread]'? También soy un principiante y no sé ... – Jepessen
he copiado los archivos que no se carga en otro proyecto que fue sin MainWindow en uno nuevo y se puso este error.
Para mí tomaron haciendo el camino contrario a Andreas Kahler para fijar:
Después de hacer un archivo de la ventana y ajuste de la URI de inicio a este archivo cambié a Página ApplicationDefinition de App.xaml 'Construir Acción' propiedad.
- 1. WPF - Cierre automático de Main en App.g.cs
- 2. Usando Require.js sin data-main
- 3. programa de Quine sin main()
- 4. ¿Diferencia entre void main e int main?
- 5. Clojure -main en IntelliJ
- 6. main() función en JavaScript?
- 7. Ventana sin bordes en WPF
- 8. WPF - Desplazar sin foco
- 9. WPF sin Visual Studio?
- 10. XAML sin WPF - Animaciones
- 11. Botón WPF Sin borde Sin fondo
- 12. Múltiples métodos main() en java
- 13. ¿Dónde está main() en Android?
- 14. Usando `void main` en D
- 15. Cómo autocompletar main() en eclipse?
- 16. Definición de main() en C
- 17. Parámetros para main con requireJS y data-main
- 18. Implementando MVVM en WPF sin usar System.Windows.Input.ICommand
- 19. WPF DocumentViewer - Imprimir sin confirmación
- 20. WPF RichTextBox sin ancho establecido
- 21. MVVM + WPF + Popup = sin pista
- 22. ¿Es necesario devolver un valor en Main()?
- 23. C++ main() en un gran POO proyecto
- 24. main() en C, C++, Java, C#
- 25. Comprender un argumento poco común en main
- 26. ¿Cuántos argumentos tiene main() en C/C++
- 27. ¿Cómo regreso de func main en Go?
- 28. ¿Por qué main() en java void?
- 29. ¿Realmente necesitas un main() en C++?
- 30. ¿Por qué WPF requiere que se aplique un atributo STAThread al método Main?
Puede obtener la funcionalidad equivalente anulando OnStartup en App.xaml.cs. StartupEventArgs.Args contiene los argumentos de línea de comandos. – Foole
@Foole, no, no puede, vea [esto] (http://stackoverflow.com/q/22460116/1997232) pregunta. – Sinatr