Нет Main() в WPF?

Я очень начинаю, когда речь заходит о программировании, но я был уверен, что одним из универсальных правил было то, что программа начинается с Main(). Я не вижу его, когда создаю проект WPF. Является ли Main() просто названным иначе в WPF?

Ответ 1

Он генерируется во время сборки, но вы можете предоставить свой собственный (его устранение в свойствах проекта по мере необходимости). Посмотрите в obj/debug для файла приложения; Я (любезно предоставлен "С# 2010 Express" ) App.g.i.cs с помощью:

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

Ответ 2

Как указано в других ответах, Main() создается автоматически. Если вы хотите предоставить свои собственные, вам необходимо (протестировано в VS2013):

  • Щелкните правой кнопкой мыши App.xaml в проводнике решений, выберите "Свойства"
  • Измените "Build Action" на "Page" (начальное значение - "ApplicationDefinition" )

Затем просто добавьте метод Main() в App.xaml.cs. Это может быть так:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}

Ответ 3

Main() автоматически предоставляется CLR и WPF.

Компилятор С# принимает ключ командной строки /m, который указывает тип, содержащий реализацию Main(). По соглашению, если объект запуска не указан явно, CLR будет искать любой класс, у которого есть статический метод Main(), и вызовет его. (Как заметил в своем комментарии @Marc Gravel)

В случае WPF Main() автоматически генерируется при построении App.xaml и указывается/m-переключатель, чтобы компилятор С# использовал этот класс в качестве точки входа. Если вы посмотрите на свойства проекта, вы найдете там параметр для выбора объекта запуска. Поэтому, если вы хотите, вы можете предоставить свой собственный класс, который реализует Main().

Обратите внимание, что это заставило вас создать экземпляр Application и вызвать его метод Run(), чтобы убедиться, что инфраструктура WPF запущена должным образом.

Ответ 4

Main() генерируется во время компиляции. Вы можете найти его в App.g.cs (в папке obj/{Debug,Release}).

Ответ 5

main() - стандартная точка входа для приложения, но все приложения структурированы таким образом. В проекте XAML файл App.XAML указывает точку входа, где указано StartupUri="MainWindow.xaml".

Как указано другими, фактическая основная функция создается на основе содержимого файлов XAML в проекте.

Ответ 6

Я скопировал файлы, которые не загружались в другой проект, который был без основного окна, в новый и получил эту ошибку.

Для меня потребовалось сделать противоположный подход к Андреасу Калеру, чтобы исправить:

После создания файла окна и установки начального uri этого файла я переключил страницу на ApplicationDefinition свойства App.xaml 'Build Action'.