No Main() 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. Es Main () simplemente nombrado algo diferente en WPF?

Author: HireThisMarine, 2010-04-23

7 answers

Se genera durante la compilación, pero puede proporcionar el suyo propio (desambiguándolo en project-properties 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();
        }
    }
}
 64
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-22 21:37:36

El método Main() se crea automáticamente. Si desea proporcionar su propio tiene que (probado en VS2013 y VS2017):

  • Haga clic con el botón derecho en la aplicación.xaml en el explorador de soluciones, seleccione Propiedades
  • Cambie 'Build Action' a ' Page '(el valor inicial es'ApplicationDefinition')

Luego simplemente agrega 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();
}
 86
Author: Andreas Kahler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-16 08:54:57

Main() es proporcionado automáticamente por el CLR y el WPF.

El compilador de C# toma un conmutador de línea de comandos /m que especifica el tipo que contiene la implementación de Main(). Por convención, si no se especifica ningún objeto de inicio explícitamente, el CLR buscará cualquier clase que tenga un método estático Main() y lo llamará. (Como @Marc Gravel señaló en su comentario)

En el caso de WPF, el Main() se genera automáticamente cuando se construye App.xaml y se especifica el conmutador /m para hacer 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. Así que si lo desea, puede proporcionar su propia clase que implementa Main().

Tenga en cuenta que esto le asignará la responsabilidad de crear la instancia Application y llamar a su método Run() para asegurarse de que la infraestructura WPF se inicie correctamente.

 13
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-22 22:08:25

Main() se genera durante la compilación. Puede encontrarlo en App.g.cs (en la carpeta obj/{Debug,Release}).

 6
Author: Vlad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-22 21:36:38

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, la Aplicación.El archivo XAML especifica el punto de entrada donde dice StartupUri="MainWindow.xaml".

Como dicen otros, la función principal real se genera en función del contenido de los archivos XAML en el proyecto.

 5
Author: Annath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-22 21:39:12

Copié archivos que no se cargaban en otro proyecto que no tenía una ventana principal en uno nuevo y obtuve este error.

Para mí fue necesario hacer el enfoque opuesto a Andreas Kahler para arreglar:

Después de hacer un archivo de ventana y establecer el uri de inicio a este archivo, cambié la página a ApplicationDefinition of App.propiedad xaml 'Build Action'.

 0
Author: Declan Taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-14 10:18:21

En caso de que haya eliminado la aplicación predeterminada.xaml y MinWindow.xaml, mejor editar .csproj Después de agregar la aplicación.xaml manualmente, su .csproj será:

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>

Cambie esto a:

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>
 0
Author: user10372515,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-16 23:48:47