Application_Start tidak menembak?

143

Saya memiliki aplikasi ASP.NET MVC (beta) yang sedang saya kerjakan, dan saya mengalami kesulitan mencari tahu apakah saya melakukan sesuatu yang salah, atau jika Application_Startmetode saya di Global.asax.cs sebenarnya tidak diaktifkan ketika saya mencoba untuk debug aplikasi.

Saya meletakkan breakpoint pada sebuah baris dalam Application_Startmetode saya , dan saya berharap bahwa ketika saya mencoba untuk debug aplikasi yang breakpoint harus terkena ... tetapi tidak pernah melakukannya. Tidak setelah saya mereset IIS, tidak setelah saya reboot, tidak pernah. Apakah saya melewatkan sesuatu? Mengapa metode ini tidak pernah dipanggil?

Bob Yexley
sumber
Apakah halaman global.asax Anda mewarisi dari kelas global tempat metode Anda berada?
Saya telah melompat ke dalam kasus di mana global.asaxfile itu hilang. jadi itu juga patut diperiksa :-)
itsho

Jawaban:

85

Jika ini di IIS, aplikasi dapat memulai sebelum debugger telah dilampirkan. Jika demikian, saya tidak yakin apakah Anda dapat tidur cukup lama agar bisa terhubung.

Di Visual Studio, Anda bisa melampirkan debugger ke suatu proses. Anda melakukan ini dengan mengklik Debug >> Lampirkan untuk memproses. Lampirkan ke browser dan kemudian tekan aplikasi Anda. Agar aman, maka restart IIS dan tekan situs. Saya tidak 100% yakin ini akan menyelesaikan masalah, tetapi itu akan jauh lebih baik daripada melepaskan thread sleep di App_Start.

Pilihan lain adalah host sementara di server web built-in sampai Anda selesai memulai aplikasi debug.

Gregory A Beamer
sumber
21
untuk memperluas - (dalam VS2010, menggunakan tipe proyek MVC 3) klik kanan proyek web> properties> web (tab) dan pastikan "Gunakan Visual Studio Development Server" dipilih tombol radio. Maka breakpoint Application_Start Anda harus dipukul dengan baik.
MemeDeveloper
Terima kasih @MemoDeveloper !! Luar biasa !!
Praveen Prajapati
2
Ahhhhhh mannnnnnnn, saya kehilangan beberapa jam. Lagi!! Terima kasih atas jawaban ini. :)
Samuel
Jika Anda menetapkan breakpoint di Visual Studio di Global.asax.cs di bawah Application_Start () dan itu tidak menyala, periksa tipe build Anda. Jika Anda menjalankan sebagai rilis, breakpoint ini mungkin tidak menyala. Beralih ke Debug dan itu harus berhenti.
Paul
171

Catatan: alternatif mudah yang bagus untuk menggunakan "Visual Studio Development Server" inbuilt atau IIS Express (misalnya karena Anda berkembang melawan IIS dan memiliki pengaturan khusus yang Anda perlukan untuk berfungsinya aplikasi Anda) adalah dengan tetap menjalankan menjalankan di IIS (I gunakan entri file Server Web Kustom + host + IIS mengikat ke domain yang sama)

  1. tunggu sesi debugging menyala ok
  2. maka cukup buat edit spasi putih ke root web.config dan simpan file tersebut
  3. segarkan halaman Anda (Ctrl + F5)

Breakpoint Anda harus dipukul dengan baik, dan Anda dapat terus men-debug di habitat IIS alami Anda . Bagus !

Pengembang Meme
sumber
Ini adalah hookup daur ulang AppDomain yang brilian. Terima kasih !!
Sanjay10
Tidak ada lagi Server Pengembangan Visual Studio. stackoverflow.com/questions/19676527/…
mac10688
1
@ mac10688 benar, tetapi masih ada "IIS Express" yang umumnya masih bukan lingkungan produksi. Diperbarui jawabannya sesuai terima kasih.
MemeDeveloper
Jawaban diterima yang pasti. Saya mengarahkan perangkat ke IIS saya yang tidak memungkinkan berkomunikasi saat menggunakan edisi IIS Express! Ini sangat mempesona.
Matt Skeldon
54

