部署 .Net Core 应用程序失败,因为 dll 被锁定

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

我遇到部署问题。对于 .Net 6 应用程序,由于主 dll 被锁定,它经常无法部署。根据文档,我可以使用 app_offline 文件来管理它。如何部署和管理这个文件是一个真正的问题,但即使我最终让它工作,它也没有解决问题。例如,作为测试,我将 app_offline 文件添加到站点。该站点现在显示一条维护中消息。但删除文件后,该网站不会重新启动,并且需要大量的手动干预。处理基本问题的预期方法是什么 - 部署到正在运行的站点失败,因为该站点不会发布 ddl 以将其替换为新版本?

.net-6.0 webdeploy app-offline.htm
1个回答
0
投票

我发现了问题。这就是您需要部署到具有较新 .Net 版本的本地 ISS 实例的方式。您可以通过向 web.config 添加一些内容来启用它。在 .Net 6 中,ShadowCopy 是实验性的,因此您添加:

<aspNetCore processPath="dotnet" arguments=".\KhovOptimizely.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    <handlerSettings xdt:Transform="InsertIfMissing">
        <handlerSetting name="experimentalEnableShadowCopy" value="true"/>
        <handlerSetting name="shadowCopyDirectory" value="D:\Websites\KHOV_Replatform\ShadowCopyDirectory\"/>
    </handlerSettings>
</aspNetCore>

但从 .Net 7 开始,它不再是实验性的。所以你可以像这样设置:

<aspNetCore processPath="dotnet" arguments=".\KhovOptimizely.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    <handlerSettings xdt:Transform="InsertIfMissing">
        <handlerSetting name="enableShadowCopy" value="true"/>
        <handlerSetting name="shadowCopyDirectory" value="D:\Websites\KHOV_Replatform\ShadowCopyDirectory\"/>
    </handlerSettings>
</aspNetCore>

还有好的部分。如果您要将 .Net 6 应用程序部署到还安装了 .Net 6 和 .Net 7 或 8 的服务器,则您需要两者,即使您的应用程序是 .Net 6:

<aspNetCore processPath="dotnet" arguments=".\KhovOptimizely.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    <handlerSettings xdt:Transform="InsertIfMissing">
        <handlerSetting name="experimentalEnableShadowCopy" value="true"/>
        <handlerSetting name="enableShadowCopy" value="true"/>
        <handlerSetting name="shadowCopyDirectory" value="D:\Websites\KHOV_Replatform\ShadowCopyDirectory\"/>
    </handlerSettings>
</aspNetCore>
© www.soinside.com 2019 - 2024. All rights reserved.