Нет Main() в WPF?
Я начинающий, когда дело доходит до программирования, но я был уверен, что одним из универсальных правил было то, что программа начинается с Main(). Я не вижу ни одного, когда я создаю проект WPF. Main () просто называется по-другому в WPF?
8 ответов
Он генерируется во время сборки, но вы можете предоставить свой собственный (устранение неоднозначности в свойствах проекта при необходимости). Найдите в файле 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):
- Щелкните правой кнопкой мыши файл App.xaml в обозревателе решений и выберите пункт "Свойства".
- Измените "Build Action" на "Page" (начальное значение "ApplicationDefinition")
Затем просто добавьте метод 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 запущена правильно.
Main()
генерируется во время компиляции. Вы можете найти это в App.g.cs
(в obj/{Debug,Release}
папка).
main()
является стандартной точкой входа для приложения, но все приложения структурированы таким образом. В проекте XAML файл App.XAML указывает точку входа, в которой он говорит StartupUri="MainWindow.xaml"
,
Как утверждают другие, фактическая основная функция генерируется на основе содержимого файлов XAML в проекте.
Если вы удалили по умолчанию 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>
Я скопировал файлы, которые не загружались в другой проект без главного окна, в новый и получил эту ошибку.
Для меня потребовалось сделать противоположный подход к Андреасу Калеру, чтобы исправить:
После создания файла окна и установки URI запуска для этого файла я переключил страницу в ApplicationDefinition свойства App.xaml "Build Action".
To Clear this is Error Do the following Step
Right Click on App.Xaml
Properties>Change Buld Action
From Page to > ApplicationDefinition
Build the soulution and Run
It Will Work Fine[enter image description here][1]
См. также это изображение [1]: https://stackru.com/images/b41930dadffda1b7ff00d099fa16cc3854cd2df5.png