Я початківець, коли йдеться про програмування, але я був впевнений, що одним із універсальних правил є те, що програма починається з Main (). Я не бачу такого, коли створюю проект WPF. Майн () просто назвав щось інакше у WPF?
Я початківець, коли йдеться про програмування, але я був впевнений, що одним із універсальних правил є те, що програма починається з Main (). Я не бачу такого, коли створюю проект WPF. Майн () просто назвав щось інакше у 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()
і кожного разу, коли я будувати свій проект, він повернеться до того, що у вас є, тут. Спробував створити свій власний в іншому класі, але властивості проекту знаходять лише MyProject.App, а не інший клас, тому не можу перенаправити його.
App.xaml.cs
у візуальній студії. Скористайтеся панеллю навігації> Спадний список методів> виберіть 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, тому немає необхідності додавати цю спинку!).
Я скопіював файли, які не завантажуються в інший проект, який не мав основного вікна, у новий, і отримав цю помилку.
Для мене потрібно було зробити протилежний підхід до Андреаса Калера, щоб виправити:
Після створення віконного файлу та встановлення uri для запуску цього файлу я переключив сторінку на 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>