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

时间:2017-03-16 14:10:28

标签: asp.net asp.net-core publish asp.net-core-1.0

我试图创建一个脚本来简化发布.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。我可以从脚本中执行此操作吗?或者我解决这个问题的方法是错误的?

3 个答案:

答案 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"