Jestem początkującym jeśli chodzi o programowanie, ale byłem pewien, że jedną z uniwersalnych zasad było to, że program zaczyna się od Main (). Nie widzę żadnego, gdy tworzę projekt WPF. Czy Main () jest po prostu nazwany inaczej w WPF?
128
Odpowiedzi:
Jest generowany podczas kompilacji, ale możesz podać swój własny (ujednoznaczniając go we właściwościach projektu, jeśli to konieczne). Poszukaj w obj / debug pliku aplikacji; Mam (dzięki uprzejmości „C # 2010 Express”)
App.g.i.cs
z:źródło
App.g.cs
również w programie. Ale próbowałemMain()
coś dodać i za każdym razem, gdy odbudowywałem swój projekt, wracał do tego, co masz tutaj. Próbowałem utworzyć własną w innej klasie, ale właściwości projektu znajdują tylko MyProject.App, a nie inną klasę, więc nie mogę go przekierować.App.xaml.cs
w programie Visual Studio. Użyj paska nawigacji> Lista rozwijana Metoda> wybierzMain
(wyszarzona). To prowadzi doApp.g.i.cs
.Metoda Main () jest tworzona automatycznie. Jeśli chcesz udostępnić swój własny, musisz (przetestowany w VS2013 i VS2017):
Następnie po prostu dodaj metodę Main () do App.xaml.cs. Może to wyglądać tak:
źródło
Main()
jest automatycznie udostępniana przez środowisko CLR i WPF.Kompilator C # przyjmuje przełącznik wiersza polecenia,
/m
który określa typ zawierający implementacjęMain()
. Zgodnie z konwencją, jeśli nie określono jawnie żadnego obiektu startowego, środowisko CLR wyszuka każdą klasę, która maMain()
metodę statyczną , i wywoła ją. (Jak zauważył @Marc Gravel w swoim komentarzu)W przypadku WPF
Main()
jest generowany automatycznie, gdyApp.xaml
jest kompilowany, a przełącznik / m jest określony, aby kompilator C # używał tej klasy jako punktu wejścia. Jeśli jednak spojrzysz na właściwości projektu, przekonasz się, że istnieje ustawienie umożliwiające wybranie obiektu startowego. Więc jeśli chcesz, możesz dostarczyć własną klasę, która implementujeMain()
.Zwróć uwagę, że spowoduje to nałożenie na Ciebie odpowiedzialności za utworzenie
Application
wystąpienia i wywołanie jegoRun()
metody, aby zapewnić prawidłowe uruchomienie infrastruktury WPF.źródło
/m
niego nie obchodzi, jak nazywa się typ; jeśli nie są jednoznaczne to po prostu stara się znaleźć żadnej odpowiedniejMain
metody, i narzeka, jeżeli stwierdzi 0 lub więcej niż jeden. Na przykład przykład „Hello World” w specyfikacji języka (§1.1) używaHello
jako nazwy typu.main()
jest dostarczane przez CLR (środowisko uruchomieniowe), tak naprawdę to kompilator go generuje.MyApp.App app = new MyApp.App();
) I wywołać.Run()
ją, tak jak poprzednioMain()
. Dobra decyzja. Musiałbym również dodaćapp.InitializeComponent();
wcześniejapp.Run()
i na szczęście dla nas oryginalnaInitializeComponent()
metoda nadal istnieje (widoczna w App.g.cs, więc nie ma potrzeby dodawania jej z powrotem!).Main()
jest generowany podczas kompilacji. Możesz go znaleźć wApp.g.cs
(wobj/{Debug,Release}
folderze).źródło
main()
to standardowy punkt wejścia do aplikacji, ale wszystkie aplikacje mają taką strukturę. W projekcie XAML plik App.XAML określa punkt wejścia, w którym jest napisanyStartupUri="MainWindow.xaml"
.Jak twierdzą inni, rzeczywista główna funkcja jest generowana na podstawie zawartości plików XAML w projekcie.
źródło
Skopiowałem pliki, które nie były ładowane w innym projekcie, który był bez głównego okna, do nowego i otrzymałem ten błąd.
W moim przypadku trzeba było zastosować odwrotne podejście do Andreasa Kahlera, aby naprawić:
Po utworzeniu pliku okna i ustawieniu startowego URI na ten plik przełączyłem Page na ApplicationDefinition we właściwości 'Build Action' App.xaml.
źródło
Jeśli usunąłeś domyślne App.xaml i MinWindow.xaml, lepiej edytować plik .csproj Po ręcznym dodaniu App.xaml, plik .csproj będzie:
Zmień to na:
źródło