diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 6ca67b96190f..6b1f0a0bc63f 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..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
@@ -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,28 +164,40 @@ 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(), Enumerable.Empty());
}
}
}
+ 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);
+ }
+
+ foreach (string tfm in tfms)
+ {
+ referencedTfms!.Add(tfm);
+ }
+ }
+
private record PackageInfo(string Name, string Version, string Path, HashSet? Tfms = default)
{
public string Id => GetId(Name, Version);