我正在寻找一种使用命令行脚本而不是在Visual Studio中手动获取解决方案中每个项目(特别是版本)中所有已使用NuGet软件包的列表的方法。
通过命令“ Get-Package”使用程序包管理器控制台,可以得到所需的内容,但在VS之外不可用。
我正在使用的是本地NuGet提要。我的默认软件包管理格式是PackageReference。
任何想法都会有所帮助
imp*_*mps 15
PackageReference 作为包管理格式仅适用于每个项目。因此,您需要单独“分析”每个项目。
从命令行,“将”有一种列出所有包的方法。这是“dotnet list package”命令。我说会,因为它仍在预览中。您可以从这里下载 2.2.100 版本。相关规范。
最简单的用法示例是:
dotnet list YourSln.sln package
Run Code Online (Sandbox Code Playgroud)
如果不想使用 dotnet.exe 预览,可以考虑编写自己的工具,通过读取每个项目的资产文件,这就是实际命令的作用。作为参考,请参阅此处和此处的代码
sel*_*ape 10
我确信有更好的方法可以做到这一点,但在使用 PackageReferences 时,这里有一个全面的 PowerShell 方法:
Get-Content .\<solution>.sln | where { $_ -match "Project.+, ""(.+)""," } | foreach { $matches[1] } | % {Get-Content $_ | Find "<PackageReference Include" } | Sort-Object -Unique
Run Code Online (Sandbox Code Playgroud)
在 .sln 所在的文件夹中运行它。
它产生这样的输出:
Run Code Online (Sandbox Code Playgroud)<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.5.0" /> <PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.4" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" /> <PackageReference Include="Microsoft.Extensions.Http" Version="2.1.1" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.1" /> <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.1" /> <PackageReference Include="Microsoft.Extensions.Options" Version="2.1.1" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.5" /> <PackageReference Include="Newtonsoft.Json" Version="11.0.2" /> <PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
我故意删除重复项;如果您愿意,可以省略该部分。
在我的情况下,这与 的输出相匹配Get-Package,但有一个例外是Microsoft.NETCore.App,因为它没有在任何地方列为依赖项,但可能是从<TargetFramework>netcoreapp2.1</TargetFramework>.
由于包依赖项已移至 package.config 文件中,因此这里是/sf/users/166965291/提供的 Powershell 的更新版本
Get-Content .\NP.sln | where { $_ -match "Project.+, ""(.+)\\([^\\]+).csproj"", " } | foreach { "$($matches[1])\packages.config" } | % { Get-Content $_ | Find "<package id" } | Sort-Object -Unique
Run Code Online (Sandbox Code Playgroud)
输出将是这样的:
<package id="AutoMapper" version="8.1.1" targetFramework="net47" />
<package id="BouncyCastle" version="1.8.5" targetFramework="net47" />
<package id="CsvHelper" version="12.1.2" targetFramework="net47" />
<package id="DnsClient" version="1.2.0" targetFramework="net47" />
<package id="EntityFramework" version="6.2.0" targetFramework="net462" />
<package id="EntityFramework" version="6.2.0" targetFramework="net47" />
Run Code Online (Sandbox Code Playgroud)
Get-Package | Select-Object Id, Version, LicenseUrl, ProjectName在 Visual Studio 的包管理器控制台中运行此命令。取自这个答案:https : //softwareengineering.stackexchange.com/a/286981
| 归档时间: |
|
| 查看次数: |
3044 次 |
| 最近记录: |