ASP.NET如何处理部署

ASP.NET如何处理部署,asp.net,web-deployment,application-restart,Asp.net,Web Deployment,Application Restart,我只能读到ASP.NET检测到特定文件(如aspx文件、DLL和其他文件)的更改。它将重新启动自身,使用新部署的文件完成当前运行的请求和新请求 但是,从第一个文件被复制到最后一个文件被交换,这段时间发生了什么?如果我交换第一个DLL文件,则会收到一个请求,但其他DLL文件的版本较旧-它会崩溃吗?asp.net是否会等待几秒钟,并且仅在X秒钟没有(相关)文件更改后才重新启动 谢谢 这里有4个问题: 从复制第一个文件到交换最后一个文件的时间内发生了什么?-在.net加载新dll启动新的应用程序域之前

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

但是,从第一个文件被复制到最后一个文件被交换,这段时间发生了什么?如果我交换第一个DLL文件,则会收到一个请求,但其他DLL文件的版本较旧-它会崩溃吗?asp.net是否会等待几秒钟,并且仅在X秒钟没有(相关)文件更改后才重新启动


谢谢

这里有4个问题: 从复制第一个文件到交换最后一个文件的时间内发生了什么?-在.net加载新dll启动新的应用程序域之前,有一个设定的时间等待查看是否修改了任何其他文件

如果我交换第一个DLL文件,则会收到一个请求,但其他DLL文件的版本较旧-它会崩溃吗?-这取决于DLL中的代码更改。如果新的dll可以与旧代码一起正常运行,那么它就可以正常运行。但是如果应用程序域启动了新的DLL,而新的DLL依赖于一些还不存在的东西。。。那么是的,它将抛出一个异常

asp.net是否会等待几秒钟,并且仅在X秒钟无(相关)文件更改后才重新启动?-是。我不知道那是多长时间。但根据我个人的经验,它大约在1-2秒的范围内

我还发现了关于app domain和重新加载DLL的一个很好的解释:

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

通常,当dll加载到 进程,进程锁定dll并 无法覆盖磁盘上的文件。 但是,AppDomains有一个特性 称为卷影复制,允许 要保持解锁状态的部件,以及 在磁盘上可替换

运行时使用初始化ASP.NET 为存储箱启用卷影复制 目录AppDomain将复制任何 从bin目录到 锁定前的临时位置 并将dll加载到内存中。 卷影复制允许我们覆盖任何 运行期间bin目录中的dll 无需上网即可更新 应用程序脱机


太好了,这正好回答了我的问题!感谢您的详细回答:)