发布已经 运行 的 dotnet 应用程序

Publishing a dotnet application that's already running

我正在尝试创建一个脚本来简化发布 .NET Core 网站的过程。当我 运行 dotnet publish 针对已经 运行ning 的服务器时,我 运行ning 遇到了一个问题。服务器是安装了 dotnet 包的 IIS,所以 IIS 使用它的应用程序池来启动 dotnet。

这是我的批处理文件。我很乐意使用另一种脚本类型:

cd src/app
dotnet build --no-incremental
dotnet publish --framework netcoreapp1.0 --configuration Release --output ../../dist

当我 运行 脚本时出现此错误:

"The process cannot access the file 'C:\inetpub\wwwroot\app\dist\app.dll' because it is being used by another process."

这是有道理的,看来我需要停止、部署并重新启动 dotnet。我可以从脚本中执行此操作吗?还是我处理这个问题的方法不对?

最好的方法是将 app_offline.htm 文件拖放到您的应用程序文件夹中。这将使 IIS 停止您的应用程序,并在您复制新版本时向用户提供 app_offline.htm 文件的内容。完成复制新版本的应用程序后,删除 app_offline.htm 文件,IIS 将启动您的应用程序。 您可以在 my post 中找到有关 运行 ASP.NET IIS 核心应用程序的更多详细信息。

我认为这是一个有效的解决方案,但在我想编写构建过程脚本时无济于事。

Stop-Website "xxx"
Stop-WebAppPool "xxx"
Start-Sleep -Seconds 5

dotnet publish --output d:\publocation

Stop-WebAppPool "xxx"
Start-Website "xxx"

根据 Pawel 的回答,我有一个包含我的 app_offline.html 文件和多个 IIS 部署脚本的部署文件夹。这是我用来部署的示例脚本:

copy .\app_offline.htm C:\hosting\my-project\app_offline.htm
dotnet publish ../MyProject.csproj -r win-x64 -f netcoreapp2.1 --self-contained -c Release -o C:\hosting\my-project
del C:\hosting\my-project\app_offline.htm