基于多个来源,我制作了一个PowerShell脚本,该脚本可读取所有NuGet程序包并获取许可证文件,并将其放入名为“ licenses”的文件夹中。该脚本应在项目的根目录(“ packages”文件夹所在的位置)上运行。
# Run in Package Manager Console with `./download-packages-license.ps1`.
# If access denied, execute `Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`.
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);
}
}
Catch [system.exception] {
Write-Host ("Could not download license for " + $pkg.Id)
}
}
免责声明:我不是PowerShell专家。运行风险自负:)
我找不到任何简单的代码根据其许可证文件来检测NuGet软件包具有哪个许可证。唯一接近解决方案的项目是Licensee,但这是在Ruby中构建的。