Asp.net mvc 代码重建后在调试会话中触发应用程序\u End-ASP.NET MVC

Asp.net mvc 代码重建后在调试会话中触发应用程序\u End-ASP.NET MVC,asp.net-mvc,visual-studio-debugging,iis-express,Asp.net Mvc,Visual Studio Debugging,Iis Express,在进行代码更改后调试代码时出现问题 每次我更改代码时,应用程序_End都会被触发。应用程序再次启动,但会话状态已丢失!如果我再次调试应用程序,它是好的-它不会重新启动或丢失会话 此错误仅在使用IIS Express 8在本地调试VS2013时发生。我已将IIS发布到我的计算机,并且没有运行时问题。这可通过查看事件日志来确认 在重新生成代码后,我也可以在VS2013中运行而无需调试 这是失败时的堆栈 System.Web.dll!System.Web.HttpApplication.Inv

在进行代码更改后调试代码时出现问题

每次我更改代码时,应用程序_End都会被触发。应用程序再次启动,但会话状态已丢失!如果我再次调试应用程序,它是好的-它不会重新启动或丢失会话

此错误仅在使用IIS Express 8在本地调试VS2013时发生。我已将IIS发布到我的计算机,并且没有运行时问题。这可通过查看事件日志来确认

在重新生成代码后,我也可以在VS2013中运行而无需调试

这是失败时的堆栈

    System.Web.dll!System.Web.HttpApplication.InvokeMethodWithAssert(System.Reflection.MethodInfo method, int paramCount, object eventSource, System.EventArgs eventArgs)   Unknown
    System.Web.dll!System.Web.HttpApplication.ProcessSpecialRequest(System.Web.HttpContext context, System.Reflection.MethodInfo method, int paramCount, object eventSource, System.EventArgs eventArgs, System.Web.SessionState.HttpSessionState session)  Unknown
>   System.Web.dll!System.Web.HttpApplicationFactory.FireApplicationOnEnd() Unknown
    System.Web.dll!System.Web.HttpApplicationFactory.Dispose()  Unknown
    System.Web.dll!System.Web.HttpRuntime.Dispose() Unknown
    System.Web.dll!System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(object state)  Unknown
    mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state)  Unknown
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)   Unknown
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)   Unknown
    mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()  Unknown
    mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()    Unknown
    mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() Unknown
    [Native to Managed Transition]  
有人能帮我理解为什么会这样吗

编辑 我发现只有在代码更改后使用重建选项或使用F5时才会发生这种情况。在任何构建选项后面加上F5都可以

F5必须进行重建并进入竞争条件。必须启动应用程序,同时必须进行编译,导致应用程序结束,然后再次启动,因为自应用程序最初启动以来,从属文件已更改

不过这只是本能——有人能证实这一点并让我安心吗

编辑2 我需要澄清

启动应用程序\u结束并丢失会话所采取的步骤: 应用程序未运行-没有IIS Express工作进程

更改代码 在Global.asax.cs application\u start和application\u end方法中放置断点 按F5 加载第一页时: 应用程序启动命中-良好且正常 应用程序\u结束被击中-坏-不正常 再次点击应用程序启动 我不希望应用程序在没有识别的触发器(例如在应用程序运行时更改web.config)的情况下结束。明确地说,我的应用程序在结束之前没有对任何代码或配置文件进行任何更改

我发现我可以通过在按下F5之前构建来防止这种情况发生。相反,如果我在F5之前重建,它将失败。因此,要明确的是:

应用程序未运行时-无工作进程:

代码更改+F5=失败 代码更改+构建+F5=成功 代码更改+重建+F5=失败 如果在按下F5之前IIS没有运行,我不希望代码更改后F5失败。我意识到程序集在编译过程中会发生更改,这会导致应用程序池在IIS启动时进行回收,但事实并非如此


我希望这更有意义。

您的问题有点不清楚-当您说在调试时更改代码时,是指使用“编辑并继续”功能吗?那么您在调试会话中对代码进行了更改

无论哪种方式,我都会认为这是预期的行为。如果更改代码,应用程序将被卸载并重新加载,这自然会导致会话状态丢失。你期望看到什么样的行为?到目前为止,它的表现是否有所不同

从堆栈跟踪的这一行可以看到AppDomain正在卸载:


System.Web.dll!System.Web.HttpRuntime.ReleaseResources和UnloadappDomainObject状态

代码更改后,我尝试调试F5。我不希望应用程序结束,除非通常的触发发生,如:池回收;依赖文件更改等。如果在应用程序运行时重新编译文件,我可以理解它。但我并没有这样做——这只是一个开发中的应用程序,我正在调试,因为我所做的更改不起作用。顺便说一下,我已经进一步跟踪了这个问题,并在你回复的时候编辑了这篇文章。谢谢你的回复。只要你修改代码,应用程序就会结束,这是很标准的。如果在IIS下运行并将新的.dll放入bin文件夹,您将发现完全相同的行为-应用程序池不会回收,但应用程序将重新启动,因为.NET运行时将重新加载appdomain以考虑新的二进制文件。但应用程序尚未运行。这是一个我正在开发和启动/调试的应用程序,因为我所做的更改不起作用。只要我没有更改web.config或加载/更改app_代码中的文件等,我是否应该能够更改代码,然后使用F5启动/调试而不结束我的应用程序?这显然是我对调试工作方式的误解,因为我对.NET还很陌生-感谢您迄今为止的帮助。@散热器-您的评论令人困惑。请解释应用程序没有运行,同时说没有我的应用程序结束。如果它不运行,它将如何结束?您的困惑在于,您认为当您停止调试时,它会停止应用程序,或者当您不执行网页时,应用程序不会运行。它是。应用程序池关闭之前,应用程序一直在运行。当您更改代码时,它会重新加载应用程序池,转储您可能拥有的任何会话。例外情况是启用了“编辑并继续”,这不是默认设置。Erik-远远超过我的头-什么是应用程序
直到我结束调试时运行?IIS Express图标将从系统托盘中消失,IIS Express系统托盘和工作进程将在任务管理器中结束。。。该项目将从Begging重新卸载、编译和运行。