ASP.NET 5 MVC 6: Publish-AzureWebsiteProject 不正确的目录结构
ASP.NET 5 MVC 6: Publish-AzureWebsiteProject incorrect directory structure
使用 powershell 将 ASP.NET 5 MVC 6 应用程序发布到 Azure Web 应用程序时,发布的文件夹结构似乎不正确。
发布后,wwwroot
文件夹太深:
如果我将应用程序的虚拟目录从 site\wwwroot
更改为 site\wwwroot\wwwroot
,那么就可以了!
首先,我使用 MSBuild 构建和文件发布:
/t:Build,FileSystemPublish /p:PublishConfiguration=$(BuildConfiguration) /p:PublishOutputPathNoTrailingSlash=$(build.stagingDirectory)
第二个,使用此脚本发布到 Azure Web App 并传入 $(build.stagingDirectory)
作为 $packOutput
:
param([String] [Parameter(Mandatory = $true)]$websiteName, [String] [Parameter(Mandatory = $true)]$packOutput)
$SourceFolder = "$packOutput"
[IO.DirectoryInfo] $parentDir = [System.IO.Path]::GetDirectoryName($packOutput)
$DestinationFile = "$parentDir\Publish.zip"
$Compression = "Optimal" # Optimal, Fastest, NoCompression
function Zip-Directory {
Param(
[Parameter(Mandatory=$True)][string]$DestinationFileName,
[Parameter(Mandatory=$True)][string]$SourceDirectory = "",
[Parameter(Mandatory=$False)][string]$CompressionLevel = "Optimal",
[Parameter(Mandatory=$False)][switch]$IncludeParentDir
)
Add-Type -AssemblyName System.IO.Compression.FileSystem
$CompressionLevel = [System.IO.Compression.CompressionLevel]::$CompressionLevel
[System.IO.Compression.ZipFile]::CreateFromDirectory($SourceDirectory, $DestinationFileName, $CompressionLevel, $IncludeParentDir)
}
Zip-Directory -DestinationFileName $DestinationFile `
-SourceDirectory $SourceFolder `
-CompressionLevel $Compression ` #Optional parameter
Move-Item -Path $DestinationFile -Destination $SourceFolder\Publish.zip
Write-Output "Stopping web app..."
Stop-AzureWebsite -Name $websiteName
Write-Output "Publishing web app..."
Publish-AzureWebsiteProject -Name $websiteName -Package $SourceFolder\Publish.zip
Write-Output "Starting web app..."
Start-AzureWebsite -Name $websiteName
我似乎看不出哪里出了问题。
编辑: 使用 DNX beta6
问题是您的 Publish.zip 文件夹将包含两个子文件夹。如果您使用 .NET 5 附带的新 dnu publish
命令,情况也会如此。
approot
wwwroot
Publish-AzureWebsiteProject
将 Publish.zip 的内容发布到 Azure Web App 的 site/wwwroot
。您需要的是一种不发布到 site/wwwroot
而是发布到 /site
的发布方法,以便您在 Azure Web 应用程序中以以下目录结构结束。
D:\
home
site
approot
wwwroot
另一种方法是使用 Git or FTP instead of Publish-AzureWebsiteProject
. Both give you the control you need and you use both from PowerShell. If you choose the Git route, while it will work out-of-the-box, also check out Project Kudu.
推送到 Azure Web 应用程序
从 site\wwwroot to site\wwwroot\wwwroot
更改应用程序的虚拟目录一次有效。下一次部署后,您应用的 wwwroot 文件夹将位于
site
wwwroot
wwwroot
wwwroot
因此,您必须将应用程序的虚拟目录更改为 site\wwwroot\wwwroot\wwwroot
才能在浏览器中获得任何结果。对于后续的每个部署,都会重复此过程。您可以通过向 Azure 网站添加额外的虚拟目录来防止这种情况发生。
在 API 的情况下,它看起来像这样:
/ site\wwwroot
/api site\wwwroot\wwwroot
Publish-AzureWebsiteProject
将继续部署到 site\wwwroot,您可以在浏览器中访问您的应用程序。com/api
使用 powershell 将 ASP.NET 5 MVC 6 应用程序发布到 Azure Web 应用程序时,发布的文件夹结构似乎不正确。
发布后,wwwroot
文件夹太深:
如果我将应用程序的虚拟目录从 site\wwwroot
更改为 site\wwwroot\wwwroot
,那么就可以了!
首先,我使用 MSBuild 构建和文件发布:
/t:Build,FileSystemPublish /p:PublishConfiguration=$(BuildConfiguration) /p:PublishOutputPathNoTrailingSlash=$(build.stagingDirectory)
第二个,使用此脚本发布到 Azure Web App 并传入 $(build.stagingDirectory)
作为 $packOutput
:
param([String] [Parameter(Mandatory = $true)]$websiteName, [String] [Parameter(Mandatory = $true)]$packOutput)
$SourceFolder = "$packOutput"
[IO.DirectoryInfo] $parentDir = [System.IO.Path]::GetDirectoryName($packOutput)
$DestinationFile = "$parentDir\Publish.zip"
$Compression = "Optimal" # Optimal, Fastest, NoCompression
function Zip-Directory {
Param(
[Parameter(Mandatory=$True)][string]$DestinationFileName,
[Parameter(Mandatory=$True)][string]$SourceDirectory = "",
[Parameter(Mandatory=$False)][string]$CompressionLevel = "Optimal",
[Parameter(Mandatory=$False)][switch]$IncludeParentDir
)
Add-Type -AssemblyName System.IO.Compression.FileSystem
$CompressionLevel = [System.IO.Compression.CompressionLevel]::$CompressionLevel
[System.IO.Compression.ZipFile]::CreateFromDirectory($SourceDirectory, $DestinationFileName, $CompressionLevel, $IncludeParentDir)
}
Zip-Directory -DestinationFileName $DestinationFile `
-SourceDirectory $SourceFolder `
-CompressionLevel $Compression ` #Optional parameter
Move-Item -Path $DestinationFile -Destination $SourceFolder\Publish.zip
Write-Output "Stopping web app..."
Stop-AzureWebsite -Name $websiteName
Write-Output "Publishing web app..."
Publish-AzureWebsiteProject -Name $websiteName -Package $SourceFolder\Publish.zip
Write-Output "Starting web app..."
Start-AzureWebsite -Name $websiteName
我似乎看不出哪里出了问题。
编辑: 使用 DNX beta6
问题是您的 Publish.zip 文件夹将包含两个子文件夹。如果您使用 .NET 5 附带的新 dnu publish
命令,情况也会如此。
approot
wwwroot
Publish-AzureWebsiteProject
将 Publish.zip 的内容发布到 Azure Web App 的 site/wwwroot
。您需要的是一种不发布到 site/wwwroot
而是发布到 /site
的发布方法,以便您在 Azure Web 应用程序中以以下目录结构结束。
D:\
home
site
approot
wwwroot
另一种方法是使用 Git or FTP instead of Publish-AzureWebsiteProject
. Both give you the control you need and you use both from PowerShell. If you choose the Git route, while it will work out-of-the-box, also check out Project Kudu.
从 site\wwwroot to site\wwwroot\wwwroot
更改应用程序的虚拟目录一次有效。下一次部署后,您应用的 wwwroot 文件夹将位于
site
wwwroot
wwwroot
wwwroot
因此,您必须将应用程序的虚拟目录更改为 site\wwwroot\wwwroot\wwwroot
才能在浏览器中获得任何结果。对于后续的每个部署,都会重复此过程。您可以通过向 Azure 网站添加额外的虚拟目录来防止这种情况发生。
在 API 的情况下,它看起来像这样:
/ site\wwwroot
/api site\wwwroot\wwwroot
Publish-AzureWebsiteProject
将继续部署到 site\wwwroot,您可以在浏览器中访问您的应用程序。com/api