Berikut ini membantu dalam hal apa pun (tidak masalah jika Anda menggunakan IIS, Cassini atau apa pun):

  1. Atur breakpoint Anda di Application_Start
  2. Mulai debugging (breakpoint kemungkinan besar tidak mengenai) -> halaman ditampilkan di browser
  3. Ubah web.config (mis. Masukkan baris kosong) dan simpan
  4. Muat ulang halaman di browser -> breakpoint berhasil!

Mengapa ini bekerja? Ketika web.config diubah, server web (IIS, Cassini, dll.) Melakukan daur ulang, tetapi dalam kasus ini (untuk alasan apa pun), prosesnya tetap sama, sehingga Anda tetap terhubung dengannya dengan debugger (Visual Studio ).

Jochen Scharr
sumber
3
Klon, dua tahun kemudian dari stackoverflow.com/a/7655582/11635 - pertimbangkan untuk menghapus dan memasukkan informasi tambahan dalam komentar
Ruben Bartelink
sebenarnya @RubenBartelink, saya pikir jawaban ini lebih jelas daripada yang lain, karena kata-kata dan penjelasan tambahan.
Heriberto Lugo
1
@HeribertoLugo Saya setuju dengan hal itu - 50 upvotes sulit untuk tidak setuju sepenuhnya (Meskipun demikian, saya akan senang untuk diedit ke jawaban lain untuk menutup kesenjangan jika ada yang punya waktu dan konteks; sudah beberapa waktu sejak saya ' telah menggunakan debugger di IIS!)
Ruben Bartelink
saya setuju mengedit yang lain dan menghapus yang satu ini akan menjadi rute yang lebih baik .. saya melihat yang lain terlebih dahulu dan mengikutinya sedikit, jadi tidak berhasil .. ketika saya melihat yang ini setelah menghabiskan setengah jam lebih banyak untuk itu, maka itu membuat lebih masuk akal .. itu setengah jam saya tidak perlu kehilangan ..
Heriberto Lugo
22

Saya juga mengalami masalah dengan breakpoints di application_start dengan IIS aplikasi yang di-host. Solusi yang baik adalah menggunakan Debugger.Break (); dalam kode alih-alih VS breakpoint

Flores
sumber
2
Saya yakin itu tidak mengenai breakpoint karena ada hubungannya dengan menjalankan kumpulan aplikasi Anda dalam mode pipa terintegrasi. Apakah Anda menggunakannya?
Flores
9

Saya memiliki masalah yang sama. Saya telah membuat banyak penggantian nama dalam solusi saya. Setelah itu saya mendapat dua aplikasi web yang tidak berfungsi dan beberapa aplikasi web lainnya baik-baik saja. Saya mendapat kesalahan bahwa saya memiliki rute yang salah. Ketika saya mencoba mengatur break point dalam Application_Startmetode, dan kemudian restart IIS, VS tidak menghentikan eksekusi. Dengan aplikasi web yang bisa dikerjakan istirahat bekerja. Kemudian saya ingat bahwa "solusi bersih" dan "membangun kembali" tidak menghapus majelis yang tersisa setelah penggantian nama. Dan itu solusinya! Saya telah secara manual membersihkan bindirektori-aplikasi buggy-web saya dan kemudian melihat kesalahan baru dalam Global.asax Inherits=""atribut direferensikan dll lama. Saya telah mengubahnya di baru dan istirahat mulai bekerja. Misalkan, selama mengganti nama Global.asax tidak diperbarui,

Dao
sumber
Wow, itu sulit ditemukan! Itu untuk tipnya!
Landon Poch
@POR Sungguh ini luar biasa, Terima kasih;) Saya membuang-buang waktu untuk ini, saya seharusnya sudah menemukan jawaban Anda sebelumnya :)
Pankaj Parkar
7

