我正在和一位朋友讨论当你将一个新文件放入虚拟目录时IIS的作用。
他告诉我,当你把文件放在网站的任何地方时,IIS会重新编译整个网站,我认为当你把文件放在你的Bins文件夹中时,它就会发生(如果发生的话)。
对话的到来是因为该公司的网站用于上传文件,但文件保存在我们网站的文件夹名称“Letters”中,我的朋友说每次有人上传文件IIS都会重新编译整个网站。他是对的吗?
答案 0 :(得分:2)
它只在您添加需要编译的代码时重新编译。即向App_Code添加新类。当您只是将图像或文本文件保存到网站时,它不会重新编译。
答案 1 :(得分:2)
足够容易测试。开始在Web服务器上查看JIT编译计数器...浏览器周围,然后在其中删除一个文件以查看计数器显示。
答案 2 :(得分:1)
我认为只有当bin程序集,App_Code或global.asax发生更改时,ASP.NET才会重新启动并重新编译整个站点。
有关优化ASP.NET编译行为的新标志的详细信息,请参阅this blog post。
将文件添加到虚拟目录中的文件夹不应导致重新编译(除非该文件夹是'bin'或'app_code'!)
答案 3 :(得分:1)
machine.config中有一个设置numRecompilesBeforeApprestart,它指示在应用程序重新启动之前可能发生的文件更改次数。默认值为15。
在非生产环境中,我通常设置得更高,因此您可以动态修改aspx页面,而不会导致整个应用程序重新启动。
这可能就是你朋友所说的。
答案 4 :(得分:1)
回收应用程序池。在powershell中:
$AppPoolName = 'NameOfApp'
$AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}
Restart-WebAppPool $AppPool
这会强制代码重新编译。
答案 5 :(得分:0)
绝对取决于您的版本,因为: 还有一个新的修补程序,可以让你优化编译,所以IIS不经常重新编译,但我不确定到底是什么时候。
我认为以前是新标记如果不导航到它而不会触发重新编译(而是导航到另一个标记文件),并且bin / dll / assembly文件将始终触发。