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 WPF. ¿Main () simplemente nombra algo diferente en WPF?
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 WPF. ¿Main () simplemente nombra algo diferente en WPF?
Respuestas:
Se genera durante la compilación, pero puede proporcionar el suyo (desambigándolo en las propiedades del proyecto según sea necesario). Busque 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();
}
}
}
App.g.cs
. Pero intenté agregar 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 puedo redirigirlo.
App.xaml.cs
en estudio visual. Use la barra de navegación> Lista desplegable Método> seleccionar Main
(atenuado). Esto le llevará a App.g.i.cs
.
El método Main () se crea automáticamente. Si desea proporcionar el suyo propio, debe hacerlo (probado en VS2013 y VS2017):
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();
}
Main()
es proporcionado automáticamente por el CLR y el WPF.
El compilador de 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 Main()
método estático y lo llamará. (Como señaló @Marc Gravel en su comentario)
En el caso de WPF, Main()
se genera automáticamente cuando App.xaml
se construye y se especifica el modificador / m para que el compilador de C # use esa clase como punto de entrada. Sin embargo, si observa las propiedades del proyecto, encontrará que hay una configuración para que elija el objeto de inicio. Entonces, si lo desea, puede proporcionar su propia clase que implementeMain()
.
Tenga en cuenta que esto le asignará la responsabilidad de crear la Application
instancia y llamar a su Run()
método para garantizar que la infraestructura de WPF se inicie correctamente.
/m
ella no le importa cómo se llama el tipo; Si no es explícito, solo intenta encontrar algúnMain
método adecuado y se queja si encuentra 0 o más de uno. Como ejemplo, la muestra "Hello World" en la especificación del lenguaje (§1.1) se usa Hello
como el nombre del tipo.
main()
es proporcionado por el CLR (el tiempo de ejecución), es realmente el compilador que lo genera.
MyApp.App app = new MyApp.App();
) y llamarla .Run()
, como lo Main()
hubiera hecho anteriormente . Buena llamada. Además, tendría que agregar app.InitializeComponent();
antes app.Run()
, y afortunadamente para nosotros, el InitializeComponent()
método original todavía está allí (visto en App.g.cs, ¡así que no es necesario volver a agregarlo!).
main()
es un punto de entrada estándar para una aplicación, pero todas las aplicaciones están estructuradas de esa manera. En un proyecto XAML, el archivo App.XAML especifica el punto de entrada donde dice StartupUri="MainWindow.xaml"
.
Como lo afirman otros, la función principal real se genera en función del contenido de los archivos XAML en el proyecto.
Copié archivos que no se cargarían en otro proyecto que estaba sin una ventana principal en uno nuevo y obtuve este error.
Para mí fue necesario hacer el enfoque opuesto a Andreas Kahler para solucionarlo:
Después de crear un archivo de ventana y configurar la uri de inicio para este archivo, cambié la página a ApplicationDefinition de la propiedad App.xaml 'Build Action'.
En caso de que haya eliminado App.xaml y MinWindow.xaml predeterminados, es mejor editar .csproj Después de agregar App.xaml manualmente, su .csproj será:
<Page Include ="App.xaml">
<DependentUpon>MSBuild:Compile</DependentUpon>
<SubType>Code</SubType>
</Page>
Cambia esto a:
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>