2016-12-14 93 views
8

我们在我们的测试服务器上运行了一个ASP.NET Core站点,我们希望通过XCopy自动部署到我们的IIS Web服务器,就像我们现有的应用程序一样,我已经在该站点上运行。我已经添加了一个发布配置文件,将该网站打包到解决方案中的“发布 - 本地”目录。每当我尝试复制现有站点时,所有DLL都被另一个进程(可能是Kestrel)使用,所以我不得不部署到兄弟目录并重新映射IIS以查看兄弟。如何更新正在运行的ASP.NET Core站点而无需手动干预并停止Kestrel或IIS Web服务器?如何在不停止Web服务器的情况下通过现有/正在运行的站点更新ASP.NET Core应用程序?

回答

1

我们使用的一个小骗子是先重命名旧文件(类似my.dll.old),然后复制新的dll。然后,您可以强制或等待应用程序池重新启动。

+1

我正在尝试使用MSBUILD和TeamCity将脚本复制到Web服务器。凯斯特雷尔不会阻止重命名? – flipdoubt

+0

如果文件正在使用中,它们肯定不会允许重命名。 – QuietSeditionist

+1

您可以重新命名实际使用中的文件。 – Pawel

2

使用IIS运行时,可以将名为app_offline.htm(区分大小写)的文件放到应用程序文件夹中。 IIS将停止您的应用程序并将提供app_offline.html文件的内容。现在你可以复制你的应用程序。一旦完成删除app_offline.html和IIS将启动您的应用程序。这在docs以及my post中描述了使用IIS运行Asp.NET Core应用程序。

+0

即使使用app_offline.htm,yourwebsite.exe仍在使用中,您无法复制新版本。随着app_offline.htm和应用程序池重置_then_它看起来像你可以复制yourwebsite.exe,但只是把app_offline.htm是不够的。 –

+0

我的理解是,把app_offline.html应该足够了。 IIS试图平稳地停止你的应用程序,所以如果有挂起的请求停止应用程序进程可能不会立即。如果您在app_offline.html放入app_offline.html后没有看到应用程序停止,我建议在此回购站点中打开一个问题:https://github.com/aspnet/AspNetCoreModule – Pawel

+1

我会这样想,但这是一个问题现在碰撞了。在我的TFS版本中,我有一个放入app_offline.htm的powershell脚本,它等待几秒钟,向IIS提交一个请求,并取回503错误,显示应用程序处于脱机状态......但mywebsite.exe已被_still_锁定编辑和dotnet发布失败。 :(我想我会提交一个问题到您建议的回购,因为我同意 - app_offline.htm应该足够好。 –

相关问题