【问题标题】:The site DLL seems to be intermittently locked when publishing发布时站点 DLL 似乎间歇性锁定
【发布时间】:2018-03-09 08:00:29
【问题描述】:

我尝试通过 VS2017 中的发布上下文菜单将我的 .net 核心站点部署到 Azure,偶尔(大约三分之一的部署),我收到以下错误。

Web 部署任务失败。 (Web Deploy 无法修改文件 目标上的“MyCoreWebSite.dll”,因为它被 外部过程。为了让发布操作成功, 您可能需要重新启动应用程序以释放锁定, 或在您的下一个应用程序中使用 AppOffline 规则处理程序来处理 .Net 应用程序 发布尝试。了解更多信息: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.)

然后我会等一下,再试一次,它会起作用的。同时,我将运行handle 实用程序寻找锁定DLL 的任何东西,但它永远找不到任何东西。

这是一个错误还是我遗漏了一些简单的东西?

【问题讨论】:

    标签: .net asp.net-core .net-core visual-studio-2017 webdeploy


    【解决方案1】:

    ASP.NET Core 不支持文件的卷影复制,这意味着 ASP.NET Core 进程 (Kestrel) 将锁定这些文件。你可以解决这个问题:

    1. 在发布前提供app_offline.htm 页面,然后将其删除。我认为发布配置文件(<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>)中对此有自动支持。但如果需要,您可以使用自定义部署脚本来完成。在 ASP.NET Core 1.x 中,我还必须在 Startup.cs 文件中添加一个文件监视任务来关闭当前进程。不知道 ASP.NET Core 2.0 是否还需要它。
    2. 1. 的缺点是您的网站在发布期间将处于离线状态。如果您不想使用站点的副本:将所有文件复制到子目录(例如\PREVIOUS),更改 web.config 中的标记,使其指向新的 .exe子目录。现在您的根目录中的所有锁定都应该消失了...发布您的网站并在之后再次更改 web.config。
    3. 如果您的网站是负载平衡的,您当然可以从池中取出一台服务器,对其进行更新并在完成后将其添加回池中。

    【讨论】:

    • 4.将其部署到 Azure 上的“暂存”部署插槽,并在插槽上启用“自动交换插槽”选项,以便在加载后将其与实时站点交换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多