.net core .NET核心依赖关系树

.net core .NET核心依赖关系树,.net-core,visual-studio-2017,.net Core,Visual Studio 2017,是否可以在.net核心应用程序中查看项目的依赖关系?我正在使用Visual Studio 2017 Professional 目前,我的csproj中引用了以下nugget软件包 <ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.1" /> <PackageReference Include="Microsoft.

是否可以在.net核心应用程序中查看项目的依赖关系?我正在使用Visual Studio 2017 Professional

目前,我的
csproj
中引用了以下nugget软件包

<ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.1" />
    <PackageReference Include="SimpleInjector.Integration.AspNetCore.Mvc" Version="4.0.8" />
</ItemGroup>

您可以在其中导航依赖项


但是这使得很难找到一个特定的依赖关系——如果你知道你在寻找什么,那么一棵树是很好的。是否有方法输出从属程序集及其版本的平面列表?

您可以向项目文件(在
元素内)添加msbuild目标,如下所示:

<Target Name="PrintAllReferences" DependsOnTargets="RunResolvePackageDependencies">
  <Message Importance="high" Text="Referenced package: %(PackageDefinitions.Identity)" />
</Target>
如果您想要一个“反向依赖关系树”——一个包列表以及哪些包引用了它们——您可以执行类似的操作:

<Target Name="PrintPackagesAndParents" DependsOnTargets="RunResolvePackageDependencies">
  <Message Importance="high" Text="* %(PackageDependencies.Identity) referenced by:%0a^---@(PackageDependencies->'%(ParentPackage) - target %(ParentTarget)', '%0a^---')" />
</Target>

没有关于这些项的真正文档,但它们有“公共”名称,由作为目标一部分执行的任务生成,并生成一些非常有用的项:
TargetDefinitions
PackageDefinitions
PackageDependencies
FileDependencies
DiagnosticMessages

这在今天的
Morning Brew
中出现,可能值得一看:


在Visual Studio中,您实际上可以非常轻松地搜索特定项目的依赖项

只需右键单击Dependencies,选择“scope to this”。然后您可以直接搜索依赖项。

啊,非常好。此外,如果您将命令保存在名为
dotnet printrefs.bat
的批处理文件中,您可以像这样从命令行调用它
dotnet printrefs
Oh,并将批处理文件放入
C:\Program Files\dotnet
中,您可以在任何项目中使用它。这上面有文件吗?您还可以添加哪些其他信息?您是否可以获得完整的依赖关系树输出,以便查看父程序集是什么?添加了一个反向依赖关系树示例和到源代码的链接。但是我认为没有一个好的文档……啊,是的,2.0版的分辨率被修改了,你现在需要依赖
runresolvepackedependencies
AFAIK
<Target Name="PrintPackagesAndParents" DependsOnTargets="RunResolvePackageDependencies">
  <Message Importance="high" Text="* %(PackageDependencies.Identity) referenced by:%0a^---@(PackageDependencies->'%(ParentPackage) - target %(ParentTarget)', '%0a^---')" />
</Target>
$ dotnet msbuild /nologo /t:PrintPackagesAndParents
  * JetBrains.Annotations/10.2.1 referenced by:
  ^--- - target .NETStandard,Version=v1.3
  * System.IO.FileSystem.Primitives/4.0.1 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.IO.Compression.ZipFile/4.0.1 - target .NETStandard,Version=v1.3
  ^---System.IO.FileSystem/4.0.1 - target .NETStandard,Version=v1.3
  ^---System.Xml.ReaderWriter/4.0.11 - target .NETStandard,Version=v1.3
  * System.Linq/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.Security.Cryptography.Encoding/4.0.0 - target .NETStandard,Version=v1.3
  * System.Linq.Expressions/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  * System.Net.Http/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  * System.Net.Primitives/4.0.11 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.Net.Http/4.1.0 - target .NETStandard,Version=v1.3
  ^---System.Net.Sockets/4.1.0 - target .NETStandard,Version=v1.3
  …