How can I install Visual Studio Code extensions offline?

后端 未结 12 1226
终归单人心
终归单人心 2020-11-27 09:12

I have installed Visual Studio Code on a machine that is not, and cannot be, connected to the Internet. According to the documentation, I can install an extension from the c

12条回答
  •  广开言路
    2020-11-27 10:00

    A small powershell to get needed information for also visual studio extension :

    function Get-VSMarketPlaceExtension {
        [CmdLetBinding()]
        Param(
            [Parameter(ValueFromPipeline = $true,Mandatory = $true)]
            [string[]]
            $extensionName
        )
        begin {
            $body=@{
                filters = ,@{
                criteria =,@{
                        filterType=7
                        value = $null
                    }
                }
                flags = 1712
            }    
        }
        process {
            foreach($Extension in $extensionName) {
                $response =  try {
                    $body.filters[0].criteria[0].value = $Extension
                    $Query =  $body|ConvertTo-JSON -Depth 4
                    (Invoke-WebRequest -Uri "https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery?api-version=6.0-preview" -ErrorAction Stop -Body $Query -Method Post -ContentType "application/json")
                } catch [System.Net.WebException] { 
                    Write-Verbose "An exception was caught: $($_.Exception.Message)"
                    $_.Exception.Response 
                }
                $statusCodeInt = [int]$response.StatusCode
    
                if ($statusCodeInt -ge 400) {
                    Write-Warning "Erreur sur l'appel d'API :  $($response.StatusDescription)"
                    return
                }
                $ObjResults = ($response.Content | ConvertFrom-Json).results
        
                If ($ObjResults.resultMetadata.metadataItems.count -ne 1) {
                    Write-Warning "l'extension '$Extension' n'a pas été trouvée."
                    return
                }
        
                $Extension = $ObjResults.extensions
        
                $obj2Download = ($Extension.versions[0].properties | Where-Object key -eq 'Microsoft.VisualStudio.Services.Payload.FileName').value
                [PSCustomObject]@{
                    displayName = $Extension.displayName
                    extensionId = $Extension.extensionId
                    deploymentType = ($obj2Download -split '\.')[-1]
                    version = [version]$Extension.versions[0].version
                    LastUpdate = [datetime]$Extension.versions[0].lastUpdated
                    IsValidated = ($Extension.versions[0].flags -eq "validated")
                    extensionName = $Extension.extensionName 
                    publisher     = $Extension.publisher.publisherName
                    SourceURL = $Extension.versions[0].assetUri +"/" + $obj2Download
                    FileName = $obj2Download                     
                }             
            }
        }
    }
    

    This use marketplace API to get extension information. Exemple of usage and results :

    >Get-VSMarketPlaceExtension "ProBITools.MicrosoftReportProjectsforVisualStudio"
    
    
    displayName    : Microsoft Reporting Services Projects
    extensionId    : 85e42f76-6afa-4a68-afb5-033d1fe08d7b
    deploymentType : vsix
    version        : 2.6.7
    LastUpdate     : 13/05/2020 22:23:45
    IsValidated    : True
    extensionName  : MicrosoftReportProjectsforVisualStudio
    publisher      : ProBITools
    SourceURL      : https://probitools.gallery.vsassets.io/_apis/public/gallery/publisher/ProBITools/extension/MicrosoftReportProjectsforVisualStudio/2.6.7/assetbyname/Microsoft.DataTools.ReportingServices.vsix
    FileName       : Microsoft.DataTools.ReportingServices.vsix
    

    All flags value are available here

    Thanks to m4js7er and Adam Haynes for inspiration

提交回复
热议问题