获取解决方案中使用的所有NuGet软件包的列表

Avi*_*hay 7 c# nuget

我正在寻找一种使用命令行脚本而不是在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 预览,可以考虑编写自己的工具,通过读取每个项目的资产文件,这就是实际命令的作用。作为参考,请参阅此处此处的代码

  • 它适用于基于 SDK 的项目。目标框架和工具之间存在差异。这是一个工具功能,因此与 .NET 5.0 并不真正相关。它适用于基于 SDK 的项目,这些项目的目标不仅仅是 .NET Core。 (2认同)

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 所在的文件夹中运行它

它产生这样的输出:

<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">
Run Code Online (Sandbox Code Playgroud)

我故意删除重复项;如果您愿意,可以省略该部分。

在我的情况下,这与 的输出相匹配Get-Package,但有一个例外是Microsoft.NETCore.App,因为它没有在任何地方列为依赖项,但可能是从<TargetFramework>netcoreapp2.1</TargetFramework>.


Ben*_*ier 5

由于包依赖项已移至 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)


sta*_*ikk 5

Get-Package | Select-Object Id, Version, LicenseUrl, ProjectName在 Visual Studio 的包管理器控制台中运行此命令。取自这个答案:https : //softwareengineering.stackexchange.com/a/286981