Punya masalah yang sama dalam Proyek yang kami ambil setelah vendor lain membangunnya. Masalahnya adalah bahwa meskipun ada sejumlah perintah yang ditulis oleh vendor sebelumnya di Global.asax.cs, yang mungkin membuat Anda percaya itu sedang digunakan, itu sebenarnya diabaikan sepenuhnya. Global.asax tidak mewarisinya, dan mudah untuk tidak pernah melihat file ini jika file .cs ada - Anda harus mengklik kanan Global.asax dan klik Lihat Markup untuk benar-benar melihatnya.

Global.asax:

<%@ Application Language="C#" %>

Perlu diubah menjadi:

<%@ Application Codebehind="Global.asax.cs" Inherits="ProjectNamespace.MvcApplication" Language="C#" %>

Di mana ProjectNamespace adalah apa pun namespace dari kelas Global.asax.cs Anda (biasanya nama Proyek Anda).

Dalam kasus kami, file tersebut berisi banyak kode inline, beberapa di antaranya disalin dari file .cs, beberapa tidak. Kami baru saja membuang kode inline ke file .cs dan secara bertahap menggabungkan perubahan kami kembali.

Chris Moschini
sumber
Itu dia. Saya menambahkan pengecualian pada permulaan Aplikasi (sesuai jawaban Penjara NOL) dan itu tidak menyala sama sekali, jadi tidak ada hubungannya dengan debugger. Memperbarui markup Global.asax memperbaikinya.
Patrick Borkowicz
5

Coba alihkan mode pipeline terkelola untuk kumpulan aplikasi ke "Klasik" alih-alih "Terintegrasi". Itu memecahkan masalah bagi saya. Melihat alasannya sekarang ...

(Alat peraga untuk jawaban ini milik Flores (lihat komentarnya atas jawabannya sendiri), saya hanya ingin memberikan ini sebagai jawaban terpisah untuk menarik lebih banyak perhatian padanya)

acezanne
sumber
Ya itu berhasil. Tetapi jika Anda berasumsi bahwa aplikasi Anda harus bekerja di bawah kumpulan aplikasi terintegrasi, maka aplikasi tersebut juga harus di-debug dalam kumpulan terintegrasi.
Karel Kral
Aplikasi saya juga tidak akan mencapai breakpoints setelah "F5" ketika saya beralih dari Classic ke Integrated. Apakah Anda pernah menemukan alasannya? Saya tidak memiliki persyaratan untuk menggunakan Terintegrasi, tetapi itu mengecilkan hati ketika hal-hal ini tidak berfungsi tanpa alasan yang dapat dijelaskan.
CodexArcanum
5

Pastikan global.asax Anda tidak berada di bawah subdirektori. Itu harus ditempatkan di tingkat root ke dalam proyek Anda.

Manusia gua
sumber
Terima kasih banyak!!! Anda menyelamatkan saya dari menjadi gila! Inilah yang menyebabkan masalah saya.
Yann Duran
1
Masalah saya adalah bahwa saya baru saja membuat kelas yang dipanggil Global.asax.csdan diharapkan akan berfungsi. Anda harus membuatnya menggunakan Add-> New Item-> Global Application Classsehingga dibuat dengan Global.asaxfile konfigurasi formulir web yang sesuai .
Levi Fuller
4

Kami memiliki masalah serupa, di mana global.asax.cs diabaikan.

Ternyata situs tersebut ditingkatkan dari situs web .NET 2 yang telah dikompilasi menjadi situs .NET 4.0. Di server, PrecompiledApp.configfile belum dihapus dari folder root. Setelah menghapusnya, dan mendaur ulang kumpulan aplikasi IIS dan menyentuh web.config untuk memulai kembali aplikasi, kode dalam Global.asax.cs mulai berfungsi dengan baik.

Glen Little
sumber
3

Saya pernah mengalami masalah ketika Global.asax dan Global.asax.cs tidak benar-benar disalin ke folder IIS oleh skrip penerapan ... Jadi itu berfungsi ketika debugging pada server pengembangan, tetapi tidak di bawah IIS.

