我希望将一些.NET Core应用程序转移到生产环境中,使用旧的.NET框架,您可以随时更新应用程序代码的已编译DLL。
下次应用程序池回收时,您将获得新代码 - 或者您可以手动回收应用程序池。
使用.NET Core,似乎正在运行的应用程序锁定DLL,并且在通过不活动关闭进程或通过任务管理器(此处的Window服务器)结束之前不能覆盖它。
是否可以在不必为所有用户设置维护时段的情况下发布新版本的首选方法?这是在通过IIS 8运行.NET Core框架的Windows 2012 R2服务器和没有托管代码的应用程序池中。
答案 0 :(得分:4)
对于使用Kestrel托管的ASP.NET Core在单独的进程中运行,而IIS的工作方式与反向代理相同。因此,除非您在应用程序中实现DLL,否则无法释放DLL。
Set up a hosting environment for ASP.NET Core on Windows with IIS, and deploy to it部分部署应用程序,第4项。
如果您想避免停机,只需在IIS上使用相同的设置设置两个网站,在第二个网站上进行更新,先放下,然后开始第二个。
答案 1 :(得分:0)
我认为最简单的方法是将所有文件复制到一个新文件夹中并更改网站的物理路径。
例如,您在C:\WebSites
下拥有所有网站,每个网站都有一个子文件夹,例如C:\WebSites\MyWebSite
,每个版本都有一个子文件夹,例如C:\WebSites\MyWebSite\V01.00
。 / p>
要部署新版本V01.01
,请创建新的子文件夹C:\WebSites\MyWebSite\V01.01
,将所有文件复制到该文件夹并更改网站的物理路径。
您可以使用PowerShell轻松更改物理路径:
Import-Module WebAdministration
Set-ItemProperty -Path "IIS:\Sites\MyWebSite" -name "physicalPath" -value "C:\WebSites\MyWebSite\V01.01"
这是“热门发布”的一种形式。此外,如果出现问题,您可以轻松地回滚到以前的版本。
另一种替代方法是使用符号链接,例如C:\WebSites\MyWebSite
可能指向C:\WebSiteVersions\MyWebSite\V01.00
。要部署新版本,请将所有文件复制到C:\WebSiteVersions\MyWebSite\V01.01
,然后更改符号链接,以使C:\WebSites\MyWebSite
指向C:\WebSiteVersions\MyWebSite\V01.01
,最后回收应用程序池。 Click here来查看执行此操作的代码
还有另一个选项称为“蓝绿色部署”策略。此策略需要配置单个服务器Web场和两个网站。请参阅this article了解完整说明。