我有一个正在工作的ASP.NET MVC(测试版)应用程序,无法确定我做错了什么,或者Application_Start
在尝试时Global.asax.cs中的方法实际上没有触发调试应用程序。
我在Application_Start
方法中的一行上放置了一个断点,并期望当我尝试调试应用程序时,该断点会被击中……但它从未成功。不是在重设IIS之后,还是在重新启动之后,再也没有。我想念什么吗?为什么从未调用此方法?
global.asax
文件丢失的情况。因此,也值得检查:-)
我有一个正在工作的ASP.NET MVC(测试版)应用程序,无法确定我做错了什么,或者Application_Start
在尝试时Global.asax.cs中的方法实际上没有触发调试应用程序。
我在Application_Start
方法中的一行上放置了一个断点,并期望当我尝试调试应用程序时,该断点会被击中……但它从未成功。不是在重设IIS之后,还是在重新启动之后,再也没有。我想念什么吗?为什么从未调用此方法?
global.asax
文件丢失的情况。因此,也值得检查:-)
Answers:
如果在IIS中,则可以在附加调试器之前启动该应用程序。如果是这样,我不确定您是否可以将线程睡眠足够长的时间来建立连接。
在Visual Studio中,可以将调试器附加到进程。通过单击调试>>附加到进程来执行此操作。附加到浏览器,然后单击您的应用程序。为了安全起见,然后重新启动IIS并访问该站点。我不是100%相信这可以解决问题,但是比在App_Start中激发线程睡眠要好得多。
另一个选项是暂时托管在内置Web服务器中,直到完成调试应用程序启动为止。
注意:使用内置的“ Visual Studio开发服务器”或IIS Express(例如,因为您针对IIS进行开发并且具有应用程序的正常功能所需的特定设置)是一个不错的简单替代方法,那就是保持运行在IIS中(我使用自定义Web服务器+主机文件条目+ IIS绑定到同一域)
您的断点应该被很好地击中,并且您可以继续在自然的IIS环境中进行调试。太好了!
在任何情况下(无论您使用的是IIS,Cassini还是其他类型),以下内容都可以帮助您:
为什么这样做?更改web.config时,Web服务器(IIS,Cassini等)会进行回收,但是在这种情况下(无论出于何种原因),该过程都保持不变,因此您需要使用调试器(Visual Studio)进行附加)。
我在托管应用程序IIS的application_start中也遇到断点问题。一个好的解决方法是使用Debugger.Break();。用代码代替VS断点
我有同样的问题。我在解决方案中做了很多重命名。之后,我得到了两个无法正常工作的Web应用程序,还有几个其他的Web应用程序都可以。我有错误的路线。当我尝试在Application_Start
方法中设置断点,然后重新启动IIS时,VS并未中断执行。有了可行的Web应用程序,中断才起作用。然后我想起了“干净的解决方案”和“重建”并没有删除重命名后剩下的程序集。那就是解决方案!我已经手动清理bin
了我的越野车网络应用程序的目录,然后看到Global.asax
Inherits=""
属性中的新错误被引用为旧dll。我在新的地方进行了更改,并且中断开始起作用。假设在重命名Global.asax时未更新,
在另一个供应商建造的项目中,我们遇到了同样的问题。问题在于,尽管以前的供应商在Global.asax.cs中编写了许多命令,这些命令可能使您相信它正在使用中,但实际上却被完全忽略了。Global.asax并非继承自该文件,如果存在.cs文件,则很容易永远看不到该文件-您必须右键单击Global.asax并单击“查看标记”才能实际看到它。
Global.asax:
<%@ Application Language="C#" %>
需要更改为:
<%@ Application Codebehind="Global.asax.cs" Inherits="ProjectNamespace.MvcApplication" Language="C#" %>
其中ProjectNamespace是Global.asax.cs类的名称空间(通常是Project的名称)。
在我们的例子中,文件包含一堆内联代码,其中一些是从.cs文件复制粘贴的,有些则不是。我们只是将内联代码转储到了.cs文件中,并逐渐将更改合并回去。
尝试将应用程序池的托管管道模式切换为“经典”,而不是“集成”。那为我解决了问题。现在调查原因...
(此答案的道具属于Flores(请参阅他对自己答案的评论),我只是想将其作为单独的答案提供,以引起更多关注)
确保您的global.asax不在子目录下。必须将其放在项目的根目录下。
Global.asax.cs
并希望它能正常工作。您需要使用Add
-> New Item
-> 创建它,Global Application Class
以便使用相应的Global.asax
Web表单配置文件创建它。
当您说“调试”时,是指实际上是从Visual Studio的内置Web服务器启动应用程序以进行调试,还是要附加到IIS中的进程?如果是前者,则应单击Application_Start,但如果是后者,则可能很难尽早进行此过程以赶上它。
当使用静态页面(例如index.html)作为启动页面时,我遇到了此问题-未调用Application-Start。我发现为静态页面提供服务实际上并没有启动应用程序。请求一个.aspx页。
在尝试了适用于我的情况的其他答案并没有任何运气之后,我进入了Web项目(使用RIA Services的Silverlight应用程序的服务器端项目)的属性,然后单击在“ Web”选项卡上,将选定的服务器从“本地IIS”更改为“ IIS Express”。(请注意,我正在使用VS2013。)这解决了问题。Application_Start在“ IIS Express”下执行,但不在“ Local IIS”下执行。有趣...
如果您正在使用System.Diagnostics.Debugger.Break(); 解决方法(我认为临时使用就可以了),并且在Windows 8计算机上“无法正常工作”。原因是Visual Studio的“及时调试”中的错误。
该修补程序如下,它是为“ Visual Studio即时调试器”修复密钥的。
打开regedit并转到HKEY_CLASSES_ROOT \ AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347}获取“ AppIDFlags”注册表值,并将标志设置为0x8
此处的更多信息: http : //connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported
当您尝试将Global.asax文件重新定位到另一个解决方案目录时,主要会出现问题。再次将Global.asax文件重新定位到默认位置。它将按预期工作。