Michael Angel
sumber
Saya memiliki masalah yang sama. setelah saya mengunggah Global.asax ke server, masalah terpecahkan.
Moslem Hady
3

Entri yang terlambat ...

Untuk menguji apakah Aplikasi IIS dimulai atau tidak sebelum debugger memiliki cukup waktu untuk melampirkan cukup tambahkan ini ke atas atau bawah dari GLOBAL.ASAX Anda Application_Start.

throw new ApplicationException("Yup, it fired");
Tahanan NOL
sumber
2

Ketika Anda mengatakan "debug", maksud Anda sebenarnya meluncurkan aplikasi dari server web bawaan Visual Studio untuk debugging, atau maksud Anda melampirkan ke proses di IIS? Jika yang pertama, Anda harus menekan Application_Start, tetapi jika yang terakhir, mungkin sulit untuk berada di proses cukup awal untuk menangkapnya.

Rex M
sumber
Benar, maksud saya meluncurkan aplikasi dari VS. Saya memilikinya di-host di IIS, jadi VS melekat pada proses itu. Apakah Anda mengatakan bahwa acara tersebut dipicu sebelum sebelum VS dapat melampirkan ke proses?
Bob Yexley
2

Tutup Visual Studio dan hapus bindanobj folder di proyek web Anda (atau semua proyek dalam solusi).

Berikut adalah perintah untuk menghapus folder ini dari semua proyek Anda:

rm *\bin -r
rm *\obj -r
sparebytes
sumber
2

Saya telah membuat beberapa perubahan berdasarkan "Analisis Kode pada Bangun" dari Visual Studio. Analisis Kode menyarankan "CA1822 Tandai anggota sebagai statis" untuk Application_Start () di Global.asax. Saya melakukan itu dan berakhir dengan masalah ini.

Saya menyarankan untuk menekan pesan Analisis Kode ini, dan tidak mengubah tanda tangan metode / kelas yang secara otomatis dibuat oleh platform yang digunakan untuk bootstrap Aplikasi. Tanda tangan dari metode Application_Start mungkin tidak statis karena suatu alasan.

Saya kembali ke metode-tanda tangan ini dan Application_Start () kembali aktif:

    protected void Application_Start()
    { ... }
toralux
sumber
2

Saya menghadapi masalah ini ketika menggunakan halaman statis (misalnya index.html) sebagai halaman awal - Aplikasi-Start tidak dipanggil. Saya menemukan bahwa melayani halaman statis sebenarnya tidak memulai aplikasi. Meminta halaman .aspx bisa.

Tuan Cook
sumber
Inilah yang melakukannya untuk saya. Terima kasih.
Reekeecast
2

Pastikan ruang nama di Global.asax dan Global.asax.cs sama. Jika mereka berbeda itu tidak akan menimbulkan kesalahan tetapi tidak akan mencapai breakpoint juga karena tidak menjalankan application_start sama sekali.

Irfan
sumber
1

Saya pikir acara mulai aplikasi hanya dipecat ketika permintaan pertama dibuat, apakah Anda memukul situs web Anda (yaitu membuat permintaan)?

ninj
sumber
Ya saya membuat permintaan ke aplikasi.
Bob Yexley
1

Saya mengalami masalah ini dalam proyek .net 4 formulir web vs2010 proyek dan mencoba semua yang disebutkan di halaman ini. Akhirnya menghapus dan menambahkan global.asax benar-benar menyelesaikan masalah bagi saya.

wonster
sumber
1

Saya menangani masalah yang sama, tidak dapat menangkap Application_Start. Dan alasannya adalah bahwa hal itu tidak dilakukan untuk melakukan missmatch dalam file markup. File markup Global.asax mewarisi kelas lain ...

lobiZoli
sumber
1

Apakah Anda memeriksa pengaturan Proyek? Saya punya masalah ini dan saya punya URL Mulai pergi ke port yang berbeda dari port spesifik server saya. Butuh waktu terlalu lama untuk mencari tahu ...

D. Kermott
sumber
1

