diff --git a/build/repo.targets b/build/repo.targets
index 8be9e67790..3e226726b5 100644
--- a/build/repo.targets
+++ b/build/repo.targets
@@ -32,11 +32,34 @@
-
+
+
+ <_DependencyPackagesDirectory>$([MSBuild]::NormalizeDirectory($(_DependencyPackagesDirectory)))
+
+
+
+ <_DependencyPackageFiles Include="$(_DependencyPackagesDirectory)*.nupkg" Exclude="$(_DependencyPackagesDirectory)*.symbols.nupkg" />
+
+
+
+
+
+
+
+
+
+ <_Dependency Remove="@(_Dependency)" />
+
+
+ <_Dependency Include="@(PackagesProduced)" />
+ <_Dependency Include="@(ExternalDependency)" Exclude="@(_Dependency)" />
+ <_Dependency Include="@(ArtifactDependency)" Exclude="@(_Dependency)" />
+
+
+ Dependencies="@(_Dependency)">
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..bc0262b318 100644
--- a/build/tasks/RepoTasks.tasks
+++ b/build/tasks/RepoTasks.tasks
@@ -5,4 +5,5 @@
+