From e89f88dfc1e6fc16694106166b34d0c98380cc27 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Wed, 26 Mar 2025 18:09:01 +0000 Subject: [PATCH 1/2] Add target pack support and scan project.assets.json files for package downloads --- src/SourceBuild/content/eng/Versions.props | 4 +- .../WriteSbrpUsageReport.cs | 58 ++++++++++++------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props index c8ffa4c4c9e8..ee8308200fea 100644 --- a/src/SourceBuild/content/eng/Versions.props +++ b/src/SourceBuild/content/eng/Versions.props @@ -32,8 +32,8 @@ 17.12.6 - 6.12.1 - 6.12.1 + 6.13.1 + 6.13.1 9.0.0 9.0.0 diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs index baf653674960..81124a1bee15 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs @@ -9,6 +9,7 @@ using System.Xml.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; +using NuGet.LibraryModel; using NuGet.ProjectModel; namespace Microsoft.DotNet.UnifiedBuild.Tasks; @@ -48,8 +49,9 @@ public override bool Execute() { Log.LogMessage($"Scanning for SBRP Package Usage..."); - ReadSbrpPackages("referencePackages", trackTfms: true); - ReadSbrpPackages("textOnlyPackages", trackTfms: false); + ReadSbrpPackages(Path.Combine("referencePackages", "src"), trackTfms: true); + ReadSbrpPackages(Path.Combine("targetPacks", "ILsrc"), trackTfms: false); + ReadSbrpPackages(Path.Combine("textOnlyPackages", "src"), trackTfms: false); ScanProjectReferences(); @@ -110,11 +112,10 @@ private void PurgeNonReferencedReferences() private IEnumerable GetUnreferencedSbrps() => _sbrpPackages.Values.Where(pkg => pkg.References.Count == 0); - private string GetSbrpPackagesPath(string packageType) => Path.Combine(SbrpRepoSrcPath, packageType, "src"); - - private void ReadSbrpPackages(string packageType, bool trackTfms) + private void ReadSbrpPackages(string packageSrcRelativePath, bool trackTfms) { - foreach (string projectPath in Directory.GetFiles(GetSbrpPackagesPath(packageType), "*.csproj", SearchOption.AllDirectories)) + string packageSrcPath = Path.Combine(SbrpRepoSrcPath, packageSrcRelativePath); + foreach (string projectPath in Directory.GetFiles(packageSrcPath, "*.csproj", SearchOption.AllDirectories)) { DirectoryInfo? directory = Directory.GetParent(projectPath); string version = directory!.Name; @@ -163,24 +164,39 @@ private void ScanProjectReferences() LockFile lockFile = new LockFileFormat().Read(projectJsonFile); foreach (LockFileTargetLibrary lib in lockFile.Targets.SelectMany(t => t.Libraries)) { - if (!_sbrpPackages.TryGetValue(PackageInfo.GetId(lib.Name, lib.Version?.ToString()), out PackageInfo? info)) - { - continue; - } - - if (!info.References.TryGetValue(lockFile.Path, out HashSet? referencedTfms)) - { - referencedTfms = []; - info.References.Add(lockFile.Path, referencedTfms); - } - IEnumerable tfms = lib.CompileTimeAssemblies .Where(asm => asm.Path.StartsWith("lib") || asm.Path.StartsWith("ref")) .Select(asm => asm.Path.Split('/')[1]); - foreach (string tfm in tfms) - { - referencedTfms.Add(tfm); - } + + TrackPackageReference(lockFile.Path, lib.Name, lib.Version?.ToString(), tfms); + } + + foreach (DownloadDependency downloadDep in lockFile.PackageSpec.TargetFrameworks.SelectMany(fx => fx.DownloadDependencies)) + { + TrackPackageReference(lockFile.Path, downloadDep.Name, downloadDep.VersionRange.MinVersion?.ToString(), null); + } + } + } + + private void TrackPackageReference(string lockFilePath, string? name, string? version, IEnumerable? tfms) + { + string id = PackageInfo.GetId(name, version); + if (!_sbrpPackages.TryGetValue(id, out PackageInfo? info)) + { + return; + } + + if (!info.References.TryGetValue(lockFilePath, out HashSet? referencedTfms)) + { + referencedTfms = []; + info.References.Add(lockFilePath, referencedTfms); + } + + if (tfms != null) + { + foreach (string tfm in tfms) + { + referencedTfms!.Add(tfm); } } } From 5290ff07bf272767ce28daf5d011614beede18b7 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Fri, 28 Mar 2025 21:46:20 +0000 Subject: [PATCH 2/2] Updates per code review feedback --- .../WriteSbrpUsageReport.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs index 81124a1bee15..bd2e133ac08a 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/WriteSbrpUsageReport.cs @@ -173,12 +173,12 @@ private void ScanProjectReferences() foreach (DownloadDependency downloadDep in lockFile.PackageSpec.TargetFrameworks.SelectMany(fx => fx.DownloadDependencies)) { - TrackPackageReference(lockFile.Path, downloadDep.Name, downloadDep.VersionRange.MinVersion?.ToString(), null); + TrackPackageReference(lockFile.Path, downloadDep.Name, downloadDep.VersionRange.MinVersion?.ToString(), Enumerable.Empty()); } } } - private void TrackPackageReference(string lockFilePath, string? name, string? version, IEnumerable? tfms) + private void TrackPackageReference(string lockFilePath, string? name, string? version, IEnumerable tfms) { string id = PackageInfo.GetId(name, version); if (!_sbrpPackages.TryGetValue(id, out PackageInfo? info)) @@ -192,12 +192,9 @@ private void TrackPackageReference(string lockFilePath, string? name, string? ve info.References.Add(lockFilePath, referencedTfms); } - if (tfms != null) + foreach (string tfm in tfms) { - foreach (string tfm in tfms) - { - referencedTfms!.Add(tfm); - } + referencedTfms!.Add(tfm); } }