Application_Start tetiklenmiyor mu?


143

Üzerinde çalıştığım bir ASP.NET MVC (beta) uygulamam var ve yanlış bir şey yapıyorsam veya Application_StartGlobal.asax.cs yöntemim aslında denediğimde ateş etmiyorsa anlamaya sorun yaşıyorum uygulama hata ayıklamak için.

Yöntemimdeki bir satıra bir kesme noktası koydum Application_Startve uygulamada hata ayıklama girişiminde bulunduğumda kesme noktasının vurulması gerektiğini düşünüyorum ... ama asla yapmıyor. IIS'yi sıfırladıktan sonra değil, yeniden başlattıktan sonra değil, hiç değil. Bir şey mi kaçırıyorum? Bu yöntem neden hiç çağrılmıyor?


Global.asax sayfanız, yönteminizin bulunduğu global sınıftan miras alıyor?

global.asaxDosyanın sadece eksik olduğu durumda geri döndüm . bu da kontrol etmeye değer :-)
itsho

Yanıtlar:


85

Bu IIS'deyse, uygulama hata ayıklayıcı eklenmeden önce başlatılabilir. Eğer öyleyse, takılmak için yeterince uzun uyku iplik olabilir emin değilim.

Visual Studio'da, hata ayıklayıcıyı bir işleme ekleyebilirsiniz. Bunu, Hata Ayıkla >> İşleme ekle seçeneğine tıklayarak yaparsınız. Tarayıcıya ekleyin ve ardından uygulamanıza basın. Güvende olmak için IIS'yi yeniden başlatın ve siteyi tıklayın. Ben% 100 bu sorunu çözecek ikna değilim, ama App_Start bir iplik uyku ateş daha çok daha iyi yapacağız.

Hata ayıklama uygulaması başlangıcı bitinceye kadar başka bir seçenek geçici olarak yerleşik web sunucusunda barındırılır.


21
genişletmek için - (VS2010'da, MVC 3 proje türünü kullanarak) web projesi> özellikler> web'e (sekme) sağ tıklayın ve "Visual Studio Development Server'ı Kullan" ın radyo düğmesinin seçili olduğundan emin olun. O zaman Application_Start kesme noktalarına iyice vurulmalıdır.
MemeDeveloper

Teşekkürler @MemoDeveloper !! Mükemmel !!
Praveen Prajapati

2
Ahhhhhh mannnnnnn, birkaç saatimi kaybettim. Tekrar!! Bu cevap için teşekkürler. :)
Samuel

Application_Start () altında Global.asax.cs içindeki Visual Studio'da bir kesme noktası ayarlarsanız ve tetiklenmezse, oluşturma türünüzü denetleyin. Bir sürüm olarak çalıştırıyorsanız, bu kesme noktası tetiklenmeyebilir. Hata Ayıkla'ya geçin ve durmalıdır.
Paul

171

Not: Dahili "Visual Studio Development Server" veya IIS Express'i kullanmak için güzel ve kolay bir alternatif (örneğin, IIS'ye karşı geliştirdiğiniz ve uygulamanızın düzgün çalışması için ihtiyacınız olan belirli ayarlara sahip olduğunuz için), IIS'de çalışmaya devam etmektir (I Özel Web Sunucusu + ana makineler dosya girişini + IIS'yi aynı etki alanına bağlama özelliğini kullanın)

  1. hata ayıklama oturumunun tamamlanmasını bekleyin tamam
  2. sonra kök web.config üzerinde bir boşluk yapın ve dosyayı kaydedin
  3. sayfanızı yenileyin (Ctrl + F5)

Kesme noktanıza iyi bir şekilde ulaşılmalı ve doğal IIS ortamınızda hata ayıklamaya devam edebilirsiniz . Harika !


Bu, parlak AppDomain geri dönüşüm bağlantısıdır. Teşekkürler !!
Sanjay10

Artık Visual Studio Development Server yok. stackoverflow.com/questions/19676527/…
mac10688

