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?


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.


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 !


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 ).


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


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,


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.


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)


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.


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.


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.


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");

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.


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

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()
    { ... }

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.


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.


1

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


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.


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 ...


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 ...


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...


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.


1

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

masukkan deskripsi gambar di sini


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


0

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


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


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
}

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.


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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.