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