1
@ mac10688 true, ancak yine de genellikle üretim ortamı olmayan "IIS Express" var. Cevabı buna göre güncelledi teşekkürler.
MemeDeveloper

Kesin kabul edilmiş cevap. IIS Express sürümünü kullanırken iletişim kurmaya izin vermeyen aygıtları IIS'ye yönlendiriyorum! Bu bir cazibe çalıştı.
Matt Skeldon

54

Aşağıdakiler her durumda yardımcı olur (IIS, Cassini veya başka bir yöntem kullanırsanız kullanın):

  1. Uygulama noktanızda kesme noktanızı ayarlayın
  2. Hata ayıklamaya başla (kesme noktası büyük olasılıkla vurulmaz) -> tarayıcıda bir sayfa gösterilir
  3. Web.config dosyasını değiştirin (örneğin boş bir satır girin) ve kaydedin
  4. Sayfayı tarayıcıya yeniden yükleyin -> kesme noktası vuruldu!

Bu neden işe yarıyor? Web.config değiştirildiğinde, web sunucusu (IIS, Cassini, vb.) Bir geri dönüşüm yapar, ancak bu durumda (herhangi bir nedenle), işlem aynı kalır, bu nedenle hata ayıklayıcıya (Visual Studio) bağlı kalırsınız ).


3
Klon, iki yıl sonra stackoverflow.com/a/7655582/11635 - Herhangi bir ekstra bilgiyi silmeyi ve bir yoruma koymayı düşünün
Ruben Bartelink

aslında @ RubenBartelink, ben bu cevap diğerinden daha net olduğunu düşünüyorum, çünkü ifade ve ekstra açıklamalar.
Heriberto Lugo

1
@HeribertoLugo Çok memnunum - 50 upvotes tamamen katılmıyorum zor (Yine de, kimse zaman ve bağlam varsa boşluğu kapatmak için diğer cevapta düzenlemeler yapmaktan memnuniyet duyarım; ve IIS'de bir hata ayıklayıcı kullandım!)
Ruben Bartelink

diğer düzenleme ve bu bir kaldırma daha iyi bir yol olurdu kabul ediyorum .. Ben ilk diğerini gördüm ve biraz kapalı takip, bu yüzden işe yaramadı .. ben yarım saat daha üzerinde harcadıktan sonra bu bir gördüm, o zaman yaptı daha mantıklı .. bu yarım saat kaybetmem gerek yoktu ..
Heriberto Lugo

22

Ben barındırılan bir uygulama IIS ile application_start kesme noktaları ile ilgili sorunlar yaşıyorum. İyi bir geçici çözüm Debugger.Break () kullanmaktır; VS kesme noktası yerine kodda


2
Uygulama havuzunuzu entegre boru hattı modunda çalıştırmayla ilgili bir nokta olarak kesme noktasına çarpmamaya inanıyorum. Bunu kullanıyor musunuz?
Flores

9

Aynı problemim var. Çözümümde çok fazla yeniden adlandırma yaptım. Ondan sonra çalışmayan iki web uygulaması aldım ve birkaç başka web uygulaması iyiydi. Yanlış rotalarım olduğu için hata aldım. Application_StartMetot içinde kesme noktası kurmaya ve sonra IIS yeniden başlatmaya çalıştığımda , VS yürütmeyi kesmedi. Çalışılabilir web uygulamaları ile mola çalışıyordu. Sonra "temiz çözüm" ve "yeniden inşa" yeniden adlandırma sonra kalan derlemeleri silmez hatırladım. Ve bu çözümdü! Ben el ile binbuggy-web-apps dizinleri temizledik ve sonra Global.asax Inherits=""öznitelik yeni hata eski dll başvurulan gördüm . Yeni olarak değiştirdim ve mola çalışmaya başladı. Global.asax'ın yeniden adlandırılması sırasında güncellenmediğini varsayalım,


Vay canına, bu bulmak bir acıydı! Bahşiş için bu!
Landon Poch

@Dao Gerçekten bu harika, Teşekkürler;) Bu konuda birkaç saat harcadım, daha önce cevabınızı bulmalıydım :)
Pankaj Parkar

