UFO ET IT

ASP.NET MVC 앱을 디버깅 할 때 Application_Start () 이벤트가 발생하지 않는 이유는 무엇입니까?

ufoet 2020. 11. 9. 21:40
반응형

ASP.NET MVC 앱을 디버깅 할 때 Application_Start () 이벤트가 발생하지 않는 이유는 무엇입니까?


현재 내 Global.asax.cs파일에 다음 루틴이 있습니다.

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

라우팅 디버거 ...

내가 공격 할 때 F5, 응용 프로그램은 최대 화재 및 I라는보기가없는 한 Index.aspx~/Views/Home/폴더를 내가 기본 경로를 재 정의하고 제거했지만, 나는, "보기없는"오류 메시지가 나타납니다 HomeController. 라우팅 디버거를 얻을 것으로 예상하고, 그렇지 않은 경우 ~/Views/Arrangement/Index.aspx. 디버깅
중에는 중단 점이 RegisterRoutes(Routetable.Routes);적중되지 않습니다.

빌드, 재 구축, VS 다시 시작, 청소, 재 구축 등을 시도했지만 아무것도 작동하지 않는 것 같습니다. 애플리케이션이 현재 버전의 코드를 실행하지 않는 이유는 무엇입니까?


forums.asp.net 에서 다음 답변 을 찾았습니다 .

IIS7을 서버 또는 기본 제공 웹 서버로 사용하고 있습니까? IIS7을 사용할 때 디버거를 시작하면 페이지가 나타나게 한 다음 디버거가 실행되는 동안 Global.asax (코드 숨김이 아닌 태그 파일)를 변경 한 다음 페이지를 새로 고치면 Application_Start의 중단 점이 히트.

무슨 일이 일어나고 있는지 "재생"을 누르면 VS가 프로세스를 실행 한 다음 연결하지만 연결될 때까지 시작 이벤트가 이미 실행되었습니다. Global.asax를 변경하면 앱이 다시 시작되고 디버거가 이미 연결되어 있으므로 중단 점에 도달 할 수 있습니다. 훌륭한 솔루션은 아니지만 작동하는 것 같습니다.

그것이 제 경우에 일어났던 일입니다.


a를 System.Diagnostics.Debugger.Break();Application_Start().
이것은 중단 점을 강제합니다.

happern에 대한 중단 점을 피하고 #ifdef debug프로덕션에 도달 하지 않도록하려면이 줄을 주석 처리해야합니다 .


Application_Start()이벤트가 다시 발생 하려면 로컬 디버깅 서버를 종료 / 중지 해야한다고 생각합니다. 시스템 트레이에서 마우스 오른쪽 버튼을 클릭하고 "중지"를 선택할 수 있습니다.


문제는 Application_Start()먼저 트리거 발생한 다음 디버거가 연결된다는 것입니다.

따라서 목표는 Application_Start()여전히 실행되는 동안 다시 트리거 되도록하는 작업을 수행하는 것 입니다. 디버깅을 위해 평소처럼 디버거를 실행 한 다음 편집 (예 : 줄 바꿈 추가)하고 web.config 파일을 저장합니다.


문제를 발견했습니다.

이 MVC 응용 프로그램은 더 큰 솔루션의 일부였으며 한 시점에서 x86 환경을 위해 빌드 할 다른 프로젝트를 설정했습니다 (x64를 실행 중입니다). 내가 그렇게했을 때, 분명히 다른 모든 프로젝트 (나중에 추가 된 프로젝트조차도)는를 기반으로하지 않도록 설정되었으며 Ctrl+Shift+B, 이것이 디버거가 내 중단 점에 도달하지 않은 이유라고 생각합니다.

해결책:

솔루션 빌드 속성으로 이동하여 (솔루션을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 왼쪽 메뉴에서 빌드를 선택) 목록의 프로젝트 이름 옆에있는 빌드 확인란에 확인 표시를합니다.


오늘도 같은 문제가 발생하여 로컬 IIS를 사용하고있었습니다.

나는 이것이 페이지가로드되는 방식 때문에 발생한다고 믿습니다. 여러분이해야 할 일은 Application_Start에 중단 점을 두는 것입니다. 응용 프로그램을 실행하고 (제 경우에는 로그인 화면에 걸렸습니다) web.config로 이동합니다. 공백을 추가하여 편집하십시오. 그런 다음 Browser.에서 새로 고쳐서 Application_Start의 중단 점에 도달합니다.


제 경우에는

웹 프로젝트 설정의 로컬 IIS 웹 서버

Visual Studio Development Server 사용으로 변경 하면 작동합니다.


아래 기술이 나를 위해 일했습니다.
간단한 해결 방법은 응용 프로그램을 강제로 재활용하기 위해 디버거가 연결된 후 global.asax를 터치하는 것입니다. 그런 다음 다음 요청 중에 Application_Start에 설정 한 중단 점이 적중됩니다.

나는 이것을 여기에서 발견했다 :
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax


제 경우에는 의자와 키보드 사이에 문제가있었습니다. mvc 프로젝트 어셈블리의 이름을 바꾼 후 올바른 클래스를 가리 키도록 Global.asax를 업데이트하는 것을 잊었습니다. 따라서 Global.asax의 "상속"을 확인하십시오 (Visual Studio에서 Global.asax-> 마크 업보기를 마우스 오른쪽 단추로 클릭).

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

Global.asax.cs 클래스 / 네임 스페이스 선언과 실제로 일치하는 경우


내 솔루션이 누군가를 도울 것입니다.

  1. 디버거를 중지하십시오.
  2. RegisterRoutes코드를 업데이트합니다 (예 : add \ remove int i = 1;).
  3. 재건.
  4. 에 중단 점을 배치 RegisterRoutes합니다.

방금이 문제가 발생하여 프로젝트 속성-> 웹에서 로컬 IIS에서 IIS Express로 바꿨습니다.


프로젝트-> 속성-> 웹

"네이티브 코드"를 확인하십시오.

enter image description here

참고URL : https://stackoverflow.com/questions/967813/why-does-not-the-application-start-event-fire-when-i-debug-my-asp-net-mvc-app

반응형