[cmdletbinding()]
param(
[string] [Parameter(Mandatory=$true)] $PathToVSIX,
[string] [Parameter(Mandatory=$true)] $Token,
[string] $IsPublicInput = "false",
[string] $Version = $null,
[string] $Publisher = $null,
[string] $RemoveBaseUriInput = "true",
[string] $ShareWith= $null
)
Set-StrictMode -Version 3
[bool]$IsPublic = [bool]::Parse($IsPublicInput)
[bool]$RemoveBaseUri = [bool]::Parse($RemoveBaseUriInput)
$file = Get-ChildItem $PathToVSIX -Filter *.vsix -Recurse | % { $_.FullName } | Select -First 1
Write-Verbose "Found VSIX Package $file"
try { $null = [IO.Compression.ZipFile] }
catch { [System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') }
try { $fileZip = [System.IO.Compression.ZipFile]::Open( $file, 'Update' ) }
catch { throw "Another process has locked the '$file' file." }
$desiredFile = [System.IO.StreamReader]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsixmanifest' }).Open()
$text = $desiredFile.ReadToEnd()
[xml]$xml = $text
$desiredFile.Close()
$desiredFile.Dispose()
if ($Version)
{
Write-Verbose "Updating Version to $Version"
$xml.PackageManifest.MetaData.Identity.Version = $Version
}
if ($Publisher)
{
Write-Verbose "Updating Publisher to $Publisher"
$xml.PackageManifest.MetaData.Identity.Publisher = $Publisher
}
if($IsPublic -eq $true)
{
Write-Verbose "Setting GalleryFlag to Public"
$xml.PackageManifest.MetaData.GalleryFlags = "Public"
}
else
{
Write-Verbose "Setting GalleryFlag to Private"
$xml.PackageManifest.MetaData.GalleryFlags = ""
}
$desiredFile = [System.IO.StreamWriter]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsixmanifest' }).Open()
$desiredFile.BaseStream.SetLength(0)
$desiredFile.Write($xml.InnerXml)
$desiredFile.Flush()
$desiredFile.Close()
$desiredFile = [System.IO.StreamReader]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsomanifest' }).Open()
$text = $desiredFile.ReadToEnd()
$desiredFile.Close()
$desiredFile.Dispose()
if ($RemoveBaseUri -eq $true)
{
$text = (($text -split "`n") | ? {$_ -notmatch 'baseUri'}) -join "`n"
}
$desiredFile = [System.IO.StreamWriter]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsomanifest' }).Open()
$desiredFile.BaseStream.SetLength(0)
$desiredFile.Write($text)
$desiredFile.Flush()
$desiredFile.Close()
$fileZip.Dispose()
if($ShareWith -ne $null)
{
$ShareWith = "--share-with" + $ShareWith
}
else
{
$ShareWith = ""
}
npm install -g tfx-cli
tfx extension publish --vsix "$File" --token $Token $ShareWith