我试图创建一个脚本来简化发布.NET Core网站的过程。当我针对已经运行的服务器运行cd src/app
dotnet build --no-incremental
dotnet publish --framework netcoreapp1.0 --configuration Release --output ../../dist
时,我遇到了问题。服务器是安装了dotnet软件包的IIS,因此IIS使用其应用程序池启动dotnet。
这是我的批处理文件。我很高兴使用其他脚本类型:
proc
当我运行脚本时,我收到此错误:
"该进程无法访问该文件' C:\ inetpub \ wwwroot \ app \ dist \ app.dll'因为它正在被另一个进程使用。"
这是有道理的,似乎我需要停止,部署和重启dotnet。我可以从脚本中执行此操作吗?或者我解决这个问题的方法是错误的?
答案 0 :(得分:9)
最好的方法是将app_offline.htm
文件放到应用程序文件夹中。这将使IIS在您复制新版本时停止您的应用程序并向用户提供app_offline.htm
文件的内容。完成复制新版本的应用程序后,删除app_offline.htm
文件,IIS将启动您的应用程序。
您可以在my post中找到有关使用IIS运行ASP.NET核心应用程序的更多详细信息。
答案 1 :(得分:0)
根据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
答案 2 :(得分:-1)
我认为这是一个有效的解决方案,但是当我想编写构建过程脚本时却无济于事。
Stop-Website "xxx"
Stop-WebAppPool "xxx"
Start-Sleep -Seconds 5
dotnet publish --output d:\publocation
Stop-WebAppPool "xxx"
Start-Website "xxx"