编译debug=false导致我的ASP.NET网站崩溃

11

我有一个非常庞大(对我来说)的ASP.NET应用程序(4.5框架),在使用VS2012进行开发和发布时运行良好。

后来我从VS2012升级到了VS2013,没有任何问题地打开解决方案,并在本地(使用IIS Express)正常运行。

我不知道这是不是离题,但我首次使用NuGet更新了Ajax Control Toolkit(及其依赖项),似乎已经成功了。

当我将网站发布到我们的Web服务器(Windows Server 2012上的IIS 8)时,它会很好地加载,直到我将<compilation defaultLanguage="vb" debug="true" targetFramework="4.5">更改为debug="false"为止。
执行此操作后,该站点运行缓慢,有时页面甚至无法加载,并且其IIS工作进程会占用CPU并保持增长,最终消耗掉几乎所有CPU。

编辑:这在服务器和我的PC上(IIS Express)都会发生

此测试站点的AppPool使用与我们现场站点的AppPool相同的设置。值得注意的是:

  • 启用32位应用程序:True
  • .NET Framework版本:v4.0
  • 托管管道模式:集成

我希望您需要更多信息,但老实说,我不知道从哪里开始,也不想用不必要的细节压倒人。
先谢谢您了。

编辑:我真的应该提到这一点:
在发布时以Release模式对网站进行预编译。以前在我的开发环境中,我从未必须在发布之前更改为debug = false。

我的解决方案中的每个项目都会出现此问题:

(0,0): 警告 : 下列程序集依赖于一个比目标版本更高的 .NET Framework 版本,可能在运行时无法正确加载导致失败:[项目名称],Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。这些依赖项是:Microsoft.VisualBasic,Version=10.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a。你应该确保相关程序集适用于目标框架,或确保你正在处理的目标框架是相关程序集所需的。

编辑:看起来我继承的解决方案是网站而不是应用程序。我不知道这是否有影响。


1
我不相信你所描述的更改会导致你所描述的症状。如果你已经更改了web.config并刷新了页面,是的,你可能会遇到一些延迟,因为站点/应用程序池组合可能正在重新构建/回收,但不至于像你所描述的那样严重。 一个问题是为什么你要在调试模式下部署,然后再关闭它,但这是另一天的问题! - dougajmcdonald
1
Web服务器上有任何写入事件日志的记录吗? - Kyle
似乎您遇到了性能问题。您是否对应用程序进行了性能分析? - ta.speot.is
1
这是一个很好的起点。您的服务器上已经安装了 .net framework 4.5 吗?在 VS 的所有项目属性下,您是针对完整的 .net 4.5 框架还是只针对“轻量级”客户端? - Kyle
1
看起来你现在走上了正确的轨道,除了配置问题之外,可能还有一些条件代码,它查看“调试”标志,并且在其设置为true时不运行。 - dougajmcdonald
显示剩余12条评论
4个回答

7
我最终不得不向 Microsoft 寻求帮助。他们使用 ProdDump 和 LogMan 来分析问题。不到 24 小时,他们回复我说:“线程 19 似乎严重影响 CPU 的性能。栈顶指示 AjaxMin 正在尝试在一个字典对象上进行 FindEntry 操作,这是由于 AjaxControlToolKit 触发的。特别是,在 OrderDetails.aspx 的主页或设计页中定义了“CombineScripts”属性。基本上,这将所有 JS 文件合并并压缩。

一个快速的测试是禁用 AjaxControlToolKit 中的 CombineScript 逻辑,看看是否会改善性能。”

谷歌告诉我 CombineScripts 是 ToolkitScriptManager 的一个属性,并且由于 AJAX 总是一个嫌疑人(没有真正好的理由,只是一种直觉),所以我选择了它。

果然,将我的引用从 ToolkitScriptManager 改为包含 CombineScripts="false",完全解决了问题!

<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" CombineScripts="false" ScriptMode="Release" />

相关文章: 我不是唯一一个遇到这个问题的人:https://www.google.ca/#q=ToolkitScriptManager+combinescripts+problem

两篇有用的文章: http://forums.asp.net/t/1696523.aspx http://ajaxcontroltoolkit.codeplex.com/workitem/27558


0
尝试将应用程序池的 .Net 版本更改为 v4.0。

0

有时候我在使用NuGet时会遇到相同的错误。我认为这是由于你的web.config程序集引用冲突所致。请比较一下你的dll引用和web.config引用。


我的 web.config 文件中的引用必须是正确的。谢谢!请看下面的答案。 - PTansey

0
在项目属性中检查是否有对旧版本Ajax控件工具包的引用。如果找到任何引用,请将其移除并重试。

工具包(以及ajaxmin和htmlagilitypack依赖项)的唯一参考都是“自动更新”版本。无论如何,我仍然删除了这些引用,并通过管理NuGet包将它们重新添加回来。问题仍然存在。谢谢你的帮助! - PTansey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接