我有一个 ASP.NET MVC (beta)应用程序,我正在工作,并有麻烦,以确定如果我做错了什么,或如果我的 Application_Start方法在 Global.asax.cs 实际上没有启动时,我试图调试应用程序。
Application_Start
我在我的 Application_Start方法中的一行上放置了一个断点,当我尝试调试应用程序时,我希望能够碰到这个断点... ... 但是它从来没有碰到过。在我重启 IIS 之后不行,重启之后不行,永远不行。我错过了什么吗?为什么从来不调用这个方法?
我认为应用程序启动事件只有在发出第一个请求时才会被触发,您是否访问了您的网站(即发出请求) ?
当你说“调试”的时候,你是指实际上从 Visual Studio 的内置 webserver 启动应用程序进行调试,还是指附加到 IIS 中的进程?如果是前者,您应该点击 Application _ Start,但是如果是后者,那么很难在足够早的时间进入进程以捕捉到它。
如果这是在 IIS 中,应用程序可以在调试器附加之前启动。如果是这样的话,我不确定你是否可以睡足够长的时间来得到依赖。
在 VisualStudio 中,可以将调试器附加到进程。为此,请单击 Debug > > Attach to process。附加到浏览器,然后点击应用程序。为安全起见,请重新启动 IIS 并访问站点。我不是100% 相信这会解决问题,但它会比在 App _ Start 中启动一个线程睡眠要好得多。
另一个选择是暂时宿主在内置的 Web 服务器,直到您完成调试应用程序启动。
我也在 application _ start 中遇到了断点的问题,IIS 是一个托管的应用程序。使用调试器是一个很好的解决方案。Break () ; 在代码中而不是在 VS 断点中
我也有同样的问题。我在解决方案中进行了大量的重命名。之后,我得到了两个不工作的网络应用程序和其他几个网络应用程序是正常的。我错误地选择了错误的路线。当我尝试在 Application_Start方法中设置断点,然后重新启动 IIS 时,VS 没有中断执行。随着可行的网络应用程序突破工作。然后我回想起“干净的解决方案”和“重建”不会删除重命名后留下的程序集。这就是解决办法!我已经手动清理了我的 bug-web 应用程序的 bin目录,然后发现 Global.asax Inherits=""属性中的新错误被引用了旧的 dll。我已经换了新的,休息开始工作。假设在重命名 Global.asax 期间没有更新,并且 IIS 使用旧汇编(带有错误路由)启动应用程序。
bin
Global.asax
Inherits=""
尝试将应用程序池的托管管道模式切换为“经典”而不是“集成”。解决了我的问题。现在看看原因..。
(这个答案的支持者是弗洛雷斯(见他对自己答案的评论) ,我只是想提供这个作为一个单独的答案,以吸引更多的关注)
注意: 一个不错的 使用内置“ VisualStudioDevelopmentServer”的简单替代方法或者 IIS 快递(例如,因为你是 针对 IIS 开发,并具有特定的设置,你需要你的应用程序正常运行)就是保持在 IIS 中运行(我使用 Custom Web Server + hosts file entry + IIS 绑定到相同的域)
应该能够很好地命中断点,并且可以继续在 自然 IIS 生境中进行调试!
确保 global.asax 不在子目录下。它必须放在根级别到您的项目。
我有个问题。Net 4网络表单 vs2010项目,并尝试在这个页面上提到的一切。最终删除并添加 global.asax 实际上为我解决了这个问题。
我们遇到了类似的问题,其中 global.asax.cs 被忽略。
原来该站点是从预编译的。NET2网站转到。NET 4.0网站。在服务器上,没有从根文件夹中删除 PrecompiledApp.config文件。删除之后,回收 IIS 应用程序池并触摸 web.config 以重新启动应用程序,Global.asax.cs 中的代码开始正常工作。
PrecompiledApp.config
如果您正在使用系统。诊断。调试器。解决方案(我认为只是暂时使用) ,它的“只是不工作”在您的 Windows 8机器。原因是 VisualStudio 的“ Justintime 调试”中的一个错误。
修复方法如下: 修复“ VisualStudio 实时调试器”的键
打开 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
在我的例子中,通过系统托盘杀死内置的 ASP.NET Development Server 实例解决了这个问题。
在任何情况下,以下内容都会有所帮助(不管你使用的是 IIS、卡西尼号还是其他什么) :
为什么会这样?当 web.config 更改时,Web 服务器(IIS、 Cassini 等)执行回收操作,但在这种情况下(不管出于什么原因) ,进程保持不变,因此您可以使用调试器(Visual Studio)将其连接到该服务器。
我遇到了同样的问题,无法捕获 Application _ Start。 原因是它没有对标记文件中的错误匹配执行激发操作。 标记文件 Global.asax 继承了另一个类..。
在另一个供应商构建了一个项目之后,我们接管了它,在这个项目中遇到了同样的问题。问题是,尽管 Global.asax.cs 中有许多前一个供应商编写的命令,可能会让您认为它正在使用,但实际上它被完全忽略了。Asax 不是从它继承的,如果。Cs 文件已经存在-您必须右键单击 Global.asax 并单击 View Markup 才能真正看到它。
Global.asax:
<%@ Application Language="C#" %>
需要改为:
<%@ Application Codebehind="Global.asax.cs" Inherits="ProjectNamespace.MvcApplication" Language="C#" %>
ProjectNamespace 是 Global.asax.cs 类的名称空间(通常是项目的名称)。
在我们的示例中,该文件包含一组内联代码,其中一些代码是从。Cs 文件,有些没有。我们只是将内联代码转储到。Cs 文件,并逐渐将我们的更改合并回。
关闭 VisualStudio 并删除 Web 项目(或解决方案中的所有项目)中的 bin和 obj文件夹。
obj
下面是从所有项目中删除这些文件夹的命令:
rm *\bin -r rm *\obj -r
基于 VisualStudio 的“构建代码分析”,我做了一些更改。代码分析建议 Global.asax 中的 Application _ Start ()使用“ CA1822标记成员为 static”。我那么做了,结果出了这个问题。
我建议取消这个代码分析消息,不要改变用于引导应用程序的平台自动创建的方法/类的签名。Application _ Start 方法的签名可能是非静态的,这是有原因的。
我恢复到这个方法-签名和 Application _ Start ()再次触发:
protected void Application_Start() { ... }
你检查过项目设置了吗? 我有这个问题,我有启动 URL 到一个不同的端口,而不是我的服务器特定的端口。 我花了很长时间才想明白。
奇怪和疯狂的东西... 但调试一台服务器机器和另一个用户离开 IISExpress 运行在他们的会话。我必须注销该用户才能终止其正在运行的 IISExpress 进程。这似乎已经解决了问题!
更新
在花了1个多小时追踪是什么原因导致了这个问题... ... 这里的交易: 我有点设法在 Web.config的 <appSettings>部分内键入一个 s。VisualStudio 试图用 警告在 Error List窗口中警告我。我承认我很少检查警告... 从现在开始应该开始检查它。D 一旦我删除违规的 s断点就在 Application_Start中被击中。
Web.config
<appSettings>
s
Error List
我在尝试初始化 log4net 时遇到了这个问题。我决定为 Global.asax 创建一个静态构造函数
static Global(){ //Do your initialization here statically }
我曾经遇到过一个问题,Global.asax 和 Global.asax.cs 实际上没有通过部署脚本复制到 IIS 文件夹..。 因此,它在开发服务器上调试时可以工作,但在 IIS 下不能工作。
问题主要发生在尝试将 Global.asax 文件重新定位到另一个解决方案目录时。再次将 Global.asax 文件重新定位到默认位置。它会像预期的那样工作。
在尝试了很多适用于我的情况的其他答案之后,没有任何运气,我进入了 Web 项目的属性(使用 RIA 服务的 Silverlight 应用的服务器端项目) ,点击“ Web”选项卡并将选中的服务器从“ Local IIS”改为“ IIS Express”。(注意,我使用的是 VS2013。)这解决了问题。Application _ Start 在“ IISExpress”下执行,但不在“ LocalIIS”下执行。有意思..。
迟到的记者..。
要测试 IIS 应用程序是否在调试器有足够的时间附加之前启动,只需将其添加到 GLOBAL.ASAX 的 Application_Start的顶部或底部。
throw new ApplicationException("Yup, it fired");
我尝试逐步执行从 Application start 调用的 RegisterRoutes ()中的代码,但是没有到达断点。我确定 Application _ Start 没有被调用。我必须对 App _ start/RouteConfig.cs 做一个表面的更改,并在 Application _ Start 被调用之前保存它。我猜测这些文件被缓存在某个地方,除非进行更改,否则不会调用它们。
我在使用静态页面(例如 index.html)作为启动页面时遇到了这个问题-Application-Start 不会被调用。我发现提供静态页面实际上并不能启动应用程序。请求支援。Aspx 页面可以。
确保 Global.asax 和 Global.asax.cs 中的名称空间相同。如果它们不同,它不会抛出任何错误,但也不会触发断点,因为它根本没有执行 application _ start。
上面描述的解决方案对我都不起作用。 然而重新安装软件包
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
使用 nuget gui 是一个(不太好的)漫游
通过在项目中添加 System.Web.Routing组件的引用,解决了同样的问题
System.Web.Routing