Setelah mencoba sebanyak mungkin jawaban lain yang berlaku dalam situasi saya dan tidak beruntung dengan salah satu dari mereka, saya pergi ke properti untuk proyek Web (proyek sisi server untuk aplikasi Silverlight menggunakan Layanan RIA), mengklik "Web" tab dan mengubah Server yang dipilih dari "IIS Lokal" menjadi "IIS Express". (Catatan Saya menggunakan VS2013.) Ini menyelesaikan masalah. Application_Start dijalankan di bawah "IIS Express" tetapi tidak di bawah "IIS Lokal". Menarik...

MylesRip
sumber
Sedang dieksekusi. Anda benar-benar tidak dapat men-debug itu karena Anda belum terpasang ke proses IIS, atau terlampir setelah itu dieksekusi.
uygar.raf
1

Saya mencoba untuk melangkah melalui kode di RegisterRoutes () dipanggil dari Aplikasi mulai dan tidak memukul breakpoint saya. Saya memutuskan Application_Start tidak dipanggil. Saya harus membuat perubahan untuk membuat perubahan dangkal ke App_start / RouteConfig.cs dan menyimpannya sebelum Application_Start dipanggil. Saya kira file-file ini di-cache di suatu tempat dan tidak dipanggil kecuali ada perubahan.

Don Dillard
sumber
1

Masalah saya yang sama telah diatasi dengan Menambahkan referensi System.Web.Routingperakitan dalam proyek

masukkan deskripsi gambar di sini

Prakash Mhasavekar
sumber
0

Jika Anda menggunakan System.Diagnostics.Debugger.Break (); solusi (yang saya pikir baik-baik saja untuk penggunaan sementara) dan itu "tidak bekerja" pada Mesin Windows 8 Anda. Alasannya adalah bug di Visual Studio "Just in time debugging".

Cara mengatasinya adalah sebagai berikut adalah untuk memperbaiki kunci untuk "Visual Studio Just-In-Time Debugger"

Buka regedit dan buka HKEY_CLASSES_ROOT \ AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347} untuk nilai registri 'AppIDFlags', atur bendera ke 0x8

Info lebih lanjut di sini: http://connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported

ProVega
sumber
0

Dalam kasus saya, membunuh instance Server Pengembangan ASP.NET bawaan melalui baki sistem menyelesaikan masalah.

Maciej
sumber
0

Hal-hal aneh dan gila ... tetapi debugging pada mesin server dan pengguna lain membuat IIS Express berjalan di sesi mereka. Saya harus keluar dari pengguna itu untuk mematikan proses IIS Express yang sedang berjalan. Itu tampaknya telah memperbaiki masalah!

Memperbarui

Setelah menghabiskan lebih dari 1 jam mengejar apa yang menyebabkan masalah ... ini kesepakatannya: Saya agak berhasil mengetik sdalam <appSettings>bagian di Web.config. Visual Studio mencoba memperingatkan saya di Error Listjendela dengan peringatan . Saya akui saya jarang memeriksa peringatan ... harus mulai memeriksanya mulai sekarang. : D Segera setelah saya menghapus sbreakpoint yang terkena terkena Application_Start.

masukkan deskripsi gambar di sini

Leniel Maccaferri
sumber
0

Saya punya masalah ini ketika mencoba menginisialisasi log4net. Saya memutuskan untuk membuat konstruktor statis untuk Global.asax

static Global(){
//Do your initialization here statically
}
Tandai Procopio
sumber
0

Masalah terutama terjadi ketika Anda mencoba untuk memindahkan file Global.asax ke direktori solusi lain. Pindahkan kembali file Global.asax ke lokasi default. Ini akan berfungsi seperti yang diharapkan.

Arnab Chaudhuri
sumber
Bagaimana jika semua yang ada di situs web dikompilasi, termasuk Global.asax.aspx? Saya telah mengkompilasi file dalam direktori bin. Application_Start tidak dipecat.
Vin Shahrdar
0

Tidak ada solusi yang dijelaskan di atas bekerja untuk saya. Namun menginstal ulang paket

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

menggunakan nuget gui adalah solusi (tidak terlalu bagus)

Michele
sumber