【发布时间】:2015-06-01 00:28:00
【问题描述】:
我们有一个在调试时使用 IIS Express 的 ASP.NET 项目。启动 VS2013,然后加载解决方案,构建解决方案并在调试模式下启动 Web 应用程序后,输出窗口列出了一堆加载和卸载的 DLL。经过一番搜索,我发现 IIS Express 会为每个请求重建站点。这是输出窗口的一小部分:
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Web.Entity.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\App_Web_dqpvaqg5.dll'.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\App_Web_global.aspx.cdcab7d2.bocgg9o6.dll'.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\App_Web_global.aspx.cdcab7d2.kvvdlbnf.dll'.
'iisexpress.exe' (CLR v4.0.30319: Domain 15): Unloaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Unloaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll'
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Unloaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-14-130719418943209850): Unloaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'
看到上面写着 Domain 15 的那一行了吗?那是因为池重启了 15 次!
此外,一个重要的事实是解决方案源和输出二进制文件都存储在映射驱动器中。该驱动器位于我们的网络上。
现在我已经尝试了我在网上可以找到的所有内容:
- 删除项目中的所有断点
- 在本地缓存目录中加载符号(在工具->选项->调试->符号中)
- 以及其他一些不起作用的解决方案
在网上看了一些后,我发现这可能与应用程序启动时更改的文件有关,IIS Express 必须重新编译应用程序才能使更改生效。但这就是问题所在,启动应用程序时不会更改任何文件。
经过更多阅读,我发现当应用程序二进制文件驻留在网络驱动器上时,启动应用程序时文件的时间戳可能会发生变化,这会导致 IIS Express 重新编译应用程序,即使文件的内容没有没变。于是就想办法解决这个问题,有几个人说把开发电脑和网络断开,等几秒再重新连接网络!对对对……
我没有解决方案,所以我尝试了这个牵强的解决方案。瞧!有效!!!没有更多的应用程序重新启动!输出窗口现在如下所示:
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\App_Web_erxb23tr.dll'.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Mobile\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.Mobile.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.RegularExpressions\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.RegularExpressions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.RegularExpressions\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.RegularExpressions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\assembly\dl3\a0da26c9\85d61bc1_9668d001\CalculsWrapper.dll'. Symbols loaded.
'iisexpress.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\assembly\dl3\a0da26c9\85d61bc1_9668d001\CalculsWrapper.DLL'. Symbols loaded.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\assembly\dl3\95fa9a38\65cf12c4_9668d001\HardLockWrapper.dll'. Symbols loaded.
'iisexpress.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\Users\ca0ssnc\AppData\Local\Temp\Temporary ASP.NET Files\vs\f3da8155\99ebd29d\assembly\dl3\95fa9a38\65cf12c4_9668d001\HardLockWrapper.DLL'. Symbols loaded.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-130719436820489369): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Services\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
没有更多的 DLL 被卸载。应用程序不再重新启动(请参阅始终使用 DefaultDomain)。现在的问题是每次我重新启动VS2013时都会再次出现这个问题。每次重启 VS2013 时,我都必须断开并重新连接我的网络连接。
另外,另一个重要的事实:我使用 Web Essentials for Visual Studio 2013 Update 4。当我禁用此扩展时,不再有问题!该应用程序不会重新启动,我也不需要断开我的网络。所以问题可能来自这个扩展。
现在有人可以告诉我,我断开网络连接、Web Essentials 和 Web 应用程序文件的时间戳因任何原因而被更改之间到底有什么关系??
【问题讨论】:
-
好吧,对我来说,当您运行调试会话时它完全没问题 - 并且 ASP.Net 重新启动 AppPool\AppDomain 以再次执行
Application_Start,因此您可以从头开始调试它。如果在没有调试的情况下在实际使用 IIS 期间没有发生这种情况,那么应该没问题。 VS 可以使用网络连接来加载已调试程序集的符号 -
您可以尝试从 IIS Express 切换到普通 IIS。它似乎避免每次都重新加载所有其他 DLL。此外,您可以检查并可能暂时禁用每次尝试扫描 DLL 文件的防病毒软件(例如 Windows Defender)。此外,如果您“只有”4GB RAM,并且认为您需要更多 RAM 内存,大约 8GB 或 16GB
-
我有同样的问题,托管解决方案?
-
我们决定将源文件和输出二进制文件移动到本地驱动器而不是映射驱动器上。这解决了问题。
标签: asp.net iis visual-studio-2013 web-essentials mapped-drive