我可以在运行时更新我的​​asp核心站点吗?

时间:2016-12-16 01:56:06

标签: asp.net-mvc asp.net-core asp.net-core-mvc .net-core

我有一个运行的ASP .NET Core网站,我使用dotnet publish ..

构建

现在我想以尽可能少的停机时间更新网站 - 希望没有!

我在开发过程中注意到如果未附加调试器我可以对Views .cshtml文件进行更改,并且它们会被反映而无需重新启动服务器,因此我可以将新视图放入我的实时站点?其他一切如控制器*.dll

我看了,但找不到任何官方文件:(

3 个答案:

答案 0 :(得分:1)

不,你不能绝对'透明'

IIS正在运行您的网站进程并且dll / exe文件已被锁定。要解锁它们 - 您需要停止该网站。

我使用以下行动:

  1. 使用新网站将zip复制到生产服务器
  2. 在生产服务器上的“backup dir”上创建appsettings.json文件副本
  3. 在IIS管理器中停止该站点。停工开始
  4. 删除网站目录中的所有文件 - 它们不再被锁定(IIS停止的网站)
  5. 从zip包中提取新文件
  6. 从“backup dir”复制“production”appsettings.json(在zip中覆盖一个)
  7. 在IIS管理器中启动站点,在浏览器中本地打开它。停工结束。
  8. 在我的网站上,所有停机时间都不到一分钟(复制文件,重新启动红隼)。如果这对您来说是不可接受的 - 您需要多个具有某种“渐进式更新”的实例。

答案 1 :(得分:0)

即使在IIS或Kestrel

上编译的文件也无法执行此操作

强制更新已编译的文件可能会损坏整个应用程序并产生许多意外错误。始终关闭您的应用程序,然后更新。更新只对未编译为视图的文件安全。如果你需要保存你的SLA make web-farm策略(那么你可以升级每个实例而不会像@Dmitry那样破坏app的运行时间)

答案 2 :(得分:0)

  • 将旧的 dll 文件重命名为 myapp.dll.old(应用程序将继续工作)
  • 复制新的
  • 回收 IIS 应用程序池

这些答案表明了类似的技术https://stackoverflow.com/a/66580629/56621https://stackoverflow.com/a/41149978/56621