IIS Express загружает и выгружает модули для каждого запроса
У нас есть проект ASP.NET, использующий IIS Express во время отладки. После запуска VS2013, затем загрузки решения, построения решения и запуска веб-приложения в режиме отладки в окне вывода отображается список библиотек 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'
Видите строку, где написано " Домен 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 для Visual Studio 2013 Update 4. Когда я отключаю это расширение, больше никаких проблем! Приложение не перезапускается, и мне не нужно отключать мою сеть. Таким образом, проблема, вероятно, исходит от этого расширения.
А теперь, может, кто-нибудь подскажет мне, какова связь между моим отключением сетевого подключения, веб-основами и временными метками файлов веб-приложения, которые меняются по какой-либо причине?
0 ответов
Убедитесь, что вы запускаете решение с локального диска.
У меня возникла такая же проблема. Каждый запрос был очень медленным, даже просто возвращал результат с кодом 200 или загружал значок.
В окне вывода были обнаружены симптомы, аналогичные описанным OP.
Я запускал свое решение с подключенного диска (хотя карта указывала на локальный диск).
Запуск его с локального диска напрямую вылечил проблему. Благодаря комментарию @Simon Senécal к другому ответу, который указал мне в правильном направлении.