скачать NuGet Licenses из VS Project и экспортировать его в виде открытого текста - PullRequest
0 голосов
/ 21 апреля 2020

есть ли способ конвертировать html в открытый текст? У меня есть скрипт, который экспортирует все лицензии NuGet, которые использовались в проекте Visual Studio, в текстовый файл. К сожалению, экспорт в основном осуществляется в HTML, и я не нашел способа его решить.

# Run in Package Manager Console with `./download-packages-license.ps1`.
# If access denied, execute `Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`.

# Save licenses to One text file and one csv file instead of individual files

$LicensesFile = (Join-Path (pwd) 'licenses\Licenses.txt') 
$LicensesFile_csv = (Join-Path (pwd) 'licenses\Licenses.csv') 

$results =  @()

# Below 2 lines to comment if you uncomment Split-Path ..
$solutionFile = "d:\Solutions\SolFile.sln"
cd "d:\Solutions"


# Uncomment below line if you wish to want to use above 2 lines
# Split-Path -parent $dte.Solution.FileName | cd; 

New-Item -ItemType Directory -Force -Path ".\licenses";

@( Get-Project -All | ? { $_.ProjectName } | % {
Get-Package -ProjectName $_.ProjectName | ? { $_.LicenseUrl }
} ) | Sort-Object Id -Unique | % {

$pkg = $_;

Try 
{
    if ($pkg.Id -notlike 'microsoft*' -and $pkg.LicenseUrl.StartsWith('http')) 
    {
        Write-Host ("Download license for package " + $pkg.Id + " from " + $pkg.LicenseUrl);

        #Write-Host (ConvertTo-Json ($pkg));

        $licenseUrl = $pkg.LicenseUrl
        if ($licenseUrl.contains('github.com')) {
            $licenseUrl = $licenseUrl.replace("/blob/", "/raw/")
        }

        $extension = ".txt"
        if ($licenseUrl.EndsWith(".md")) 
        {
            $extension = ".md"
        }

        (New-Object System.Net.WebClient).DownloadFile($licenseUrl, (Join-Path (pwd) 'licenses\') + $pkg.Id + $extension);

        $licenseText = get-content "$((Join-Path (pwd) 'licenses\') + $pkg.Id + $extension)"

        Remove-Item $((Join-Path (pwd) 'licenses\') + $pkg.Id + $extension) -ErrorAction SilentlyContinue -Force

        $data = '' | select PkgId, LicenseText

        $data.PkgId = $pkg.Id
        $data.LicenseText = $licenseText | Out-String

        $results += $data


        # save in txt file

         "Designation: NugetPackage $($pkg.Id)" | Add-Content $LicensesFile
         $licenseText | Add-Content $LicensesFile

         "" | Add-Content $LicensesFile
         "" | Add-Content $LicensesFile
         "" | Add-Content $LicensesFile
         "" | Add-Content $LicensesFile


         Write-Host "Package $($pkg.Id): License Text saved to $LicensesFile" -ForegroundColor Green

    }
}
Catch [system.exception] 
    {
    Write-Host ("Could not download license for " + $pkg.Id)
    }
}

# save in .csv file
$results | Export-Csv $LicensesFile_csv -nti

Источник сценария здесь

Пользователь также сказал ,, К сожалению, большинство URL-адресов лицензий теперь указывают только на версии HTML (начало 2020 г.). Например, licenses.nuget.org игнорирует любые заголовки «Accept: text / plain» (или json) и возвращает html независимо от того, *

Так есть ли способ получить лицензию информация в текстовом формате?

Спасибо и будьте здоровы!

1 Ответ

0 голосов
/ 22 апреля 2020

Так есть ли способ получить информацию о лицензии в виде открытого текста?

На самом деле , мы не рекомендуем преобразовывать файл html в открытый текст. И когда вы получаете данные лицензии от nuget.org, это данные, возвращаемые с сайта в полном формате HTML, который разработан таким образом.

Возвращенные данные также содержат различные форматы для поля лицензии, поэтому мы не должны легко изменять принятый формат данных (такой как открытый текст). И , если возможно, единственный способ сделать это - избавиться от полей формата HTML из исходных данных, но, однако, это невозможно с помощью Powershell и не может быть сделано до сих пор.

Поэтому , чтобы строго следовать формату возвращаемых данных, лучше всего использовать файл HTML для получения информации о лицензии. Он может поддерживать согласованность с веб-сайтом в форме html.

Предложение

1) изменить их в powershell:

$LicensesFile = (Join-Path (pwd) 'licenses\Licenses.html') 
$LicensesFile_csv = (Join-Path (pwd) 'licenses\Licenses_csv.html') 

И тогда вы можете получить то, что вы хотите.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...