Asp.net mvc 代码重建后在调试会话中触发应用程序\u End-ASP.NET MVC
在进行代码更改后调试代码时出现问题 每次我更改代码时,应用程序_End都会被触发。应用程序再次启动,但会话状态已丢失!如果我再次调试应用程序,它是好的-它不会重新启动或丢失会话 此错误仅在使用IIS Express 8在本地调试VS2013时发生。我已将IIS发布到我的计算机,并且没有运行时问题。这可通过查看事件日志来确认 在重新生成代码后,我也可以在VS2013中运行而无需调试 这是失败时的堆栈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
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重新卸载、编译和运行。