Я очень начинаю, когда речь заходит о программировании, но я был уверен, что одним из универсальных правил было то, что программа начинается с 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'.