Я новичок в программировании, но был уверен, что одним из универсальных правил было то, что программа начинается с Main (). Когда я создаю проект WPF, я его не вижу. Является ли Main () просто другим именем в WPF?
Я новичок в программировании, но был уверен, что одним из универсальных правил было то, что программа начинается с Main (). Когда я создаю проект WPF, я его не вижу. Является ли Main () просто другим именем в WPF?
Ответы:
Он создается во время сборки, но вы можете предоставить свой собственный (при необходимости устраняя неоднозначность в свойствах проекта). Найдите файл приложения в 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();
}
}
}
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. Это могло быть так:
[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
сборке и указывается переключатель / 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()
является стандартной точкой входа для приложения, но все приложения структурированы таким образом. В проекте XAML файл App.XAML указывает точку входа, в которой говорится StartupUri="MainWindow.xaml"
.
Как утверждают другие, фактическая функция main создается на основе содержимого файлов XAML в проекте.
Я скопировал файлы, которые не загружались в другом проекте без главного окна, в новый и получил эту ошибку.
Мне потребовалось сделать противоположный подход Андреаса Калера, чтобы исправить:
После создания файла окна и установки uri запуска для этого файла я переключил Page на ApplicationDefinition свойства App.xaml 'Build Action'.
Если вы удалили App.xaml и MinWindow.xaml по умолчанию, лучше отредактировать .csproj. После добавления App.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>