ASP.NET如何处理部署

时间:2010-02-05 10:05:09

标签: asp.net web-deployment application-restart

我只能读到ASP.NET检测到特定文件(如aspx文件,DLL等)的更改。它将自动重启,使用新部署的文件完成当前运行的请求和新请求。

但是从第一个文件复制到最后一个文件的时间发生了什么?如果我交换第一个DLL文件,那么请求进来但其他DLL文件是旧版本 - 它会崩溃吗? asp.net会等待几秒钟,只有在没有(相关)文件更改X秒后才会自动启动吗?

THX!

1 个答案:

答案 0 :(得分:2)

这里有4个问题: 从第一个文件复制到最后一个文件的时间发生了什么? - 有一个设置的时间,而.net在启动之前等待查看是否有任何其他文件被修改过加载了新dll的新app域。

如果我交换第一个DLL文件,那么请求进来但其他DLL文件是旧版本 - 它会崩溃吗? - 这取决于dll中的代码更改。如果新的代码可以使用旧代码正常运行,那么它会没问题。但是,如果应用程序域旋转新的DLL并且新的dll依赖于尚未存在的东西......那么是的,它将引发异常。

asp.net会等待几秒钟,只有在没有(相关)文件更改X秒后才会自动启动吗? - 是的。我无法找到那段时间。但根据我的个人经验,它在1-2秒的范围内。

我还在app域找到了一个很好的解释并重新加载了DLL: http://odetocode.com/Articles/305.aspx

  

如果您将更新的dll复制到   application的bin子目录,   ASP.NET运行时识别存在   要执行的新代码。自ASP.NET   无法将dll交换为现有的   AppDomain,它启动一个新的AppDomain。   旧的应用领域是“消耗   停止了“,即现有的请求   被允许完成执行,并且   一旦他们全部完成了   AppDomain可以卸载。新的   AppDomain以新代码开头   开始接受所有新请求。

     

通常,当一个dll加载到一个   进程,进程锁定DLL和   你不能覆盖磁盘上的文件。   但是,AppDomains有一个功能   称为允许的影子复制   组件保持解锁状态   可在磁盘上更换。

     

运行时使用初始化ASP.NET   为bin启用了Shadow Copy   目录。 AppDomain将复制任何   它需要从bin目录到   锁定前的临时位置   并将DLL加载到内存中。   Shadow Copy允许我们覆盖任何   一个dll在bin目录中   更新而不上网   离线申请。