7

Başka bir satıcı kurduktan sonra devralmış olduğumuz bir Projede de aynı problem vardı. Sorun, önceki satıcı tarafından Global.asax.cs içinde yazılmış ve kullanımda olduğuna inanmanıza neden olabilecek bir dizi komut varken, aslında tamamen göz ardı ediliyordu. Global.asax bu dosyadan devralmadı ve .cs dosyası varsa bu dosyayı görmek hiç de kolay değil - Global.asax'a sağ tıklayıp gerçekten görmek için İşaretlemeyi Görüntüle'ye tıklamanız gerekiyor.

global.asax:

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

Değiştirilmesi gerekiyor:

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

ProjectNamespace, Global.asax.cs sınıfınızın ad alanı ne olursa olsun (genellikle projenizin adıdır).

Bizim durumumuzda dosya, bazıları .cs dosyasından kopyalanmış, bazıları değil. Satır içi kodu sadece .cs dosyasına aktardık ve değişikliklerimizi yavaş yavaş tekrar birleştirdik.


Öyleydi. Uygulama başlangıcına bir istisna ekledim (Mahkum ZERO'nun cevabına göre) ve hiç ateş etmiyordu, bu yüzden hata ayıklayıcı ile ilgisi yok. Global.asax işaretlemesini güncellemek sorunu çözdü.
Patrick Borkowicz

5

Uygulama havuzu için yönetilen ardışık düzen modunu "Tümleşik" yerine "Klasik" olarak değiştirmeyi deneyin. Bu benim için problemi çözdü. Sebebi şimdi inceliyoruz ...

(Bu cevap için sahne Flores'e aittir (kendi cevabı hakkındaki yorumuna bakın), sadece daha fazla dikkat çekmek için bunu ayrı bir cevap olarak sunmak istedim)


Evet çalışıyor. Ancak uygulamanızın tümleşik uygulama havuzu altında çalışması gerektiğini varsayarsanız, tümleşik havuz altında da hata ayıklanması gerekir.
Karel Kral

Klasikten Entegre'ye geçiş yaptığımda uygulamam da "F5" den sonra kesme noktalarına çarpmazdı. Nedenini hiç keşfettin mi? Entegre kullanmak için herhangi bir gereksinimim yok, ancak bunlar açıklanamayacak bir nedenden ötürü çalışmadığında cesaret kırıcı.
CodexArcanum

5

Global.asax dosyanızın bir alt dizinin altında olmadığından emin olun. Projenize kök düzeyinde yerleştirilmelidir.


Çok teşekkür ederim!!! Beni delirmekten kurtardın! Benim sorunum tam da buydu.
Yann Duran

1
Benim sorunum sadece denilen bir sınıf yarattı Global.asax.csve çalışmasını beklediğim oldu. Karşılık gelen web formları yapılandırma dosyasıyla oluşturulabilmesi için Add-> New Item-> kullanarak oluşturmanız gerekir . Global Application ClassGlobal.asax
Levi Fuller

4

Benzer bir sorun yaşadık, global.asax.cs yok sayıldı.

Sitenin önceden derlenmiş bir .NET 2 web sitesinden bir .NET 4.0 sitesine yükseltildiği ortaya çıkıyor. Sunucuda, PrecompiledApp.configdosya kök klasöründen silinmemişti. Sildikten ve IIS uygulama havuzunu geri dönüştürüp uygulamayı yeniden başlatmak için web.config öğesine dokunduktan sonra Global.asax.cs içindeki kod düzgün çalışmaya başladı.


3

Bir kez Global.asax ve Global.asax.cs aslında dağıtım komut dosyaları tarafından IIS klasörüne kopyalanmadı bir sorun vardı ... Yani geliştirme sunucusunda hata ayıklama sırasında çalıştı, ancak IIS altında değil.


Ben de aynı problemi yaşadım. Global.asax'ı sunucuya yükledikten sonra sorun çözüldü.
Müslüman Hady

3

Geç giriş ...

Hata ayıklayıcı eklemek için yeterli zamana sahip olmadan IIS uygulamasının başlatılıp başlatılmadığını sınamak için bunu GLOBAL.ASAX'larınızın üstüne veya altına ekleyin Application_Start.

throw new ApplicationException("Yup, it fired");

2

"Hata ayıklama" dediğinizde, aslında uygulamayı hata ayıklamak için Visual Studio'nun yerleşik web sunucusundan başlatmak mı, yoksa IIS'deki işleme eklemek mi demek istersiniz? Eğer eskisi ise, Application_Start'a basmalısınız, ancak ikincisi ise, süreci yakalayacak kadar erken olmak zor olabilir.


Doğru, ben VS VS uygulamasını başlatmak demek. Ben IIS, bu yüzden VS bu sürece ekli barındırılan var. VS'nin sürece ekleyebilmesi için önce etkinliğin gerçekleştiğini mi söylüyorsunuz?
Bob Yexley

2

Visual Studio'yu kapatın ve web projenizdeki (veya çözümdeki tüm projelerin) binve objklasörlerini silin .

Bu klasörleri tüm projelerinizden silme komutları şunlardır:

rm *\bin -r
rm *\obj -r

2

Visual Studio'dan "Derleme Kod Analizi" temel alınarak bazı değişiklikler yapmıştım. Kod Analizi, Global.asax içinde Application_Start () için "CA1822 Üyeleri statik olarak işaretle" seçeneğini önerdi. Bunu yaptım ve bu problemle sonuçlandım.

Bu Kod Analizi iletisini bastırmanızı ve Uygulamayı önyüklemek için kullanılan platform tarafından otomatik olarak oluşturulan yöntemlerin / sınıfların imzasını değiştirmemenizi öneririm. Application_Start yönteminin imzası muhtemelen bir nedenle statik değildi.

Bu yöntem-imzaya döndü ve Application_Start () tekrar ateş:

    protected void Application_Start()
    { ... }

2

Başlangıç ​​sayfası olarak statik bir sayfa (örn. İndex.html) kullanırken bu sorunla karşılaştım - Application-Start çağrılmaz. Statik bir sayfanın sunulmasının aslında uygulamayı başlatmadığını keşfettim. Bir .aspx sayfası istemek.


Bunu benim için yaptı. Teşekkürler.
reekeecast

2

Global.asax ve Global.asax.cs'deki ad alanlarının aynı olduğundan emin olun. Eğer farklılarsa, herhangi bir hata atmazlar, ancak application_start komutunu yürütmediği için kesme noktasına da vurmazlar.


1

Ben uygulama başlangıç ​​olayı sadece ilk istek yapıldığında kovulur düşünüyorum, web sitenize isabet (yani bir talep)?


Evet, başvuru için bir talepte bulunuyorum.
Bob Yexley

1

Bu sorunu bir .net 4 web formları vs2010 projesinde yaşadım ve bu sayfada belirtilen her şeyi denedim. Global.asax kaldırıldı ve eklendi sonunda benim için sorunu çözdü.


1

Aynı problemden nefret ediyorum, Application_Start'ı yakalayamadım. Sebebi ise, biçimlendirme dosyasındaki bir yanlış eşlemeye ateş etmemesiydi. Global.asax biçimlendirme dosyası başka bir sınıfı devralıyordu ...


1

Proje ayarlarını kontrol ettiniz mi? Bu sorun vardı ve başlangıç ​​URL sunucuma özgü bağlantı noktasından farklı bir bağlantı noktasına gidiyor vardı. Anlamak çok uzun sürdü ...


1

Durumumda uygulanabilir diğer yanıtların çoğunu denedikten ve bunlardan herhangi biriyle şanssız kaldıktan sonra, Web projesinin (RIA Hizmetlerini kullanan bir Silverlight uygulaması için sunucu tarafı projesi) özelliklerine girdim. "Web" sekmesini tıklayın ve seçilen Sunucuyu "Yerel IIS" yerine "IIS Express" olarak değiştirin. (Not VS2013 kullanıyorum.) Bu sorunu çözdü. Application_Start, "IIS Express" altında yürütülür ancak "Yerel IIS" altında yürütülmez. İlginç...


Yürütülüyor. IIS işlemine eklemediğiniz veya yürütüldükten sonra eklediğiniz için hata ayıklayamazsınız.
uygar.raf

1

Ben uygulama başlangıç ​​denilen ve benim kesme noktası isabet değil RegisterRoutes () kod üzerinden adım atmaya çalışıyordu. Application_Start'ın çağrılmadığını belirledim. App_start / RouteConfig.cs için yüzeysel bir değişiklik yapmak ve Application_Start çağrıdan önce bunu kaydetmek için bir değişiklik yapmak zorunda kaldı. Sanırım bu dosyalar bir yerde önbelleğe alınır ve bir değişiklik yapılmadıkça çağrılmaz.



0

System.Diagnostics.Debugger.Break (); geçici çözüm (geçici kullanım için iyi olduğunu düşünüyorum) ve Windows 8 makinenizde "çalışmıyor". Nedeni, Visual Studio'nun "Tam zamanında hata ayıklama" bir hatadır.

Düzeltme aşağıdaki gibidir "Visual Studio Just-In-Time Debugger" için anahtarı düzeltmektir

Regedit'i açın ve 'AppIDFlags' kayıt defteri değeri için HKEY_CLASSES_ROOT \ AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347} adresine gidin, bayrağı 0x8 olarak ayarlayın

Daha fazla bilgi burada: http://connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported


0

Benim durumumda, sistem tepsisi aracılığıyla yerleşik ASP.NET Development Server örneğini öldürmek sorunu çözdü.


0

Garip ve çılgınca şeyler ... ama bir sunucu makinesinde ve başka bir kullanıcıda hata ayıklama, IIS Express'i oturumlarında çalışmaya bıraktı. Çalışan IIS Express işlemlerini öldürmek için bu kullanıcıyı kapatmalıydım. Bu sorunu çözmüş görünüyor!

Güncelleme

Soruna neyin sebep olduğunu takip etmek için 1 saatten fazla zaman geçirdikten sonra ... işte anlaşma: Bir bölümün siçine bir tane yazmayı başardım . Visual Studio beni pencerede bir uyarı ile uyarmaya çalıştı . Uyarıları nadiren kontrol ettiğimi itiraf ediyorum ... bundan sonra kontrol etmeye başlamalıyım. : D Saldırganı kaldırır kaldırmaz kırılma noktası çarptı .<appSettings>Web.configError ListsApplication_Start

resim açıklamasını buraya girin


0

Log4net başlatmaya çalışırken bu sorunu yaşadım. Global.asax için statik bir kurucu yapmaya karar verdim

static Global(){
//Do your initialization here statically
}

0

Sorun, genel olarak Global.asax dosyasını başka bir çözüm dizinine taşımayı denediğinizde oluşur. Global.asax dosyasını yeniden varsayılan konuma yeniden yerleştirin. Beklendiği gibi çalışacaktır.


Web sitesindeki her şey Global.asax.aspx dahil önceden derlenmişse ne olur? Bin dizininde önceden derlenmiş dosyalar var. Application_Start tetiklenmiyor.
Vin Shahrdar

0

Yukarıda açıklanan çözümlerin hiçbiri benim için işe yaramadı. Ancak paketi yeniden yükleme

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

nuget gui kullanmak (çok hoş değil) bir yürüyüş yolu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.