diff --git a/src/libraries/Directory.Build.targets b/src/libraries/Directory.Build.targets
index eafd69cd11b76d..954e900b03bb0e 100644
--- a/src/libraries/Directory.Build.targets
+++ b/src/libraries/Directory.Build.targets
@@ -274,6 +274,7 @@
true
+ $(_PreReleaseLabel)$(_BuildNumberLabels)
diff --git a/src/libraries/libraries-packages.proj b/src/libraries/libraries-packages.proj
index f2eef864898f23..88e5bb94e91a3f 100644
--- a/src/libraries/libraries-packages.proj
+++ b/src/libraries/libraries-packages.proj
@@ -44,6 +44,9 @@
-->
+
+
+
e.FullName.EndsWith(".nuspec")))
+ {
+ Rewrite(nuspec, s =>
+ {
+ XDocument content = XDocument.Parse(s);
+
+ RewriteNuspecPackageVersion(content);
+ RewriteNuspecDependencyVersions(content);
+
+ return content.ToString();
+ });
+ }
+ }
+
+ private void RewriteRuntimeJson(ZipArchive zip)
+ {
+ foreach (var runtimeJson in zip.Entries.Where(e => e.FullName == "runtime.json"))
+ {
+ Rewrite(runtimeJson, s =>
+ {
+ JObject content = JObject.Parse(s);
+
+ RewriteRuntimeJsonVersions(content);
+
+ return content.ToString();
+ });
+ }
+ }
+
+ private void RewriteNuspecPackageVersion(XDocument content)
+ {
+ XElement versionElement = content
+ .Element(CreateQualifiedName(content, "package"))
+ .Element(CreateQualifiedName(content, "metadata"))
+ .Element(CreateQualifiedName(content, "version"));
+
+ if (versionElement.Value != OriginalVersion)
+ {
+ Log.LogError(
+ $"Original version is '{versionElement.Value}', " +
+ $"expected '{OriginalVersion}'");
+ }
+
+ versionElement.Value = TargetVersion;
+ }
+
+ private void RewriteNuspecDependencyVersions(XDocument content)
+ {
+ foreach (var dependency in content
+ .Descendants(CreateQualifiedName(content, "dependency"))
+ .Where(x =>
+ x.Attribute("version").Value == OriginalVersion &&
+ DependencyPackageIdsToChange?.Contains(x.Attribute("id").Value) == true))
+ {
+ dependency.Value = TargetVersion;
+ }
+ }
+
+ private void RewriteRuntimeJsonVersions(JObject content)
+ {
+ var versionProperties = content
+ .Descendants()
+ .OfType()
+ .Where(p =>
+ p.Value is JValue v &&
+ v.Type == JTokenType.String);
+
+ foreach (var p in versionProperties)
+ {
+ var range = VersionRange.Parse(p.Value.Value());
+
+ if (range.MinVersion.OriginalVersion == OriginalVersion)
+ {
+ var newRange = new VersionRange(
+ NuGetVersion.Parse(TargetVersion),
+ range.Float);
+
+ p.Value = newRange.ToString();
+ }
+ }
+ }
+
+ private static XName CreateQualifiedName(XDocument doc, string name)
+ {
+ return doc.Root.GetDefaultNamespace().GetName(name);
+ }
+
+ private static void Rewrite(ZipArchiveEntry entry, Func rewrite)
+ {
+ using (var stream = entry.Open())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ {
+ var content = rewrite(reader.ReadToEnd());
+
+ stream.Position = 0;
+ stream.SetLength(0);
+ writer.Write(content);
+ }
+ }
+ }
+}