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