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

问题描述 投票:3回答:3

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

asp.net asp.net-core publish asp.net-core-1.0
3个回答
10
投票

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


0
投票

根据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

-1
投票

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

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

dotnet publish --output d:\publocation

Stop-WebAppPool "xxx"
Start-Website "xxx"
© www.soinside.com 2019 - 2024. All rights reserved.