Visual Studio Team Services在Azure上部署 - azure vm上不存在错误default-publish.ps1

sev*_*evG 6 azure webdeploy azure-devops

我正在尝试通过Visual Studio Team Services(以前的Visual Studio Online)发布和部署系统将Web应用程序部署到Azure.这工作正常,直到昨天我遇到以下错误:

[error]术语"C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\default-publish.ps1"无法识别为cmdlet的名称,功能,脚本文件或可操作程序.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.

我使用以下脚本进行发布:

PublishAspNet5WebApp.ps1

param($websiteName, $packOutput)

$website = Get-AzureWebsite -Name $websiteName

# get the scm url to use with MSDeploy.  By default this will be the second in the array
$msdeployurl = $website.EnabledHostNames[1]


$publishProperties = @{'WebPublishMethod'='MSDeploy';
                        'MSDeployServiceUrl'=$msdeployurl;
                        'DeployIisAppPath'=$website.Name;
                        'Username'=$website.PublishingUsername;
                        'Password'=$website.PublishingPassword}


$publishScript = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\default-publish.ps1"


. $publishScript -publishProperties $publishProperties  -packOutput $packOutput
Run Code Online (Sandbox Code Playgroud)

然后,我检查了Kudu是否在路径中实际存在default-publish.ps1文件:

$ publishScript = "$ {ENV:PROGRAMFILES(X86)} \微软的Visual Studio 14.0\Common7\IDE \扩展\微软\网络工具\发布\脚本\默认publish.ps1"

我发现整个Web Tools文件夹不存在.

这是最近的变化吗?我该如何解决这个问题?我假设改变脚本位置不仅仅是神奇地工作.

谢谢.

nrt*_*rtn 6

对我有用的工作是复制已经在我本地的"default-publish.ps1"文件并将其放在项目的文件夹下.

然后,我更改了发布脚本以使用此文件:

$publishScript = "$PSScriptRoot\default-publish.ps1"
#$publishScript = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\default-publish.ps1"
Run Code Online (Sandbox Code Playgroud)

编辑:

对于那些在本地没有"default-publish.ps1"文件的人,这里是:

[cmdletbinding(SupportsShouldProcess=$true)]
param($publishProperties, $packOutput, $nugetUrl)

$publishModuleVersion = '1.0.1'
function Get-VisualStudio2015InstallPath{
[cmdletbinding()]
param()
process{
    $keysToCheck = @('hklm:\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0',
                     'hklm:\SOFTWARE\Microsoft\VisualStudio\14.0',
                     'hklm:\SOFTWARE\Wow6432Node\Microsoft\VWDExpress\14.0',
                     'hklm:\SOFTWARE\Microsoft\VWDExpress\14.0'
                     )
    [string]$vsInstallPath=$null

    foreach($keyToCheck in $keysToCheck){
        if(Test-Path $keyToCheck){
            $vsInstallPath = (Get-itemproperty $keyToCheck -Name InstallDir -ErrorAction SilentlyContinue | select -ExpandProperty InstallDir -ErrorAction SilentlyContinue)
        }

        if($vsInstallPath){
            break;
        }
    }

    $vsInstallPath
    }
 }

$vsInstallPath = Get-VisualStudio2015InstallPath
$publishModulePath = "{0}Extensions\Microsoft\Web Tools\Publish\Scripts\{1}\" -f $vsInstallPath, $publishModuleVersion

if(!(Test-Path $publishModulePath)){
$publishModulePath = "{0}VWDExpressExtensions\Microsoft\Web Tools\Publish\Scripts\{1}\" -f $vsInstallPath, $publishModuleVersion
}

$defaultPublishSettings = New-Object psobject -Property @{
LocalInstallDir = $publishModulePath
}

function Enable-PackageDownloader{
[cmdletbinding()]
param(
    $toolsDir = "$env:LOCALAPPDATA\Microsoft\Web Tools\Publish\package-downloader-$publishModuleVersion\",
    $pkgDownloaderDownloadUrl = 'http://go.microsoft.com/fwlink/?LinkId=524325') # package-downloader.psm1
process{
    if(get-module package-downloader){
        remove-module package-downloader | Out-Null
    }

    if(!(get-module package-downloader)){
        if(!(Test-Path $toolsDir)){ New-Item -Path $toolsDir -ItemType Directory -WhatIf:$false }

        $expectedPath = (Join-Path ($toolsDir) 'package-downloader.psm1')
        if(!(Test-Path $expectedPath)){
            'Downloading [{0}] to [{1}]' -f $pkgDownloaderDownloadUrl,$expectedPath | Write-Verbose
            (New-Object System.Net.WebClient).DownloadFile($pkgDownloaderDownloadUrl, $expectedPath)
        }

        if(!$expectedPath){throw ('Unable to download package-downloader.psm1')}

        'importing module [{0}]' -f $expectedPath | Write-Output
        Import-Module $expectedPath -DisableNameChecking -Force
    }
}
}

function Enable-PublishModule{
[cmdletbinding()]
param()
process{
    if(get-module publish-module){
        remove-module publish-module | Out-Null
    }

    if(!(get-module publish-module)){
        $localpublishmodulepath = Join-Path $defaultPublishSettings.LocalInstallDir 'publish-module.psm1'
        if(Test-Path $localpublishmodulepath){
            'importing module [publish-module="{0}"] from local install dir' -f $localpublishmodulepath | Write-Verbose
            Import-Module $localpublishmodulepath -DisableNameChecking -Force
            $true
        }
    }
}
}

try{

if (!(Enable-PublishModule)){
    Enable-PackageDownloader
    Enable-NuGetModule -name 'publish-module' -version $publishModuleVersion -nugetUrl $nugetUrl
}

'Calling Publish-AspNet' | Write-Verbose
# call Publish-AspNet to perform the publish operation
Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput
 }
catch{
"An error occurred during publish.`n{0}" -f $_.Exception.Message | Write-Error
}
Run Code Online (Sandbox Code Playgroud)