Нет Main () в WPF?

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

7 ответов


он генерируется во время сборки, но вы можете предоставить свой собственный (при необходимости устраняя его в project-properties). Посмотрите в obj / debug для файла приложения; у меня есть (любезно предоставлено "C# 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();
        }
    }
}

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

  • щелкните правой кнопкой мыши приложение.xaml в обозревателе решений выберите Свойства
  • изменить 'Build Action' на ' Page '(начальное значение - 'ApplicationDefinition')

затем просто добавьте метод Main () в приложение.код XAML.цезий. Это могло быть так:

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

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

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

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

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


Main() генерируется во время компиляции. Вы можете найти его в App.g.cs (in ).


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

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


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

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

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


в случае, если вы удалили приложения по умолчанию.xaml и MinWindow.xaml, лучше отредактировать .csproj файл После добавления приложения.xaml вручную, ваш .csproj будет:

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

заменить на:

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>