这个下午我上传了一个新版本的一个的DLL,它让整个网站失败了,令我们感到沮丧。我很快换掉了旧版本的新版本,在我上传DLL之前将网站重新置于状态,但该网站仍处于停机状态。我们被迫重新启动整个服务器,但仍然没有任何乐趣:就我们而言,该网站已经恢复到与我上传任何内容之前的状态完全相同,但它仍然无效。
因此,经过一些调查后,我们发现上传的早晨中的一个DLL中存在错误(即与我下午上传的DLL无关) 。
我们似乎发现,由于一些奇怪的原因,当我们在早上上传我们的DLL时,AppDomain没有正确回收。对网站所做的一些更改已经生效,但至少有一个DLL仍然被缓存,而不是更新。
当我在当天下午晚些时候上传了一个DLL时,它导致了一个AppDomain回收,其中包含了今天早上上传的bug。
有没有其他人有问题AppDomain不回收的时候应该?或者可能有另一种解释,它可能是什么?每当对bin /文件夹中的任何文件进行更改时,应该回收AFAIK AppDomain ...如果是这样,它是如何意外地缓存旧版本的文件而不是正确回收的?
这是 Scott Forsyth 谈论AppDomain回收:http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-2D00-AppDomain-recycles_2C00_-more-common-than-before.aspx
答案 0 :(得分:1)
有时,如果网站处于负载状态,该网站将不会进行回收,因为IIS认为最好继续运行,而不是让每个人都关闭网站重新启动所需的时间。
在大多数地方,我最好的做法是在更新站点文件后始终发出IISRESET。这可确保部署后所有内容都得到回收。