如何在不停止网络服务器的情况下通过 existing/running 站点更新 ASP.NET 核心应用程序?
How can I update ASP.NET Core app over an existing/running site without stopping the web server?
我们的测试服务器上有一个 ASP.NET 核心站点 运行,我们希望通过 XCopy 将其自动部署到我们的 IIS Web 服务器,就像我们当前的应用程序一样,我已经有网站 运行。我添加了一个发布配置文件,将站点打包到解决方案中的 "publish-local" 目录中。每当我尝试复制现有站点时,所有 DLL 都被另一个进程使用,大概是 Kestrel,因此我被迫部署到同级目录并重新映射 IIS 以查看同级。如何在无需手动干预和停止 Kestrel 或 IIS Web 服务器的情况下更新 运行 ASP.NET 核心站点?
我们使用的一个小技巧是先重命名旧文件(类似于 my.dll.old
),然后复制新的 dll。然后您可以强制或等待应用程序池重新启动。
当 运行 IIS 时,您可以将名为 app_offline.htm
的文件(区分大小写)拖放到您的应用程序文件夹中。 IIS 将停止您的应用程序并提供 app_offline.html
文件的内容。现在您可以复制您的应用程序。完成后删除 app_offline.html,IIS 将启动您的应用程序。 docs and also in my post 运行 Asp.NET IIS 核心应用中对此进行了描述。
通常我会备份现有版本。然后我几乎同时回收应用程序域(如果我使用的是 iis)并覆盖根文件夹的全部内容。这样,应用程序将使用新版本的代码重新启动。但它必须非常快,否则可能会出现问题。以防万一失败可以使用备份恢复到原来的状态。
我们的测试服务器上有一个 ASP.NET 核心站点 运行,我们希望通过 XCopy 将其自动部署到我们的 IIS Web 服务器,就像我们当前的应用程序一样,我已经有网站 运行。我添加了一个发布配置文件,将站点打包到解决方案中的 "publish-local" 目录中。每当我尝试复制现有站点时,所有 DLL 都被另一个进程使用,大概是 Kestrel,因此我被迫部署到同级目录并重新映射 IIS 以查看同级。如何在无需手动干预和停止 Kestrel 或 IIS Web 服务器的情况下更新 运行 ASP.NET 核心站点?
我们使用的一个小技巧是先重命名旧文件(类似于 my.dll.old
),然后复制新的 dll。然后您可以强制或等待应用程序池重新启动。
当 运行 IIS 时,您可以将名为 app_offline.htm
的文件(区分大小写)拖放到您的应用程序文件夹中。 IIS 将停止您的应用程序并提供 app_offline.html
文件的内容。现在您可以复制您的应用程序。完成后删除 app_offline.html,IIS 将启动您的应用程序。 docs and also in my post 运行 Asp.NET IIS 核心应用中对此进行了描述。
通常我会备份现有版本。然后我几乎同时回收应用程序域(如果我使用的是 iis)并覆盖根文件夹的全部内容。这样,应用程序将使用新版本的代码重新启动。但它必须非常快,否则可能会出现问题。以防万一失败可以使用备份恢复到原来的状态。