IIS重新编译ASP.NET网站

IIS重新编译ASP.NET网站,asp.net,iis,compiler-construction,web,Asp.net,Iis,Compiler Construction,Web,我和一个朋友讨论了当你把一个新文件放在虚拟目录中时IIS会做什么 他告诉我,当你把一个文件放在网站的任何地方时,IIS会重新编译整个网站,我认为当你把一个文件放在你的Bins文件夹中时,这种情况就会发生(如果发生的话) 这段对话是因为公司的一个网站用来上传文件,但这些文件保存在我们网站的一个名为“Letters”的文件夹中。我的朋友说,每次有人上传文件,IIS都会重新编译整个网站。他说的对吗?它只在添加需要编译的代码时才重新编译。即,向应用程序代码添加新类。当您只需将图像或文本文件保存到网站时,

我和一个朋友讨论了当你把一个新文件放在虚拟目录中时IIS会做什么

他告诉我,当你把一个文件放在网站的任何地方时,IIS会重新编译整个网站,我认为当你把一个文件放在你的Bins文件夹中时,这种情况就会发生(如果发生的话)


这段对话是因为公司的一个网站用来上传文件,但这些文件保存在我们网站的一个名为“Letters”的文件夹中。我的朋友说,每次有人上传文件,IIS都会重新编译整个网站。他说的对吗?

它只在添加需要编译的代码时才重新编译。即,向应用程序代码添加新类。当您只需将图像或文本文件保存到网站时,它不会重新编译。

完全取决于您的版本,因为: 还有一个新的热修复程序,可以让您优化编译,这样IIS重新编译的频率就会降低,但我不确定确切的时间


我认为,如果不导航到新标记(而是导航到另一个标记文件),新标记将不会触发重新编译,而bin/dll/assembly文件将始终触发。

我认为ASP.NET仅在bin程序集、App_代码或global.asax发生更改时才重新启动并重新编译整个站点

有关优化ASP.NET编译行为的新标志的详细信息,请参阅


将文件添加到虚拟目录中的文件夹不应导致重新编译(除非该文件夹为“bin”或“app_code!”)

machine.config numRecompilesBeforeApprestart中有一个设置,指示在应用程序重新启动之前可能发生的文件更改数量。默认值为15

在非生产环境中,我通常将其设置得更高,这样您就可以动态修改aspx页面,而不会导致整个应用程序重新启动


这可能就是你朋友所说的。

很容易测试。开始查看web服务器上的JIT编译计数器。。。浏览四周,然后在其中放入一个文件以查看计数器的显示。

回收应用程序池。在powershell中:

$AppPoolName = 'NameOfApp'

$AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}

Restart-WebAppPool $AppPool

这将迫使代码重新编译。

是的,但是我可以将图片或文档之类的东西上传到文件夹中,而不会发生任何事情吗?运行perfmon。然后将.NET CLR Jit计数器添加到图形中。如果你的应用程序使用匿名类型或匿名方法,它会到处乱跳。无论如何,当站点重新编译时,它将跳转。好的,我做了测试,当我在BIN文件夹中放置或删除文件时,“%Time in Jit”始终跳转,如果我在其他文件夹中放置或删除文件,则不会发生任何事。。。这不完全是真的。有一个叫做即时编译的小东西。只需运行某些代码,您就可以使其重新编译(匿名类型是一个大问题),因此,当出现小的更改时,最好的方法是什么。需要重新发布整个网站吗?或者有什么棘手的方法从IIS本身重新编译整个网站?回收应用程序池似乎不会导致重新编译