【问题标题】:How do I restart an IIS Website during publishing of a .NET Core website in Visual Studio?在 Visual Studio 中发布 .NET Core 网站期间如何重新启动 IIS 网站?
【发布时间】:2018-09-05 23:31:10
【问题描述】:
我在 Visual Studio 中使用 Web Deploy 来发布我的 .Net Core 网站。我经常收到错误,因为服务器上的某些文件被锁定。错误显示为发布遇到错误。我可以通过在服务器上的 IIS 中停止和启动网站来解决此问题。
在我的 ASP.NET MVC 网站上,我可以毫无问题地发布,因为 Web Deploy 会将站点维护文件插入到发布的根目录中,这会导致 IIS 关闭站点。发布完成后,站点维护文件将被删除,网站将重新启动。
在 Visual Studio 中发布 .NET Core 网站期间如何重新启动 IIS 网站?
【问题讨论】:
标签:
visual-studio
iis
.net-core
【解决方案1】:
您可以始终部署在新文件夹中,只需切换运行站点的根文件夹即可。
为此,我创建了一个存档并将此存档移动到生产服务器,然后运行部署脚本 (powershell)。这不是你的问题的直接决定,只是一种可以给你一个想法的解决方法。
用于部署的powershell脚本示例:
Param(
[string]$project,
[string]$archive,
[string]$config
)
#####################################################################
# Functions
#
function Unzip
{
Param([string]$fname, [string]$output)
if ($PSVersionTable.PSVersion.Major -ge 5)
{
Expand-Archive $fname $output -Force
}
else
{
& .\7za.exe x $fname -o"$output" -bb0 -bd -y
}
}
#####################################################################
$current=(Get-Date).ToString("yyyy.MM.dd")
$base_path="D:"
$backup="$base_path\$project\bak-$current"
echo "Deploying project $project"
echo "Copy new binaries to: $base_path\$project\$current"
Unzip $archive $base_path\$project\$current
echo "Copying new config to: $base_path\$project\$current"
Copy-Item "$config" -Destination "$base_path\$project\$current\" -Force
echo "Creating log folder"
New-Item "$base_path\$project\$current\logs" -type directory -force
echo "Switch IIS physical path for website: $website"
Import-Module WebAdministration
Set-ItemProperty "IIS:\Sites\$website" -Name PhysicalPath -Value "$base_path\$project\$current"