我们有一个在调试时使用 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 应用程序文件的时间戳因任何原因而被更改之间的关系到底是什么?