Saya seorang pemula ketika datang ke pemrograman tapi saya yakin bahwa salah satu aturan universal adalah bahwa program dimulai dengan Main (). Saya tidak melihat satu ketika saya membuat proyek WPF. Apakah Main () hanya memberi nama yang berbeda di WPF?
128
Jawaban:
Itu dihasilkan selama membangun, tetapi Anda dapat memberikan Anda sendiri (disambiguasi dalam properti proyek yang diperlukan). Lihat di obj / debug untuk file aplikasi; Saya punya (milik "C # 2010 Express")
App.g.i.cs
dengan:sumber
App.g.cs
. Tetapi saya mencoba untuk menambahMain()
dan setiap kali saya akan membangun kembali proyek saya, itu akan kembali ke apa yang Anda miliki, di sini. Mencoba membuat sendiri di kelas lain, tetapi Project Properties hanya menemukan MyProject.App, bukan kelas lain, jadi tidak bisa mengarahkan ulang.App.xaml.cs
di studio visual. Gunakan bilah navigasi> Metode drop down list> selectMain
(greyed out). Ini membawa Anda keApp.g.i.cs
.Metode Main () dibuat secara otomatis. Jika Anda ingin menyediakan sendiri, Anda harus (diuji dalam VS2013 dan VS2017):
Kemudian cukup tambahkan metode Main () ke App.xaml.cs. Bisa seperti ini:
sumber
Main()
secara otomatis disediakan oleh CLR dan WPF.Compiler C # mengambil saklar baris perintah
/m
yang menentukan jenis yang berisi implementasiMain()
. Dengan konvensi, jika tidak ada objek startup yang secara eksplisit ditentukan, CLR akan mencari kelas yang memilikiMain()
metode statis dan akan memanggilnya. (Seperti yang ditunjukkan oleh @Marc Gravel dalam komentarnya)Dalam kasus WPF,
Main()
secara otomatis dihasilkan ketikaApp.xaml
dibangun dan / m switch ditentukan untuk membuat kompiler C # menggunakan kelas itu sebagai titik masuk. Jika Anda melihat properti proyek, Anda akan menemukan ada pengaturan bagi Anda untuk memilih objek startup. Jadi jika Anda mau, Anda bisa menyediakan kelas Anda sendiri yang mengimplementasikanMain()
.Perhatikan bahwa ini akan membuat Anda bertanggung jawab untuk membuat
Application
instance dan memanggilRun()
metodenya untuk memastikan bahwa infrastruktur WPF dimulai dengan benar.sumber
/m
itu tidak peduli apa jenisnya; jika Anda tidak eksplisit hanya mencoba untuk menemukan setiap cocokMain
metode, dan mengeluh jika menemukan 0 atau lebih dari satu. Sebagai contoh, sampel "Hello World" dalam spesifikasi bahasa (§1.1) digunakanHello
sebagai nama tipe.main()
disediakan oleh CLR (runtime), itu benar-benar kompiler yang menghasilkannya.MyApp.App app = new MyApp.App();
) dan memanggilnya.Run()
, seperti yang sebelumnyaMain()
akan miliki. Panggilan yang bagus. Juga, harus menambahkanapp.InitializeComponent();
sebelumnyaapp.Run()
, dan untungnya bagi kita,InitializeComponent()
metode asli masih ada (lihat di App.g.cs, jadi tidak perlu menambahkan itu kembali!).Main()
dihasilkan selama kompilasi. Anda dapat menemukannya diApp.g.cs
(dalamobj/{Debug,Release}
folder).sumber
main()
adalah titik masuk standar untuk suatu aplikasi, tetapi semua aplikasi disusun dengan cara itu. Dalam proyek XAML, file App.XAML menentukan titik masuk di mana dikatakanStartupUri="MainWindow.xaml"
.Seperti yang dinyatakan oleh orang lain, fungsi utama sebenarnya dihasilkan berdasarkan isi file XAML dalam proyek.
sumber
Saya menyalin file yang tidak akan dimuat di proyek lain yang tanpa jendela utama ke yang baru dan mendapatkan kesalahan ini.
Bagi saya perlu melakukan pendekatan yang berlawanan dengan Andreas Kahler untuk memperbaikinya:
Setelah membuat file window dan mengatur startup uri ke file ini saya beralih Page ke ApplicationDefinition of App.xaml properti 'Build Action'.
sumber
Jika Anda menghapus App.xaml dan MinWindow.xaml default, lebih baik mengedit .csproj Setelah menambahkan App.xaml secara manual, .csproj Anda adalah:
Ubah ini menjadi:
sumber