Deploying Visual Studio Team services on Azure - default-publish.ps1 error does not exist on azure vm

I am trying to deploy a web application for Azure using Visual Studio Team Services (formerly Visual Studio Online) by releasing and deploying a system. This worked fine until yesterday, when I ran into the following error:

[error] The term C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Web Tools \ Publish \ Scripts \ default-publish.ps1 'is not recognized as the name of the cmdlet, function, script file, or executable program. Check the spelling of the name or indicate the path to it, make sure that the path is correct and try again.

I am using the following script to publish:

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 

Then I checked Kudu if the default-publish.ps1 file really exists along the path:

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

and I found that the whole Web Tools folder does not exist.

Is this a very recent change? How can I get around this? I assume that changing the location of the script will not only magically work.

Thanks.

+6
source share
2 answers

The work that worked for me was to copy the file "default-publish.ps1", which is already on my local computer, and put it in the project folder.

Then I changed the publishing script to use this file:

 $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" 

EDIT:

For those who do not have the file "default-publish.ps1" on their local, here it is:

 [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 } 
+6
source

The script has at least changed in VS 2017. Use these two parameters:

default publication: [CmdletBinding (SupportsShouldProcess = $ true)] param ($ publishProperties = @ {}, $ packOutput, $ pubProfilePath)

 # to learn more about this file visit https://go.microsoft.com/fwlink/?LinkId=524327 try{ if ($publishProperties['ProjectGuid'] -eq $null){ $publishProperties['ProjectGuid'] = '' } $publishModulePath = Join-Path (Split-Path $MyInvocation.MyCommand.Path) 'publish-module.psm1' Import-Module $publishModulePath -DisableNameChecking -Force # call Publish-AspNet to perform the publish operation Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput -pubProfilePath $pubProfilePath } catch{ "An error occurred during publish.`n{0}" -f $_.Exception.Message | Write-Error } 

publish-module.psm1 too big post for me too

Location: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ ide \ Extensions \ Microsoft \ Web Tools \ Publish \ Scripts \ 1.2.0

0
source

All Articles