Dot-Net-Core

.NET Core 依賴樹

  • August 13, 2020

是否可以在 .net 核心應用程序中查看項目的依賴關係?我正在使用Visual Studio 2017 Professional.

目前,我的csproj.

<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 目標添加到您的項目文件(在<Project>元素內),如下所示:

<Target Name="PrintAllReferences" DependsOnTargets="RunResolvePackageDependencies">
 <Message Importance="high" Text="Referenced package: %(PackageDefinitions.Identity)" />
</Target>

您可以這樣呼叫(沒有父包名稱的行意味著它被項目直接引用):

$ dotnet msbuild /nologo /t:PrintAllReferences
 Referenced package: Microsoft.NETCore.Platforms/1.1.0
 Referenced package: Microsoft.NETCore.Targets/1.1.0
 Referenced package: Microsoft.Win32.Primitives/4.3.0
 Referenced package: NETStandard.Library/1.6.1
 Referenced package: runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: runtime.native.System/4.3.0
 Referenced package: runtime.native.System.IO.Compression/4.3.0
 Referenced package: runtime.native.System.Net.Http/4.3.0
 Referenced package: runtime.native.System.Security.Cryptography.Apple/4.3.0
 Referenced package: runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
 Referenced package: System.Buffers/4.3.0
 Referenced package: System.Collections/4.3.0
 …

如果你想要一個“反向依賴樹”——一個包列表以及哪些包引用它們——你可以做類似的事情:

<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
 …

沒有關於這些項目的真正文件,但它們具有“公共”名稱,並且由ResolvePackageDependencies任務生成,該任務作為RunResolvePackageDependencies目標的一部分執行並產生一些非常有用的項目:TargetDefinitionsPackageDefinitionsPackageDependencies和。FileDependencies``DiagnosticMessages

引用自:https://stackoverflow.com/questions/44944172