Я новичок в программировании, но был уверен, что одним из универсальных правил было то, что программа начинается с Main (). Когда я создаю проект WPF, я его не вижу. Является ли Main () просто другим именем в WPF?
Он создается во время сборки, но вы можете предоставить свой собственный (при необходимости устраняя неоднозначность в свойствах проекта). Найдите файл приложения в obj / debug; У меня есть (любезно предоставлено "C # 2010 Express") App.g.i.cs:
То же самое существует и в App.g.cs. Но я пытался добавить что-то, Main()и каждый раз, когда я перестраивал свой проект, он возвращался к тому, что у вас есть здесь. Пытался создать свой собственный в другом классе, но Project Properties находит только MyProject.App, а не другой класс, поэтому не может перенаправить его.
vapcguy 08
1
Или откройте App.xaml.csв Visual Studio. Используйте панель навигации> раскрывающийся список Метод> выберите Main(выделено серым). Это приведет вас к App.g.i.cs.
P.Brian.Mackey
136
Метод Main () создается автоматически. Если вы хотите предоставить свой собственный, вам необходимо (проверено в VS2013 и VS2017):
Щелкните правой кнопкой мыши файл App.xaml в обозревателе решений и выберите пункт «Свойства».
Измените действие сборки на страницу (начальное значение - ApplicationDefinition)
Затем просто добавьте метод Main () в App.xaml.cs. Это могло быть так:
[STAThread] устанавливает модель потоковой передачи COM для вашего приложения. Обычно вы просто устанавливаете его на STA и не беспокоитесь о том, что именно он делает. Если вам интересно, посетите msdn.microsoft.com/de-de/library/…
Андреас Калер,
Не делай этого! Это навсегда нарушит статические ресурсы, определенные в App.xaml в стилях конструктора для всего проекта.
Himbeer
13
Main() автоматически предоставляется CLR и WPF.
Компилятор C # принимает параметр командной строки, /mкоторый указывает тип, содержащий реализацию Main(). По соглашению, если явно не указан запускаемый объект, CLR будет искать любой класс, имеющий статический Main()метод, и вызывать его. (Как отметил в своем комментарии @Marc Gravel)
В случае WPF, Main()автоматически создается при App.xamlсборке и указывается переключатель / m, чтобы компилятор C # использовал этот класс в качестве точки входа. Однако если вы посмотрите на свойства проекта, вы обнаружите, что там есть настройка для выбора объекта запуска. Так что, если вы хотите, вы можете предоставить свой собственный класс, который реализует Main().
Обратите внимание, что это возлагает на вас ответственность за создание Applicationэкземпляра и вызов его Run()метода, чтобы убедиться, что инфраструктура WPF запущена правильно.
Собственно, без /mнего все равно, как называется тип; если вы не указываете явно, он просто пытается найти любой подходящий Mainметод и жалуется, если находит 0 или более одного. Например, образец «Hello World» в спецификации языка (§1.1) использует в Helloкачестве имени типа.
Марк Гравелл
2
Чтобы быть педантичным: не совсем точно сказать, что main()это предоставляется CLR (среда выполнения), это действительно компилятор, который его генерирует.
Хэнк
Добавлен мой +1 для напоминания аудитории, что им придется добавить свой собственный экземпляр приложения (т.е. MyApp.App app = new MyApp.App();) и вызвать .Run()его, как и в предыдущем Main()случае. Хороший звонок. Кроме того, пришлось бы добавить app.InitializeComponent();раньше app.Run(), и, к счастью для нас, исходный InitializeComponent()метод все еще существует (показан в App.g.cs, поэтому нет необходимости добавлять его обратно!).
vapcguy 08
7
Main()генерируется во время компиляции. Вы можете найти его в App.g.cs(в obj/{Debug,Release}папке).
main()является стандартной точкой входа для приложения, но все приложения структурированы таким образом. В проекте XAML файл App.XAML указывает точку входа, в которой говорится StartupUri="MainWindow.xaml".
Как утверждают другие, фактическая функция main создается на основе содержимого файлов XAML в проекте.
Ответы:
Он создается во время сборки, но вы можете предоставить свой собственный (при необходимости устраняя неоднозначность в свойствах проекта). Найдите файл приложения в obj / debug; У меня есть (любезно предоставлено "C # 2010 Express")
App.g.i.cs
:источник
App.g.cs
. Но я пытался добавить что-то,Main()
и каждый раз, когда я перестраивал свой проект, он возвращался к тому, что у вас есть здесь. Пытался создать свой собственный в другом классе, но Project Properties находит только MyProject.App, а не другой класс, поэтому не может перенаправить его.App.xaml.cs
в Visual Studio. Используйте панель навигации> раскрывающийся список Метод> выберитеMain
(выделено серым). Это приведет вас кApp.g.i.cs
.Метод Main () создается автоматически. Если вы хотите предоставить свой собственный, вам необходимо (проверено в VS2013 и VS2017):
Затем просто добавьте метод Main () в App.xaml.cs. Это могло быть так:
источник
Main()
автоматически предоставляется CLR и WPF.Компилятор C # принимает параметр командной строки,
/m
который указывает тип, содержащий реализациюMain()
. По соглашению, если явно не указан запускаемый объект, CLR будет искать любой класс, имеющий статическийMain()
метод, и вызывать его. (Как отметил в своем комментарии @Marc Gravel)В случае WPF,
Main()
автоматически создается приApp.xaml
сборке и указывается переключатель / m, чтобы компилятор C # использовал этот класс в качестве точки входа. Однако если вы посмотрите на свойства проекта, вы обнаружите, что там есть настройка для выбора объекта запуска. Так что, если вы хотите, вы можете предоставить свой собственный класс, который реализуетMain()
.Обратите внимание, что это возлагает на вас ответственность за создание
Application
экземпляра и вызов егоRun()
метода, чтобы убедиться, что инфраструктура WPF запущена правильно.источник
/m
него все равно, как называется тип; если вы не указываете явно, он просто пытается найти любой подходящийMain
метод и жалуется, если находит 0 или более одного. Например, образец «Hello World» в спецификации языка (§1.1) использует вHello
качестве имени типа.main()
это предоставляется CLR (среда выполнения), это действительно компилятор, который его генерирует.MyApp.App app = new MyApp.App();
) и вызвать.Run()
его, как и в предыдущемMain()
случае. Хороший звонок. Кроме того, пришлось бы добавитьapp.InitializeComponent();
раньшеapp.Run()
, и, к счастью для нас, исходныйInitializeComponent()
метод все еще существует (показан в App.g.cs, поэтому нет необходимости добавлять его обратно!).Main()
генерируется во время компиляции. Вы можете найти его вApp.g.cs
(вobj/{Debug,Release}
папке).источник
main()
является стандартной точкой входа для приложения, но все приложения структурированы таким образом. В проекте XAML файл App.XAML указывает точку входа, в которой говоритсяStartupUri="MainWindow.xaml"
.Как утверждают другие, фактическая функция main создается на основе содержимого файлов XAML в проекте.
источник
Я скопировал файлы, которые не загружались в другом проекте без главного окна, в новый и получил эту ошибку.
Мне потребовалось сделать противоположный подход Андреаса Калера, чтобы исправить:
После создания файла окна и установки uri запуска для этого файла я переключил Page на ApplicationDefinition свойства App.xaml 'Build Action'.
источник
Если вы удалили App.xaml и MinWindow.xaml по умолчанию, лучше отредактировать .csproj. После добавления App.xaml вручную ваш .csproj будет:
Измените это на:
источник