7 ответов:
он генерируется во время сборки, но вы можете предоставить свой собственный (при необходимости устраняя его в свойствах проекта). Посмотрите в 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.xamlis построен и указан параметр /m, чтобы компилятор C# использовал этот класс в качестве точки входа. Однако, если вы посмотрите на свойства проекта, вы обнаружите, что есть параметр для выбора объекта запуска. Так что если вы хотите, вы можете предоставить свой собственный класс, реализующийMain().обратите внимание, что это возложит на вас ответственность за создание
Applicationэкземпляр и вызвать егоRun()метод для обеспечения правильного запуска инфраструктуры WPF.
main()стандартная точка входа для приложения, но все приложения структурированы таким образом. В проекте XAML-это приложение.XAML файл указывает точку входа, где он говоритStartupUri="MainWindow.xaml".Как утверждают другие, фактическая основная функция генерируется на основе содержимого файлов XAML в проекте.
Я скопировал файлы, которые не будут загружаться в другой проект, который был без mainwindow в новый и получил эту ошибку.
для меня потребовалось сделать противоположный подход к Андреасу Келеру, чтобы исправить:
после создания файла окна и установки 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>
Comments