diff --git a/build/repo.targets b/build/repo.targets
index 8be9e67790..f02189a663 100644
--- a/build/repo.targets
+++ b/build/repo.targets
@@ -7,6 +7,7 @@
$(ArtifactsDir)lineups\
<_CloneRepositoryRoot>$(RepositoryRoot).r\
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\
+ <_DependencyLineupDir>$(RepositoryRoot).deps\lineups\
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)
<_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\
@@ -32,11 +33,40 @@
-
+
+
+ <_DependencyPackageFiles Include="$(_DependencyPackagesDirectory)*.nupkg"
+ Exclude="$(_DependencyPackagesDirectory)*.symbols.nupkg"
+ Condition=" '$(_DependencyPackagesDirectory)' != '' " />
+ <_DependencyLineupFiles Include="$(_DependencyLineupDir)*.nupkg"
+ Exclude="$(_DependencyLineupDir)Internal.AspNetCore.Universe.Lineup.*.nupkg"
+ Condition=" '$(_DependencyLineupDir)' != '' " />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_Dependency Remove="@(_Dependency)" />
+
+
+ <_Dependency Include="@(PackagesProduced)" />
+ <_Dependency Include="@(ExternalDependency)" Exclude="@(_Dependency)" />
+
+ <_Dependency Include="@(ArtifactDependency)" Exclude="@(_Dependency);@(DependencyLineupDependency)" />
+
+
+ Dependencies="@(_Dependency)">
diff --git a/build/tasks/ReadPackageDependencies.cs b/build/tasks/ReadPackageDependencies.cs
new file mode 100644
index 0000000000..315cb45271
--- /dev/null
+++ b/build/tasks/ReadPackageDependencies.cs
@@ -0,0 +1,44 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Collections;
+using System.Linq;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+using NuGet.Packaging;
+
+namespace RepoTasks
+{
+ public class ReadPackageDependencies : Task
+ {
+ [Required]
+ public ITaskItem[] PackageFiles { get; set; }
+
+ [Output]
+ public ITaskItem[] PackageDefinitions { get; set; }
+
+ public override bool Execute()
+ {
+ PackageDefinitions = PackageFiles.SelectMany(item =>
+ {
+ using (var package = new PackageArchiveReader(item.ItemSpec))
+ {
+ var identity = package.GetIdentity();
+ var metadata = new NuspecReader(package.GetNuspec());
+ var groups = metadata.GetDependencyGroups()?.ToList();
+ if (groups == null)
+ {
+ return Enumerable.Empty();
+ }
+
+ return groups.SelectMany(g =>
+ g.Packages.Select(p => new TaskItem(p.Id, new Hashtable { ["Version"] = p.VersionRange.MinVersion.ToString() })));
+ }
+ })
+ .ToArray();
+
+ return true;
+ }
+ }
+}
diff --git a/build/tasks/ReadPackageIdentity.cs b/build/tasks/ReadPackageIdentity.cs
new file mode 100644
index 0000000000..354a226422
--- /dev/null
+++ b/build/tasks/ReadPackageIdentity.cs
@@ -0,0 +1,37 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Linq;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+using NuGet.Packaging;
+
+namespace RepoTasks
+{
+ public class ReadPackageIdentity : Task
+ {
+ [Required]
+ public ITaskItem[] PackageFiles { get; set; }
+
+ [Output]
+ public ITaskItem[] PackageDefinitions { get; set; }
+
+ public override bool Execute()
+ {
+ PackageDefinitions = PackageFiles.Select(item =>
+ {
+ using (var package = new PackageArchiveReader(item.ItemSpec))
+ {
+ var identity = package.GetIdentity();
+ var packageItem = new TaskItem(identity.Id);
+ packageItem.SetMetadata("Version", identity.Version.ToString());
+ return packageItem;
+ }
+ })
+ .ToArray();
+
+ return true;
+ }
+ }
+}
diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks
index 6e18f84994..d4759ca827 100644
--- a/build/tasks/RepoTasks.tasks
+++ b/build/tasks/RepoTasks.tasks
@@ -5,4 +5,6 @@
+
+