在dll文件更改时重新加载ASP.NET核心应用程序(bin部署)

问题描述 投票:1回答:2

环境:ASP.NET Core 2.1,Ubuntu。

在旧式ASP.NET中,当我进行bin部署(例如上传了一些dll文件)时,webapp会检测到并重新加载自身 - 非常有用。

使用Core它不会那样做。我需要停止并重新启动dotnet MyApp.dll进程。

如何让它检测二进制文件的更改并重新加载?

asp.net ubuntu asp.net-core asp.net-core-2.1 kestrel-http-server
2个回答
1
投票

没有什么我知道会为你做这件事。 IIS会监视bin目录,web.config等内容,并在检测到更改时回收应用程序池,但那是因为它知道。它也是一个功能齐全的Web服务器,文件更改的App Pool回收是这些功能之一。红隼,我假设你使用的不是。它是一个非常简单的Web服务器,可以像严格的Web服务器一样完成它所需要的工作。这就是为什么像IIS,Apache,Nginx等更传统的Web服务器通常用作Kestrel前面的反向代理 - 以提供更高级的功能。

尽管如此,这只是你的发布策略的问题。就个人而言,我鼓励你选择更复杂的复制粘贴DLL,但如果你想走这条路,你也可以编写脚本。创建一个shell脚本来复制bin目录并重新启动您的应用程序。您的发布应尽可能一个轨道。每次需要人为干预时,你都有潜在的失败点,因为人类本身就是错误的。但是,一旦经过测试并确保工作,脚本每次都会起作用,因为它总是以相同的顺序执行相同的操作。


3
投票

Ubuntu中有文件监视器可以在文件更改时发出重启命令,如systemdinotify,但我强烈建议不要这样做。上传可以暂停或缓慢,当上传50个文件时,想象每隔几秒就会重新启动一次。服务器无法知道您何时完成上传最后一个DLL。 IIS具有相同的问题,它在开发中是可靠的,因为在完整的DLL重建之后刷新页面。但是在投入生产时,您不希望随机访问者在上传过程中途启动您的网站。错误,文件锁,各种奇怪的事情都可能发生。

正如Chris Pratt所指出的,您希望编写部署工作流的脚本。 Idk你正在开发什么样的环境,但如果你有Visual Studio和WinSCP,就像用Scripting and Task Automation编写几行代码一样简单。

然后,您的发布工作流程可以是以下内容:

  1. 在Visual Studio中命中发布
  2. 发布完成后,VS将执行winscp脚本 在远程服务器上进行身份验 将发布文件夹上载到远程文件夹 删除旧文件 修剪日志 毕竟完成问题systemctl restart kestrel-myapp命令
  3. 然后,只需单击一下,即可以最可靠的方式部署,清理和重新启动您的站点。
© www.soinside.com 2019 - 2024. All rights reserved.