2009-06-09 79 views
56

目前,我有我的Global.asax.cs文件中的下列程序:當我調試ASP.NET MVC應用程序時,爲什麼不啓動Application_Start()事件?

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "Default",           
     "{controller}/{action}/{id}",      
     new { controller = "Arrangement", action = "Index", id = "" } 
    ); 
} 

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    // Debugs the routes with Phil Haacks routing debugger (link below) 
    RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
} 

Routing debugger ...

當我打F5,應用火起來,除非我有一個名爲在~/Views/Home/文件夾視圖Index.aspx,雖然我重新定義了默認路由並刪除了HomeController,但我收到了「View missing」錯誤消息。我希望得到路由調試器,如果不是,至少要求~/Views/Arrangement/Index.aspx
調試時從未命中RegisterRoutes(Routetable.Routes);上的斷點。

我已經嘗試建設,重建,重新啓動VS,清洗,再次重建等,但似乎沒有工作。爲什麼應用程序不運行代碼的當前版本?

+0

托馬斯,這是一個非常有趣的問題:)(+1) – 2009-06-09 16:08:25

+0

您對網絡服務器的發展?檢查在IIS下運行的應用程序是否存在同樣的問題,然後使用新的空mvcapp? – 2009-06-09 19:29:35

+0

在IIS上而不是在開發Web服務器上調試沒有幫助。在全新的MVC應用程序中,同一行上的斷點確實受到了打擊,所以我們可以將其縮小到特定項目的範圍。會是什麼呢? – 2009-06-09 22:27:02

回答

6

我發現這個問題:

這MVC應用程序是一個更大的解決方案,其中我在設置另一個項目,以建立一個x86環境(我運行x64)的一個點的一部分。當我這樣做時,顯然所有其他項目 - 甚至是後來添加的 - 都被設置爲不基於Ctrl+Shift+B,我想這就是爲什麼調試器沒有達到我的斷點。

解決方案:

走進解決方案生成屬性(右鍵單擊解決方案,選擇屬性,然後選擇建立在左邊的菜單上),並把支票在Build旁邊的複選框中的項目名稱列表。

18

我相信你必須關閉/停止本地調試服務器,以便Application_Start()事件再次觸發......你應該可以在系統托盤中右擊它並選擇「停止」。

+0

我做到了。即使在今天 - 在關閉電腦一夜之後 - 問題仍然存在... – 2009-06-09 13:43:47

+5

輝煌。 (+1) – 2010-06-15 15:03:52

94

我發現下面的答案on forums.asp.net

您使用的IIS7的服務器或內建的Web服務器?我注意到在使用IIS7時,如果啓動調試器,讓頁面出現,然後在調試器仍在運行時更改Global.asax(標記文件,而不是代碼隱藏),然後刷新頁面,Application_Start中的斷點將爲擊中。

我認爲發生的事情是按下「玩」,VS只是啓動過程,然後附加到它,但當它附加到它啓動事件已經運行。通過更改Global.asax,您可以重新啓動應用程序,並且由於調試器已經連接,您可以點擊斷點。不是一個很好的解決方案,但它似乎工作。

這就是我的情況發生了什麼。

+1

+1作爲IIS7用戶的有用提示。也許你有子域路由或其他原因,你不能使用內置的網絡服務器,或者如果上述建議有任何問題 - 例如編輯你想要調試的類的一部分,另一種方式強制重新啓動應用程序很容易在VS中編輯web.config請參閱我的評論[鏈接](http://stackoverflow.com/questions/ 641148/application-start-not-firing/7655582#7655582) – MemeDeveloper 2011-10-05 00:45:11

21

添加System.Diagnostics.Debugger.Break();Application_Start()
這將強制一個斷點。

該行應該註釋掉,以避免斷點happern和#ifdef debug以確保永不生產。

3

在我的情況下,問題是椅子和鍵盤之間 - 重命名mvc項目組裝後,我忘了更新全球。asax指向正確的類。因此,檢查在Global.asax中的「繼承」(在Visual Studio在Global.asax中單擊鼠標右鍵 - >查看標記)

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

它是否真的符合你的Global.asax.cs類/命名空間聲明

4

在我的情況是我在網絡工程設置

使用

本地IIS Web服務器我改變使用Visual Studio開發服務器,這作品。

3

我打今天同樣的問題,使用本地IIS。

我相信這是因爲頁面被加載的方式。 所有你需要做的是,在Application_Start中放置一個斷點。運行應用程序(在我的情況下,它進入登錄屏幕),然後進入web.config。編輯它 - 通過添加一些空格。然後在Browser.tush中刷新,這會在Application_Start上觸發斷點。

7

問題是Application_Start()先觸發器然後調試器重視。

因此,我們的目標是做一些事情,導致Application_Start()在其仍在運行時再次觸發。爲了進行調試,只需像通常那樣運行調試器然後編輯(例如添加一個換行符)並保存web.config文件。

0

也許我的解決方案將幫助別人:

  1. 停止調試。
  2. 更新RegisterRoutes代碼(示例 - 添加\刪除int i = 1;)。
  3. 重建。
  4. RegisterRoutes中設置一個斷點。
0

我只是有這個問題,在項目屬性從本地IIS交換到IIS快遞 - >網絡梳理出來

0

項目 - >屬性 - >網絡

檢查「本機代碼」。

enter image description here

相關問題