From ee1dce81b3d2f3aa12e5cddb7ed3f38cedce95f9 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 8 Feb 2024 12:44:17 -0800
Subject: [PATCH 01/41] Add PackageDiff tool and tasks
---
.../PackageDiff.Tasks.csproj | 31 ++++
.../PackageDiff.Tasks/PackageDiff.cs | 28 +++
.../build/PackageDiff.Tasks.props | 9 +
.../PackageDiff/PackageDiff.csproj | 11 ++
.../tasks/PackageDiff/PackageDiff/Program.cs | 160 ++++++++++++++++++
.../PackageDiff/PackageDiff/ZipExtensions.cs | 60 +++++++
6 files changed, 299 insertions(+)
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
create mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
new file mode 100644
index 000000000000..878b136beb7a
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
@@ -0,0 +1,31 @@
+
+
+
+ Library
+ netstandard2.0
+ enable
+ enable
+ true
+ true
+ $(NoWarn);NU5128;NU5129;NU5100
+ tasks
+ true
+
+
+
+
+
+
+
+
+
+
+
+ <_DiffToolPublishContent Include="$(OutputPath)PackageDiff\**" />
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
new file mode 100644
index 000000000000..744779ccee8d
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.Build.Framework;
+
+public class PackageDiff: Microsoft.Build.Utilities.ToolTask
+{
+ [Required]
+ public string BaselinePackage {get; set;} = "";
+
+ [Required]
+ public string TestPackage {get; set;} = "";
+
+ protected override string ToolName { get; } = $"PackageDiff" + (System.Environment.OSVersion.Platform == PlatformID.Unix ? "" : ".exe");
+
+ protected override MessageImportance StandardOutputLoggingImportance => MessageImportance.High;
+ protected override bool HandleTaskExecutionErrors() => true;
+
+ protected override string GenerateFullPathToTool()
+ {
+ return Path.Combine(Path.GetDirectoryName(typeof(PackageDiff).Assembly.Location)!, "..", "..", "tools", ToolName);
+ }
+
+ protected override string GenerateCommandLineCommands()
+ {
+ return $"\"{BaselinePackage}\" \"{TestPackage}\"";
+ }
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
new file mode 100644
index 000000000000..239643148ec2
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
@@ -0,0 +1,9 @@
+
+
+
+ <_PackageDiffTasksAssemblyPath>$(MSBuildThisFileDirectory)\..\tasks\netstandard2.0\PackageDiff.Tasks.dll
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
new file mode 100644
index 000000000000..c74b0b783484
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+ net9.0
+ enable
+ true
+ true
+
+
+
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
new file mode 100644
index 000000000000..924c0aba6451
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
@@ -0,0 +1,160 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Net.Http;
+using System.Reflection;
+using System.Reflection.Metadata;
+using System.Reflection.PortableExecutable;
+using System.Text;
+using System.Threading.Tasks;
+
+public class PackageDiff
+{
+ public static async Task Main(string[] args)
+ {
+ if (args.Length != 2)
+ {
+ Console.WriteLine("Usage: PackageDiff ");
+ return 1;
+ }
+
+ ZipArchive package1 = await GetZipArchiveAsync(args[0]);
+ ZipArchive package2 = await GetZipArchiveAsync(args[1]);
+ var diff = GetDiffs(package1, package2);
+ if (diff is not "")
+ {
+ Console.WriteLine(diff);
+ return 1;
+ }
+ return 0;
+ }
+
+ public static async Task GetZipArchiveAsync(string arg)
+ {
+ if (File.Exists(arg))
+ {
+ return new ZipArchive(File.OpenRead(arg));
+ }
+ else if (Uri.TryCreate(arg, UriKind.RelativeOrAbsolute, out var uri))
+ {
+ var webClient = new HttpClient();
+ return new ZipArchive(await webClient.GetStreamAsync(uri));
+ }
+ else
+ {
+ throw new ArgumentException($"Invalid path or url to package1: {arg}");
+ }
+ }
+
+ public static string GetDiffs(ZipArchive package1, ZipArchive package2)
+ {
+ StringBuilder output = new();
+
+ if (TryGetDiff(package1.Entries.Select(entry => entry.FullName).ToList(), package2.Entries.Select(entry => entry.FullName).ToList(), out var fileDiffs))
+ {
+ output.AppendLine("File differences:");
+ output.AppendLine(string.Join(Environment.NewLine, fileDiffs.Select(d => " " + d)));
+ output.AppendLine();
+ }
+
+ if (TryGetDiff(package1.GetNuspec().Lines(), package2.GetNuspec().Lines(), out var editedDiff))
+ {
+ output.AppendLine("Nuspec differences:");
+ output.AppendLine(string.Join(Environment.NewLine, editedDiff.Select(d => " " + d)));
+ output.AppendLine();
+ }
+ var dlls1 = package1.Entries.Where(entry => entry.FullName.EndsWith(".dll")).ToImmutableDictionary(entry => entry.FullName, entry => entry);
+ var dlls2 = package2.Entries.Where(entry => entry.FullName.EndsWith(".dll")).ToImmutableDictionary(entry => entry.FullName, entry => entry);
+ foreach (var kvp in dlls1)
+ {
+ var dllPath = kvp.Key;
+ var dll1 = kvp.Value;
+ if (dlls2.TryGetValue(dllPath, out ZipArchiveEntry? dll2))
+ {
+ try
+ {
+ var version1 = new PEReader(dll1.Open().ReadToEnd().ToImmutableArray()).GetMetadataReader().GetAssemblyDefinition().Version.ToString();
+ var version2 = new PEReader(dll2.Open().ReadToEnd().ToImmutableArray()).GetMetadataReader().GetAssemblyDefinition().Version.ToString();
+ if (version1 != version2)
+ {
+ output.AppendLine($"Assembly {dllPath} has different versions: {version1} and {version2}");
+ }
+ }
+ catch (InvalidOperationException)
+ { }
+ }
+ }
+ return output.ToString();
+ }
+
+ public static bool TryGetDiff(List originalLines, List modifiedLines, out List formattedDiff)
+ {
+ // Edit distance algorithm: https://en.wikipedia.org/wiki/Longest_common_subsequence
+
+ int[,] dp = new int[originalLines.Count + 1, modifiedLines.Count + 1];
+
+ // Initialize first row and column
+ for (int i = 0; i <= originalLines.Count; i++)
+ {
+ dp[i, 0] = i;
+ }
+ for (int j = 0; j <= modifiedLines.Count; j++)
+ {
+ dp[0, j] = j;
+ }
+
+ // Compute edit distance
+ for (int i = 1; i <= originalLines.Count; i++)
+ {
+ for (int j = 1; j <= modifiedLines.Count; j++)
+ {
+ if (string.Compare(originalLines[i - 1], modifiedLines[j - 1]) == 0)
+ {
+ dp[i, j] = dp[i - 1, j - 1];
+ }
+ else
+ {
+ dp[i, j] = 1 + Math.Min(dp[i - 1, j], dp[i, j - 1]);
+ }
+ }
+ }
+
+ // Trace back the edits
+ int row = originalLines.Count;
+ int col = modifiedLines.Count;
+
+ formattedDiff = [];
+ while (row > 0 || col > 0)
+ {
+ if (row > 0 && col > 0 && string.Compare(originalLines[row - 1], modifiedLines[col - 1]) == 0)
+ {
+ formattedDiff.Add(" " + originalLines[row - 1]);
+ row--;
+ col--;
+ }
+ else if (col > 0 && (row == 0 || dp[row, col - 1] <= dp[row - 1, col]))
+ {
+ formattedDiff.Add("+ " + modifiedLines[col - 1]);
+ col--;
+ }
+ else if (row > 0 && (col == 0 || dp[row, col - 1] > dp[row - 1, col]))
+ {
+ formattedDiff.Add("- " + originalLines[row - 1]);
+ row--;
+ }
+ else
+ {
+ throw new Exception("Unreachable code");
+ }
+ }
+ formattedDiff.Reverse();
+ return dp[originalLines.Count, modifiedLines.Count] != 0;
+ }
+
+}
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
new file mode 100644
index 000000000000..914740b06867
--- /dev/null
+++ b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
@@ -0,0 +1,60 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Text;
+
+static class ZipExtensions
+{
+ public static List Lines(this ZipArchiveEntry entry, Encoding? encoding = null)
+ {
+ return entry.ReadToString(encoding).Replace("\r\n", "\n").Split('\n').ToList();
+ }
+
+ public static string ReadToString(this ZipArchiveEntry entry, Encoding? encoding = null)
+ {
+ Stream stream = entry.Open();
+ byte[] buffer = stream.ReadToEnd();
+ // Remove UTF-8 BOM if present
+ int index = 0;
+ if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
+ {
+ index = 3;
+ }
+ encoding ??= Encoding.UTF8;
+ string fileText = encoding.GetString(buffer, index, buffer.Length - index);
+ return fileText;
+ }
+
+ public static ZipArchiveEntry GetNuspec(this ZipArchive package)
+ {
+ return package.Entries.Where(entry => entry.FullName.EndsWith(".nuspec")).Single();
+ }
+
+ public static byte[] ReadToEnd(this Stream stream)
+ {
+ int bufferSize = 2048;
+ byte[] buffer = new byte[bufferSize];
+ int offset = 0;
+ while (true)
+ {
+ int bytesRead = stream.Read(buffer, offset, bufferSize - offset);
+ offset += bytesRead;
+ if (bytesRead == 0)
+ {
+ break;
+ }
+ if (offset == bufferSize)
+ {
+ Array.Resize(ref buffer, bufferSize * 2);
+ bufferSize *= 2;
+ }
+ }
+ Array.Resize(ref buffer, offset);
+ return buffer;
+ }
+}
From 158c2aa0edf7b246762fce6197af39948ab88f11 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 13 Mar 2024 13:53:24 -0700
Subject: [PATCH 02/41] Create test project for Unified Build validation
---
.../VersionIdentifier.cs | 4 +-
.../eng/unifiedBuildvalidation.targets | 31 ++++++
.../BaselineHelper.cs | 6 +-
.../DotNetHelper.cs | 24 ++--
.../SdkContentTests.cs | 105 +++++++++++++-----
.../Utilities.cs | 2 +-
.../Config.cs | 49 ++++++++
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 44 ++++++++
.../SdkAssemblyVersionDiffExclusions.txt | 16 +++
.../assets/SdkFileDiffExclusions.txt | 24 ++++
.../MsftToSbSdkAssemblyVersions.diff | 1 +
.../assets/baselines/MsftToSbSdkFiles.diff | 43 +++++++
12 files changed, 303 insertions(+), 46 deletions(-)
create mode 100644 src/SourceBuild/content/eng/unifiedBuildvalidation.targets
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
index 2150a721197f..38a3eafa8c79 100644
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
+++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
@@ -215,7 +215,7 @@ public static class VersionIdentifier
/// Asset name without versions
public static string RemoveVersions(string assetName, string replacement = "")
{
- string[] pathSegments = assetName.Split('/');
+ string[] pathSegments = assetName.Split('/', '\\');
// Remove the version number from each segment, then join back together and
// remove any useless character sequences.
@@ -252,6 +252,6 @@ public static string RemoveVersions(string assetName, string replacement = "")
public static bool AreVersionlessEqual(string assetName1, string assetName2)
{
- return RemoveVersions(assetName1) == RemoveVersions(assetName2);
+ return RemoveVersions(assetName1, "{VERSION}") == RemoveVersions(assetName2, "{VERSION}");
}
}
diff --git a/src/SourceBuild/content/eng/unifiedBuildvalidation.targets b/src/SourceBuild/content/eng/unifiedBuildvalidation.targets
new file mode 100644
index 000000000000..dc601450c4c5
--- /dev/null
+++ b/src/SourceBuild/content/eng/unifiedBuildvalidation.targets
@@ -0,0 +1,31 @@
+
+
+
+ $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
+
+
+
+
+
+
+
+
+
+
+ normal
+
+
+
+
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
index 6b7c6f71a50f..a5ca6a154033 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
@@ -96,7 +96,7 @@ public static string RemoveRids(string diff, bool isPortable = false) =>
public static string RemoveVersions(string source)
{
// Remove version numbers for examples like "roslyn4.1", "net8.0", and "netstandard2.1".
- string pathSeparator = Regex.Escape(Path.DirectorySeparatorChar.ToString());
+ string pathSeparator = $"[{Regex.Escape(@"\")}|{Regex.Escape(@"/")}]";
string result = Regex.Replace(source, $@"{pathSeparator}(net|roslyn)[1-9]+\.[0-9]+{pathSeparator}", match =>
{
string wordPart = match.Groups[1].Value;
@@ -111,10 +111,10 @@ public static string RemoveVersions(string source)
// - The version may have one or more release identifiers that begin with '.' or '-'
// - The version should end before a path separator, '.', '-', or '/'
Regex semanticVersionRegex = new(
- @"(?<=[./-])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ @"(?<=[./\\-])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ @"(((?:[-.]((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)))+"
+ @"(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?"
- + @"(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?=[/.-])");
+ + @"(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?=[/\\.-])");
return semanticVersionRegex.Replace(result, SemanticVersionPlaceholder);
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
index 291d492ed1a8..c662eaf7647b 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
@@ -43,16 +43,16 @@ public DotNetHelper(ITestOutputHelper outputHelper)
}
IsMonoRuntime = DetermineIsMonoRuntime(Config.DotNetDirectory);
- if (!Directory.Exists(ProjectsDirectory))
- {
- Directory.CreateDirectory(ProjectsDirectory);
- InitNugetConfig();
- }
-
- if (!Directory.Exists(PackagesDirectory))
- {
- Directory.CreateDirectory(PackagesDirectory);
- }
+ // if (!Directory.Exists(ProjectsDirectory))
+ // {
+ // Directory.CreateDirectory(ProjectsDirectory);
+ // InitNugetConfig();
+ // }
+
+ // if (!Directory.Exists(PackagesDirectory))
+ // {
+ // Directory.CreateDirectory(PackagesDirectory);
+ // }
}
}
@@ -105,7 +105,7 @@ public void ExecuteCmd(string args, string? workingDirectory = null, Action configureProcess(process, workingDirectory),
millisecondTimeout: millisecondTimeout);
-
+
if (expectedExitCode != null) {
ExecuteHelper.ValidateExitCode(executeResult, (int) expectedExitCode);
}
@@ -243,7 +243,7 @@ private void ExecuteWeb(string projectName, string args, string workingDirectory
{
throw validator.ValidationException;
}
- }
+ }
private static string GetBinLogOption(string projectName, string command, string? differentiator = null)
{
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
index 29bb7dbc55ca..d78b2e8e4457 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.IO;
@@ -10,6 +11,7 @@
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
+using System.Threading.Tasks;
using Microsoft.Extensions.FileSystemGlobbing;
using Xunit;
using Xunit.Abstractions;
@@ -118,27 +120,33 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
private Dictionary GetMsftSdkAssemblyVersions(
string msftSdkPath, Dictionary sbSdkAssemblyVersions)
{
- Dictionary msftSdkAssemblyVersions = new();
+ ConcurrentDictionary msftSdkAssemblyVersions = new();
+ var tasks = new List();
foreach ((string relativePath, _) in sbSdkAssemblyVersions)
{
- // Now we want to find the corresponding file that exists in the MSFT SDK.
- // We've already replaced version numbers with placeholders in the path.
- // So we can't directly use the relative path to find the corresponding file. Instead,
- // we need to replace the version placeholders with wildcards and find the path through path matching.
- string file = Path.Combine(msftSdkPath, relativePath);
- Matcher matcher = BaselineHelper.GetFileMatcherFromPath(relativePath);
+ var t = Task.Run(() =>
+ {
+ // Now we want to find the corresponding file that exists in the MSFT SDK.
+ // We've already replaced version numbers with placeholders in the path.
+ // So we can't directly use the relative path to find the corresponding file. Instead,
+ // we need to replace the version placeholders with wildcards and find the path through path matching.
+ string file = Path.Combine(msftSdkPath, relativePath);
+ Matcher matcher = BaselineHelper.GetFileMatcherFromPath(relativePath);
- file = FindMatchingFilePath(msftSdkPath, matcher, relativePath);
+ file = FindMatchingFilePath(msftSdkPath, matcher, relativePath);
- if (!File.Exists(file))
- {
- continue;
- }
+ if (!File.Exists(file))
+ {
+ return;
+ }
- AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- msftSdkAssemblyVersions.Add(BaselineHelper.RemoveVersions(relativePath), GetVersion(assemblyName));
+ AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ Assert.True(msftSdkAssemblyVersions.TryAdd(BaselineHelper.RemoveVersions(relativePath), GetVersion(assemblyName)));
+ });
+ tasks.Add(t);
}
- return msftSdkAssemblyVersions;
+ Task.WaitAll(tasks.ToArray());
+ return msftSdkAssemblyVersions.ToDictionary();
}
// It's known that assembly versions can be different between builds in their revision field. Disregard that difference
@@ -171,24 +179,65 @@ private string FindMatchingFilePath(string rootDir, Matcher matcher, string repr
{
IEnumerable exclusionFilters = GetSdkDiffExclusionFilters(SourceBuildSdkType)
.Select(filter => filter.TrimStart("./".ToCharArray()));
- Dictionary sbSdkAssemblyVersions = new();
- foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
+ ConcurrentDictionary sbSdkAssemblyVersions = new();
+ List tasks = new List();
+ foreach (string dir in Directory.EnumerateDirectories(sbSdkPath, "*", SearchOption.AllDirectories).Append(sbSdkPath))
{
- string fileExt = Path.GetExtension(file);
- if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
- fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
+ var t = Task.Run(() =>
{
- AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- string relativePath = Path.GetRelativePath(sbSdkPath, file);
- string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
-
- if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ foreach (string file in Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly))
{
- sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
+ string fileExt = Path.GetExtension(file);
+ if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
+ fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
+ {
+ string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
+ if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ {
+ try
+ {
+ AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ Assert.True(sbSdkAssemblyVersions.TryAdd(normalizedPath, GetVersion(assemblyName)));
+ }
+ catch (BadImageFormatException)
+ {
+ Console.WriteLine($"BadImageFormatException: {file}");
+ }
+ }
+ }
}
- }
+ });
+ tasks.Add(t);
}
- return sbSdkAssemblyVersions;
+ //foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
+ //{
+ // string fileExt = Path.GetExtension(file);
+ // if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
+ // fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
+ // {
+ // string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ // string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
+ // if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ // {
+ // var t = Task.Run(() =>
+ // {
+ // try
+ // {
+ // AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ // sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
+ // }
+ // catch (BadImageFormatException)
+ // {
+ // Console.WriteLine($"BadImageFormatException: {file}");
+ // }
+ // });
+ // tasks.Add(t);
+ // }
+ // }
+ //}
+ Task.WaitAll(tasks.ToArray());
+ return sbSdkAssemblyVersions.ToDictionary();
}
private void WriteTarballFileList(string? tarballPath, string outputFileName, bool isPortable, string sdkType)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
index 228a65a61e94..55377b29a387 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
@@ -23,7 +23,7 @@ public static class Utilities
/// Returns whether the given file path is excluded by the given exclusions using glob file matching.
///
public static bool IsFileExcluded(string filePath, IEnumerable exclusions) =>
- GetMatchingFileExclusions(filePath, exclusions, exclusion => exclusion).Any();
+ GetMatchingFileExclusions(filePath.Replace('\\', '/'), exclusions, exclusion => exclusion).Any();
public static IEnumerable GetMatchingFileExclusions(string filePath, IEnumerable exclusions, Func getExclusionExpression) =>
exclusions.Where(exclusion => FileSystemName.MatchesSimpleExpression(getExclusionExpression(exclusion), filePath));
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
new file mode 100644
index 000000000000..25aff9d34363
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+internal static class Config
+{
+ public const string DotNetDirectoryEnv = "UNIFIED_BUILD_VALIDATION_DOTNET_DIR";
+ public const string IncludeArtifactsSizeEnv = "UNIFIED_BUILD_VALIDATION_INCLUDE_ARTIFACTSSIZE";
+ public const string MsftSdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_MSFT_SDK_TARBALL_PATH";
+ public const string PoisonReportPathEnv = "UNIFIED_BUILD_VALIDATION_POISON_REPORT_PATH";
+ public const string PortableRidEnv = "UNIFIED_BUILD_VALIDATION_PORTABLE_RID";
+ public const string PrereqsPathEnv = "UNIFIED_BUILD_VALIDATION_PREREQS_PATH";
+ public const string CustomPackagesPathEnv = "UNIFIED_BUILD_VALIDATION_CUSTOM_PACKAGES_PATH";
+ public const string SdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH";
+ public const string SourceBuiltArtifactsPathEnv = "UNIFIED_BUILD_VALIDATION_SOURCEBUILT_ARTIFACTS_PATH";
+ public const string TargetRidEnv = "UNIFIED_BUILD_VALIDATION_TARGET_RID";
+ public const string WarnSdkContentDiffsEnv = "UNIFIED_BUILD_VALIDATION_WARN_SDK_CONTENT_DIFFS";
+ public const string WarnLicenseScanDiffsEnv = "UNIFIED_BUILD_VALIDATION_WARN_LICENSE_SCAN_DIFFS";
+ public const string RunningInCIEnv = "UNIFIED_BUILD_VALIDATION_RUNNING_IN_CI";
+ public const string LicenseScanPathEnv = "UNIFIED_BUILD_VALIDATION_LICENSE_SCAN_PATH";
+
+ public static string DotNetDirectory { get; } =
+ Environment.GetEnvironmentVariable(DotNetDirectoryEnv) ?? Path.Combine(Directory.GetCurrentDirectory(), ".dotnet");
+ public static string? MsftSdkTarballPath { get; } = Environment.GetEnvironmentVariable(MsftSdkTarballPathEnv);
+ public static string PortableRid { get; } = Environment.GetEnvironmentVariable(PortableRidEnv) ??
+ throw new InvalidOperationException($"'{Config.PortableRidEnv}' must be specified");
+ public static string? PrereqsPath { get; } = Environment.GetEnvironmentVariable(PrereqsPathEnv);
+ public static string? CustomPackagesPath { get; } = Environment.GetEnvironmentVariable(CustomPackagesPathEnv);
+ public static string? SdkTarballPath { get; } = Environment.GetEnvironmentVariable(SdkTarballPathEnv);
+ public static string? SourceBuiltArtifactsPath { get; } = Environment.GetEnvironmentVariable(SourceBuiltArtifactsPathEnv);
+ public static string TargetRid { get; } = Environment.GetEnvironmentVariable(TargetRidEnv) ??
+ throw new InvalidOperationException($"'{Config.TargetRidEnv}' must be specified");
+ public static string TargetArchitecture { get; } = TargetRid.Split('-')[1];
+ public static bool WarnOnSdkContentDiffs { get; } =
+ bool.TryParse(Environment.GetEnvironmentVariable(WarnSdkContentDiffsEnv), out bool warnOnSdkContentDiffs) && warnOnSdkContentDiffs;
+ public static bool WarnOnLicenseScanDiffs { get; } =
+ bool.TryParse(Environment.GetEnvironmentVariable(WarnLicenseScanDiffsEnv), out bool warnOnLicenseScanDiffs) && warnOnLicenseScanDiffs;
+
+ // Indicates whether the tests are being run in the context of a CI pipeline
+ public static bool RunningInCI { get; } =
+ bool.TryParse(Environment.GetEnvironmentVariable(RunningInCIEnv), out bool runningInCI) && runningInCI;
+
+ public static string? LicenseScanPath { get; } = Environment.GetEnvironmentVariable(LicenseScanPathEnv);
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
new file mode 100644
index 000000000000..a7830912f5b7
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -0,0 +1,44 @@
+
+
+
+ net9.0
+ enable
+ false
+ $(DefaultExcludesInProjectFolder);assets/**/*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
new file mode 100644
index 000000000000..1b5390e2a754
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
@@ -0,0 +1,16 @@
+# Contains the list of files whose assembly versions are to be excluded from comparison between the MSFT & SB SDK.
+# These exclusions only take effect if the assembly version of the file in the SB SDK is equal to or greater than
+# the version in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
+# that is valid for shipping.
+#
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+#
+# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
+
+./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
+./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
+./sdk/x.y.z/datacollector.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
new file mode 100644
index 000000000000..efe2bec15a9f
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
@@ -0,0 +1,24 @@
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Format
+# {msft|sb}, [# comment]
+# msft = Microsoft built SDK
+# sb = source-built SDK
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+
+msft,./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
+msft,./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
+msft,./sdk/x.y.z/datacollector.dll
+
+sb,./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
+sb,./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
+sb,./sdk/x.y.z/datacollector.dll
+
+msft,./sdk/x.y.z/Containers/containerize/*
+sb,./sdk/x.y.z/Containers/containerize/*
+
+msft,./sdk/x.y.z/Containers/tasks/net472/*
+sb,./sdk/x.y.z/Containers/tasks/net472/*
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
new file mode 100644
index 000000000000..8b137891791f
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
@@ -0,0 +1 @@
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff
new file mode 100644
index 000000000000..745589d6b7c0
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff
@@ -0,0 +1,43 @@
+diff --git a/msftSdkFiles.txt b/sbSdkFiles.txt
+index ------------
+--- a/msftSdkFiles.txt
++++ b/sbSdkFiles.txt
+@@ ------------ @@
+ ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Security.Cryptography.Xml.xml
+ ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Threading.RateLimiting.dll
+ ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Threading.RateLimiting.xml
+-./packs/Microsoft.NETCore.App.Host.linux-x64/
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/apphost
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/coreclr_delegates.h
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/hostfxr.h
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/libnethost.a
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/libnethost.so
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/nethost.h
+-./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/singlefilehost
++./packs/Microsoft.NETCore.App.Host.banana-rid/
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/apphost
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/coreclr_delegates.h
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/hostfxr.h
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/libnethost.a
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/libnethost.so
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/nethost.h
++./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/singlefilehost
+ ./packs/Microsoft.NETCore.App.Ref/
+ ./packs/Microsoft.NETCore.App.Ref/x.y.z/
+ ./packs/Microsoft.NETCore.App.Ref/x.y.z/analyzers/
+@@ ------------ @@
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib/
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Diagnostics.EventLog.dll
+-./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Diagnostics.EventLog.Messages.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Security.Cryptography.Pkcs.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Windows.Extensions.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/System.CodeDom.dll
\ No newline at end of file
From 1991c7b8ddccc6286db84a6d0147dcfb59cd7efb Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 18 Mar 2024 15:33:56 -0700
Subject: [PATCH 03/41] Add initial SDK test project for unified build
---
src/SourceBuild/content/build.proj | 1 +
.../eng/unifiedBuildvalidation.targets | 28 +-
.../.gitignore | 484 ++++++++++++++++++
.../BaselineHelper.cs | 135 +++++
.../DotNetHelper.cs | 341 ++++++++++++
.../DotNetTemplate.cs | 21 +
.../Exclusions.cs | 46 ++
.../ExecuteHelper.cs | 132 +++++
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 15 -
.../SdkContentTests.cs | 253 +++++++++
.../SdkTests.cs | 20 +
.../SkippableFactAttribute.cs | 53 ++
.../TestBase.cs | 25 +
.../Utilities.cs | 222 ++++++++
.../assets/NativeDlls-win-any.txt | 49 ++
.../assets/NativeDlls-win-x64.txt | 14 +
.../assets/NativeDlls.txt | 16 +
.../SdkAssemblyVersionDiffExclusions.txt | 3 -
...s.diff => MsftToSbSdkFiles-linux-x64.diff} | 0
.../baselines/MsftToSbSdkFiles-win-x64.diff | 0
20 files changed, 1837 insertions(+), 21 deletions(-)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/ExecuteHelper.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
rename src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/{MsftToSbSdkFiles.diff => MsftToSbSdkFiles-linux-x64.diff} (100%)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-win-x64.diff
diff --git a/src/SourceBuild/content/build.proj b/src/SourceBuild/content/build.proj
index 66ed6262b607..fb64e7ddd2a2 100644
--- a/src/SourceBuild/content/build.proj
+++ b/src/SourceBuild/content/build.proj
@@ -27,6 +27,7 @@
+
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
-
+
-
+ %(SdkTarballItem.Identity)
normal
+
+
+
+
+
+
+
+
+
+
+
+
+ <_BuiltSdkArchivePath>@(_BuiltSdkArchivePath)
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
new file mode 100644
index 000000000000..dd315077a612
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
@@ -0,0 +1,484 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from `dotnet new gitignore`
+
+# dotenv files
+.env
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# Tye
+.tye/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.tlog
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio 6 auto-generated project file (contains which files were open etc.)
+*.vbp
+
+# Visual Studio 6 workspace and project file (working project files containing files to include in project)
+*.dsw
+*.dsp
+
+# Visual Studio 6 technical files
+*.ncb
+*.aps
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# Visual Studio History (VSHistory) files
+.vshistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
+
+# VS Code files for those working on multiple tools
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+# Local History for Visual Studio Code
+.history/
+
+# Windows Installer files from build outputs
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# JetBrains Rider
+*.sln.iml
+.idea/
+
+##
+## Visual studio for Mac
+##
+
+
+# globs
+Makefile.in
+*.userprefs
+*.usertasks
+config.make
+config.status
+aclocal.m4
+install-sh
+autom4te.cache/
+*.tar.gz
+tarballs/
+test-results/
+
+# Mac bundle stuff
+*.dmg
+*.app
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Vim temporary swap files
+*.swp
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
new file mode 100644
index 000000000000..4beb6245a0c7
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
@@ -0,0 +1,135 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using Microsoft.Extensions.FileSystemGlobbing;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests
+{
+ internal class BaselineHelper
+ {
+ private const string SemanticVersionPlaceholder = "x.y.z";
+ private const string SemanticVersionPlaceholderMatchingPattern = "*.*.*"; // wildcard pattern used to match on the version represented by the placeholder
+ private const string NonSemanticVersionPlaceholder = "x.y";
+ private const string NonSemanticVersionPlaceholderMatchingPattern = "*.*"; // wildcard pattern used to match on the version represented by the placeholder
+
+ public static void CompareEntries(string baselineFileName, IOrderedEnumerable actualEntries)
+ {
+ IEnumerable baseline = File.ReadAllLines(GetBaselineFilePath(baselineFileName));
+ string[] missingEntries = actualEntries.Except(baseline).ToArray();
+ string[] extraEntries = baseline.Except(actualEntries).ToArray();
+
+ string? message = null;
+ if (missingEntries.Length > 0)
+ {
+ message = $"Missing entries in '{baselineFileName}' baseline: {Environment.NewLine}{string.Join(Environment.NewLine, missingEntries)}{Environment.NewLine}{Environment.NewLine}";
+ }
+
+ if (extraEntries.Length > 0)
+ {
+ message += $"Extra entries in '{baselineFileName}' baseline: {Environment.NewLine}{string.Join(Environment.NewLine, extraEntries)}{Environment.NewLine}{Environment.NewLine}";
+ }
+
+ Assert.Null(message);
+ }
+
+ public static void CompareBaselineContents(string baselineFileName, string actualContents, ITestOutputHelper outputHelper, bool warnOnDiffs = false, string baselineSubDir = "")
+ {
+ string actualFilePath = Path.Combine(TestBase.LogsDirectory, $"Updated{baselineFileName}");
+ File.WriteAllText(actualFilePath, actualContents);
+
+ CompareFiles(GetBaselineFilePath(baselineFileName, baselineSubDir), actualFilePath, outputHelper, warnOnDiffs);
+ }
+
+ public static void CompareFiles(string expectedFilePath, string actualFilePath, ITestOutputHelper outputHelper, bool warnOnDiffs = false)
+ {
+ string baselineFileText = File.ReadAllText(expectedFilePath).Trim();
+ string actualFileText = File.ReadAllText(actualFilePath).Trim();
+
+ string? message = null;
+
+ if (baselineFileText != actualFileText)
+ {
+ // Retrieve a diff in order to provide a UX which calls out the diffs.
+ string diff = DiffFiles(expectedFilePath, actualFilePath, outputHelper);
+ string prefix = warnOnDiffs ? "##vso[task.logissue type=warning;]" : string.Empty;
+ message = $"{Environment.NewLine}{prefix}Expected file '{expectedFilePath}' does not match actual file '{actualFilePath}`. {Environment.NewLine}"
+ + $"{diff}{Environment.NewLine}";
+
+ if (warnOnDiffs)
+ {
+ outputHelper.WriteLine(message);
+ outputHelper.WriteLine("##vso[task.complete result=SucceededWithIssues;]");
+ }
+ }
+
+ if (!warnOnDiffs)
+ {
+ Assert.Null(message);
+ }
+ }
+
+ public static string DiffFiles(string file1Path, string file2Path, ITestOutputHelper outputHelper)
+ {
+ (Process Process, string StdOut, string StdErr) diffResult =
+ ExecuteHelper.ExecuteProcess("git", $"diff --no-index {file1Path} {file2Path}", outputHelper);
+
+ return diffResult.StdOut;
+ }
+
+ public static string GetAssetsDirectory() => Path.Combine(Directory.GetCurrentDirectory(), "assets");
+
+ public static string GetBaselineFilePath(string baselineFileName, string baselineSubDir = "") =>
+ Path.Combine(GetAssetsDirectory(), "baselines", baselineSubDir, baselineFileName);
+
+ public static string RemoveRids(string diff, bool isPortable = false) =>
+ isPortable ? diff.Replace(Config.PortableRid, "portable-rid") : diff.Replace(Config.TargetRid, "banana-rid");
+
+ public static string RemoveVersions(string source)
+ {
+ // Remove version numbers for examples like "roslyn4.1", "net8.0", and "netstandard2.1".
+ string pathSeparator = $"[{Regex.Escape(@"\")}|{Regex.Escape(@"/")}]";
+ string result = Regex.Replace(source, $@"{pathSeparator}(net|roslyn)[1-9]+\.[0-9]+{pathSeparator}", match =>
+ {
+ string wordPart = match.Groups[1].Value;
+ return $"{Path.DirectorySeparatorChar}{wordPart}{NonSemanticVersionPlaceholder}{Path.DirectorySeparatorChar}";
+ });
+
+ // Remove semantic versions
+ // Regex source: https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
+ // The regex from https://semver.org has been modified to account for the following:
+ // - The version should be preceded by a path separator, '.', '-', or '/'
+ // - The version should match a release identifier that begins with '.' or '-'
+ // - The version may have one or more release identifiers that begin with '.' or '-'
+ // - The version should end before a path separator, '.', '-', or '/'
+ Regex semanticVersionRegex = new(
+ @"(?<=[./\\-_])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ + @"(((?:[-.]((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)))+"
+ + @"(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?"
+ + @"(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?=[/\\.-_])");
+ return semanticVersionRegex.Replace(result, SemanticVersionPlaceholder);
+ }
+
+ ///
+ /// This returns a that can be used to match on a path whose versions have been removed via
+ /// .
+ ///
+ public static Matcher GetFileMatcherFromPath(string path)
+ {
+ path = path
+ .Replace(SemanticVersionPlaceholder, SemanticVersionPlaceholderMatchingPattern)
+ .Replace(NonSemanticVersionPlaceholder, NonSemanticVersionPlaceholderMatchingPattern);
+ Matcher matcher = new();
+ matcher.AddInclude(path);
+ return matcher;
+ }
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
new file mode 100644
index 000000000000..c662eaf7647b
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
@@ -0,0 +1,341 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Net.Sockets;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+internal class DotNetHelper
+{
+ private static readonly object s_lockObj = new();
+
+ public static string DotNetPath { get; } = Path.Combine(Config.DotNetDirectory, "dotnet");
+ public static string PackagesDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), "packages");
+ public static string ProjectsDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), $"projects-{DateTime.Now:yyyyMMddHHmmssffff}");
+
+ private ITestOutputHelper OutputHelper { get; }
+ public bool IsMonoRuntime { get; }
+
+ public DotNetHelper(ITestOutputHelper outputHelper)
+ {
+ OutputHelper = outputHelper;
+
+ lock (s_lockObj)
+ {
+ if (!Directory.Exists(Config.DotNetDirectory))
+ {
+ if (!File.Exists(Config.SdkTarballPath))
+ {
+ throw new InvalidOperationException($"Tarball path '{Config.SdkTarballPath}' specified in {Config.SdkTarballPath} does not exist.");
+ }
+
+ Directory.CreateDirectory(Config.DotNetDirectory);
+ Utilities.ExtractTarball(Config.SdkTarballPath, Config.DotNetDirectory, outputHelper);
+ }
+ IsMonoRuntime = DetermineIsMonoRuntime(Config.DotNetDirectory);
+
+ // if (!Directory.Exists(ProjectsDirectory))
+ // {
+ // Directory.CreateDirectory(ProjectsDirectory);
+ // InitNugetConfig();
+ // }
+
+ // if (!Directory.Exists(PackagesDirectory))
+ // {
+ // Directory.CreateDirectory(PackagesDirectory);
+ // }
+ }
+ }
+
+ private static void InitNugetConfig()
+ {
+ bool useLocalPackages = !string.IsNullOrEmpty(Config.PrereqsPath);
+ string nugetConfigPrefix = useLocalPackages ? "local" : "online";
+ string nugetConfigPath = Path.Combine(ProjectsDirectory, "NuGet.Config");
+ File.Copy(
+ Path.Combine(BaselineHelper.GetAssetsDirectory(), $"{nugetConfigPrefix}.NuGet.Config"),
+ nugetConfigPath);
+
+ if (useLocalPackages)
+ {
+ // When using local packages this feed is always required. It contains packages that are
+ // not produced by source-build but are required by the various project templates.
+ if (!Directory.Exists(Config.PrereqsPath))
+ {
+ throw new InvalidOperationException(
+ $"Prereqs path '{Config.PrereqsPath}' specified in {Config.PrereqsPathEnv} does not exist.");
+ }
+
+ string nugetConfig = File.ReadAllText(nugetConfigPath);
+ nugetConfig = nugetConfig.Replace("SMOKE_TEST_PACKAGE_FEED", Config.PrereqsPath);
+
+ // This package feed is optional. You can use an additional feed of source-built packages to run the
+ // smoke-tests as offline as possible.
+ if (Config.CustomPackagesPath != null)
+ {
+ if (!Directory.Exists(Config.CustomPackagesPath))
+ {
+ throw new ArgumentException($"Specified --with-packages {Config.CustomPackagesPath} does not exist.");
+ }
+ nugetConfig = nugetConfig.Replace("CUSTOM_PACKAGE_FEED", Config.CustomPackagesPath);
+ }
+ else
+ {
+ nugetConfig = string.Join(Environment.NewLine, nugetConfig.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Where(s => !s.Contains("CUSTOM_PACKAGE_FEED")).ToArray());
+ }
+ File.WriteAllText(nugetConfigPath, nugetConfig);
+ }
+ }
+
+ public void ExecuteCmd(string args, string? workingDirectory = null, Action? processConfigCallback = null,
+ int? expectedExitCode = 0, int millisecondTimeout = -1)
+ {
+ (Process Process, string StdOut, string StdErr) executeResult = ExecuteHelper.ExecuteProcess(
+ DotNetPath,
+ args,
+ OutputHelper,
+ configureCallback: (process) => configureProcess(process, workingDirectory),
+ millisecondTimeout: millisecondTimeout);
+
+ if (expectedExitCode != null) {
+ ExecuteHelper.ValidateExitCode(executeResult, (int) expectedExitCode);
+ }
+
+ void configureProcess(Process process, string? workingDirectory)
+ {
+ ConfigureProcess(process, workingDirectory);
+
+ processConfigCallback?.Invoke(process);
+ }
+ }
+
+ public static void ConfigureProcess(Process process, string? workingDirectory)
+ {
+ if (workingDirectory != null)
+ {
+ process.StartInfo.WorkingDirectory = workingDirectory;
+ }
+
+ process.StartInfo.EnvironmentVariables["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1";
+ process.StartInfo.EnvironmentVariables["DOTNET_SKIP_FIRST_TIME_EXPERIENCE"] = "1";
+ process.StartInfo.EnvironmentVariables["DOTNET_ROOT"] = Config.DotNetDirectory;
+ process.StartInfo.EnvironmentVariables["NUGET_PACKAGES"] = PackagesDirectory;
+ process.StartInfo.EnvironmentVariables["PATH"] = $"{Config.DotNetDirectory}:{Environment.GetEnvironmentVariable("PATH")}";
+ }
+
+ public void ExecuteBuild(string projectName) =>
+ ExecuteCmd($"build {GetBinLogOption(projectName, "build")}", GetProjectDirectory(projectName));
+
+ ///
+ /// Create a new .NET project and return the path to the created project folder.
+ ///
+ public string ExecuteNew(string projectType, string name, string? language = null, string? customArgs = null)
+ {
+ string projectDirectory = GetProjectDirectory(name);
+ string options = $"--name {name} --output {projectDirectory}";
+ if (language != null)
+ {
+ options += $" --language \"{language}\"";
+ }
+ if (string.IsNullOrEmpty(customArgs))
+ {
+ options += $" {customArgs}";
+ }
+
+ ExecuteCmd($"new {projectType} {options}");
+
+ return projectDirectory;
+ }
+
+ public void ExecutePublish(string projectName, DotNetTemplate template, bool? selfContained = null, string? rid = null, bool trimmed = false, bool readyToRun = false)
+ {
+ string options = string.Empty;
+ string binlogDifferentiator = string.Empty;
+
+ if (selfContained.HasValue)
+ {
+ options += $"--self-contained {selfContained.Value.ToString().ToLowerInvariant()}";
+ if (selfContained.Value)
+ {
+ binlogDifferentiator += "self-contained";
+ if (!string.IsNullOrEmpty(rid))
+ {
+ options += $" -r {rid}";
+ binlogDifferentiator += $"-{rid}";
+ }
+ if (trimmed)
+ {
+ options += " /p:PublishTrimmed=true";
+ binlogDifferentiator += "-trimmed";
+ }
+ if (readyToRun)
+ {
+ options += " /p:PublishReadyToRun=true";
+ binlogDifferentiator += "-R2R";
+ }
+ }
+ }
+
+ string projDir = GetProjectDirectory(projectName);
+ string publishDir = Path.Combine(projDir, "bin", "publish");
+
+ ExecuteCmd(
+ $"publish {options} {GetBinLogOption(projectName, "publish", binlogDifferentiator)} -o {publishDir}",
+ projDir);
+
+ if (template == DotNetTemplate.Console)
+ {
+ ExecuteCmd($"{projectName}.dll", publishDir, expectedExitCode: 0);
+ }
+ else if (template == DotNetTemplate.ClassLib || template == DotNetTemplate.BlazorWasm)
+ {
+ // Can't run the published output of classlib (no entrypoint) or WASM (needs a server)
+ }
+ // Assume it is a web-based template
+ else
+ {
+ ExecuteWebDll(projectName, publishDir, template);
+ }
+ }
+
+ public void ExecuteRun(string projectName) =>
+ ExecuteCmd($"run {GetBinLogOption(projectName, "run")}", GetProjectDirectory(projectName));
+
+ public void ExecuteRunWeb(string projectName, DotNetTemplate template)
+ {
+ // 'dotnet run' exit code differs between CoreCLR and Mono (https://github.com/dotnet/sdk/issues/30095).
+ int expectedExitCode = IsMonoRuntime ? 143 : 0;
+
+ ExecuteWeb(
+ projectName,
+ $"run --no-launch-profile {GetBinLogOption(projectName, "run")}",
+ GetProjectDirectory(projectName),
+ template,
+ expectedExitCode);
+ }
+
+ public void ExecuteWebDll(string projectName, string workingDirectory, DotNetTemplate template) =>
+ ExecuteWeb(projectName, $"{projectName}.dll", workingDirectory, template, expectedExitCode: 0);
+
+ public void ExecuteTest(string projectName) =>
+ ExecuteCmd($"test {GetBinLogOption(projectName, "test")}", GetProjectDirectory(projectName));
+
+ private void ExecuteWeb(string projectName, string args, string workingDirectory, DotNetTemplate template, int expectedExitCode)
+ {
+ WebAppValidator validator = new(OutputHelper, template);
+ ExecuteCmd(
+ args,
+ workingDirectory,
+ processConfigCallback: validator.Validate,
+ expectedExitCode: expectedExitCode,
+ millisecondTimeout: 30000);
+ Assert.True(validator.IsValidated);
+ if (validator.ValidationException is not null)
+ {
+ throw validator.ValidationException;
+ }
+ }
+
+ private static string GetBinLogOption(string projectName, string command, string? differentiator = null)
+ {
+ string fileName = $"{projectName}-{command}";
+ if (!string.IsNullOrEmpty(differentiator))
+ {
+ fileName += $"-{differentiator}";
+ }
+
+ return $"/bl:{Path.Combine(TestBase.LogsDirectory, $"{fileName}.binlog")}";
+ }
+
+ private static bool DetermineIsMonoRuntime(string dotnetRoot)
+ {
+ string sharedFrameworkRoot = Path.Combine(dotnetRoot, "shared", "Microsoft.NETCore.App");
+ if (!Directory.Exists(sharedFrameworkRoot))
+ {
+ return false;
+ }
+
+ string? version = Directory.GetDirectories(sharedFrameworkRoot).FirstOrDefault();
+ if (version is null)
+ {
+ return false;
+ }
+
+ string sharedFramework = Path.Combine(sharedFrameworkRoot, version);
+
+ // Check the presence of one of the mono header files.
+ return File.Exists(Path.Combine(sharedFramework, "mono-gc.h"));
+ }
+
+ private static string GetProjectDirectory(string projectName) => Path.Combine(ProjectsDirectory, projectName);
+
+ public static bool ShouldPublishComplex() =>
+ !string.Equals(Config.TargetArchitecture,"ppc64le") && !string.Equals(Config.TargetArchitecture,"s390x");
+
+ private class WebAppValidator
+ {
+ private readonly ITestOutputHelper _outputHelper;
+ private readonly DotNetTemplate _template;
+
+ public WebAppValidator(ITestOutputHelper outputHelper, DotNetTemplate template)
+ {
+ _outputHelper = outputHelper;
+ _template = template;
+ }
+
+ public bool IsValidated { get; set; }
+ public Exception? ValidationException { get; set; }
+
+ private static int GetAvailablePort()
+ {
+ TcpListener listener = new(IPAddress.Loopback, 0);
+ listener.Start();
+ int port = ((IPEndPoint)listener.LocalEndpoint).Port;
+ listener.Stop();
+ return port;
+ }
+
+ public void Validate(Process process)
+ {
+ int port = GetAvailablePort();
+ process.StartInfo.EnvironmentVariables.Add("ASPNETCORE_HTTP_PORTS", port.ToString());
+ process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
+ {
+ try
+ {
+ if (e.Data?.Contains("Application started. Press Ctrl+C to shut down.") ?? false)
+ {
+ _outputHelper.WriteLine("Detected app has started. Sending web request to validate...");
+
+ using HttpClient httpClient = new();
+ string url = $"http://localhost:{port}";
+ if (_template == DotNetTemplate.WebApi)
+ {
+ url += "/WeatherForecast";
+ }
+
+ using HttpResponseMessage resultMsg = httpClient.GetAsync(new Uri(url)).Result;
+ _outputHelper.WriteLine($"Status code returned: {resultMsg.StatusCode}");
+ resultMsg.EnsureSuccessStatusCode();
+ IsValidated = true;
+
+ ExecuteHelper.ExecuteProcessValidateExitCode("kill", $"-s TERM {process.Id}", _outputHelper);
+ }
+ }
+ catch (Exception ex)
+ {
+ ValidationException = ex;
+ }
+ });
+ }
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
new file mode 100644
index 000000000000..0a30c7215631
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
@@ -0,0 +1,21 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+public enum DotNetTemplate
+{
+ Console,
+ ClassLib,
+ XUnit,
+ NUnit,
+ MSTest,
+ Web,
+ Mvc,
+ Razor,
+ BlazorWasm,
+ WebApi,
+ WebApp,
+ Worker,
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
new file mode 100644
index 000000000000..63c58dafde43
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
@@ -0,0 +1,46 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.IO.Enumeration;
+using System.Linq;
+using Microsoft.DotNet.SourceBuild.SmokeTests;
+
+public class Exclusions
+{
+ string _rid = Config.TargetRid;
+
+ string[] GetRidSpecificExclusionFileNames(string path)
+ {
+ string filename = Path.GetFileNameWithoutExtension(path);
+ string extension = Path.GetExtension(path);
+ Debug.Assert(path == $"{filename}{extension}", $"{path} != {filename}{extension}");
+ string[] parts = _rid.Split('-');
+ string[] fileNames = new string[parts.Length+1];
+ fileNames[0] = $"{filename}{extension}";
+ for (int i = 1; i < parts.Length; i++)
+ {
+ fileNames[i] = $"{filename}-{string.Join('-', parts[..i])}-any{extension}";
+ }
+ fileNames[parts.Length] = $"{filename}-{_rid}{extension}";
+ return fileNames;
+ }
+
+ public List GetFileExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkFileDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
+ public List GetAssemblyVersionExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkAssemblyVersionDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
+ public List GetNativeDllExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("NativeDlls.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
+ public string GetBaselineFileDiffFileName() => GetRidSpecificExclusionFileNames("MsftToSbSdkFiles.diff").Last();
+
+
+ string NormalizePath(string path)
+ {
+ return path.Replace('\\', '/');
+ }
+
+ bool IsFileExcluded(string file, string? prefix = null)
+ => GetFileExclusions(prefix).Any(exclusion => FileSystemName.MatchesSimpleExpression(exclusion, NormalizePath(file)));
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/ExecuteHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/ExecuteHelper.cs
new file mode 100644
index 000000000000..129d96c24777
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/ExecuteHelper.cs
@@ -0,0 +1,132 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+internal static class ExecuteHelper
+{
+ public static (Process Process, string StdOut, string StdErr) ExecuteProcess(
+ string fileName,
+ string args,
+ ITestOutputHelper outputHelper,
+ bool logOutput = false,
+ bool excludeInfo = false,
+ Action? configureCallback = null,
+ int millisecondTimeout = -1)
+ {
+ if (!excludeInfo)
+ {
+ outputHelper.WriteLine($"Executing: {fileName} {args}");
+ }
+
+ Process process = new()
+ {
+ EnableRaisingEvents = true,
+ StartInfo =
+ {
+ FileName = fileName,
+ Arguments = args,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ }
+ };
+
+ // The `dotnet test` execution context sets a number of dotnet related ENVs that cause issues when executing
+ // dotnet commands. Clear these to avoid side effects.
+ foreach (string key in process.StartInfo.Environment.Keys.Where(key => key != "HOME").ToList())
+ {
+ process.StartInfo.Environment.Remove(key);
+ }
+
+ configureCallback?.Invoke(process);
+
+ StringBuilder stdOutput = new();
+ process.OutputDataReceived += new DataReceivedEventHandler(
+ (sender, e) =>
+ {
+ lock (stdOutput)
+ {
+ stdOutput.AppendLine(e.Data);
+ }
+ });
+
+ StringBuilder stdError = new();
+ process.ErrorDataReceived += new DataReceivedEventHandler(
+ (sender, e) =>
+ {
+ lock (stdError)
+ {
+ stdError.AppendLine(e.Data);
+ }
+ });
+
+ process.Start();
+
+ process.BeginOutputReadLine();
+ process.BeginErrorReadLine();
+ process.WaitForExit(millisecondTimeout);
+
+ if (!process.HasExited)
+ {
+ outputHelper.WriteLine($"Process did not exit. Killing {fileName} {args} after waiting {millisecondTimeout} milliseconds.");
+ process.Kill(true);
+ process.WaitForExit();
+ }
+
+ string output;
+ string error;
+
+ lock (stdOutput)
+ {
+ output = stdOutput.ToString().Trim();
+ }
+
+ lock (stdError)
+ {
+ error = stdError.ToString().Trim();
+ }
+
+ if (logOutput)
+ {
+ if (!string.IsNullOrWhiteSpace(output))
+ {
+ outputHelper.WriteLine(output);
+ }
+
+ if (string.IsNullOrWhiteSpace(error))
+ {
+ outputHelper.WriteLine(error);
+ }
+ }
+
+ return (process, output, error);
+ }
+
+ public static string ExecuteProcessValidateExitCode(string fileName, string args, ITestOutputHelper outputHelper)
+ {
+ (Process Process, string StdOut, string StdErr) result = ExecuteHelper.ExecuteProcess(fileName, args, outputHelper);
+ ValidateExitCode(result);
+
+ return result.StdOut;
+ }
+
+ public static void ValidateExitCode((Process Process, string StdOut, string StdErr) result, int expectedExitCode = 0)
+ {
+ if (result.Process.ExitCode != expectedExitCode)
+ {
+ ProcessStartInfo startInfo = result.Process.StartInfo;
+ string msg = $"Failed to execute {startInfo.FileName} {startInfo.Arguments}" +
+ $"{Environment.NewLine}Exit code: {result.Process.ExitCode}" +
+ $"{Environment.NewLine}{result.StdOut}" +
+ $"{Environment.NewLine}{result.StdErr}";
+ throw new InvalidOperationException(msg);
+ }
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index a7830912f5b7..2896655818cf 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -15,21 +15,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
new file mode 100644
index 000000000000..4ae0d304d346
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
@@ -0,0 +1,253 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.IO.Enumeration;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Microsoft.Extensions.FileSystemGlobbing;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+[Trait("Category", "SdkContent")]
+public class SdkContentTests : SdkTests
+{
+ private const string MsftSdkType = "msft";
+ private const string SourceBuildSdkType = "sb";
+
+ public SdkContentTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
+
+ ///
+ /// Verifies the file layout of the source built sdk tarball to the Microsoft build.
+ /// The differences are captured in baselines/MsftToSbSdkDiff.txt.
+ /// Version numbers that appear in paths are compared but are stripped from the baseline.
+ /// This makes the baseline durable between releases. This does mean however, entries
+ /// in the baseline may appear identical if the diff is version specific.
+ ///
+ [SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
+ public void CompareMsftToSbFileList()
+ {
+ const string msftFileListingFileName = "msftSdkFiles.txt";
+ const string sbFileListingFileName = "sbSdkFiles.txt";
+ WriteTarballFileList(Config.MsftSdkTarballPath, msftFileListingFileName, isPortable: true, MsftSdkType);
+ WriteTarballFileList(Config.SdkTarballPath, sbFileListingFileName, isPortable: true, SourceBuildSdkType);
+
+ string diff = BaselineHelper.DiffFiles(msftFileListingFileName, sbFileListingFileName, OutputHelper);
+ diff = RemoveDiffMarkers(diff);
+ BaselineHelper.CompareBaselineContents(new Exclusions().GetBaselineFileDiffFileName(), diff, OutputHelper, Config.WarnOnSdkContentDiffs);
+ }
+
+ [SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
+ public void CompareMsftToSbAssemblyVersions()
+ {
+ Assert.NotNull(Config.MsftSdkTarballPath);
+ Assert.NotNull(Config.SdkTarballPath);
+
+ DirectoryInfo tempDir = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
+ try
+ {
+ DirectoryInfo sbSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, SourceBuildSdkType));
+ Utilities.ExtractTarball(Config.SdkTarballPath, sbSdkDir.FullName, OutputHelper);
+
+ DirectoryInfo msftSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, MsftSdkType));
+ Utilities.ExtractTarball(Config.MsftSdkTarballPath, msftSdkDir.FullName, OutputHelper);
+
+ var t1 = Task.Run(() => GetSdkAssemblyVersions(sbSdkDir.FullName));
+ var t2 = Task.Run(() => GetSdkAssemblyVersions(msftSdkDir.FullName));
+ Task.WaitAll(t1, t2);
+ Dictionary sbSdkAssemblyVersions = t1.Result;
+ Dictionary msftSdkAssemblyVersions = t2.Result;
+
+ RemoveExcludedAssemblyVersionPaths(sbSdkAssemblyVersions, msftSdkAssemblyVersions);
+
+ const string SbVersionsFileName = "sb_assemblyversions.txt";
+ WriteAssemblyVersionsToFile(sbSdkAssemblyVersions, SbVersionsFileName);
+
+ const string MsftVersionsFileName = "msft_assemblyversions.txt";
+ WriteAssemblyVersionsToFile(msftSdkAssemblyVersions, MsftVersionsFileName);
+
+ string diff = BaselineHelper.DiffFiles(MsftVersionsFileName, SbVersionsFileName, OutputHelper);
+ diff = RemoveDiffMarkers(diff);
+ BaselineHelper.CompareBaselineContents("MsftToSbSdkAssemblyVersions.diff", diff, OutputHelper, Config.WarnOnSdkContentDiffs);
+ }
+ finally
+ {
+ tempDir.Delete(recursive: true);
+ }
+ }
+
+ private static void RemoveExcludedAssemblyVersionPaths(Dictionary sbSdkAssemblyVersions, Dictionary msftSdkAssemblyVersions)
+ {
+ IEnumerable assemblyVersionDiffFilters = GetSdkAssemblyVersionDiffExclusionFilters()
+ .Select(filter => filter.TrimStart("./".ToCharArray()));
+
+ // Remove any excluded files as long as SB SDK's file has the same or greater assembly version compared to the corresponding
+ // file in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
+ // that is valid for shipping.
+ string[] sbSdkFileArray = sbSdkAssemblyVersions.Keys.ToArray();
+ for (int i = sbSdkFileArray.Length - 1; i >= 0; i--)
+ {
+ string assemblyPath = sbSdkFileArray[i];
+ Version? sbVersion = sbSdkAssemblyVersions[assemblyPath];
+ Version? msftVersion = msftSdkAssemblyVersions[assemblyPath];
+
+ if (sbVersion is not null &&
+ msftVersion is not null &&
+ sbVersion >= msftVersion &&
+ Utilities.IsFileExcluded(assemblyPath, assemblyVersionDiffFilters))
+ {
+ sbSdkAssemblyVersions.Remove(assemblyPath);
+ msftSdkAssemblyVersions.Remove(assemblyPath);
+ }
+ }
+ }
+
+ private static void WriteAssemblyVersionsToFile(Dictionary assemblyVersions, string outputPath)
+ {
+ string[] lines = assemblyVersions
+ .Select(kvp => $"{kvp.Key} - {kvp.Value}")
+ .Order()
+ .ToArray();
+ File.WriteAllLines(outputPath, lines);
+ }
+
+ // It's known that assembly versions can be different between builds in their revision field. Disregard that difference
+ // by excluding that field in the output.
+ private static Version? GetVersion(AssemblyName assemblyName)
+ {
+ if (assemblyName.Version is not null)
+ {
+ return new Version(assemblyName.Version.ToString(3));
+ }
+
+ return null;
+ }
+
+ private string FindMatchingFilePath(string rootDir, Matcher matcher, string representativeFile)
+ {
+ foreach (string file in Directory.EnumerateFiles(rootDir, "*", SearchOption.AllDirectories))
+ {
+ if (matcher.Match(rootDir, file).HasMatches)
+ {
+ return file;
+ }
+ }
+
+ Assert.Fail($"Unable to find matching file for '{representativeFile}' in '{rootDir}'.");
+ return string.Empty;
+ }
+
+ private Dictionary GetSdkAssemblyVersions(string sbSdkPath)
+ {
+ Exclusions ex = new Exclusions();
+ IEnumerable exclusionFilters = GetSdkDiffExclusionFilters(SourceBuildSdkType)
+ .Concat(GetKnownNativeFiles())
+ .Select(filter => filter.TrimStart("./".ToCharArray()));
+ List knownNativeFiles = Utilities.ParseExclusionsFile("NativeDlls-win-any.txt").ToList();
+ ConcurrentDictionary sbSdkAssemblyVersions = new();
+ List tasks = new List();
+ foreach (string dir in Directory.EnumerateDirectories(sbSdkPath, "*", SearchOption.AllDirectories).Append(sbSdkPath))
+ {
+ var t = Task.Run(() =>
+ {
+ foreach (string file in Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly))
+ {
+ string fileExt = Path.GetExtension(file);
+ if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
+ fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
+ {
+ string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
+ if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ {
+ try
+ {
+ AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ Assert.True(sbSdkAssemblyVersions.TryAdd(normalizedPath, GetVersion(assemblyName)));
+ }
+ catch (BadImageFormatException)
+ {
+ Console.WriteLine($"BadImageFormatException: {file}");
+ }
+ }
+ }
+ }
+ });
+ tasks.Add(t);
+ }
+ //foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
+ //{
+ // string fileExt = Path.GetExtension(file);
+ // if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
+ // fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
+ // {
+ // string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ // string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
+ // if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ // {
+ // var t = Task.Run(() =>
+ // {
+ // try
+ // {
+ // AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ // sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
+ // }
+ // catch (BadImageFormatException)
+ // {
+ // Console.WriteLine($"BadImageFormatException: {file}");
+ // }
+ // });
+ // tasks.Add(t);
+ // }
+ // }
+ //}
+ Task.WaitAll(tasks.ToArray());
+ return sbSdkAssemblyVersions.ToDictionary();
+ }
+
+ private void WriteTarballFileList(string? tarballPath, string outputFileName, bool isPortable, string sdkType)
+ {
+ if (!File.Exists(tarballPath))
+ {
+ throw new InvalidOperationException($"Tarball path '{tarballPath}' does not exist.");
+ }
+
+ string fileListing = Utilities.GetTarballContentNames(tarballPath).Aggregate((a, b) => $"{a}{Environment.NewLine}{b}");
+ fileListing = BaselineHelper.RemoveRids(fileListing, isPortable);
+ fileListing = BaselineHelper.RemoveVersions(fileListing);
+ IEnumerable files = fileListing.Split(Environment.NewLine).OrderBy(path => path);
+ files = RemoveExclusions(files, GetSdkDiffExclusionFilters(sdkType));
+
+ File.WriteAllLines(outputFileName, files);
+ }
+
+ private static IEnumerable RemoveExclusions(IEnumerable files, IEnumerable exclusions) =>
+ files.Where(item => !Utilities.IsFileExcluded(item, exclusions));
+
+ private static IEnumerable GetSdkDiffExclusionFilters(string sdkType) =>
+ Utilities.ParseExclusionsFile("SdkFileDiffExclusions.txt", sdkType);
+
+ private static IEnumerable GetSdkAssemblyVersionDiffExclusionFilters() =>
+ Utilities.ParseExclusionsFile("SdkAssemblyVersionDiffExclusions.txt");
+
+ private static IEnumerable GetKnownNativeFiles() =>
+ Utilities.ParseExclusionsFile("NativeDlls-win-any.txt");
+
+ private static string RemoveDiffMarkers(string source)
+ {
+ Regex indexRegex = new("^index .*", RegexOptions.Multiline);
+ string result = indexRegex.Replace(source, "index ------------");
+
+ Regex diffSegmentRegex = new("^@@ .* @@", RegexOptions.Multiline);
+ return diffSegmentRegex.Replace(result, "@@ ------------ @@");
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
new file mode 100644
index 000000000000..ba3381360ffa
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
@@ -0,0 +1,20 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+///
+/// Shared base class for all SDK-based smoke tests.
+///
+public abstract class SdkTests : TestBase
+{
+ internal DotNetHelper DotNetHelper { get; }
+
+ protected SdkTests(ITestOutputHelper outputHelper) : base(outputHelper)
+ {
+ DotNetHelper = new DotNetHelper(outputHelper);
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
new file mode 100644
index 000000000000..c1314e19e8b5
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
@@ -0,0 +1,53 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Linq;
+using Xunit;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+///
+/// A Fact that will be skipped based on the specified environment variable's value.
+///
+internal class SkippableFactAttribute : FactAttribute
+{
+ public SkippableFactAttribute(string envName, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, bool skipOnFalseEnv = false, string[] skipArchitectures = null) =>
+ EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipOnFalseEnv, skipArchitectures, (skip) => Skip = skip, envName);
+
+ public SkippableFactAttribute(string[] envNames, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, bool skipOnFalseEnv = false, string[] skipArchitectures = null) =>
+ EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipOnFalseEnv, skipArchitectures, (skip) => Skip = skip, envNames);
+
+ public static void EvaluateSkips(bool skipOnNullOrWhiteSpaceEnv, bool skipOnTrueEnv, bool skipOnFalseEnv, string[] skipArchitectures, Action setSkip, params string[] envNames)
+ {
+ foreach (string envName in envNames)
+ {
+ string? envValue = Environment.GetEnvironmentVariable(envName);
+
+ if (skipOnNullOrWhiteSpaceEnv && string.IsNullOrWhiteSpace(envValue))
+ {
+ setSkip($"Skipping because `{envName}` is null or whitespace");
+ break;
+ }
+ else if (skipOnTrueEnv && bool.TryParse(envValue, out bool boolValue) && boolValue)
+ {
+ setSkip($"Skipping because `{envName}` is set to True");
+ break;
+ }
+ else if (skipOnFalseEnv && (!bool.TryParse(envValue, out boolValue) || !boolValue))
+ {
+ setSkip($"Skipping because `{envName}` is set to False or an invalid value");
+ break;
+ }
+ }
+
+ if (skipArchitectures != null) {
+ string? arch = Config.TargetArchitecture;
+ if (skipArchitectures.Contains(arch))
+ {
+ setSkip($"Skipping because arch is `{arch}`");
+ }
+ }
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
new file mode 100644
index 000000000000..963f07109303
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
@@ -0,0 +1,25 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.IO;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+public abstract class TestBase
+{
+ public static string LogsDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), "logs");
+
+ public ITestOutputHelper OutputHelper { get; }
+
+ public TestBase(ITestOutputHelper outputHelper)
+ {
+ OutputHelper = outputHelper;
+
+ if (!Directory.Exists(LogsDirectory))
+ {
+ Directory.CreateDirectory(LogsDirectory);
+ }
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
new file mode 100644
index 000000000000..54939d8355f4
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
@@ -0,0 +1,222 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.Extensions.FileSystemGlobbing;
+using System;
+using System.Collections.Generic;
+using System.Formats.Tar;
+using System.IO;
+using System.IO.Compression;
+using System.IO.Enumeration;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.SourceBuild.SmokeTests;
+
+public static class Utilities
+{
+ ///
+ /// Returns whether the given file path is excluded by the given exclusions using glob file matching.
+ ///
+ public static bool IsFileExcluded(string filePath, IEnumerable exclusions) =>
+ GetMatchingFileExclusions(filePath.Replace('\\', '/'), exclusions, exclusion => exclusion).Any();
+
+ public static IEnumerable GetMatchingFileExclusions(string filePath, IEnumerable exclusions, Func getExclusionExpression) =>
+ exclusions.Where(exclusion => FileSystemName.MatchesSimpleExpression(getExclusionExpression(exclusion), filePath));
+
+ ///
+ /// Parses a common file format in the test suite for listing file exclusions.
+ ///
+ /// Name of the exclusions file.
+ /// When specified, filters the exclusions to those that begin with the prefix value.
+ public static IEnumerable ParseExclusionsFile(string exclusionsFileName, string? prefix = null)
+ {
+ string exclusionsFilePath = Path.Combine(BaselineHelper.GetAssetsDirectory(), exclusionsFileName);
+ int prefixSkip = prefix?.Length + 1 ?? 0;
+ return File.ReadAllLines(exclusionsFilePath)
+ // process only specific exclusions if a prefix is provided
+ .Where(line => prefix is null || line.StartsWith(prefix + ","))
+ .Select(line =>
+ {
+ // Ignore comments
+ var index = line.IndexOf('#');
+ return index >= 0 ? line[prefixSkip..index].TrimEnd() : line[prefixSkip..];
+ })
+ .Where(line => !string.IsNullOrEmpty(line))
+ .ToList();
+ }
+
+ public static IEnumerable TryParseExclusionsFile(string exclusionsFileName, string? prefix = null)
+ {
+ string exclusionsFilePath = Path.Combine(BaselineHelper.GetAssetsDirectory(), exclusionsFileName);
+ int prefixSkip = prefix?.Length + 1 ?? 0;
+ if (!File.Exists(exclusionsFilePath))
+ {
+ return [];
+ }
+ return File.ReadAllLines(exclusionsFilePath)
+ // process only specific exclusions if a prefix is provided
+ .Where(line => prefix is null || line.StartsWith(prefix + ","))
+ .Select(line =>
+ {
+ // Ignore comments
+ var index = line.IndexOf('#');
+ return index >= 0 ? line[prefixSkip..index].TrimEnd() : line[prefixSkip..];
+ })
+ .Where(line => !string.IsNullOrEmpty(line))
+ .ToList();
+ }
+
+ public static void ExtractTarball(string tarballPath, string outputDir, ITestOutputHelper outputHelper)
+ {
+ // TarFile doesn't properly handle hard links (https://github.com/dotnet/runtime/pull/85378#discussion_r1221817490),
+ // use 'tar' instead.
+ if (tarballPath.EndsWith(".tar.gz", StringComparison.OrdinalIgnoreCase) || tarballPath.EndsWith(".tgz", StringComparison.OrdinalIgnoreCase))
+ {
+ ExecuteHelper.ExecuteProcessValidateExitCode("tar", $"xzf {tarballPath} -C {outputDir}", outputHelper);
+ }
+ else if (tarballPath.EndsWith(".zip"))
+ {
+ ZipFile.ExtractToDirectory(tarballPath, outputDir);
+ }
+ else
+ {
+ throw new InvalidOperationException($"Unsupported tarball format: {tarballPath}");
+ }
+ }
+
+ public static void ExtractTarball(string tarballPath, string outputDir, string targetFilePath)
+ {
+ Matcher matcher = new();
+ matcher.AddInclude(targetFilePath);
+
+ using FileStream fileStream = File.OpenRead(tarballPath);
+ using GZipStream decompressorStream = new(fileStream, CompressionMode.Decompress);
+ using TarReader reader = new(decompressorStream);
+
+ TarEntry entry;
+ while ((entry = reader.GetNextEntry()) is not null)
+ {
+ if (matcher.Match(entry.Name).HasMatches)
+ {
+ string outputPath = Path.Join(outputDir, entry.Name);
+ Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
+
+ using FileStream outputFileStream = File.Create(outputPath);
+ entry.DataStream.CopyTo(outputFileStream);
+ break;
+ }
+ }
+ }
+
+ public static IEnumerable GetTarballContentNames(string tarballPath)
+ {
+ if (tarballPath.EndsWith(".zip"))
+ {
+ using ZipArchive zip = ZipFile.OpenRead(tarballPath);
+ foreach (ZipArchiveEntry entry in zip.Entries)
+ {
+ yield return entry.FullName;
+ }
+ yield break;
+ }
+ else if (tarballPath.EndsWith(".tar.gz") || tarballPath.EndsWith(".tgz"))
+ {
+ using FileStream fileStream = File.OpenRead(tarballPath);
+ using GZipStream decompressorStream = new(fileStream, CompressionMode.Decompress);
+ using TarReader reader = new(decompressorStream);
+
+ TarEntry entry;
+ while ((entry = reader.GetNextEntry()) is not null)
+ {
+ yield return entry.Name;
+ }
+ }
+ }
+
+ public static void ExtractNupkg(string package, string outputDir)
+ {
+ Directory.CreateDirectory(outputDir);
+
+ using ZipArchive zip = ZipFile.OpenRead(package);
+ foreach (ZipArchiveEntry entry in zip.Entries)
+ {
+ string outputPath = Path.Combine(outputDir, entry.FullName);
+ Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
+ entry.ExtractToFile(outputPath);
+ }
+ }
+
+ public static async Task RetryAsync(Func executor, ITestOutputHelper outputHelper)
+ {
+ await Utilities.RetryAsync(
+ async () =>
+ {
+ try
+ {
+ await executor();
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ },
+ outputHelper);
+ }
+
+ private static async Task RetryAsync(Func> executor, ITestOutputHelper outputHelper)
+ {
+ const int maxRetries = 5;
+ const int waitFactor = 5;
+
+ int retryCount = 0;
+
+ Exception? exception = await executor();
+ while (exception != null)
+ {
+ retryCount++;
+ if (retryCount >= maxRetries)
+ {
+ throw new InvalidOperationException($"Failed after {retryCount} retries.", exception);
+ }
+
+ int waitTime = Convert.ToInt32(Math.Pow(waitFactor, retryCount - 1));
+ if (outputHelper != null)
+ {
+ outputHelper.WriteLine($"Retry {retryCount}/{maxRetries}, retrying in {waitTime} seconds...");
+ }
+
+ Thread.Sleep(TimeSpan.FromSeconds(waitTime));
+ exception = await executor();
+ }
+ }
+
+ public static void LogWarningMessage(this ITestOutputHelper outputHelper, string message)
+ {
+ string prefix = "##vso[task.logissue type=warning;]";
+
+ outputHelper.WriteLine($"{Environment.NewLine}{prefix}{message}.{Environment.NewLine}");
+ outputHelper.WriteLine("##vso[task.complete result=SucceededWithIssues;]");
+ }
+
+ public static void ValidateNotNullOrWhiteSpace(string? variable, string variableName)
+ {
+ if (string.IsNullOrWhiteSpace(variable))
+ {
+ throw new ArgumentException($"{variableName} is null, empty, or whitespace.");
+ }
+ }
+
+ public static string GetFile(string path, string pattern)
+ {
+ string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories);
+ Assert.False(files.Length > 1, $"Found multiple files matching the pattern {pattern}: {Environment.NewLine}{string.Join(Environment.NewLine, files)}");
+ Assert.False(files.Length == 0, $"Did not find any files matching the pattern {pattern}");
+ return files[0];
+ }
+}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
new file mode 100644
index 000000000000..9e8e6088e2e0
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
@@ -0,0 +1,49 @@
+# Contains the list of files which are .dll's or .exe's but are not managed assemblies and should not have their assembly version checked
+#
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+#
+# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
+
+
+./sdk/x.y.z/AppHostTemplate/apphost.exe
+./host/fxr/x.y.z/hostfxr.dll
+./shared/Microsoft.AspNetCore.App/x.y.z/aspnetcorev2_inprocess.dll
+./shared/Microsoft.WindowsDesktop.App/x.y.z/D3DCompiler_47_cor3.dll
+./shared/Microsoft.NETCore.App/x.y.z/clretwrc.dll
+./shared/Microsoft.NETCore.App/x.y.z/clrgc.dll
+./shared/Microsoft.WindowsDesktop.App/x.y.z/PenImc_cor3.dll
+./shared/Microsoft.WindowsDesktop.App/x.y.z/PresentationNative_cor3.dll
+./shared/Microsoft.NETCore.App/x.y.z/clrgcexp.dll
+./shared/Microsoft.NETCore.App/x.y.z/clrjit.dll
+./shared/Microsoft.WindowsDesktop.App/x.y.z/vcruntime140_cor3.dll
+./shared/Microsoft.NETCore.App/x.y.z/coreclr.dll
+./shared/Microsoft.NETCore.App/x.y.z/createdump.exe
+./shared/Microsoft.WindowsDesktop.App/x.y.z/wpfgfx_cor3.dll
+./shared/Microsoft.NETCore.App/x.y.z/hostpolicy.dll
+./shared/Microsoft.NETCore.App/x.y.z/Microsoft.DiaSymReader.Native.amd64.dll
+./shared/Microsoft.NETCore.App/x.y.z/mscordaccore.dll
+./shared/Microsoft.NETCore.App/x.y.z/mscordaccore_amd64_amd64_x.y.z.dll
+./shared/Microsoft.NETCore.App/x.y.z/mscordbi.dll
+./shared/Microsoft.NETCore.App/x.y.z/mscorrc.dll
+./shared/Microsoft.NETCore.App/x.y.z/msquic.dll
+./packs/Microsoft.NETCore.App.Host.win-x64/x.y.z/runtimes/win-x64/native/apphost.exe
+./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/apphost.exe
+./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/apphost.exe
+./packs/Microsoft.NETCore.App.Host.win-x64/x.y.z/runtimes/win-x64/native/comhost.dll
+./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/comhost.dll
+./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/comhost.dll
+./packs/Microsoft.NETCore.App.Host.win-x64/x.y.z/runtimes/win-x64/native/ijwhost.dll
+./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/ijwhost.dll
+./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/ijwhost.dll
+./packs/Microsoft.NETCore.App.Host.win-x64/x.y.z/runtimes/win-x64/native/nethost.dll
+./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/nethost.dll
+./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/nethost.dll
+./packs/Microsoft.NETCore.App.Host.win-x64/x.y.z/runtimes/win-x64/native/singlefilehost.exe
+./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/singlefilehost.exe
+./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/singlefilehost.exe
+./shared/Microsoft.NETCore.App/x.y.z/System.IO.Compression.Native.dll
+./dotnet.exe
\ No newline at end of file
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
new file mode 100644
index 000000000000..e93e1d37bdaa
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
@@ -0,0 +1,14 @@
+# Contains the list of files whose assembly versions are to be excluded from comparison between the MSFT & SB SDK.
+# These exclusions only take effect if the assembly version of the file in the SB SDK is equal to or greater than
+# the version in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
+# that is valid for shipping.
+#
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+#
+# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
+
+./shared/Microsoft.NETCore.App/x.y.z/mscordaccore_amd64_amd64_x.y.z.dll
\ No newline at end of file
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
new file mode 100644
index 000000000000..1b5390e2a754
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
@@ -0,0 +1,16 @@
+# Contains the list of files whose assembly versions are to be excluded from comparison between the MSFT & SB SDK.
+# These exclusions only take effect if the assembly version of the file in the SB SDK is equal to or greater than
+# the version in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
+# that is valid for shipping.
+#
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+#
+# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
+
+./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
+./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
+./sdk/x.y.z/datacollector.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
index 1b5390e2a754..e5b0530164f9 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
@@ -11,6 +11,3 @@
#
# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
-./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
-./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
-./sdk/x.y.z/datacollector.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
similarity index 100%
rename from src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles.diff
rename to src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-win-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-win-x64.diff
new file mode 100644
index 000000000000..e69de29bb2d1
From b1dfb7a0e4b5464ae96a03f85228729511ce3710 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 18 Mar 2024 16:41:47 -0700
Subject: [PATCH 04/41] Remove old PackageDiff and reference test runner in
installer.proj
---
.../PackageDiff.Tasks.csproj | 31 ----
.../PackageDiff.Tasks/PackageDiff.cs | 28 ---
.../build/PackageDiff.Tasks.props | 9 -
.../PackageDiff/PackageDiff.csproj | 11 --
.../tasks/PackageDiff/PackageDiff/Program.cs | 160 ------------------
.../PackageDiff/PackageDiff/ZipExtensions.cs | 60 -------
.../content/repo-projects/installer.proj | 1 +
7 files changed, 1 insertion(+), 299 deletions(-)
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
deleted file mode 100644
index 878b136beb7a..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.Tasks.csproj
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- Library
- netstandard2.0
- enable
- enable
- true
- true
- $(NoWarn);NU5128;NU5129;NU5100
- tasks
- true
-
-
-
-
-
-
-
-
-
-
-
- <_DiffToolPublishContent Include="$(OutputPath)PackageDiff\**" />
-
-
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
deleted file mode 100644
index 744779ccee8d..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/PackageDiff.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Build.Framework;
-
-public class PackageDiff: Microsoft.Build.Utilities.ToolTask
-{
- [Required]
- public string BaselinePackage {get; set;} = "";
-
- [Required]
- public string TestPackage {get; set;} = "";
-
- protected override string ToolName { get; } = $"PackageDiff" + (System.Environment.OSVersion.Platform == PlatformID.Unix ? "" : ".exe");
-
- protected override MessageImportance StandardOutputLoggingImportance => MessageImportance.High;
- protected override bool HandleTaskExecutionErrors() => true;
-
- protected override string GenerateFullPathToTool()
- {
- return Path.Combine(Path.GetDirectoryName(typeof(PackageDiff).Assembly.Location)!, "..", "..", "tools", ToolName);
- }
-
- protected override string GenerateCommandLineCommands()
- {
- return $"\"{BaselinePackage}\" \"{TestPackage}\"";
- }
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
deleted file mode 100644
index 239643148ec2..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff.Tasks/build/PackageDiff.Tasks.props
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- <_PackageDiffTasksAssemblyPath>$(MSBuildThisFileDirectory)\..\tasks\netstandard2.0\PackageDiff.Tasks.dll
-
-
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
deleted file mode 100644
index c74b0b783484..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/PackageDiff.csproj
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- true
- true
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
deleted file mode 100644
index 924c0aba6451..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/Program.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Net.Http;
-using System.Reflection;
-using System.Reflection.Metadata;
-using System.Reflection.PortableExecutable;
-using System.Text;
-using System.Threading.Tasks;
-
-public class PackageDiff
-{
- public static async Task Main(string[] args)
- {
- if (args.Length != 2)
- {
- Console.WriteLine("Usage: PackageDiff ");
- return 1;
- }
-
- ZipArchive package1 = await GetZipArchiveAsync(args[0]);
- ZipArchive package2 = await GetZipArchiveAsync(args[1]);
- var diff = GetDiffs(package1, package2);
- if (diff is not "")
- {
- Console.WriteLine(diff);
- return 1;
- }
- return 0;
- }
-
- public static async Task GetZipArchiveAsync(string arg)
- {
- if (File.Exists(arg))
- {
- return new ZipArchive(File.OpenRead(arg));
- }
- else if (Uri.TryCreate(arg, UriKind.RelativeOrAbsolute, out var uri))
- {
- var webClient = new HttpClient();
- return new ZipArchive(await webClient.GetStreamAsync(uri));
- }
- else
- {
- throw new ArgumentException($"Invalid path or url to package1: {arg}");
- }
- }
-
- public static string GetDiffs(ZipArchive package1, ZipArchive package2)
- {
- StringBuilder output = new();
-
- if (TryGetDiff(package1.Entries.Select(entry => entry.FullName).ToList(), package2.Entries.Select(entry => entry.FullName).ToList(), out var fileDiffs))
- {
- output.AppendLine("File differences:");
- output.AppendLine(string.Join(Environment.NewLine, fileDiffs.Select(d => " " + d)));
- output.AppendLine();
- }
-
- if (TryGetDiff(package1.GetNuspec().Lines(), package2.GetNuspec().Lines(), out var editedDiff))
- {
- output.AppendLine("Nuspec differences:");
- output.AppendLine(string.Join(Environment.NewLine, editedDiff.Select(d => " " + d)));
- output.AppendLine();
- }
- var dlls1 = package1.Entries.Where(entry => entry.FullName.EndsWith(".dll")).ToImmutableDictionary(entry => entry.FullName, entry => entry);
- var dlls2 = package2.Entries.Where(entry => entry.FullName.EndsWith(".dll")).ToImmutableDictionary(entry => entry.FullName, entry => entry);
- foreach (var kvp in dlls1)
- {
- var dllPath = kvp.Key;
- var dll1 = kvp.Value;
- if (dlls2.TryGetValue(dllPath, out ZipArchiveEntry? dll2))
- {
- try
- {
- var version1 = new PEReader(dll1.Open().ReadToEnd().ToImmutableArray()).GetMetadataReader().GetAssemblyDefinition().Version.ToString();
- var version2 = new PEReader(dll2.Open().ReadToEnd().ToImmutableArray()).GetMetadataReader().GetAssemblyDefinition().Version.ToString();
- if (version1 != version2)
- {
- output.AppendLine($"Assembly {dllPath} has different versions: {version1} and {version2}");
- }
- }
- catch (InvalidOperationException)
- { }
- }
- }
- return output.ToString();
- }
-
- public static bool TryGetDiff(List originalLines, List modifiedLines, out List formattedDiff)
- {
- // Edit distance algorithm: https://en.wikipedia.org/wiki/Longest_common_subsequence
-
- int[,] dp = new int[originalLines.Count + 1, modifiedLines.Count + 1];
-
- // Initialize first row and column
- for (int i = 0; i <= originalLines.Count; i++)
- {
- dp[i, 0] = i;
- }
- for (int j = 0; j <= modifiedLines.Count; j++)
- {
- dp[0, j] = j;
- }
-
- // Compute edit distance
- for (int i = 1; i <= originalLines.Count; i++)
- {
- for (int j = 1; j <= modifiedLines.Count; j++)
- {
- if (string.Compare(originalLines[i - 1], modifiedLines[j - 1]) == 0)
- {
- dp[i, j] = dp[i - 1, j - 1];
- }
- else
- {
- dp[i, j] = 1 + Math.Min(dp[i - 1, j], dp[i, j - 1]);
- }
- }
- }
-
- // Trace back the edits
- int row = originalLines.Count;
- int col = modifiedLines.Count;
-
- formattedDiff = [];
- while (row > 0 || col > 0)
- {
- if (row > 0 && col > 0 && string.Compare(originalLines[row - 1], modifiedLines[col - 1]) == 0)
- {
- formattedDiff.Add(" " + originalLines[row - 1]);
- row--;
- col--;
- }
- else if (col > 0 && (row == 0 || dp[row, col - 1] <= dp[row - 1, col]))
- {
- formattedDiff.Add("+ " + modifiedLines[col - 1]);
- col--;
- }
- else if (row > 0 && (col == 0 || dp[row, col - 1] > dp[row - 1, col]))
- {
- formattedDiff.Add("- " + originalLines[row - 1]);
- row--;
- }
- else
- {
- throw new Exception("Unreachable code");
- }
- }
- formattedDiff.Reverse();
- return dp[originalLines.Count, modifiedLines.Count] != 0;
- }
-
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs b/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
deleted file mode 100644
index 914740b06867..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/PackageDiff/PackageDiff/ZipExtensions.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Text;
-
-static class ZipExtensions
-{
- public static List Lines(this ZipArchiveEntry entry, Encoding? encoding = null)
- {
- return entry.ReadToString(encoding).Replace("\r\n", "\n").Split('\n').ToList();
- }
-
- public static string ReadToString(this ZipArchiveEntry entry, Encoding? encoding = null)
- {
- Stream stream = entry.Open();
- byte[] buffer = stream.ReadToEnd();
- // Remove UTF-8 BOM if present
- int index = 0;
- if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
- {
- index = 3;
- }
- encoding ??= Encoding.UTF8;
- string fileText = encoding.GetString(buffer, index, buffer.Length - index);
- return fileText;
- }
-
- public static ZipArchiveEntry GetNuspec(this ZipArchive package)
- {
- return package.Entries.Where(entry => entry.FullName.EndsWith(".nuspec")).Single();
- }
-
- public static byte[] ReadToEnd(this Stream stream)
- {
- int bufferSize = 2048;
- byte[] buffer = new byte[bufferSize];
- int offset = 0;
- while (true)
- {
- int bytesRead = stream.Read(buffer, offset, bufferSize - offset);
- offset += bytesRead;
- if (bytesRead == 0)
- {
- break;
- }
- if (offset == bufferSize)
- {
- Array.Resize(ref buffer, bufferSize * 2);
- bufferSize *= 2;
- }
- }
- Array.Resize(ref buffer, offset);
- return buffer;
- }
-}
diff --git a/src/SourceBuild/content/repo-projects/installer.proj b/src/SourceBuild/content/repo-projects/installer.proj
index e834755ea1e2..4b683e559303 100644
--- a/src/SourceBuild/content/repo-projects/installer.proj
+++ b/src/SourceBuild/content/repo-projects/installer.proj
@@ -149,5 +149,6 @@
+
From cdbd8e5b3ff7e69a85ac9570cfcf43f8ceca6390 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 09:52:54 -0700
Subject: [PATCH 05/41] Fix capilization issue with file name
---
...fiedBuildvalidation.targets => unifiedBuildValidation.targets} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename src/SourceBuild/content/eng/{unifiedBuildvalidation.targets => unifiedBuildValidation.targets} (100%)
diff --git a/src/SourceBuild/content/eng/unifiedBuildvalidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
similarity index 100%
rename from src/SourceBuild/content/eng/unifiedBuildvalidation.targets
rename to src/SourceBuild/content/eng/unifiedBuildValidation.targets
From 46cc050d54b3b7a19a42c001f823bfef093eb4b2 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 09:54:36 -0700
Subject: [PATCH 06/41] Revert changes from existing smoke tests
---
.../BaselineHelper.cs | 6 +-
.../DotNetHelper.cs | 24 +--
.../SdkContentTests.cs | 105 +++-------
.../Utilities.cs | 2 +-
.../assets/SdkFileDiffExclusions.txt | 4 -
.../baselines/ArtifactsSizes/centos.8-x64.txt | 40 ++--
.../assets/baselines/MsftToSbSdkFiles.diff | 189 ++++++++++++++++++
7 files changed, 259 insertions(+), 111 deletions(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
index a5ca6a154033..6b7c6f71a50f 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/BaselineHelper.cs
@@ -96,7 +96,7 @@ public static string RemoveRids(string diff, bool isPortable = false) =>
public static string RemoveVersions(string source)
{
// Remove version numbers for examples like "roslyn4.1", "net8.0", and "netstandard2.1".
- string pathSeparator = $"[{Regex.Escape(@"\")}|{Regex.Escape(@"/")}]";
+ string pathSeparator = Regex.Escape(Path.DirectorySeparatorChar.ToString());
string result = Regex.Replace(source, $@"{pathSeparator}(net|roslyn)[1-9]+\.[0-9]+{pathSeparator}", match =>
{
string wordPart = match.Groups[1].Value;
@@ -111,10 +111,10 @@ public static string RemoveVersions(string source)
// - The version may have one or more release identifiers that begin with '.' or '-'
// - The version should end before a path separator, '.', '-', or '/'
Regex semanticVersionRegex = new(
- @"(?<=[./\\-])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ @"(?<=[./-])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ @"(((?:[-.]((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)))+"
+ @"(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?"
- + @"(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?=[/\\.-])");
+ + @"(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?=[/.-])");
return semanticVersionRegex.Replace(result, SemanticVersionPlaceholder);
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
index c662eaf7647b..291d492ed1a8 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/DotNetHelper.cs
@@ -43,16 +43,16 @@ public DotNetHelper(ITestOutputHelper outputHelper)
}
IsMonoRuntime = DetermineIsMonoRuntime(Config.DotNetDirectory);
- // if (!Directory.Exists(ProjectsDirectory))
- // {
- // Directory.CreateDirectory(ProjectsDirectory);
- // InitNugetConfig();
- // }
-
- // if (!Directory.Exists(PackagesDirectory))
- // {
- // Directory.CreateDirectory(PackagesDirectory);
- // }
+ if (!Directory.Exists(ProjectsDirectory))
+ {
+ Directory.CreateDirectory(ProjectsDirectory);
+ InitNugetConfig();
+ }
+
+ if (!Directory.Exists(PackagesDirectory))
+ {
+ Directory.CreateDirectory(PackagesDirectory);
+ }
}
}
@@ -105,7 +105,7 @@ public void ExecuteCmd(string args, string? workingDirectory = null, Action configureProcess(process, workingDirectory),
millisecondTimeout: millisecondTimeout);
-
+
if (expectedExitCode != null) {
ExecuteHelper.ValidateExitCode(executeResult, (int) expectedExitCode);
}
@@ -243,7 +243,7 @@ private void ExecuteWeb(string projectName, string args, string workingDirectory
{
throw validator.ValidationException;
}
- }
+ }
private static string GetBinLogOption(string projectName, string command, string? differentiator = null)
{
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
index d78b2e8e4457..29bb7dbc55ca 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/SdkContentTests.cs
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System;
-using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.IO;
@@ -11,7 +10,6 @@
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using Microsoft.Extensions.FileSystemGlobbing;
using Xunit;
using Xunit.Abstractions;
@@ -120,33 +118,27 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
private Dictionary GetMsftSdkAssemblyVersions(
string msftSdkPath, Dictionary sbSdkAssemblyVersions)
{
- ConcurrentDictionary msftSdkAssemblyVersions = new();
- var tasks = new List();
+ Dictionary msftSdkAssemblyVersions = new();
foreach ((string relativePath, _) in sbSdkAssemblyVersions)
{
- var t = Task.Run(() =>
- {
- // Now we want to find the corresponding file that exists in the MSFT SDK.
- // We've already replaced version numbers with placeholders in the path.
- // So we can't directly use the relative path to find the corresponding file. Instead,
- // we need to replace the version placeholders with wildcards and find the path through path matching.
- string file = Path.Combine(msftSdkPath, relativePath);
- Matcher matcher = BaselineHelper.GetFileMatcherFromPath(relativePath);
+ // Now we want to find the corresponding file that exists in the MSFT SDK.
+ // We've already replaced version numbers with placeholders in the path.
+ // So we can't directly use the relative path to find the corresponding file. Instead,
+ // we need to replace the version placeholders with wildcards and find the path through path matching.
+ string file = Path.Combine(msftSdkPath, relativePath);
+ Matcher matcher = BaselineHelper.GetFileMatcherFromPath(relativePath);
- file = FindMatchingFilePath(msftSdkPath, matcher, relativePath);
+ file = FindMatchingFilePath(msftSdkPath, matcher, relativePath);
- if (!File.Exists(file))
- {
- return;
- }
+ if (!File.Exists(file))
+ {
+ continue;
+ }
- AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- Assert.True(msftSdkAssemblyVersions.TryAdd(BaselineHelper.RemoveVersions(relativePath), GetVersion(assemblyName)));
- });
- tasks.Add(t);
+ AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ msftSdkAssemblyVersions.Add(BaselineHelper.RemoveVersions(relativePath), GetVersion(assemblyName));
}
- Task.WaitAll(tasks.ToArray());
- return msftSdkAssemblyVersions.ToDictionary();
+ return msftSdkAssemblyVersions;
}
// It's known that assembly versions can be different between builds in their revision field. Disregard that difference
@@ -179,65 +171,24 @@ private string FindMatchingFilePath(string rootDir, Matcher matcher, string repr
{
IEnumerable exclusionFilters = GetSdkDiffExclusionFilters(SourceBuildSdkType)
.Select(filter => filter.TrimStart("./".ToCharArray()));
- ConcurrentDictionary sbSdkAssemblyVersions = new();
- List tasks = new List();
- foreach (string dir in Directory.EnumerateDirectories(sbSdkPath, "*", SearchOption.AllDirectories).Append(sbSdkPath))
+ Dictionary sbSdkAssemblyVersions = new();
+ foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
{
- var t = Task.Run(() =>
+ string fileExt = Path.GetExtension(file);
+ if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
+ fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
{
- foreach (string file in Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly))
+ AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
+ string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
+
+ if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
{
- string fileExt = Path.GetExtension(file);
- if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
- fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
- {
- string relativePath = Path.GetRelativePath(sbSdkPath, file);
- string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
- if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
- {
- try
- {
- AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- Assert.True(sbSdkAssemblyVersions.TryAdd(normalizedPath, GetVersion(assemblyName)));
- }
- catch (BadImageFormatException)
- {
- Console.WriteLine($"BadImageFormatException: {file}");
- }
- }
- }
+ sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
}
- });
- tasks.Add(t);
+ }
}
- //foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
- //{
- // string fileExt = Path.GetExtension(file);
- // if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
- // fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
- // {
- // string relativePath = Path.GetRelativePath(sbSdkPath, file);
- // string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
- // if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
- // {
- // var t = Task.Run(() =>
- // {
- // try
- // {
- // AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- // sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
- // }
- // catch (BadImageFormatException)
- // {
- // Console.WriteLine($"BadImageFormatException: {file}");
- // }
- // });
- // tasks.Add(t);
- // }
- // }
- //}
- Task.WaitAll(tasks.ToArray());
- return sbSdkAssemblyVersions.ToDictionary();
+ return sbSdkAssemblyVersions;
}
private void WriteTarballFileList(string? tarballPath, string outputFileName, bool isPortable, string sdkType)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
index 55377b29a387..228a65a61e94 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Utilities.cs
@@ -23,7 +23,7 @@ public static class Utilities
/// Returns whether the given file path is excluded by the given exclusions using glob file matching.
///
public static bool IsFileExcluded(string filePath, IEnumerable exclusions) =>
- GetMatchingFileExclusions(filePath.Replace('\\', '/'), exclusions, exclusion => exclusion).Any();
+ GetMatchingFileExclusions(filePath, exclusions, exclusion => exclusion).Any();
public static IEnumerable GetMatchingFileExclusions(string filePath, IEnumerable exclusions, Func getExclusionExpression) =>
exclusions.Where(exclusion => FileSystemName.MatchesSimpleExpression(getExclusionExpression(exclusion), filePath));
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
index 45bf347ff158..338c94dcdae7 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
@@ -89,7 +89,3 @@ sb,./sdk/x.y.z/*/Microsoft.TestPlatform.TestHostRuntimeProvider.resources.dll
sb,./sdk/x.y.z/*/Microsoft.VisualStudio.TestPlatform.Extensions.Html.TestLogger.resources.dll
sb,./sdk/x.y.z/*/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
msft,./sdk/x.y.z/Extensions/*/*
-
-# https://github.com/dotnet/source-build/issues/3510
-msft,./sdk/x.y.z/Containers/containerize/**
-msft,./sdk/x.y.z/Containers/tasks/net472/**
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
index 342b984b9a12..c31d1666326e 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
@@ -14,7 +14,6 @@ host/fxr/x.y.z/libhostfxr.so: 4681016
Humanizer.Core.x.y.z.nupkg: 945071
LICENSE.txt: 1116
metadata/workloads/x.y.z/userlocal: 0
-Microsoft.ApplicationInsights.x.y.z-1.nupkg: 148627
Microsoft.ApplicationInsights.x.y.z.nupkg: 148568
Microsoft.Arcade.Common.x.y.z.nupkg: 57342
Microsoft.AspNetCore.Analyzers.x.y.z.nupkg: 17835
@@ -38,7 +37,7 @@ Microsoft.AspNetCore.Http.Connections.Common.x.y.z.nupkg: 21665
Microsoft.AspNetCore.Metadata.x.y.z.nupkg: 19582
Microsoft.AspNetCore.Mvc.Analyzers.x.y.z.nupkg: 20157
Microsoft.AspNetCore.Mvc.Api.Analyzers.x.y.z.nupkg: 28710
-Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal.x.y.z.nupkg: 446006
+Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal.x.y.z.nupkg: 94089
Microsoft.AspNetCore.SignalR.Common.x.y.z.nupkg: 31619
Microsoft.AspNetCore.SignalR.Protocols.Json.x.y.z.nupkg: 25486
Microsoft.AspNetCore.WebUtilities.x.y.z.nupkg: 60948
@@ -90,7 +89,7 @@ Microsoft.DiaSymReader.x.y.z-1.nupkg: 57796
Microsoft.DiaSymReader.x.y.z-2.nupkg: 57817
Microsoft.DiaSymReader.x.y.z.nupkg: 57811
Microsoft.DotNet.ApiCompat.Task.x.y.z.nupkg: 1280207
-Microsoft.DotNet.Arcade.Sdk.x.y.z.nupkg: 876107
+Microsoft.DotNet.Arcade.Sdk.x.y.z.nupkg: 605055
Microsoft.DotNet.Build.Tasks.Archives.x.y.z.nupkg: 11400
Microsoft.DotNet.Build.Tasks.Installers.x.y.z.nupkg: 104948
Microsoft.DotNet.Build.Tasks.Packaging.x.y.z.nupkg: 162274
@@ -112,7 +111,6 @@ Microsoft.DotNet.InternalAbstractions.x.y.z.nupkg: 10642
Microsoft.DotNet.MSBuildSdkResolver.x.y.z.nupkg: 114783
Microsoft.DotNet.NuGetRepack.Tasks.x.y.z.nupkg: 85406
Microsoft.DotNet.PackageTesting.x.y.z.nupkg: 37598
-Microsoft.DotNet.ScenarioTests.SdkTemplateTests.x.y.z.nupkg: 721284
Microsoft.DotNet.SharedFramework.Sdk.x.y.z.nupkg: 89834
Microsoft.DotNet.SignTool.x.y.z.nupkg: 212432
Microsoft.DotNet.SourceBuild.Tasks.x.y.z.nupkg: 46762
@@ -208,7 +206,6 @@ Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.x.y.z.nupkg: 14414
Microsoft.NET.Sdk.x.y.z.nupkg: 994666
Microsoft.NET.StringTools.x.y.z.nupkg: 74038
Microsoft.NET.WebAssembly.Threading.x.y.z.nupkg: 44064
-Microsoft.NET.WebAssembly.Webcil.x.y.z.nupkg: 31426
Microsoft.NET.Workload.Emscripten.Current.Manifest-x.y.z-1.nupkg: 6044
Microsoft.NET.Workload.Emscripten.Current.Manifest-x.y.z.nupkg: 6036
Microsoft.NET.Workload.Emscripten.net6.Manifest-x.y.z.nupkg: 5613
@@ -1512,6 +1509,8 @@ sdk/x.y.z/Containers/tasks/netx.y/ja/System.CommandLine.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ko/Microsoft.DotNet.Cli.Utils.resources.dll: 7680
sdk/x.y.z/Containers/tasks/netx.y/ko/Microsoft.NET.Build.Containers.resources.dll: 17408
sdk/x.y.z/Containers/tasks/netx.y/ko/System.CommandLine.resources.dll: 8704
+sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Build.dll: 5072384
+sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Build.Framework.dll: 731648
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.DotNet.Cli.Utils.dll: 244224
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.DependencyInjection.Abstractions.dll: 120320
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.DependencyInjection.dll: 196608
@@ -1522,6 +1521,7 @@ sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.Options.dll: 117760
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.Primitives.dll: 64000
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.deps.json: 37253
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.dll: 535040
+sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.StringTools.dll: 41984
sdk/x.y.z/Containers/tasks/netx.y/MSBuild.dll: 800768
sdk/x.y.z/Containers/tasks/netx.y/Newtonsoft.Json.dll: 1843200
sdk/x.y.z/Containers/tasks/netx.y/NuGet.Common.dll: 365568
@@ -1543,8 +1543,13 @@ sdk/x.y.z/Containers/tasks/netx.y/pt-BR/System.CommandLine.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ru/Microsoft.DotNet.Cli.Utils.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ru/Microsoft.NET.Build.Containers.resources.dll: 20480
sdk/x.y.z/Containers/tasks/netx.y/ru/System.CommandLine.resources.dll: 9216
+sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll: 367104
+sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll: 791552
sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll: 741376
sdk/x.y.z/Containers/tasks/netx.y/System.CommandLine.dll: 337408
+sdk/x.y.z/Containers/tasks/netx.y/System.Configuration.ConfigurationManager.dll: 1060352
+sdk/x.y.z/Containers/tasks/netx.y/System.Diagnostics.EventLog.dll: 44032
+sdk/x.y.z/Containers/tasks/netx.y/System.Reflection.MetadataLoadContext.dll: 567296
sdk/x.y.z/Containers/tasks/netx.y/System.Security.Cryptography.Pkcs.dll: 621056
sdk/x.y.z/Containers/tasks/netx.y/System.Security.Cryptography.ProtectedData.dll: 34304
sdk/x.y.z/Containers/tasks/netx.y/tr/Microsoft.DotNet.Cli.Utils.resources.dll: 7680
@@ -2918,7 +2923,8 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.Bla
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props: 2308
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets: 3411
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.5_0.targets: 9260
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.dll: 97792
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets: 12247
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.dll: 56320
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.deps.json: 3595
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.dll: 14336
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.runtimeconfig.json: 384
@@ -2966,8 +2972,11 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/Sdk/Sdk.props: 1572
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/Sdk/Sdk.targets: 1113
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.dll: 72192
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.xml: 45965
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.deps.json: 14858
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.dll: 1335296
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.CSharp.dll: 90112
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.Language.dll: 1089536
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.dll: 76288
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.SourceGenerators.deps.json: 17055
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.SourceGenerators.dll: 57856
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.Extensions.ObjectPool.dll: 14848
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/RazorSourceGenerator.razorencconfig: 70
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/System.Collections.Immutable.dll: 242688
@@ -2991,7 +3000,11 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/targets/Sdk.Razor.CurrentVersion.targets:
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tasks/netx.y/Microsoft.Extensions.FileSystemGlobbing.dll: 80896
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tasks/netx.y/Microsoft.NET.Sdk.Razor.Tasks.dll: 124928
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.AspNetCore.Razor.Utilities.Shared.dll: 150016
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.dll: 3578368
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.CSharp.dll: 209920
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Language.dll: 2974208
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.dll: 171520
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.Version1_X.dll: 151040
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.Version2_X.dll: 180736
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.Css.Parser.dll: 329728
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.Extensions.ObjectPool.dll: 25600
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Newtonsoft.Json.dll: 1843200
@@ -3002,7 +3015,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.props: 1346
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.StaticWebAssets.StaticAssets.ProjectSystem.props: 4890
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.targets: 1024
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.5_0.targets: 33577
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.Compression.targets: 10368
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.Compression.targets: 7466
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.CrossTargeting.targets: 4439
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.EmbeddedAssets.targets: 18113
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.JSModules.targets: 11399
@@ -3013,7 +3026,6 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.Stati
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets: 10427
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets: 25080
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets: 21337
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets: 12518
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets: 822
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets: 34808
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props: 1582
@@ -3564,7 +3576,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_5_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_all_warnaserror.globalconfig: 4916
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_all.globalconfig: 4031
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default_warnaserror.globalconfig: 1860
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default.globalconfig: 1031
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default.globalconfig: 809
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_minimum_warnaserror.globalconfig: 3521
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_minimum.globalconfig: 2606
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_none_warnaserror.globalconfig: 3852
@@ -3574,7 +3586,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_all_warnaserror.globalconfig: 4918
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_all.globalconfig: 3858
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default_warnaserror.globalconfig: 1862
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default.globalconfig: 858
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default.globalconfig: 636
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_minimum_warnaserror.globalconfig: 3523
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_minimum.globalconfig: 2433
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_none_warnaserror.globalconfig: 3852
@@ -3584,7 +3596,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_all_warnaserror.globalconfig: 4919
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_all.globalconfig: 3737
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default_warnaserror.globalconfig: 1863
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default.globalconfig: 737
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default.globalconfig: 515
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_minimum_warnaserror.globalconfig: 3524
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_minimum.globalconfig: 2312
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_none_warnaserror.globalconfig: 3852
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
index 955c36509ee5..a50c205b8947 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
@@ -44,6 +44,195 @@ index ------------
./packs/Microsoft.NETCore.App.Ref/
./packs/Microsoft.NETCore.App.Ref/x.y.z/
./packs/Microsoft.NETCore.App.Ref/x.y.z/analyzers/
+@@ ------------ @@
+ ./sdk/x.y.z/Containers/build/
+ ./sdk/x.y.z/Containers/build/Microsoft.NET.Build.Containers.props
+ ./sdk/x.y.z/Containers/build/Microsoft.NET.Build.Containers.targets
+-./sdk/x.y.z/Containers/containerize/
+-./sdk/x.y.z/Containers/containerize/containerize.deps.json
+-./sdk/x.y.z/Containers/containerize/containerize.dll
+-./sdk/x.y.z/Containers/containerize/containerize.exe
+-./sdk/x.y.z/Containers/containerize/containerize.runtimeconfig.json
+-./sdk/x.y.z/Containers/containerize/cs/
+-./sdk/x.y.z/Containers/containerize/cs/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/cs/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/cs/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/de/
+-./sdk/x.y.z/Containers/containerize/de/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/de/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/de/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/es/
+-./sdk/x.y.z/Containers/containerize/es/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/es/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/es/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/fr/
+-./sdk/x.y.z/Containers/containerize/fr/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/fr/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/fr/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/it/
+-./sdk/x.y.z/Containers/containerize/it/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/it/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/it/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/ja/
+-./sdk/x.y.z/Containers/containerize/ja/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/ja/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/ja/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/ko/
+-./sdk/x.y.z/Containers/containerize/ko/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/ko/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/ko/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.DotNet.Cli.Utils.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Abstractions.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Binder.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyInjection.Abstractions.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyInjection.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyModel.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Abstractions.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Configuration.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Console.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Options.ConfigurationExtensions.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Options.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Primitives.dll
+-./sdk/x.y.z/Containers/containerize/Microsoft.NET.Build.Containers.dll
+-./sdk/x.y.z/Containers/containerize/MSBuild.dll
+-./sdk/x.y.z/Containers/containerize/Newtonsoft.Json.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Common.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Configuration.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.DependencyResolver.Core.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Frameworks.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.LibraryModel.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Packaging.Core.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Packaging.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.ProjectModel.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Protocol.dll
+-./sdk/x.y.z/Containers/containerize/NuGet.Versioning.dll
+-./sdk/x.y.z/Containers/containerize/pl/
+-./sdk/x.y.z/Containers/containerize/pl/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/pl/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/pl/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/pt-BR/
+-./sdk/x.y.z/Containers/containerize/pt-BR/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/pt-BR/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/pt-BR/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/ru/
+-./sdk/x.y.z/Containers/containerize/ru/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/ru/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/ru/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/runtimes/
+-./sdk/x.y.z/Containers/containerize/runtimes/win/
+-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/
+-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/
+-./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
+-./sdk/x.y.z/Containers/containerize/System.CommandLine.dll
+-./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.Pkcs.dll
+-./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.ProtectedData.dll
+-./sdk/x.y.z/Containers/containerize/tr/
+-./sdk/x.y.z/Containers/containerize/tr/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/tr/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/tr/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/Valleysoft.DockerCredsProvider.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hans/
+-./sdk/x.y.z/Containers/containerize/zh-Hans/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hans/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hans/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hant/
+-./sdk/x.y.z/Containers/containerize/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/containerize/zh-Hant/System.CommandLine.resources.dll
+ ./sdk/x.y.z/Containers/tasks/
+-./sdk/x.y.z/Containers/tasks/net472/
+-./sdk/x.y.z/Containers/tasks/net472/cs/
+-./sdk/x.y.z/Containers/tasks/net472/cs/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/cs/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/cs/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/de/
+-./sdk/x.y.z/Containers/tasks/net472/de/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/de/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/de/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/es/
+-./sdk/x.y.z/Containers/tasks/net472/es/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/es/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/es/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/fr/
+-./sdk/x.y.z/Containers/tasks/net472/fr/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/fr/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/fr/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/it/
+-./sdk/x.y.z/Containers/tasks/net472/it/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/it/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/it/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ja/
+-./sdk/x.y.z/Containers/tasks/net472/ja/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ja/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ja/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ko/
+-./sdk/x.y.z/Containers/tasks/net472/ko/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ko/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ko/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Bcl.AsyncInterfaces.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll.config
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyInjection.Abstractions.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyInjection.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyModel.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Logging.Abstractions.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Logging.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Options.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Primitives.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.deps.json
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll
+-./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll.config
+-./sdk/x.y.z/Containers/tasks/net472/Newtonsoft.Json.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Common.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Configuration.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.DependencyResolver.Core.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Frameworks.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.LibraryModel.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Packaging.Core.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Packaging.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.ProjectModel.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Protocol.dll
+-./sdk/x.y.z/Containers/tasks/net472/NuGet.Versioning.dll
+-./sdk/x.y.z/Containers/tasks/net472/pl/
+-./sdk/x.y.z/Containers/tasks/net472/pl/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/pl/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/pl/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/pt-BR/
+-./sdk/x.y.z/Containers/tasks/net472/pt-BR/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/pt-BR/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/pt-BR/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ru/
+-./sdk/x.y.z/Containers/tasks/net472/ru/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ru/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/ru/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Buffers.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.CommandLine.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Diagnostics.DiagnosticSource.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Memory.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Numerics.Vectors.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Runtime.CompilerServices.Unsafe.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Text.Encodings.Web.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Text.Json.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.Threading.Tasks.Extensions.dll
+-./sdk/x.y.z/Containers/tasks/net472/System.ValueTuple.dll
+-./sdk/x.y.z/Containers/tasks/net472/tr/
+-./sdk/x.y.z/Containers/tasks/net472/tr/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/tr/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/tr/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/Valleysoft.DockerCredsProvider.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hans/
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hans/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hans/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hans/System.CommandLine.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hant/
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
+-./sdk/x.y.z/Containers/tasks/net472/zh-Hant/System.CommandLine.resources.dll
+ ./sdk/x.y.z/Containers/tasks/netx.y/
+ ./sdk/x.y.z/Containers/tasks/netx.y/cs/
+ ./sdk/x.y.z/Containers/tasks/netx.y/cs/Microsoft.DotNet.Cli.Utils.resources.dll
@@ ------------ @@
./sdk/x.y.z/Microsoft.Build.NuGetSdkResolver.dll
./sdk/x.y.z/Microsoft.Build.Tasks.Core.dll
From 949a3049bca4f1f1fc98d64dda0854402b1cc03f Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 10:46:12 -0700
Subject: [PATCH 07/41] Don't run old sdk validation, restore test project in
init-build.proj
---
.../content/eng/sdkArchiveDiff.targets | 64 -------------------
.../content/eng/tools/init-build.proj | 8 +--
.../eng/unifiedBuildValidation.targets | 8 +--
.../content/repo-projects/installer.proj | 1 -
4 files changed, 7 insertions(+), 74 deletions(-)
delete mode 100644 src/SourceBuild/content/eng/sdkArchiveDiff.targets
diff --git a/src/SourceBuild/content/eng/sdkArchiveDiff.targets b/src/SourceBuild/content/eng/sdkArchiveDiff.targets
deleted file mode 100644
index c3bc8078763a..000000000000
--- a/src/SourceBuild/content/eng/sdkArchiveDiff.targets
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_changedFiles Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' != 'Unchanged'" />
- <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Added'" >
- +
-
- <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Removed'" >
- -
-
- <_sdkFilesDiff Include="@(_ContentDifferences)" Condition="'%(_contentDifferences.Kind)' == 'Unchanged'" >
-
-
-
-
-
- $(ArtifactsLogDir)SdkArchiveContent.diff
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index f573747acaa8..12d0f83b8293 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,7 +15,7 @@
UnpackTarballs;
BuildXPlatTasks;
BuildMSBuildSdkResolver;
- BuildSdkArchiveDiff;
+ BuildUnifiedBuildValidationTests;
BuildLeakDetection;
ExtractToolPackage;
GenerateRootFs;
@@ -117,12 +117,12 @@
-
-
-
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index c144295b3012..92a3426269ba 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -2,14 +2,12 @@
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
+ $([MSBuild]::NormalizeDirectory('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests'))
-
-
-
-
+ AfterTargets="Build"
+ DependsOnTargets="DetermineSourceBuiltSdkVersion">
%(SdkTarballItem.Identity)
diff --git a/src/SourceBuild/content/repo-projects/installer.proj b/src/SourceBuild/content/repo-projects/installer.proj
index 4b683e559303..25bf82b69ca6 100644
--- a/src/SourceBuild/content/repo-projects/installer.proj
+++ b/src/SourceBuild/content/repo-projects/installer.proj
@@ -148,7 +148,6 @@
UseHardlinksIfPossible="true" />
-
From db4d2d2a54961f94ee8753387cbb9de531ecea63 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 11:13:41 -0700
Subject: [PATCH 08/41] Revert changes from existing smoke tests
---
.../assets/SdkFileDiffExclusions.txt | 4 +
.../baselines/ArtifactsSizes/centos.8-x64.txt | 40 ++--
.../assets/baselines/MsftToSbSdkFiles.diff | 189 ------------------
3 files changed, 18 insertions(+), 215 deletions(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
index 338c94dcdae7..45bf347ff158 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkFileDiffExclusions.txt
@@ -89,3 +89,7 @@ sb,./sdk/x.y.z/*/Microsoft.TestPlatform.TestHostRuntimeProvider.resources.dll
sb,./sdk/x.y.z/*/Microsoft.VisualStudio.TestPlatform.Extensions.Html.TestLogger.resources.dll
sb,./sdk/x.y.z/*/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
msft,./sdk/x.y.z/Extensions/*/*
+
+# https://github.com/dotnet/source-build/issues/3510
+msft,./sdk/x.y.z/Containers/containerize/**
+msft,./sdk/x.y.z/Containers/tasks/net472/**
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
index c31d1666326e..342b984b9a12 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/ArtifactsSizes/centos.8-x64.txt
@@ -14,6 +14,7 @@ host/fxr/x.y.z/libhostfxr.so: 4681016
Humanizer.Core.x.y.z.nupkg: 945071
LICENSE.txt: 1116
metadata/workloads/x.y.z/userlocal: 0
+Microsoft.ApplicationInsights.x.y.z-1.nupkg: 148627
Microsoft.ApplicationInsights.x.y.z.nupkg: 148568
Microsoft.Arcade.Common.x.y.z.nupkg: 57342
Microsoft.AspNetCore.Analyzers.x.y.z.nupkg: 17835
@@ -37,7 +38,7 @@ Microsoft.AspNetCore.Http.Connections.Common.x.y.z.nupkg: 21665
Microsoft.AspNetCore.Metadata.x.y.z.nupkg: 19582
Microsoft.AspNetCore.Mvc.Analyzers.x.y.z.nupkg: 20157
Microsoft.AspNetCore.Mvc.Api.Analyzers.x.y.z.nupkg: 28710
-Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal.x.y.z.nupkg: 94089
+Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal.x.y.z.nupkg: 446006
Microsoft.AspNetCore.SignalR.Common.x.y.z.nupkg: 31619
Microsoft.AspNetCore.SignalR.Protocols.Json.x.y.z.nupkg: 25486
Microsoft.AspNetCore.WebUtilities.x.y.z.nupkg: 60948
@@ -89,7 +90,7 @@ Microsoft.DiaSymReader.x.y.z-1.nupkg: 57796
Microsoft.DiaSymReader.x.y.z-2.nupkg: 57817
Microsoft.DiaSymReader.x.y.z.nupkg: 57811
Microsoft.DotNet.ApiCompat.Task.x.y.z.nupkg: 1280207
-Microsoft.DotNet.Arcade.Sdk.x.y.z.nupkg: 605055
+Microsoft.DotNet.Arcade.Sdk.x.y.z.nupkg: 876107
Microsoft.DotNet.Build.Tasks.Archives.x.y.z.nupkg: 11400
Microsoft.DotNet.Build.Tasks.Installers.x.y.z.nupkg: 104948
Microsoft.DotNet.Build.Tasks.Packaging.x.y.z.nupkg: 162274
@@ -111,6 +112,7 @@ Microsoft.DotNet.InternalAbstractions.x.y.z.nupkg: 10642
Microsoft.DotNet.MSBuildSdkResolver.x.y.z.nupkg: 114783
Microsoft.DotNet.NuGetRepack.Tasks.x.y.z.nupkg: 85406
Microsoft.DotNet.PackageTesting.x.y.z.nupkg: 37598
+Microsoft.DotNet.ScenarioTests.SdkTemplateTests.x.y.z.nupkg: 721284
Microsoft.DotNet.SharedFramework.Sdk.x.y.z.nupkg: 89834
Microsoft.DotNet.SignTool.x.y.z.nupkg: 212432
Microsoft.DotNet.SourceBuild.Tasks.x.y.z.nupkg: 46762
@@ -206,6 +208,7 @@ Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.x.y.z.nupkg: 14414
Microsoft.NET.Sdk.x.y.z.nupkg: 994666
Microsoft.NET.StringTools.x.y.z.nupkg: 74038
Microsoft.NET.WebAssembly.Threading.x.y.z.nupkg: 44064
+Microsoft.NET.WebAssembly.Webcil.x.y.z.nupkg: 31426
Microsoft.NET.Workload.Emscripten.Current.Manifest-x.y.z-1.nupkg: 6044
Microsoft.NET.Workload.Emscripten.Current.Manifest-x.y.z.nupkg: 6036
Microsoft.NET.Workload.Emscripten.net6.Manifest-x.y.z.nupkg: 5613
@@ -1509,8 +1512,6 @@ sdk/x.y.z/Containers/tasks/netx.y/ja/System.CommandLine.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ko/Microsoft.DotNet.Cli.Utils.resources.dll: 7680
sdk/x.y.z/Containers/tasks/netx.y/ko/Microsoft.NET.Build.Containers.resources.dll: 17408
sdk/x.y.z/Containers/tasks/netx.y/ko/System.CommandLine.resources.dll: 8704
-sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Build.dll: 5072384
-sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Build.Framework.dll: 731648
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.DotNet.Cli.Utils.dll: 244224
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.DependencyInjection.Abstractions.dll: 120320
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.DependencyInjection.dll: 196608
@@ -1521,7 +1522,6 @@ sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.Options.dll: 117760
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.Extensions.Primitives.dll: 64000
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.deps.json: 37253
sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.Build.Containers.dll: 535040
-sdk/x.y.z/Containers/tasks/netx.y/Microsoft.NET.StringTools.dll: 41984
sdk/x.y.z/Containers/tasks/netx.y/MSBuild.dll: 800768
sdk/x.y.z/Containers/tasks/netx.y/Newtonsoft.Json.dll: 1843200
sdk/x.y.z/Containers/tasks/netx.y/NuGet.Common.dll: 365568
@@ -1543,13 +1543,8 @@ sdk/x.y.z/Containers/tasks/netx.y/pt-BR/System.CommandLine.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ru/Microsoft.DotNet.Cli.Utils.resources.dll: 8704
sdk/x.y.z/Containers/tasks/netx.y/ru/Microsoft.NET.Build.Containers.resources.dll: 20480
sdk/x.y.z/Containers/tasks/netx.y/ru/System.CommandLine.resources.dll: 9216
-sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll: 367104
-sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll: 791552
sdk/x.y.z/Containers/tasks/netx.y/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll: 741376
sdk/x.y.z/Containers/tasks/netx.y/System.CommandLine.dll: 337408
-sdk/x.y.z/Containers/tasks/netx.y/System.Configuration.ConfigurationManager.dll: 1060352
-sdk/x.y.z/Containers/tasks/netx.y/System.Diagnostics.EventLog.dll: 44032
-sdk/x.y.z/Containers/tasks/netx.y/System.Reflection.MetadataLoadContext.dll: 567296
sdk/x.y.z/Containers/tasks/netx.y/System.Security.Cryptography.Pkcs.dll: 621056
sdk/x.y.z/Containers/tasks/netx.y/System.Security.Cryptography.ProtectedData.dll: 34304
sdk/x.y.z/Containers/tasks/netx.y/tr/Microsoft.DotNet.Cli.Utils.resources.dll: 7680
@@ -2923,8 +2918,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.Bla
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props: 2308
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets: 3411
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.5_0.targets: 9260
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets: 12247
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.dll: 56320
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.dll: 97792
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.deps.json: 3595
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.dll: 14336
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.BlazorWebAssembly/tools/netx.y/Microsoft.NET.Sdk.BlazorWebAssembly.Tool.runtimeconfig.json: 384
@@ -2972,11 +2966,8 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/Sdk/Sdk.props: 1572
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/Sdk/Sdk.targets: 1113
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.dll: 72192
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.xml: 45965
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.CSharp.dll: 90112
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.Language.dll: 1089536
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.dll: 76288
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.SourceGenerators.deps.json: 17055
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.SourceGenerators.dll: 57856
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.deps.json: 14858
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.Compiler.dll: 1335296
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.Extensions.ObjectPool.dll: 14848
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/RazorSourceGenerator.razorencconfig: 70
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/source-generators/System.Collections.Immutable.dll: 242688
@@ -3000,11 +2991,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/targets/Sdk.Razor.CurrentVersion.targets:
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tasks/netx.y/Microsoft.Extensions.FileSystemGlobbing.dll: 80896
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tasks/netx.y/Microsoft.NET.Sdk.Razor.Tasks.dll: 124928
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.AspNetCore.Razor.Utilities.Shared.dll: 150016
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.CSharp.dll: 209920
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Language.dll: 2974208
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.dll: 171520
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.Version1_X.dll: 151040
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.Mvc.Version2_X.dll: 180736
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.CodeAnalysis.Razor.Compiler.dll: 3578368
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.Css.Parser.dll: 329728
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Microsoft.Extensions.ObjectPool.dll: 25600
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Razor/tools/Newtonsoft.Json.dll: 1843200
@@ -3015,7 +3002,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.props: 1346
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.StaticWebAssets.StaticAssets.ProjectSystem.props: 4890
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/Sdk/Sdk.targets: 1024
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.5_0.targets: 33577
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.Compression.targets: 7466
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.Compression.targets: 10368
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.CrossTargeting.targets: 4439
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.EmbeddedAssets.targets: 18113
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.JSModules.targets: 11399
@@ -3026,6 +3013,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.Stati
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets: 10427
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets: 25080
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets: 21337
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets: 12518
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets: 822
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets: 34808
sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props: 1582
@@ -3576,7 +3564,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_5_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_all_warnaserror.globalconfig: 4916
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_all.globalconfig: 4031
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default_warnaserror.globalconfig: 1860
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default.globalconfig: 809
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_default.globalconfig: 1031
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_minimum_warnaserror.globalconfig: 3521
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_minimum.globalconfig: 2606
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_none_warnaserror.globalconfig: 3852
@@ -3586,7 +3574,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_6_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_all_warnaserror.globalconfig: 4918
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_all.globalconfig: 3858
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default_warnaserror.globalconfig: 1862
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default.globalconfig: 636
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_default.globalconfig: 858
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_minimum_warnaserror.globalconfig: 3523
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_minimum.globalconfig: 2433
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_none_warnaserror.globalconfig: 3852
@@ -3596,7 +3584,7 @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_7_rec
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_all_warnaserror.globalconfig: 4919
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_all.globalconfig: 3737
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default_warnaserror.globalconfig: 1863
-sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default.globalconfig: 515
+sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_default.globalconfig: 737
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_minimum_warnaserror.globalconfig: 3524
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_minimum.globalconfig: 2312
sdk/x.y.z/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevelusage_8_none_warnaserror.globalconfig: 3852
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
index a50c205b8947..955c36509ee5 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/baselines/MsftToSbSdkFiles.diff
@@ -44,195 +44,6 @@ index ------------
./packs/Microsoft.NETCore.App.Ref/
./packs/Microsoft.NETCore.App.Ref/x.y.z/
./packs/Microsoft.NETCore.App.Ref/x.y.z/analyzers/
-@@ ------------ @@
- ./sdk/x.y.z/Containers/build/
- ./sdk/x.y.z/Containers/build/Microsoft.NET.Build.Containers.props
- ./sdk/x.y.z/Containers/build/Microsoft.NET.Build.Containers.targets
--./sdk/x.y.z/Containers/containerize/
--./sdk/x.y.z/Containers/containerize/containerize.deps.json
--./sdk/x.y.z/Containers/containerize/containerize.dll
--./sdk/x.y.z/Containers/containerize/containerize.exe
--./sdk/x.y.z/Containers/containerize/containerize.runtimeconfig.json
--./sdk/x.y.z/Containers/containerize/cs/
--./sdk/x.y.z/Containers/containerize/cs/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/cs/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/cs/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/de/
--./sdk/x.y.z/Containers/containerize/de/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/de/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/de/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/es/
--./sdk/x.y.z/Containers/containerize/es/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/es/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/es/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/fr/
--./sdk/x.y.z/Containers/containerize/fr/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/fr/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/fr/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/it/
--./sdk/x.y.z/Containers/containerize/it/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/it/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/it/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/ja/
--./sdk/x.y.z/Containers/containerize/ja/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/ja/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/ja/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/ko/
--./sdk/x.y.z/Containers/containerize/ko/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/ko/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/ko/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.DotNet.Cli.Utils.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Abstractions.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.Binder.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Configuration.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyInjection.Abstractions.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyInjection.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.DependencyModel.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Abstractions.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Configuration.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.Console.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Logging.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Options.ConfigurationExtensions.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Options.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.Extensions.Primitives.dll
--./sdk/x.y.z/Containers/containerize/Microsoft.NET.Build.Containers.dll
--./sdk/x.y.z/Containers/containerize/MSBuild.dll
--./sdk/x.y.z/Containers/containerize/Newtonsoft.Json.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Common.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Configuration.dll
--./sdk/x.y.z/Containers/containerize/NuGet.DependencyResolver.Core.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Frameworks.dll
--./sdk/x.y.z/Containers/containerize/NuGet.LibraryModel.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Packaging.Core.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Packaging.dll
--./sdk/x.y.z/Containers/containerize/NuGet.ProjectModel.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Protocol.dll
--./sdk/x.y.z/Containers/containerize/NuGet.Versioning.dll
--./sdk/x.y.z/Containers/containerize/pl/
--./sdk/x.y.z/Containers/containerize/pl/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/pl/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/pl/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/pt-BR/
--./sdk/x.y.z/Containers/containerize/pt-BR/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/pt-BR/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/pt-BR/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/ru/
--./sdk/x.y.z/Containers/containerize/ru/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/ru/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/ru/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/runtimes/
--./sdk/x.y.z/Containers/containerize/runtimes/win/
--./sdk/x.y.z/Containers/containerize/runtimes/win/lib/
--./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/
--./sdk/x.y.z/Containers/containerize/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
--./sdk/x.y.z/Containers/containerize/System.CommandLine.dll
--./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.Pkcs.dll
--./sdk/x.y.z/Containers/containerize/System.Security.Cryptography.ProtectedData.dll
--./sdk/x.y.z/Containers/containerize/tr/
--./sdk/x.y.z/Containers/containerize/tr/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/tr/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/tr/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/Valleysoft.DockerCredsProvider.dll
--./sdk/x.y.z/Containers/containerize/zh-Hans/
--./sdk/x.y.z/Containers/containerize/zh-Hans/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/zh-Hans/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/zh-Hans/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/containerize/zh-Hant/
--./sdk/x.y.z/Containers/containerize/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/containerize/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/containerize/zh-Hant/System.CommandLine.resources.dll
- ./sdk/x.y.z/Containers/tasks/
--./sdk/x.y.z/Containers/tasks/net472/
--./sdk/x.y.z/Containers/tasks/net472/cs/
--./sdk/x.y.z/Containers/tasks/net472/cs/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/cs/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/cs/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/de/
--./sdk/x.y.z/Containers/tasks/net472/de/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/de/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/de/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/es/
--./sdk/x.y.z/Containers/tasks/net472/es/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/es/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/es/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/fr/
--./sdk/x.y.z/Containers/tasks/net472/fr/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/fr/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/fr/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/it/
--./sdk/x.y.z/Containers/tasks/net472/it/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/it/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/it/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ja/
--./sdk/x.y.z/Containers/tasks/net472/ja/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ja/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ja/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ko/
--./sdk/x.y.z/Containers/tasks/net472/ko/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ko/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ko/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Bcl.AsyncInterfaces.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.DotNet.Cli.Utils.dll.config
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyInjection.Abstractions.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyInjection.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.DependencyModel.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Logging.Abstractions.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Logging.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Options.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.Extensions.Primitives.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.deps.json
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll
--./sdk/x.y.z/Containers/tasks/net472/Microsoft.NET.Build.Containers.dll.config
--./sdk/x.y.z/Containers/tasks/net472/Newtonsoft.Json.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Common.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Configuration.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.DependencyResolver.Core.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Frameworks.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.LibraryModel.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Packaging.Core.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Packaging.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.ProjectModel.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Protocol.dll
--./sdk/x.y.z/Containers/tasks/net472/NuGet.Versioning.dll
--./sdk/x.y.z/Containers/tasks/net472/pl/
--./sdk/x.y.z/Containers/tasks/net472/pl/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/pl/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/pl/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/pt-BR/
--./sdk/x.y.z/Containers/tasks/net472/pt-BR/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/pt-BR/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/pt-BR/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ru/
--./sdk/x.y.z/Containers/tasks/net472/ru/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ru/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/ru/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Buffers.dll
--./sdk/x.y.z/Containers/tasks/net472/System.CommandLine.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Diagnostics.DiagnosticSource.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Memory.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Numerics.Vectors.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Runtime.CompilerServices.Unsafe.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Text.Encodings.Web.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Text.Json.dll
--./sdk/x.y.z/Containers/tasks/net472/System.Threading.Tasks.Extensions.dll
--./sdk/x.y.z/Containers/tasks/net472/System.ValueTuple.dll
--./sdk/x.y.z/Containers/tasks/net472/tr/
--./sdk/x.y.z/Containers/tasks/net472/tr/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/tr/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/tr/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/Valleysoft.DockerCredsProvider.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hans/
--./sdk/x.y.z/Containers/tasks/net472/zh-Hans/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hans/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hans/System.CommandLine.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hant/
--./sdk/x.y.z/Containers/tasks/net472/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
--./sdk/x.y.z/Containers/tasks/net472/zh-Hant/System.CommandLine.resources.dll
- ./sdk/x.y.z/Containers/tasks/netx.y/
- ./sdk/x.y.z/Containers/tasks/netx.y/cs/
- ./sdk/x.y.z/Containers/tasks/netx.y/cs/Microsoft.DotNet.Cli.Utils.resources.dll
@@ ------------ @@
./sdk/x.y.z/Microsoft.Build.NuGetSdkResolver.dll
./sdk/x.y.z/Microsoft.Build.Tasks.Core.dll
From 47053c4b8edfe124aff9e5544ba1696a25e5eec9 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 11:41:41 -0700
Subject: [PATCH 09/41] Keep building sdkArchiveDiff tasks for finding the
single sdk. We'll move it into the test later
---
src/SourceBuild/content/eng/tools/init-build.proj | 10 ++++++++++
.../content/eng/unifiedBuildValidation.targets | 3 +++
2 files changed, 13 insertions(+)
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index 12d0f83b8293..54a657c9eaad 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,6 +15,7 @@
UnpackTarballs;
BuildXPlatTasks;
BuildMSBuildSdkResolver;
+ BuildSdkArchiveDiff;
BuildUnifiedBuildValidationTests;
BuildLeakDetection;
ExtractToolPackage;
@@ -126,6 +127,15 @@
Targets="Build" />
+
+
+
+
+
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 92a3426269ba..9103da84d61a 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -1,5 +1,8 @@
+
+
+
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
$([MSBuild]::NormalizeDirectory('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests'))
From a783e3b6a9e7a383aa16201ed7440d2645a14190 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 19 Mar 2024 14:34:34 -0700
Subject: [PATCH 10/41] Remove assemblies that aren't in both sdk's from
version validation
---
.../SdkContentTests.cs | 25 ++++++++++++++-----
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
index 4ae0d304d346..d4bfa6ceb6d5 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
@@ -89,19 +89,32 @@ private static void RemoveExcludedAssemblyVersionPaths(Dictionary assemblyVersionDiffFilters = GetSdkAssemblyVersionDiffExclusionFilters()
.Select(filter => filter.TrimStart("./".ToCharArray()));
+ // Remove entries that are not in both. If they should be in both, the mismatch will be caught in another test
+ foreach(var kvp in sbSdkAssemblyVersions)
+ {
+ if (msftSdkAssemblyVersions.ContainsKey(kvp.Key))
+ {
+ sbSdkAssemblyVersions.Remove(kvp.Key);
+ }
+ }
+
+ foreach(var kvp in msftSdkAssemblyVersions)
+ {
+ if (sbSdkAssemblyVersions.ContainsKey(kvp.Key))
+ {
+ msftSdkAssemblyVersions.Remove(kvp.Key);
+ }
+ }
- // Remove any excluded files as long as SB SDK's file has the same or greater assembly version compared to the corresponding
+ // Remove any excluded files as long as UB SDK's file has the same or greater assembly version compared to the corresponding
// file in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
// that is valid for shipping.
string[] sbSdkFileArray = sbSdkAssemblyVersions.Keys.ToArray();
for (int i = sbSdkFileArray.Length - 1; i >= 0; i--)
{
string assemblyPath = sbSdkFileArray[i];
- Version? sbVersion = sbSdkAssemblyVersions[assemblyPath];
- Version? msftVersion = msftSdkAssemblyVersions[assemblyPath];
-
- if (sbVersion is not null &&
- msftVersion is not null &&
+ if (sbSdkAssemblyVersions.TryGetValue(assemblyPath, out Version? sbVersion) &&
+ msftSdkAssemblyVersions.TryGetValue(assemblyPath, out Version? msftVersion) &&
sbVersion >= msftVersion &&
Utilities.IsFileExcluded(assemblyPath, assemblyVersionDiffFilters))
{
From 7180f587339da285f85a4290d11680a4656a2472 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 20 Mar 2024 14:43:00 -0700
Subject: [PATCH 11/41] Clean up testing and move sdk download to test project
---
.../content/eng/tools/init-build.proj | 10 -
.../Archive.cs | 136 -------
.../Diff.cs | 126 -------
.../FindArchiveDiffs.cs | 49 ---
.../GetClosestArchive.cs | 94 -----
.../GetClosestOfficialSdk.cs | 44 ---
.../GetValidArchiveItems.cs | 57 ---
...et.SourceBuild.Tasks.SdkArchiveDiff.csproj | 12 -
.../VersionIdentifier.cs | 257 -------------
.../eng/unifiedBuildValidation.targets | 31 +-
.../BaselineHelper.cs | 8 +-
.../Config.cs | 90 +++--
.../DotNetHelper.cs | 341 ------------------
.../DotNetTemplate.cs | 21 --
.../Exclusions.cs | 43 ++-
.../SdkContentTests.cs | 123 ++-----
.../SdkTests.cs | 20 -
.../SkippableFactAttribute.cs | 53 ---
.../TestBase.cs | 8 +-
.../Utilities.cs | 18 +-
.../assets/NativeDlls-win-any.txt | 4 +-
.../assets/NativeDlls-win-x64.txt | 7 +-
.../assets/NativeDlls.txt | 5 +-
.../assets/SdkFileDiffExclusions.txt | 24 --
.../baselines/MsftToSbSdkFiles-linux-x64.diff | 45 +--
25 files changed, 170 insertions(+), 1456 deletions(-)
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj
delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index 54a657c9eaad..12d0f83b8293 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,7 +15,6 @@
UnpackTarballs;
BuildXPlatTasks;
BuildMSBuildSdkResolver;
- BuildSdkArchiveDiff;
BuildUnifiedBuildValidationTests;
BuildLeakDetection;
ExtractToolPackage;
@@ -127,15 +126,6 @@
Targets="Build" />
-
-
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs
deleted file mode 100644
index 1417c88cad2c..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Archive.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Formats.Tar;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-public abstract class Archive : IDisposable
-{
- public static async Task Create(string path, CancellationToken cancellationToken = default)
- {
- if (path.EndsWith(".tar.gz"))
- return await TarArchive.Create(path, cancellationToken);
- else if (path.EndsWith(".zip"))
- return ZipFileArchive.Create(path);
- else
- throw new NotSupportedException("Unsupported archive type");
- }
-
- public abstract string[] GetFileNames();
-
- public abstract bool Contains(string relativePath);
-
- public abstract void Dispose();
-
- public class TarArchive : Archive
- {
- private string _extractedFolder;
-
- private TarArchive(string extractedFolder)
- {
- _extractedFolder = extractedFolder;
- }
-
- public static new async Task Create(string path, CancellationToken cancellationToken = default)
- {
- var tmpFolder = Directory.CreateTempSubdirectory(nameof(FindArchiveDiffs));
- using (var gzStream = File.OpenRead(path))
- using (var gzipStream = new GZipStream(gzStream, CompressionMode.Decompress))
- {
- await TarFile.ExtractToDirectoryAsync(gzipStream, tmpFolder.FullName, true, cancellationToken);
- }
- return new TarArchive(tmpFolder.FullName);
- }
-
- public override bool Contains(string relativePath)
- {
- return File.Exists(Path.Combine(_extractedFolder, relativePath));
- }
-
- public override string[] GetFileNames()
- {
- return Directory.GetFiles(_extractedFolder, "*", SearchOption.AllDirectories).Select(f => f.Substring(_extractedFolder.Length + 1)).ToArray();
- }
-
- public override void Dispose()
- {
- if (Directory.Exists(_extractedFolder))
- Directory.Delete(_extractedFolder, true);
- }
- }
-
- public class ZipFileArchive : Archive
- {
- private ZipArchive _archive;
-
- private ZipFileArchive(ZipArchive archive)
- {
- _archive = archive;
- }
-
- public static ZipFileArchive Create(string path)
- {
- return new ZipFileArchive(new ZipArchive(File.OpenRead(path)));
- }
-
- public override bool Contains(string relativePath)
- {
- return _archive.GetEntry(relativePath) != null;
- }
-
- public override string[] GetFileNames()
- {
- return _archive.Entries.Select(e => e.FullName).ToArray();
- }
-
- public override void Dispose()
- {
- _archive.Dispose();
- }
- }
-
- private static string GetArchiveExtension(string path)
- {
- if (path.EndsWith(".tar.gz"))
- {
- return ".tar.gz";
- }
- else if (path.EndsWith(".zip"))
- {
- return ".zip";
- }
- else
- {
- throw new ArgumentException($"Invalid archive extension '{path}': must end with .tar.gz or .zip");
- }
- }
-
- public static (string Version, string Rid, string extension) GetInfoFromFileName(string filename, string packageName)
- {
- var extension = GetArchiveExtension(filename);
- var Version = VersionIdentifier.GetVersion(filename);
- if (Version is null)
- throw new ArgumentException("Invalid archive file name '{filename}': No valid version found in file name.");
- // Once we've removed the version, package name, and extension, we should be left with the RID
- var Rid = filename
- .Replace(extension, "")
- .Replace(Version, "")
- .Replace(packageName, "")
- .Trim('-', '.', '_');
-
- // A RID with '.' must have a version number after the first '.' in each part of the RID. For example, alpine.3.10-arm64.
- // Otherwise, it's likely an archive of another type of file that we don't handle here, for example, .msi.wixpack.zip.
- var ridParts = Rid.Split('-');
- foreach(var item in ridParts.SelectMany(p => p.Split('.').Skip(1)))
- {
- if (!int.TryParse(item, out _))
- throw new ArgumentException($"Invalid Rid '{Rid}' in archive file name '{filename}'. Expected RID with '.' to be part of a version. This likely means the file is an archive of a different file type.");
- }
- return (Version, Rid, extension);
- }
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs
deleted file mode 100644
index 008fe67f0e16..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Diff.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-static class Diff
-{
- public static ITaskItem TaskItemFromDiff((string, DifferenceKind) diff)
- {
- var item = new TaskItem(diff.Item1);
- item.SetMetadata("Kind", Enum.GetName(diff.Item2));
- return item;
- }
-
- public enum DifferenceKind
- {
- ///
- /// Present in the test but not in the baseline
- ///
- Added,
-
- ///
- /// Present in the baseline but not in the test
- ///
- Removed,
-
- ///
- /// Present in both the baseline and test
- ///
- Unchanged
- }
-
- ///
- /// Uses the Longest Common Subsequence algorithm (as used in 'git diff') to find the differences between two lists of strings.
- /// Returns a list of the joined lists with the differences marked as either added or removed.
- ///
- public static List<(string, DifferenceKind DifferenceKind)> GetDiffs(
- Span baselineSequence,
- Span testSequence,
- Func equalityComparer,
- Func? formatter = null,
- CancellationToken cancellationToken = default)
- {
- // Edit distance algorithm: https://en.wikipedia.org/wiki/Longest_common_subsequence
- // cancellationToken.ThrowIfCancellationRequested();
- formatter ??= static s => s;
-
- // Optimization: remove common prefix
- int i = 0;
- List<(string, DifferenceKind)> prefix = [];
- while (i < baselineSequence.Length && i < testSequence.Length && equalityComparer(baselineSequence[i], testSequence[i]))
- {
- prefix.Add((formatter(baselineSequence[i]), DifferenceKind.Unchanged));
- i++;
- }
-
- baselineSequence = baselineSequence[i..];
- testSequence = testSequence[i..];
-
- // Initialize first row and column
- int[,] m = new int[baselineSequence.Length + 1, testSequence.Length + 1];
- for (i = 0; i <= baselineSequence.Length; i++)
- {
- m[i, 0] = i;
- }
- for (i = 0; i <= testSequence.Length; i++)
- {
- m[0, i] = i;
- }
-
- // Compute edit distance
- for (i = 1; i <= baselineSequence.Length; i++)
- {
- cancellationToken.ThrowIfCancellationRequested();
- for (int j = 1; j <= testSequence.Length; j++)
- {
- if (equalityComparer(baselineSequence[i - 1], testSequence[j - 1]))
- {
- m[i, j] = m[i - 1, j - 1];
- }
- else
- {
- m[i, j] = 1 + Math.Min(m[i - 1, j], m[i, j - 1]);
- }
- }
- }
-
- // Trace back the edits
- int row = baselineSequence.Length;
- int col = testSequence.Length;
- List<(string, DifferenceKind)> diff = [];
- while (row > 0 || col > 0)
- {
- cancellationToken.ThrowIfCancellationRequested();
- if (row > 0 && col > 0 && equalityComparer(baselineSequence[row - 1], testSequence[col - 1]))
- {
- diff.Add((formatter(baselineSequence[row - 1]), DifferenceKind.Unchanged));
- row--;
- col--;
- }
- else if (col > 0 && (row == 0 || m[row, col - 1] <= m[row - 1, col]))
- {
- diff.Add((formatter(testSequence[col - 1]), DifferenceKind.Added));
- col--;
- }
- else if (row > 0 && (col == 0 || m[row, col - 1] > m[row - 1, col]))
- {
- diff.Add((formatter(baselineSequence[row - 1]), DifferenceKind.Removed));
- row--;
- }
- else
- {
- throw new UnreachableException();
- }
- }
- diff.Reverse();
- prefix.AddRange(diff);
- return prefix;
- }
-
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs
deleted file mode 100644
index 9fc19a7385c0..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/FindArchiveDiffs.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.Build.Framework;
-using Task = System.Threading.Tasks.Task;
-
-public class FindArchiveDiffs : Microsoft.Build.Utilities.Task, ICancelableTask
-{
- [Required]
- public required ITaskItem BaselineArchive { get; init; }
-
- [Required]
- public required ITaskItem TestArchive { get; init; }
-
- [Output]
- public ITaskItem[] ContentDifferences { get; set; } = [];
-
- private CancellationTokenSource _cancellationTokenSource = new();
- private CancellationToken cancellationToken => _cancellationTokenSource.Token;
-
- public override bool Execute()
- {
- return Task.Run(ExecuteAsync).Result;
- }
-
- public async Task ExecuteAsync()
- {
- var baselineTask = Archive.Create(BaselineArchive.ItemSpec);
- var testTask = Archive.Create(TestArchive.ItemSpec);
- Task.WaitAll([baselineTask, testTask], cancellationToken);
- using var baseline = await baselineTask;
- using var test = await testTask;
- var baselineFiles = baseline.GetFileNames();
- var testFiles = test.GetFileNames();
- ContentDifferences =
- Diff.GetDiffs(baselineFiles, testFiles, VersionIdentifier.AreVersionlessEqual, static p => VersionIdentifier.RemoveVersions(p, "{VERSION}"), cancellationToken)
- .Select(Diff.TaskItemFromDiff)
- .ToArray();
- return true;
- }
-
- public void Cancel()
- {
- _cancellationTokenSource.Cancel();
- }
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs
deleted file mode 100644
index 85592191d0b4..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestArchive.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.IO;
-using System.Net.Http;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.Build.Framework;
-
-public abstract class GetClosestArchive : Microsoft.Build.Utilities.Task, ICancelableTask
-{
- [Required]
- public required string BuiltArchivePath { get; init; }
-
- [Output]
- public string ClosestOfficialArchivePath { get; set; } = "";
-
- private string? _builtVersion;
- protected string BuiltVersion
- {
- get => _builtVersion ?? throw new InvalidOperationException();
- private set => _builtVersion = value;
- }
-
- private string? _builtRid;
- protected string BuiltRid
- {
- get => _builtRid ?? throw new InvalidOperationException();
- private set => _builtRid = value;
- }
-
- private string? _archiveExtension;
- protected string ArchiveExtension
- {
- get => _archiveExtension ?? throw new InvalidOperationException();
- private set => _archiveExtension = value;
- }
-
- ///
- /// The name of the package to find the closest official archive for. For example, "dotnet-sdk" or "aspnetcore-runtime".
- ///
- protected abstract string ArchiveName { get; }
-
- private CancellationTokenSource _cancellationTokenSource = new();
- protected CancellationToken CancellationToken => _cancellationTokenSource.Token;
- public void Cancel()
- {
- _cancellationTokenSource.Cancel();
- }
-
- ///
- /// Get the URL of the latest official archive for the given version string and RID.
- ///
- public abstract Task GetClosestOfficialArchiveUrl();
-
- public abstract Task GetClosestOfficialArchiveVersion();
-
- public override bool Execute()
- {
- return Task.Run(ExecuteAsync).Result;
- }
-
- public async Task ExecuteAsync()
- {
- CancellationToken.ThrowIfCancellationRequested();
- var filename = Path.GetFileName(BuiltArchivePath);
- (BuiltVersion, BuiltRid, ArchiveExtension) = Archive.GetInfoFromFileName(filename, ArchiveName);
- Log.LogMessage($"Finding closest official archive for '{ArchiveName}' version '{BuiltVersion}' RID '{BuiltRid}'");
-
- string? downloadUrl = await GetClosestOfficialArchiveUrl();
- if (downloadUrl == null)
- {
- Log.LogError($"Failed to find a download URL for '{ArchiveName}' version '{BuiltVersion}' RID '{BuiltRid}'");
- return false;
- }
-
- HttpClient client = new HttpClient();
-
- Log.LogMessage(MessageImportance.High, $"Downloading {downloadUrl}");
- HttpResponseMessage packageResponse = await client.GetAsync(downloadUrl, CancellationToken);
-
- var packageUriPath = packageResponse.RequestMessage!.RequestUri!.LocalPath;
-
- ClosestOfficialArchivePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + "." + Path.GetFileName(packageUriPath));
- Log.LogMessage($"Copying {packageUriPath} to {ClosestOfficialArchivePath}");
- using (var file = File.Create(ClosestOfficialArchivePath))
- {
- await packageResponse.Content.CopyToAsync(file, CancellationToken);
- }
-
- return true;
- }
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs
deleted file mode 100644
index bb038516c434..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetClosestOfficialSdk.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Net;
-using System.Net.Http;
-using System.Threading.Tasks;
-using Microsoft.Build.Framework;
-
-public class GetClosestOfficialSdk : GetClosestArchive
-{
- protected override string ArchiveName => "dotnet-sdk";
-
- HttpClient client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
-
- private string? closestVersion;
- private string? closestUrl;
-
- public override async Task GetClosestOfficialArchiveUrl()
- {
- // Channel in the form of 9.0.1xx
- var channel = BuiltVersion[..5] + "xx";
- var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/{ArchiveName}-{BuiltRid}{ArchiveExtension}";
- var redirectResponse = await client.GetAsync(akaMsUrl, CancellationToken);
- // aka.ms returns a 301 for valid redirects and a 302 to Bing for invalid URLs
- if (redirectResponse.StatusCode != HttpStatusCode.Moved)
- {
- Log.LogMessage(MessageImportance.High, $"Failed to find package at '{akaMsUrl}': invalid aka.ms URL");
- return null;
- }
- closestUrl = redirectResponse.Headers.Location!.ToString();
- closestVersion = VersionIdentifier.GetVersion(closestUrl);
- return closestUrl;
- }
-
- public override async Task GetClosestOfficialArchiveVersion()
- {
- if (closestUrl is not null)
- {
- return closestVersion;
- }
- _ = await GetClosestOfficialArchiveUrl();
- return closestVersion;
- }
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs
deleted file mode 100644
index bd27213b80b3..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/GetValidArchiveItems.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Microsoft.Build.Framework;
-
-public class GetValidArchiveItems : Microsoft.Build.Utilities.Task
-{
- [Required]
- public required ITaskItem[] ArchiveItems { get; init; }
-
- [Required]
- public required string ArchiveName { get; init; }
-
- [Output]
- public ITaskItem[] ValidArchiveItems { get; set; } = [];
-
- public override bool Execute()
- {
- List archiveItems = new();
- foreach (var item in ArchiveItems)
- {
- var filename = Path.GetFileName(item.ItemSpec);
- try
- {
- // Ensure the version and RID info can be parsed from the item
- _ = Archive.GetInfoFromFileName(filename, ArchiveName);
- archiveItems.Add(item);
- }
- catch (ArgumentException e)
- {
- Log.LogMessage($"'{item.ItemSpec}' is not a valid archive name: '{e.Message}'");
- continue;
- }
- }
- switch (archiveItems.Count)
- {
- case 0:
- Log.LogMessage(MessageImportance.High, "No valid archive items found");
- ValidArchiveItems = [];
- return false;
- case 1:
- Log.LogMessage(MessageImportance.High, $"{archiveItems[0]} is the only valid archive item found");
- ValidArchiveItems = archiveItems.ToArray();
- break;
- default:
- archiveItems.Sort((a, b) => a.ItemSpec.Length - b.ItemSpec.Length);
- Log.LogMessage(MessageImportance.High, $"Multiple valid archive items found: '{string.Join("', '", archiveItems)}'");
- ValidArchiveItems = archiveItems.ToArray();
- break;
- }
- return true;
- }
-
-}
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj
deleted file mode 100644
index ff3bf2402a01..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.csproj
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- $(NetCurrent)
- enable
-
-
-
-
-
-
-
diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
deleted file mode 100644
index 38a3eafa8c79..000000000000
--- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff/VersionIdentifier.cs
+++ /dev/null
@@ -1,257 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-// Copied from https://github.com/dotnet/arcade/blob/db45698020f58f88eef75b23b2598a59872918f6/src/Microsoft.DotNet.VersionTools/lib/src/BuildManifest/VersionIdentifier.cs
-// Conflicting MSBuild versions and some customizations make it difficult to use the Arcade assembly.
-public static class VersionIdentifier
-{
- private static readonly HashSet _knownTags = new HashSet
- {
- "alpha",
- "beta",
- "preview",
- "prerelease",
- "servicing",
- "rtm",
- "rc"
- };
-
- private static readonly SortedDictionary _sequencesToReplace =
- new SortedDictionary
- {
- { "-.", "." },
- { "..", "." },
- { "--", "-" },
- { "//", "/" },
- { "_.", "." }
- };
-
- private const string _finalSuffix = "final";
-
- private static readonly char[] _delimiters = new char[] { '.', '-', '_' };
-
- ///
- /// Identify the version of an asset.
- ///
- /// Asset names can come in two forms:
- /// - Blobs that include the full path
- /// - Packages that do not include any path elements.
- ///
- /// There may be multiple different version numbers in a blob path.
- /// This method starts at the last segment of the path and works backward to find a version number.
- ///
- /// Asset name
- /// Version, or null if none is found.
- public static string? GetVersion(string assetName)
- {
- string[] pathSegments = assetName.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
- string? potentialVersion = null;
- for (int i = pathSegments.Length - 1; i >= 0; i--)
- {
- potentialVersion = GetVersionForSingleSegment(pathSegments[i]);
- if (potentialVersion != null)
- {
- return potentialVersion;
- }
- }
-
- return potentialVersion;
- }
-
- ///
- /// Identify the version number of an asset segment.
- ///
- /// Asset segment
- /// Version number, or null if none was found
- ///
- /// Identifying versions is not particularly easy. To constrain the problem,
- /// we apply the following assumptions which are generally valid for .NET Core.
- /// - We always have major.minor.patch, and it always begins the version string.
- /// - The only pre-release or build metadata labels we use begin with the _knownTags shown above.
- /// - We use additional numbers in our version numbers after the initial
- /// major.minor.patch-prereleaselabel.prereleaseiteration segment,
- /// but any non-numeric element will end the version string.
- /// - The we use in versions and file names are ., -, and _.
- ///
- private static string? GetVersionForSingleSegment(string assetPathSegment)
- {
-
- // Find the start of the version number by finding the major.minor.patch.
- // Scan the string forward looking for a digit preceded by one of the delimiters,
- // then look for a minor.patch, completing the major.minor.patch. Continue to do so until we get
- // to something that is NOT major.minor.patch (this is necessary because we sometimes see things like:
- // VS.Redist.Common.NetCore.Templates.x86.2.2.3.0.101-servicing-014320.nupkg
- // Continue iterating until we find ALL potential versions. Return the one that is the latest in the segment
- // This is to deal with files with multiple major.minor.patchs in the file name, for example:
- // Microsoft.NET.Workload.Mono.ToolChain.Manifest-6.0.100.Msi.x64.6.0.0-rc.1.21380.2.symbols.nupkg
-
- int currentIndex = 0;
- // Stack of major.minor.patch.
- Stack<(int versionNumber, int index)> majorMinorPatchStack = new Stack<(int, int)>(3);
- string? majorMinorPatch = null;
- int majorMinorPatchIndex = 0;
- StringBuilder versionSuffix = new StringBuilder();
- char prevDelimiterCharacter = char.MinValue;
- char nextDelimiterCharacter = char.MinValue;
- Dictionary majorMinorPatchDictionary = new Dictionary();
- while (true)
- {
- string nextSegment;
- prevDelimiterCharacter = nextDelimiterCharacter;
- int nextDelimiterIndex = assetPathSegment.IndexOfAny(_delimiters, currentIndex);
- if (nextDelimiterIndex != -1)
- {
- nextDelimiterCharacter = assetPathSegment[nextDelimiterIndex];
- nextSegment = assetPathSegment.Substring(currentIndex, nextDelimiterIndex - currentIndex);
- }
- else
- {
- nextSegment = assetPathSegment.Substring(currentIndex);
- }
-
- // If we have not yet found the major/minor/patch, then there are four cases:
- // - There have been no potential major/minor/patch numbers found and the current segment is a number. Push onto the majorMinorPatch stack
- // and continue.
- // - There has been at least one number found, but less than 3, and the current segment not a number or not preceded by '.'. In this case,
- // we should clear out the stack and continue the search.
- // - There have been at least 2 numbers found and the current segment is a number and preceded by '.'. Push onto the majorMinorPatch stack and continue
- // - There have been at least 3 numbers found and the current segment is not a number or not preceded by '-'. In this case, we can call this the major minor
- // patch number and no longer need to continue searching
- if (majorMinorPatch == null)
- {
- bool isNumber = int.TryParse(nextSegment, out int potentialVersionSegment);
- if ((majorMinorPatchStack.Count == 0 && isNumber) ||
- (majorMinorPatchStack.Count > 0 && prevDelimiterCharacter == '.' && isNumber))
- {
- majorMinorPatchStack.Push((potentialVersionSegment, currentIndex));
- }
- // Check for partial major.minor.patch cases, like: 2.2.bar or 2.2-100.bleh
- else if (majorMinorPatchStack.Count > 0 && majorMinorPatchStack.Count < 3 &&
- (prevDelimiterCharacter != '.' || !isNumber))
- {
- majorMinorPatchStack.Clear();
- }
-
- // Determine whether we are done with major.minor.patch after this update.
- if (majorMinorPatchStack.Count >= 3 && (prevDelimiterCharacter != '.' || !isNumber || nextDelimiterIndex == -1))
- {
- // Done with major.minor.patch, found. Pop the top 3 elements off the stack.
- (int patch, int patchIndex) = majorMinorPatchStack.Pop();
- (int minor, int minorIndex) = majorMinorPatchStack.Pop();
- (int major, int majorIndex) = majorMinorPatchStack.Pop();
- majorMinorPatch = $"{major}.{minor}.{patch}";
- majorMinorPatchIndex = majorIndex;
- }
- }
-
- // Don't use else, so that we don't miss segments
- // in case we are just deciding that we've finished major minor patch.
- if (majorMinorPatch != null)
- {
- // Now look at the next segment. If it looks like it could be part of a version, append to what we have
- // and continue. If it can't, then we're done.
- //
- // Cases where we should break out and be done:
- // - We have an empty pre-release label and the delimiter is not '-'.
- // - We have an empty pre-release label and the next segment does not start with a known tag.
- // - We have a non-empty pre-release label and the current segment is not a number and also not 'final'
- // A corner case of versioning uses .final to represent a non-date suffixed final pre-release version:
- // 3.1.0-preview.10.final
- if (versionSuffix.Length == 0 &&
- (prevDelimiterCharacter != '-' || !_knownTags.Any(tag => nextSegment.StartsWith(tag, StringComparison.OrdinalIgnoreCase))))
- {
- majorMinorPatchDictionary.Add(majorMinorPatchIndex, majorMinorPatch);
- majorMinorPatch = null;
- versionSuffix = new StringBuilder();
- }
- else if (versionSuffix.Length != 0 && !int.TryParse(nextSegment, out int potentialVersionSegment) && nextSegment != _finalSuffix)
- {
- majorMinorPatchDictionary.Add(majorMinorPatchIndex, $"{majorMinorPatch}{versionSuffix.ToString()}");
- majorMinorPatch = null;
- versionSuffix = new StringBuilder();
- }
- else
- {
- // Append the delimiter character and then the current segment
- versionSuffix.Append(prevDelimiterCharacter);
- versionSuffix.Append(nextSegment);
- }
- }
-
- if (nextDelimiterIndex != -1)
- {
- currentIndex = nextDelimiterIndex + 1;
- }
- else
- {
- break;
- }
- }
-
- if (majorMinorPatch != null)
- {
- majorMinorPatchDictionary.Add(majorMinorPatchIndex, $"{majorMinorPatch}{versionSuffix.ToString()}");
- }
-
- if (!majorMinorPatchDictionary.Any())
- {
- return null;
- }
-
- int maxKey = majorMinorPatchDictionary.Keys.Max();
- return majorMinorPatchDictionary[maxKey];
- }
-
- ///
- /// Given an asset name, remove all .NET Core version numbers (as defined by GetVersionForSingleSegment)
- /// from the string
- ///
- /// Asset
- /// Asset name without versions
- public static string RemoveVersions(string assetName, string replacement = "")
- {
- string[] pathSegments = assetName.Split('/', '\\');
-
- // Remove the version number from each segment, then join back together and
- // remove any useless character sequences.
-
- for (int i = 0; i < pathSegments.Length; i++)
- {
- if (!string.IsNullOrEmpty(pathSegments[i]))
- {
- string? versionForSegment = GetVersionForSingleSegment(pathSegments[i]);
- if (versionForSegment != null)
- {
- pathSegments[i] = pathSegments[i].Replace(versionForSegment, replacement);
- }
- }
- }
-
- // Continue replacing things until there is nothing left to replace.
- string assetWithoutVersions = string.Join("/", pathSegments);
- bool anyReplacements = true;
- while (anyReplacements)
- {
- string replacementIterationResult = assetWithoutVersions;
- foreach (var sequence in _sequencesToReplace)
- {
- replacementIterationResult = replacementIterationResult.Replace(sequence.Key, sequence.Value);
- }
- anyReplacements = replacementIterationResult != assetWithoutVersions;
- assetWithoutVersions = replacementIterationResult;
- }
-
- return assetWithoutVersions;
- }
-
-
- public static bool AreVersionlessEqual(string assetName1, string assetName2)
- {
- return RemoveVersions(assetName1, "{VERSION}") == RemoveVersions(assetName2, "{VERSION}");
- }
-}
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 9103da84d61a..7e1f585598b6 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -1,8 +1,5 @@
-
-
-
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
$([MSBuild]::NormalizeDirectory('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests'))
@@ -14,39 +11,15 @@
%(SdkTarballItem.Identity)
- normal
-
-
-
-
-
-
-
-
-
-
-
-
- <_BuiltSdkArchivePath>@(_BuiltSdkArchivePath)
-
-
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
index 4beb6245a0c7..5451559e4958 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
@@ -44,6 +44,8 @@ public static void CompareEntries(string baselineFileName, IOrderedEnumerable
Path.Combine(GetAssetsDirectory(), "baselines", baselineSubDir, baselineFileName);
- public static string RemoveRids(string diff, bool isPortable = false) =>
- isPortable ? diff.Replace(Config.PortableRid, "portable-rid") : diff.Replace(Config.TargetRid, "banana-rid");
+ public static string RemoveRids(string diff, string portableRid, string targetRid, bool isPortable = false) =>
+ isPortable ? diff.Replace(portableRid, "portable-rid") : diff.Replace(targetRid, "banana-rid");
public static string RemoveVersions(string source)
{
@@ -100,7 +102,7 @@ public static string RemoveVersions(string source)
string result = Regex.Replace(source, $@"{pathSeparator}(net|roslyn)[1-9]+\.[0-9]+{pathSeparator}", match =>
{
string wordPart = match.Groups[1].Value;
- return $"{Path.DirectorySeparatorChar}{wordPart}{NonSemanticVersionPlaceholder}{Path.DirectorySeparatorChar}";
+ return $"{'/'}{wordPart}{NonSemanticVersionPlaceholder}{'/'}";
});
// Remove semantic versions
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index 25aff9d34363..ef4fd0e6ebd7 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -4,46 +4,78 @@
using System;
using System.IO;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-internal static class Config
+public class Config : IDisposable
{
- public const string DotNetDirectoryEnv = "UNIFIED_BUILD_VALIDATION_DOTNET_DIR";
- public const string IncludeArtifactsSizeEnv = "UNIFIED_BUILD_VALIDATION_INCLUDE_ARTIFACTSSIZE";
+ public Config()
+ {
+ BuildVersion = Environment.GetEnvironmentVariable(BuildVersionEnv) ?? throw new InvalidOperationException($"'{BuildVersionEnv}' must be specified");
+ PortableRid = Environment.GetEnvironmentVariable(PortableRidEnv) ?? throw new InvalidOperationException($"'{PortableRidEnv}' must be specified");
+ UbSdkArchivePath = Environment.GetEnvironmentVariable(UbSdkTarballPathEnv) ?? throw new InvalidOperationException($"'{UbSdkTarballPathEnv}' must be specified");
+ TargetRid = Environment.GetEnvironmentVariable(TargetRidEnv) ?? throw new InvalidOperationException($"'{TargetRidEnv}' must be specified");
+ TargetArchitecture = TargetRid.Split('-')[1];
+ WarnOnSdkContentDiffs = bool.TryParse(Environment.GetEnvironmentVariable(WarnSdkContentDiffsEnv), out bool warnOnSdkContentDiffs) && warnOnSdkContentDiffs;
+ MsftSdkArchivePath = Environment.GetEnvironmentVariable(MsftSdkTarballPathEnv) ?? DownloadMsftSdkArchive().Result;
+ }
+
+ public const string BuildVersionEnv = "UNIFIED_BUILD_VALIDATION_BUILD_VERSION";
public const string MsftSdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_MSFT_SDK_TARBALL_PATH";
- public const string PoisonReportPathEnv = "UNIFIED_BUILD_VALIDATION_POISON_REPORT_PATH";
public const string PortableRidEnv = "UNIFIED_BUILD_VALIDATION_PORTABLE_RID";
public const string PrereqsPathEnv = "UNIFIED_BUILD_VALIDATION_PREREQS_PATH";
- public const string CustomPackagesPathEnv = "UNIFIED_BUILD_VALIDATION_CUSTOM_PACKAGES_PATH";
- public const string SdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH";
+ public const string UbSdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH";
public const string SourceBuiltArtifactsPathEnv = "UNIFIED_BUILD_VALIDATION_SOURCEBUILT_ARTIFACTS_PATH";
public const string TargetRidEnv = "UNIFIED_BUILD_VALIDATION_TARGET_RID";
public const string WarnSdkContentDiffsEnv = "UNIFIED_BUILD_VALIDATION_WARN_SDK_CONTENT_DIFFS";
- public const string WarnLicenseScanDiffsEnv = "UNIFIED_BUILD_VALIDATION_WARN_LICENSE_SCAN_DIFFS";
- public const string RunningInCIEnv = "UNIFIED_BUILD_VALIDATION_RUNNING_IN_CI";
- public const string LicenseScanPathEnv = "UNIFIED_BUILD_VALIDATION_LICENSE_SCAN_PATH";
- public static string DotNetDirectory { get; } =
- Environment.GetEnvironmentVariable(DotNetDirectoryEnv) ?? Path.Combine(Directory.GetCurrentDirectory(), ".dotnet");
- public static string? MsftSdkTarballPath { get; } = Environment.GetEnvironmentVariable(MsftSdkTarballPathEnv);
- public static string PortableRid { get; } = Environment.GetEnvironmentVariable(PortableRidEnv) ??
- throw new InvalidOperationException($"'{Config.PortableRidEnv}' must be specified");
- public static string? PrereqsPath { get; } = Environment.GetEnvironmentVariable(PrereqsPathEnv);
- public static string? CustomPackagesPath { get; } = Environment.GetEnvironmentVariable(CustomPackagesPathEnv);
- public static string? SdkTarballPath { get; } = Environment.GetEnvironmentVariable(SdkTarballPathEnv);
- public static string? SourceBuiltArtifactsPath { get; } = Environment.GetEnvironmentVariable(SourceBuiltArtifactsPathEnv);
- public static string TargetRid { get; } = Environment.GetEnvironmentVariable(TargetRidEnv) ??
- throw new InvalidOperationException($"'{Config.TargetRidEnv}' must be specified");
- public static string TargetArchitecture { get; } = TargetRid.Split('-')[1];
- public static bool WarnOnSdkContentDiffs { get; } =
- bool.TryParse(Environment.GetEnvironmentVariable(WarnSdkContentDiffsEnv), out bool warnOnSdkContentDiffs) && warnOnSdkContentDiffs;
- public static bool WarnOnLicenseScanDiffs { get; } =
- bool.TryParse(Environment.GetEnvironmentVariable(WarnLicenseScanDiffsEnv), out bool warnOnLicenseScanDiffs) && warnOnLicenseScanDiffs;
+ public string? MsftSdkArchivePath { get; }
+ public string BuildVersion { get; }
+ public string PortableRid { get; }
+ public string UbSdkArchivePath { get; }
+ public string TargetRid { get; }
+ public string TargetArchitecture { get; }
+ public bool WarnOnSdkContentDiffs { get; }
+ string? _downloadedMsftSdkPath = null;
- // Indicates whether the tests are being run in the context of a CI pipeline
- public static bool RunningInCI { get; } =
- bool.TryParse(Environment.GetEnvironmentVariable(RunningInCIEnv), out bool runningInCI) && runningInCI;
+ static string GetArchiveExtension(string path)
+ {
+ if (path.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
+ return ".zip";
+ if (path.EndsWith(".tar.gz", StringComparison.InvariantCultureIgnoreCase))
+ return ".tar.gz";
+ throw new InvalidOperationException($"Path does not have a valid archive extenions: '{path}'");
+ }
- public static string? LicenseScanPath { get; } = Environment.GetEnvironmentVariable(LicenseScanPathEnv);
+ public async Task DownloadMsftSdkArchive()
+ {
+ var client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
+ var channel = BuildVersion[..5] + "xx";
+ var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/dotnet-sdk-{TargetRid}{GetArchiveExtension(UbSdkArchivePath)}";
+ var redirectResponse = await client.GetAsync(akaMsUrl);
+ // aka.ms returns a 301 for valid redirects and a 302 to Bing for invalid URLs
+ if (redirectResponse.StatusCode != HttpStatusCode.Moved)
+ {
+ throw new InvalidOperationException($"Could not find download link for Microsoft built sdk at '{akaMsUrl}'");
+ }
+ var closestUrl = redirectResponse.Headers.Location!.ToString();
+ HttpResponseMessage packageResponse = await client.GetAsync(closestUrl);
+ var packageUriPath = packageResponse.RequestMessage!.RequestUri!.LocalPath;
+ _downloadedMsftSdkPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + "." + Path.GetFileName(packageUriPath));
+ using (var file = File.Create(_downloadedMsftSdkPath))
+ {
+ await packageResponse.Content.CopyToAsync(file);
+ }
+ return _downloadedMsftSdkPath;
+ }
+ public void Dispose()
+ {
+ if (_downloadedMsftSdkPath != null)
+ {
+ File.Delete(_downloadedMsftSdkPath);
+ }
+ }
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
deleted file mode 100644
index c662eaf7647b..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetHelper.cs
+++ /dev/null
@@ -1,341 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Net.Http;
-using System.Net.Sockets;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-
-internal class DotNetHelper
-{
- private static readonly object s_lockObj = new();
-
- public static string DotNetPath { get; } = Path.Combine(Config.DotNetDirectory, "dotnet");
- public static string PackagesDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), "packages");
- public static string ProjectsDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), $"projects-{DateTime.Now:yyyyMMddHHmmssffff}");
-
- private ITestOutputHelper OutputHelper { get; }
- public bool IsMonoRuntime { get; }
-
- public DotNetHelper(ITestOutputHelper outputHelper)
- {
- OutputHelper = outputHelper;
-
- lock (s_lockObj)
- {
- if (!Directory.Exists(Config.DotNetDirectory))
- {
- if (!File.Exists(Config.SdkTarballPath))
- {
- throw new InvalidOperationException($"Tarball path '{Config.SdkTarballPath}' specified in {Config.SdkTarballPath} does not exist.");
- }
-
- Directory.CreateDirectory(Config.DotNetDirectory);
- Utilities.ExtractTarball(Config.SdkTarballPath, Config.DotNetDirectory, outputHelper);
- }
- IsMonoRuntime = DetermineIsMonoRuntime(Config.DotNetDirectory);
-
- // if (!Directory.Exists(ProjectsDirectory))
- // {
- // Directory.CreateDirectory(ProjectsDirectory);
- // InitNugetConfig();
- // }
-
- // if (!Directory.Exists(PackagesDirectory))
- // {
- // Directory.CreateDirectory(PackagesDirectory);
- // }
- }
- }
-
- private static void InitNugetConfig()
- {
- bool useLocalPackages = !string.IsNullOrEmpty(Config.PrereqsPath);
- string nugetConfigPrefix = useLocalPackages ? "local" : "online";
- string nugetConfigPath = Path.Combine(ProjectsDirectory, "NuGet.Config");
- File.Copy(
- Path.Combine(BaselineHelper.GetAssetsDirectory(), $"{nugetConfigPrefix}.NuGet.Config"),
- nugetConfigPath);
-
- if (useLocalPackages)
- {
- // When using local packages this feed is always required. It contains packages that are
- // not produced by source-build but are required by the various project templates.
- if (!Directory.Exists(Config.PrereqsPath))
- {
- throw new InvalidOperationException(
- $"Prereqs path '{Config.PrereqsPath}' specified in {Config.PrereqsPathEnv} does not exist.");
- }
-
- string nugetConfig = File.ReadAllText(nugetConfigPath);
- nugetConfig = nugetConfig.Replace("SMOKE_TEST_PACKAGE_FEED", Config.PrereqsPath);
-
- // This package feed is optional. You can use an additional feed of source-built packages to run the
- // smoke-tests as offline as possible.
- if (Config.CustomPackagesPath != null)
- {
- if (!Directory.Exists(Config.CustomPackagesPath))
- {
- throw new ArgumentException($"Specified --with-packages {Config.CustomPackagesPath} does not exist.");
- }
- nugetConfig = nugetConfig.Replace("CUSTOM_PACKAGE_FEED", Config.CustomPackagesPath);
- }
- else
- {
- nugetConfig = string.Join(Environment.NewLine, nugetConfig.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Where(s => !s.Contains("CUSTOM_PACKAGE_FEED")).ToArray());
- }
- File.WriteAllText(nugetConfigPath, nugetConfig);
- }
- }
-
- public void ExecuteCmd(string args, string? workingDirectory = null, Action? processConfigCallback = null,
- int? expectedExitCode = 0, int millisecondTimeout = -1)
- {
- (Process Process, string StdOut, string StdErr) executeResult = ExecuteHelper.ExecuteProcess(
- DotNetPath,
- args,
- OutputHelper,
- configureCallback: (process) => configureProcess(process, workingDirectory),
- millisecondTimeout: millisecondTimeout);
-
- if (expectedExitCode != null) {
- ExecuteHelper.ValidateExitCode(executeResult, (int) expectedExitCode);
- }
-
- void configureProcess(Process process, string? workingDirectory)
- {
- ConfigureProcess(process, workingDirectory);
-
- processConfigCallback?.Invoke(process);
- }
- }
-
- public static void ConfigureProcess(Process process, string? workingDirectory)
- {
- if (workingDirectory != null)
- {
- process.StartInfo.WorkingDirectory = workingDirectory;
- }
-
- process.StartInfo.EnvironmentVariables["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1";
- process.StartInfo.EnvironmentVariables["DOTNET_SKIP_FIRST_TIME_EXPERIENCE"] = "1";
- process.StartInfo.EnvironmentVariables["DOTNET_ROOT"] = Config.DotNetDirectory;
- process.StartInfo.EnvironmentVariables["NUGET_PACKAGES"] = PackagesDirectory;
- process.StartInfo.EnvironmentVariables["PATH"] = $"{Config.DotNetDirectory}:{Environment.GetEnvironmentVariable("PATH")}";
- }
-
- public void ExecuteBuild(string projectName) =>
- ExecuteCmd($"build {GetBinLogOption(projectName, "build")}", GetProjectDirectory(projectName));
-
- ///
- /// Create a new .NET project and return the path to the created project folder.
- ///
- public string ExecuteNew(string projectType, string name, string? language = null, string? customArgs = null)
- {
- string projectDirectory = GetProjectDirectory(name);
- string options = $"--name {name} --output {projectDirectory}";
- if (language != null)
- {
- options += $" --language \"{language}\"";
- }
- if (string.IsNullOrEmpty(customArgs))
- {
- options += $" {customArgs}";
- }
-
- ExecuteCmd($"new {projectType} {options}");
-
- return projectDirectory;
- }
-
- public void ExecutePublish(string projectName, DotNetTemplate template, bool? selfContained = null, string? rid = null, bool trimmed = false, bool readyToRun = false)
- {
- string options = string.Empty;
- string binlogDifferentiator = string.Empty;
-
- if (selfContained.HasValue)
- {
- options += $"--self-contained {selfContained.Value.ToString().ToLowerInvariant()}";
- if (selfContained.Value)
- {
- binlogDifferentiator += "self-contained";
- if (!string.IsNullOrEmpty(rid))
- {
- options += $" -r {rid}";
- binlogDifferentiator += $"-{rid}";
- }
- if (trimmed)
- {
- options += " /p:PublishTrimmed=true";
- binlogDifferentiator += "-trimmed";
- }
- if (readyToRun)
- {
- options += " /p:PublishReadyToRun=true";
- binlogDifferentiator += "-R2R";
- }
- }
- }
-
- string projDir = GetProjectDirectory(projectName);
- string publishDir = Path.Combine(projDir, "bin", "publish");
-
- ExecuteCmd(
- $"publish {options} {GetBinLogOption(projectName, "publish", binlogDifferentiator)} -o {publishDir}",
- projDir);
-
- if (template == DotNetTemplate.Console)
- {
- ExecuteCmd($"{projectName}.dll", publishDir, expectedExitCode: 0);
- }
- else if (template == DotNetTemplate.ClassLib || template == DotNetTemplate.BlazorWasm)
- {
- // Can't run the published output of classlib (no entrypoint) or WASM (needs a server)
- }
- // Assume it is a web-based template
- else
- {
- ExecuteWebDll(projectName, publishDir, template);
- }
- }
-
- public void ExecuteRun(string projectName) =>
- ExecuteCmd($"run {GetBinLogOption(projectName, "run")}", GetProjectDirectory(projectName));
-
- public void ExecuteRunWeb(string projectName, DotNetTemplate template)
- {
- // 'dotnet run' exit code differs between CoreCLR and Mono (https://github.com/dotnet/sdk/issues/30095).
- int expectedExitCode = IsMonoRuntime ? 143 : 0;
-
- ExecuteWeb(
- projectName,
- $"run --no-launch-profile {GetBinLogOption(projectName, "run")}",
- GetProjectDirectory(projectName),
- template,
- expectedExitCode);
- }
-
- public void ExecuteWebDll(string projectName, string workingDirectory, DotNetTemplate template) =>
- ExecuteWeb(projectName, $"{projectName}.dll", workingDirectory, template, expectedExitCode: 0);
-
- public void ExecuteTest(string projectName) =>
- ExecuteCmd($"test {GetBinLogOption(projectName, "test")}", GetProjectDirectory(projectName));
-
- private void ExecuteWeb(string projectName, string args, string workingDirectory, DotNetTemplate template, int expectedExitCode)
- {
- WebAppValidator validator = new(OutputHelper, template);
- ExecuteCmd(
- args,
- workingDirectory,
- processConfigCallback: validator.Validate,
- expectedExitCode: expectedExitCode,
- millisecondTimeout: 30000);
- Assert.True(validator.IsValidated);
- if (validator.ValidationException is not null)
- {
- throw validator.ValidationException;
- }
- }
-
- private static string GetBinLogOption(string projectName, string command, string? differentiator = null)
- {
- string fileName = $"{projectName}-{command}";
- if (!string.IsNullOrEmpty(differentiator))
- {
- fileName += $"-{differentiator}";
- }
-
- return $"/bl:{Path.Combine(TestBase.LogsDirectory, $"{fileName}.binlog")}";
- }
-
- private static bool DetermineIsMonoRuntime(string dotnetRoot)
- {
- string sharedFrameworkRoot = Path.Combine(dotnetRoot, "shared", "Microsoft.NETCore.App");
- if (!Directory.Exists(sharedFrameworkRoot))
- {
- return false;
- }
-
- string? version = Directory.GetDirectories(sharedFrameworkRoot).FirstOrDefault();
- if (version is null)
- {
- return false;
- }
-
- string sharedFramework = Path.Combine(sharedFrameworkRoot, version);
-
- // Check the presence of one of the mono header files.
- return File.Exists(Path.Combine(sharedFramework, "mono-gc.h"));
- }
-
- private static string GetProjectDirectory(string projectName) => Path.Combine(ProjectsDirectory, projectName);
-
- public static bool ShouldPublishComplex() =>
- !string.Equals(Config.TargetArchitecture,"ppc64le") && !string.Equals(Config.TargetArchitecture,"s390x");
-
- private class WebAppValidator
- {
- private readonly ITestOutputHelper _outputHelper;
- private readonly DotNetTemplate _template;
-
- public WebAppValidator(ITestOutputHelper outputHelper, DotNetTemplate template)
- {
- _outputHelper = outputHelper;
- _template = template;
- }
-
- public bool IsValidated { get; set; }
- public Exception? ValidationException { get; set; }
-
- private static int GetAvailablePort()
- {
- TcpListener listener = new(IPAddress.Loopback, 0);
- listener.Start();
- int port = ((IPEndPoint)listener.LocalEndpoint).Port;
- listener.Stop();
- return port;
- }
-
- public void Validate(Process process)
- {
- int port = GetAvailablePort();
- process.StartInfo.EnvironmentVariables.Add("ASPNETCORE_HTTP_PORTS", port.ToString());
- process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
- {
- try
- {
- if (e.Data?.Contains("Application started. Press Ctrl+C to shut down.") ?? false)
- {
- _outputHelper.WriteLine("Detected app has started. Sending web request to validate...");
-
- using HttpClient httpClient = new();
- string url = $"http://localhost:{port}";
- if (_template == DotNetTemplate.WebApi)
- {
- url += "/WeatherForecast";
- }
-
- using HttpResponseMessage resultMsg = httpClient.GetAsync(new Uri(url)).Result;
- _outputHelper.WriteLine($"Status code returned: {resultMsg.StatusCode}");
- resultMsg.EnsureSuccessStatusCode();
- IsValidated = true;
-
- ExecuteHelper.ExecuteProcessValidateExitCode("kill", $"-s TERM {process.Id}", _outputHelper);
- }
- }
- catch (Exception ex)
- {
- ValidationException = ex;
- }
- });
- }
- }
-}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
deleted file mode 100644
index 0a30c7215631..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/DotNetTemplate.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-
-public enum DotNetTemplate
-{
- Console,
- ClassLib,
- XUnit,
- NUnit,
- MSTest,
- Web,
- Mvc,
- Razor,
- BlazorWasm,
- WebApi,
- WebApp,
- Worker,
-}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
index 63c58dafde43..b56cc2f342c8 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
@@ -12,7 +12,15 @@
public class Exclusions
{
- string _rid = Config.TargetRid;
+ public const string UbPrefix = "ub";
+ public const string MsftPrefix = "msft";
+
+ public Exclusions(string rid)
+ {
+ _rid = rid;
+ }
+
+ string _rid;
string[] GetRidSpecificExclusionFileNames(string path)
{
@@ -30,17 +38,42 @@ string[] GetRidSpecificExclusionFileNames(string path)
return fileNames;
}
+ public IEnumerable RemoveContentDiffFileExclusions(IEnumerable files, string? prefix = null)
+ {
+ var exclusions = GetFileExclusions(prefix);
+ Func condition = f => !IsFileExcluded(f, exclusions, prefix);
+ return files.Where(condition);
+ }
+
+ public IEnumerable RemoveAssemblyVersionFileExclusions(IEnumerable files, string? prefix = null)
+ {
+ var exclusions = GetFileExclusions(prefix).Concat(GetNativeDllExclusions(prefix)).Concat(GetAssemblyVersionExclusions(prefix));
+ Func condition = f => !IsFileExcluded(f, exclusions, prefix);
+ return files.Where(condition);
+ }
+
+ //public List UbFileExclusions => _ubFileExclusions ??= GetFileExclusions(UbPrefix);
+ //List? _ubFileExclusions = null;
+
+ //public List UbAssemblyVersionExclusions => _ubAssemblyVersionExclusions ??= UbFileExclusions.Concat(GetAssemblyVersionExclusions(UbPrefix)).Concat(GetNativeDllExclusions(UbPrefix)).ToList();
+ //List? _ubAssemblyVersionExclusions = null;
+
+ //public List MsftFileExclusions => _msftFileExclusions ??= GetFileExclusions(MsftPrefix);
+ //List? _msftFileExclusions = null;
+
+ //public List MsftAssemblyVersionExclusions => _msftAssemblyVersionExclusions ??= MsftFileExclusions.Concat(GetAssemblyVersionExclusions(MsftPrefix)).Concat(GetNativeDllExclusions(MsftPrefix)).ToList();
+ //List? _msftAssemblyVersionExclusions = null;
+
public List GetFileExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkFileDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
public List GetAssemblyVersionExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkAssemblyVersionDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
public List GetNativeDllExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("NativeDlls.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
public string GetBaselineFileDiffFileName() => GetRidSpecificExclusionFileNames("MsftToSbSdkFiles.diff").Last();
-
- string NormalizePath(string path)
+ static string NormalizePath(string path)
{
return path.Replace('\\', '/');
}
- bool IsFileExcluded(string file, string? prefix = null)
- => GetFileExclusions(prefix).Any(exclusion => FileSystemName.MatchesSimpleExpression(exclusion, NormalizePath(file)));
+ public bool IsFileExcluded(string file, IEnumerable exclusions, string? prefix = null)
+ => exclusions.Any(exclusion => FileSystemName.MatchesSimpleExpression(exclusion, NormalizePath(file)));
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
index d4bfa6ceb6d5..4456fdb6a782 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
@@ -19,12 +19,13 @@
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
[Trait("Category", "SdkContent")]
-public class SdkContentTests : SdkTests
+public class SdkContentTests : TestBase
{
- private const string MsftSdkType = "msft";
- private const string SourceBuildSdkType = "sb";
-
- public SdkContentTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
+ Exclusions Exclusions;
+ public SdkContentTests(ITestOutputHelper outputHelper, Config config) : base(outputHelper, config)
+ {
+ Exclusions = new(Config.TargetRid);
+ }
///
/// Verifies the file layout of the source built sdk tarball to the Microsoft build.
@@ -33,39 +34,39 @@ public SdkContentTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
/// This makes the baseline durable between releases. This does mean however, entries
/// in the baseline may appear identical if the diff is version specific.
///
- [SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
+ [Fact]
public void CompareMsftToSbFileList()
{
const string msftFileListingFileName = "msftSdkFiles.txt";
const string sbFileListingFileName = "sbSdkFiles.txt";
- WriteTarballFileList(Config.MsftSdkTarballPath, msftFileListingFileName, isPortable: true, MsftSdkType);
- WriteTarballFileList(Config.SdkTarballPath, sbFileListingFileName, isPortable: true, SourceBuildSdkType);
+ WriteTarballFileList(Config.MsftSdkArchivePath, msftFileListingFileName, isPortable: true, Exclusions.MsftPrefix);
+ WriteTarballFileList(Config.UbSdkArchivePath, sbFileListingFileName, isPortable: true, Exclusions.UbPrefix);
string diff = BaselineHelper.DiffFiles(msftFileListingFileName, sbFileListingFileName, OutputHelper);
diff = RemoveDiffMarkers(diff);
- BaselineHelper.CompareBaselineContents(new Exclusions().GetBaselineFileDiffFileName(), diff, OutputHelper, Config.WarnOnSdkContentDiffs);
+ BaselineHelper.CompareBaselineContents(Exclusions.GetBaselineFileDiffFileName(), diff, OutputHelper, Config.WarnOnSdkContentDiffs);
}
- [SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
- public void CompareMsftToSbAssemblyVersions()
+ [Fact]
+ public async Task CompareMsftToSbAssemblyVersions()
{
- Assert.NotNull(Config.MsftSdkTarballPath);
- Assert.NotNull(Config.SdkTarballPath);
+ Assert.NotNull(Config.MsftSdkArchivePath);
+ Assert.NotNull(Config.UbSdkArchivePath);
DirectoryInfo tempDir = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
try
{
- DirectoryInfo sbSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, SourceBuildSdkType));
- Utilities.ExtractTarball(Config.SdkTarballPath, sbSdkDir.FullName, OutputHelper);
+ DirectoryInfo sbSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, Exclusions.UbPrefix));
+ Utilities.ExtractTarball(Config.UbSdkArchivePath, sbSdkDir.FullName, OutputHelper);
- DirectoryInfo msftSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, MsftSdkType));
- Utilities.ExtractTarball(Config.MsftSdkTarballPath, msftSdkDir.FullName, OutputHelper);
+ DirectoryInfo msftSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, Exclusions.MsftPrefix));
+ Utilities.ExtractTarball(Config.MsftSdkArchivePath, msftSdkDir.FullName, OutputHelper);
var t1 = Task.Run(() => GetSdkAssemblyVersions(sbSdkDir.FullName));
var t2 = Task.Run(() => GetSdkAssemblyVersions(msftSdkDir.FullName));
- Task.WaitAll(t1, t2);
- Dictionary sbSdkAssemblyVersions = t1.Result;
- Dictionary msftSdkAssemblyVersions = t2.Result;
+ var results = await Task.WhenAll(t1, t2);
+ Dictionary sbSdkAssemblyVersions = results[0];
+ Dictionary msftSdkAssemblyVersions = results[1];
RemoveExcludedAssemblyVersionPaths(sbSdkAssemblyVersions, msftSdkAssemblyVersions);
@@ -85,22 +86,22 @@ public void CompareMsftToSbAssemblyVersions()
}
}
- private static void RemoveExcludedAssemblyVersionPaths(Dictionary sbSdkAssemblyVersions, Dictionary msftSdkAssemblyVersions)
+ private void RemoveExcludedAssemblyVersionPaths(Dictionary sbSdkAssemblyVersions, Dictionary msftSdkAssemblyVersions)
{
- IEnumerable assemblyVersionDiffFilters = GetSdkAssemblyVersionDiffExclusionFilters()
+ IEnumerable assemblyVersionDiffFilters = Exclusions.GetAssemblyVersionExclusions()
.Select(filter => filter.TrimStart("./".ToCharArray()));
// Remove entries that are not in both. If they should be in both, the mismatch will be caught in another test
- foreach(var kvp in sbSdkAssemblyVersions)
+ foreach (var kvp in sbSdkAssemblyVersions)
{
- if (msftSdkAssemblyVersions.ContainsKey(kvp.Key))
+ if (!msftSdkAssemblyVersions.ContainsKey(kvp.Key))
{
sbSdkAssemblyVersions.Remove(kvp.Key);
}
}
- foreach(var kvp in msftSdkAssemblyVersions)
+ foreach (var kvp in msftSdkAssemblyVersions)
{
- if (sbSdkAssemblyVersions.ContainsKey(kvp.Key))
+ if (!sbSdkAssemblyVersions.ContainsKey(kvp.Key))
{
msftSdkAssemblyVersions.Remove(kvp.Key);
}
@@ -145,27 +146,13 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
return null;
}
- private string FindMatchingFilePath(string rootDir, Matcher matcher, string representativeFile)
- {
- foreach (string file in Directory.EnumerateFiles(rootDir, "*", SearchOption.AllDirectories))
- {
- if (matcher.Match(rootDir, file).HasMatches)
- {
- return file;
- }
- }
-
- Assert.Fail($"Unable to find matching file for '{representativeFile}' in '{rootDir}'.");
- return string.Empty;
- }
-
- private Dictionary GetSdkAssemblyVersions(string sbSdkPath)
+ private Dictionary GetSdkAssemblyVersions(string sbSdkPath, string? prefix = null)
{
- Exclusions ex = new Exclusions();
- IEnumerable exclusionFilters = GetSdkDiffExclusionFilters(SourceBuildSdkType)
- .Concat(GetKnownNativeFiles())
+ Exclusions ex = Exclusions;
+ IEnumerable exclusionFilters = ex.GetFileExclusions(prefix)
+ .Concat(ex.GetNativeDllExclusions(prefix))
+ .Concat(ex.GetAssemblyVersionExclusions(prefix))
.Select(filter => filter.TrimStart("./".ToCharArray()));
- List knownNativeFiles = Utilities.ParseExclusionsFile("NativeDlls-win-any.txt").ToList();
ConcurrentDictionary sbSdkAssemblyVersions = new();
List tasks = new List();
foreach (string dir in Directory.EnumerateDirectories(sbSdkPath, "*", SearchOption.AllDirectories).Append(sbSdkPath))
@@ -180,7 +167,7 @@ private string FindMatchingFilePath(string rootDir, Matcher matcher, string repr
{
string relativePath = Path.GetRelativePath(sbSdkPath, file);
string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
- if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
+ if (!ex.IsFileExcluded(normalizedPath, exclusionFilters))
{
try
{
@@ -197,32 +184,6 @@ private string FindMatchingFilePath(string rootDir, Matcher matcher, string repr
});
tasks.Add(t);
}
- //foreach (string file in Directory.EnumerateFiles(sbSdkPath, "*", SearchOption.AllDirectories))
- //{
- // string fileExt = Path.GetExtension(file);
- // if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
- // fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
- // {
- // string relativePath = Path.GetRelativePath(sbSdkPath, file);
- // string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
- // if (!Utilities.IsFileExcluded(normalizedPath, exclusionFilters))
- // {
- // var t = Task.Run(() =>
- // {
- // try
- // {
- // AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- // sbSdkAssemblyVersions.Add(normalizedPath, GetVersion(assemblyName));
- // }
- // catch (BadImageFormatException)
- // {
- // Console.WriteLine($"BadImageFormatException: {file}");
- // }
- // });
- // tasks.Add(t);
- // }
- // }
- //}
Task.WaitAll(tasks.ToArray());
return sbSdkAssemblyVersions.ToDictionary();
}
@@ -235,32 +196,20 @@ private void WriteTarballFileList(string? tarballPath, string outputFileName, bo
}
string fileListing = Utilities.GetTarballContentNames(tarballPath).Aggregate((a, b) => $"{a}{Environment.NewLine}{b}");
- fileListing = BaselineHelper.RemoveRids(fileListing, isPortable);
+ fileListing = BaselineHelper.RemoveRids(fileListing, Config.PortableRidEnv, Config.TargetRid, isPortable);
fileListing = BaselineHelper.RemoveVersions(fileListing);
IEnumerable files = fileListing.Split(Environment.NewLine).OrderBy(path => path);
- files = RemoveExclusions(files, GetSdkDiffExclusionFilters(sdkType));
+ files = Exclusions.RemoveContentDiffFileExclusions(files, sdkType);
File.WriteAllLines(outputFileName, files);
}
- private static IEnumerable RemoveExclusions(IEnumerable files, IEnumerable exclusions) =>
- files.Where(item => !Utilities.IsFileExcluded(item, exclusions));
-
- private static IEnumerable GetSdkDiffExclusionFilters(string sdkType) =>
- Utilities.ParseExclusionsFile("SdkFileDiffExclusions.txt", sdkType);
-
- private static IEnumerable GetSdkAssemblyVersionDiffExclusionFilters() =>
- Utilities.ParseExclusionsFile("SdkAssemblyVersionDiffExclusions.txt");
-
- private static IEnumerable GetKnownNativeFiles() =>
- Utilities.ParseExclusionsFile("NativeDlls-win-any.txt");
-
private static string RemoveDiffMarkers(string source)
{
Regex indexRegex = new("^index .*", RegexOptions.Multiline);
string result = indexRegex.Replace(source, "index ------------");
Regex diffSegmentRegex = new("^@@ .* @@", RegexOptions.Multiline);
- return diffSegmentRegex.Replace(result, "@@ ------------ @@");
+ return diffSegmentRegex.Replace(result, "@@ ------------ @@").ReplaceLineEndings();
}
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
deleted file mode 100644
index ba3381360ffa..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkTests.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Xunit.Abstractions;
-
-namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-
-///
-/// Shared base class for all SDK-based smoke tests.
-///
-public abstract class SdkTests : TestBase
-{
- internal DotNetHelper DotNetHelper { get; }
-
- protected SdkTests(ITestOutputHelper outputHelper) : base(outputHelper)
- {
- DotNetHelper = new DotNetHelper(outputHelper);
- }
-}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
deleted file mode 100644
index c1314e19e8b5..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SkippableFactAttribute.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Linq;
-using Xunit;
-
-namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-
-///
-/// A Fact that will be skipped based on the specified environment variable's value.
-///
-internal class SkippableFactAttribute : FactAttribute
-{
- public SkippableFactAttribute(string envName, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, bool skipOnFalseEnv = false, string[] skipArchitectures = null) =>
- EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipOnFalseEnv, skipArchitectures, (skip) => Skip = skip, envName);
-
- public SkippableFactAttribute(string[] envNames, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, bool skipOnFalseEnv = false, string[] skipArchitectures = null) =>
- EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipOnFalseEnv, skipArchitectures, (skip) => Skip = skip, envNames);
-
- public static void EvaluateSkips(bool skipOnNullOrWhiteSpaceEnv, bool skipOnTrueEnv, bool skipOnFalseEnv, string[] skipArchitectures, Action setSkip, params string[] envNames)
- {
- foreach (string envName in envNames)
- {
- string? envValue = Environment.GetEnvironmentVariable(envName);
-
- if (skipOnNullOrWhiteSpaceEnv && string.IsNullOrWhiteSpace(envValue))
- {
- setSkip($"Skipping because `{envName}` is null or whitespace");
- break;
- }
- else if (skipOnTrueEnv && bool.TryParse(envValue, out bool boolValue) && boolValue)
- {
- setSkip($"Skipping because `{envName}` is set to True");
- break;
- }
- else if (skipOnFalseEnv && (!bool.TryParse(envValue, out boolValue) || !boolValue))
- {
- setSkip($"Skipping because `{envName}` is set to False or an invalid value");
- break;
- }
- }
-
- if (skipArchitectures != null) {
- string? arch = Config.TargetArchitecture;
- if (skipArchitectures.Contains(arch))
- {
- setSkip($"Skipping because arch is `{arch}`");
- }
- }
- }
-}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
index 963f07109303..95043eb4dfc5 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/TestBase.cs
@@ -3,20 +3,22 @@
// See the LICENSE file in the project root for more information.
using System.IO;
+using Xunit;
using Xunit.Abstractions;
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-public abstract class TestBase
+public abstract class TestBase : IClassFixture
{
+ protected Config Config;
public static string LogsDirectory { get; } = Path.Combine(Directory.GetCurrentDirectory(), "logs");
public ITestOutputHelper OutputHelper { get; }
- public TestBase(ITestOutputHelper outputHelper)
+ public TestBase(ITestOutputHelper outputHelper, Config config)
{
OutputHelper = outputHelper;
-
+ Config = config;
if (!Directory.Exists(LogsDirectory))
{
Directory.CreateDirectory(LogsDirectory);
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
index 54939d8355f4..a56b4f0259ed 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Utilities.cs
@@ -75,7 +75,7 @@ public static void ExtractTarball(string tarballPath, string outputDir, ITestOut
{
// TarFile doesn't properly handle hard links (https://github.com/dotnet/runtime/pull/85378#discussion_r1221817490),
// use 'tar' instead.
- if (tarballPath.EndsWith(".tar.gz", StringComparison.OrdinalIgnoreCase) || tarballPath.EndsWith(".tgz", StringComparison.OrdinalIgnoreCase))
+ if (tarballPath.EndsWith(".tar.gz", StringComparison.InvariantCultureIgnoreCase) || tarballPath.EndsWith(".tgz", StringComparison.InvariantCultureIgnoreCase))
{
ExecuteHelper.ExecuteProcessValidateExitCode("tar", $"xzf {tarballPath} -C {outputDir}", outputHelper);
}
@@ -85,7 +85,7 @@ public static void ExtractTarball(string tarballPath, string outputDir, ITestOut
}
else
{
- throw new InvalidOperationException($"Unsupported tarball format: {tarballPath}");
+ throw new InvalidOperationException($"Unsupported archive format: {tarballPath}");
}
}
@@ -98,16 +98,16 @@ public static void ExtractTarball(string tarballPath, string outputDir, string t
using GZipStream decompressorStream = new(fileStream, CompressionMode.Decompress);
using TarReader reader = new(decompressorStream);
- TarEntry entry;
+ TarEntry? entry;
while ((entry = reader.GetNextEntry()) is not null)
{
if (matcher.Match(entry.Name).HasMatches)
{
string outputPath = Path.Join(outputDir, entry.Name);
- Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
+ Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!);
using FileStream outputFileStream = File.Create(outputPath);
- entry.DataStream.CopyTo(outputFileStream);
+ entry.DataStream!.CopyTo(outputFileStream);
break;
}
}
@@ -130,12 +130,16 @@ public static IEnumerable GetTarballContentNames(string tarballPath)
using GZipStream decompressorStream = new(fileStream, CompressionMode.Decompress);
using TarReader reader = new(decompressorStream);
- TarEntry entry;
+ TarEntry? entry;
while ((entry = reader.GetNextEntry()) is not null)
{
yield return entry.Name;
}
}
+ else
+ {
+ throw new InvalidOperationException($"Unsupported archive format: {tarballPath}");
+ }
}
public static void ExtractNupkg(string package, string outputDir)
@@ -146,7 +150,7 @@ public static void ExtractNupkg(string package, string outputDir)
foreach (ZipArchiveEntry entry in zip.Entries)
{
string outputPath = Path.Combine(outputDir, entry.FullName);
- Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
+ Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!);
entry.ExtractToFile(outputPath);
}
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
index 9e8e6088e2e0..e59d5de0f1ce 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-any.txt
@@ -1,4 +1,4 @@
-# Contains the list of files which are .dll's or .exe's but are not managed assemblies and should not have their assembly version checked
+# Contains the list of native .dll and .exe files that shouldn't have their assembly version checked.
#
# This list is processed using FileSystemName.MatchesSimpleExpression
#
@@ -46,4 +46,4 @@
./packs/Microsoft.NETCore.App.Host.win-x86/x.y.z/runtimes/win-x86/native/singlefilehost.exe
./packs/Microsoft.NETCore.App.Host.win-arm64/x.y.z/runtimes/win-arm64/native/singlefilehost.exe
./shared/Microsoft.NETCore.App/x.y.z/System.IO.Compression.Native.dll
-./dotnet.exe
\ No newline at end of file
+./dotnet.exe
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
index e93e1d37bdaa..918503d71cb7 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls-win-x64.txt
@@ -1,7 +1,4 @@
-# Contains the list of files whose assembly versions are to be excluded from comparison between the MSFT & SB SDK.
-# These exclusions only take effect if the assembly version of the file in the SB SDK is equal to or greater than
-# the version in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
-# that is valid for shipping.
+# Contains the list of native .dll and .exe files that shouldn't have their assembly version checked.
#
# This list is processed using FileSystemName.MatchesSimpleExpression
#
@@ -11,4 +8,4 @@
#
# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
-./shared/Microsoft.NETCore.App/x.y.z/mscordaccore_amd64_amd64_x.y.z.dll
\ No newline at end of file
+./shared/Microsoft.NETCore.App/x.y.z/mscordaccore_amd64_amd64_x.y.z.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
index 1b5390e2a754..8624457fa2da 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/NativeDlls.txt
@@ -1,7 +1,4 @@
-# Contains the list of files whose assembly versions are to be excluded from comparison between the MSFT & SB SDK.
-# These exclusions only take effect if the assembly version of the file in the SB SDK is equal to or greater than
-# the version in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
-# that is valid for shipping.
+# Contains the list of native .dll and .exe files that shouldn't have their assembly version checked.
#
# This list is processed using FileSystemName.MatchesSimpleExpression
#
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
deleted file mode 100644
index efe2bec15a9f..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-# This list is processed using FileSystemName.MatchesSimpleExpression
-#
-# Format
-# {msft|sb}, [# comment]
-# msft = Microsoft built SDK
-# sb = source-built SDK
-#
-# Examples
-# 'folder/*' matches 'folder/' and 'folder/abc'
-# 'folder/?*' matches 'folder/abc' but not 'folder/'
-
-msft,./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
-msft,./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
-msft,./sdk/x.y.z/datacollector.dll
-
-sb,./sdk/x.y.z/TestHostNetFramework/x64/msdia140.dll
-sb,./sdk/x.y.z/TestHostNetFramework/x86/msdia140.dll
-sb,./sdk/x.y.z/datacollector.dll
-
-msft,./sdk/x.y.z/Containers/containerize/*
-sb,./sdk/x.y.z/Containers/containerize/*
-
-msft,./sdk/x.y.z/Containers/tasks/net472/*
-sb,./sdk/x.y.z/Containers/tasks/net472/*
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
index 745589d6b7c0..85386b7a5d9b 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
@@ -3,41 +3,10 @@ index ------------
--- a/msftSdkFiles.txt
+++ b/sbSdkFiles.txt
@@ ------------ @@
- ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Security.Cryptography.Xml.xml
- ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Threading.RateLimiting.dll
- ./packs/Microsoft.AspNetCore.App.Ref/x.y.z/ref\netx.y\System.Threading.RateLimiting.xml
--./packs/Microsoft.NETCore.App.Host.linux-x64/
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/apphost
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/coreclr_delegates.h
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/hostfxr.h
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/libnethost.a
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/libnethost.so
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/nethost.h
--./packs/Microsoft.NETCore.App.Host.linux-x64/x.y.z/runtimes/linux-x64/native/singlefilehost
-+./packs/Microsoft.NETCore.App.Host.banana-rid/
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/apphost
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/coreclr_delegates.h
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/hostfxr.h
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/libnethost.a
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/libnethost.so
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/nethost.h
-+./packs/Microsoft.NETCore.App.Host.banana-rid/x.y.z/runtimes/banana-rid/native/singlefilehost
- ./packs/Microsoft.NETCore.App.Ref/
- ./packs/Microsoft.NETCore.App.Ref/x.y.z/
- ./packs/Microsoft.NETCore.App.Ref/x.y.z/analyzers/
-@@ ------------ @@
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib/
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Diagnostics.EventLog.dll
--./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Diagnostics.EventLog.Messages.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Security.Cryptography.Pkcs.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/runtimes/win/lib\netx.y\System.Windows.Extensions.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools\netx.y\any/System.CodeDom.dll
\ No newline at end of file
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
++./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Windows.Extensions.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/System.CodeDom.dll
From 736b6f45c96690e7b30552339fa95d049b10cdda Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 20 Mar 2024 14:45:52 -0700
Subject: [PATCH 12/41] Add linux file diff exclusions
---
.../assets/SdkFileDiffExclusions-linux-any.txt | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
new file mode 100644
index 000000000000..869358959789
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
@@ -0,0 +1,14 @@
+# This list is processed using FileSystemName.MatchesSimpleExpression
+#
+# Format
+# {msft|sb}, [# comment]
+# msft = Microsoft built SDK
+# ub = Unified Build SDK
+#
+# Examples
+# 'folder/*' matches 'folder/' and 'folder/abc'
+# 'folder/?*' matches 'folder/abc' but not 'folder/'
+
+# These files are Windows specific and should never have been in the Microsoft build
+msft,./sdk/x.y.z/Containers/containerize/*
+msft,./sdk/x.y.z/Containers/tasks/net472/*
From d85e153aebffc1202c26b0d77ffda0052f5d880f Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 20 Mar 2024 17:08:15 -0700
Subject: [PATCH 13/41] Fix env var mismatch
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 7e1f585598b6..b180b6572cf3 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -16,10 +16,10 @@
From 43e52e867e390b0fdf5382e434e3f772f5b350af Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 20 Mar 2024 22:58:40 -0700
Subject: [PATCH 14/41] Update baselines with correct msft and ub sdks
---
.../BaselineHelper.cs | 15 +-
.../Exclusions.cs | 2 +-
.../SdkContentTests.cs | 62 +-
.../MsftToSbSdkAssemblyVersions.diff | 1 -
.../baselines/MsftToSbSdkFiles-linux-x64.diff | 12 -
...MsftToUbSdkAssemblyVersions-linux-x64.diff | 738 ++++++++++++++++++
... MsftToUbSdkAssemblyVersions-win-x64.diff} | 0
.../baselines/MsftToUbSdkFiles-linux-x64.diff | 286 +++++++
.../baselines/MsftToUbSdkFiles-win-x64.diff | 0
9 files changed, 1065 insertions(+), 51 deletions(-)
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
rename src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/{MsftToSbSdkFiles-win-x64.diff => MsftToUbSdkAssemblyVersions-win-x64.diff} (100%)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
index 5451559e4958..95294cd28b6c 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/BaselineHelper.cs
@@ -75,7 +75,10 @@ public static void CompareFiles(string expectedFilePath, string actualFilePath,
if (!warnOnDiffs)
{
- Assert.Null(message);
+ if (message is not null)
+ {
+ Assert.Fail(message);
+ }
}
}
@@ -104,14 +107,14 @@ public static string RemoveVersions(string source)
string wordPart = match.Groups[1].Value;
return $"{'/'}{wordPart}{NonSemanticVersionPlaceholder}{'/'}";
});
-
+
// Remove semantic versions
// Regex source: https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
// The regex from https://semver.org has been modified to account for the following:
- // - The version should be preceded by a path separator, '.', '-', or '/'
- // - The version should match a release identifier that begins with '.' or '-'
- // - The version may have one or more release identifiers that begin with '.' or '-'
- // - The version should end before a path separator, '.', '-', or '/'
+ // - The version should be preceded by a path separator, '.', '-', or '/'
+ // - The version should match a release identifier that begins with '.' or '-'
+ // - The version may have one or more release identifiers that begin with '.' or '-'
+ // - The version should end before a path separator, '.', '-', or '/'
Regex semanticVersionRegex = new(
@"(?<=[./\\-_])(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))+"
+ @"(((?:[-.]((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)))+"
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
index b56cc2f342c8..f5be124c6eb5 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Exclusions.cs
@@ -67,7 +67,7 @@ public IEnumerable RemoveAssemblyVersionFileExclusions(IEnumerable GetFileExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkFileDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
public List GetAssemblyVersionExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("SdkAssemblyVersionDiffExclusions.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
public List GetNativeDllExclusions(string? prefix = null) => GetRidSpecificExclusionFileNames("NativeDlls.txt").SelectMany(f => Utilities.TryParseExclusionsFile(f, prefix)).ToList();
- public string GetBaselineFileDiffFileName() => GetRidSpecificExclusionFileNames("MsftToSbSdkFiles.diff").Last();
+ public string GetBaselineFileDiffFileName() => GetRidSpecificExclusionFileNames("MsftToUbSdkFiles.diff").Last();
static string NormalizePath(string path)
{
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
index 4456fdb6a782..6c6b57bd8111 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
@@ -29,26 +29,26 @@ public SdkContentTests(ITestOutputHelper outputHelper, Config config) : base(out
///
/// Verifies the file layout of the source built sdk tarball to the Microsoft build.
- /// The differences are captured in baselines/MsftToSbSdkDiff.txt.
+ /// The differences are captured in baselines/MsftToUbSdkDiff.txt.
/// Version numbers that appear in paths are compared but are stripped from the baseline.
/// This makes the baseline durable between releases. This does mean however, entries
/// in the baseline may appear identical if the diff is version specific.
///
[Fact]
- public void CompareMsftToSbFileList()
+ public void CompareMsftToUbFileList()
{
const string msftFileListingFileName = "msftSdkFiles.txt";
- const string sbFileListingFileName = "sbSdkFiles.txt";
+ const string ubFileListingFileName = "ubSdkFiles.txt";
WriteTarballFileList(Config.MsftSdkArchivePath, msftFileListingFileName, isPortable: true, Exclusions.MsftPrefix);
- WriteTarballFileList(Config.UbSdkArchivePath, sbFileListingFileName, isPortable: true, Exclusions.UbPrefix);
+ WriteTarballFileList(Config.UbSdkArchivePath, ubFileListingFileName, isPortable: true, Exclusions.UbPrefix);
- string diff = BaselineHelper.DiffFiles(msftFileListingFileName, sbFileListingFileName, OutputHelper);
+ string diff = BaselineHelper.DiffFiles(msftFileListingFileName, ubFileListingFileName, OutputHelper);
diff = RemoveDiffMarkers(diff);
BaselineHelper.CompareBaselineContents(Exclusions.GetBaselineFileDiffFileName(), diff, OutputHelper, Config.WarnOnSdkContentDiffs);
}
[Fact]
- public async Task CompareMsftToSbAssemblyVersions()
+ public async Task CompareMsftToUbAssemblyVersions()
{
Assert.NotNull(Config.MsftSdkArchivePath);
Assert.NotNull(Config.UbSdkArchivePath);
@@ -56,29 +56,29 @@ public async Task CompareMsftToSbAssemblyVersions()
DirectoryInfo tempDir = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
try
{
- DirectoryInfo sbSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, Exclusions.UbPrefix));
- Utilities.ExtractTarball(Config.UbSdkArchivePath, sbSdkDir.FullName, OutputHelper);
+ DirectoryInfo ubSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, Exclusions.UbPrefix));
+ Utilities.ExtractTarball(Config.UbSdkArchivePath, ubSdkDir.FullName, OutputHelper);
DirectoryInfo msftSdkDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, Exclusions.MsftPrefix));
Utilities.ExtractTarball(Config.MsftSdkArchivePath, msftSdkDir.FullName, OutputHelper);
- var t1 = Task.Run(() => GetSdkAssemblyVersions(sbSdkDir.FullName));
+ var t1 = Task.Run(() => GetSdkAssemblyVersions(ubSdkDir.FullName));
var t2 = Task.Run(() => GetSdkAssemblyVersions(msftSdkDir.FullName));
var results = await Task.WhenAll(t1, t2);
- Dictionary sbSdkAssemblyVersions = results[0];
+ Dictionary ubSdkAssemblyVersions = results[0];
Dictionary msftSdkAssemblyVersions = results[1];
- RemoveExcludedAssemblyVersionPaths(sbSdkAssemblyVersions, msftSdkAssemblyVersions);
+ RemoveExcludedAssemblyVersionPaths(ubSdkAssemblyVersions, msftSdkAssemblyVersions);
- const string SbVersionsFileName = "sb_assemblyversions.txt";
- WriteAssemblyVersionsToFile(sbSdkAssemblyVersions, SbVersionsFileName);
+ const string UbVersionsFileName = "ub_assemblyversions.txt";
+ WriteAssemblyVersionsToFile(ubSdkAssemblyVersions, UbVersionsFileName);
const string MsftVersionsFileName = "msft_assemblyversions.txt";
WriteAssemblyVersionsToFile(msftSdkAssemblyVersions, MsftVersionsFileName);
- string diff = BaselineHelper.DiffFiles(MsftVersionsFileName, SbVersionsFileName, OutputHelper);
+ string diff = BaselineHelper.DiffFiles(MsftVersionsFileName, UbVersionsFileName, OutputHelper);
diff = RemoveDiffMarkers(diff);
- BaselineHelper.CompareBaselineContents("MsftToSbSdkAssemblyVersions.diff", diff, OutputHelper, Config.WarnOnSdkContentDiffs);
+ BaselineHelper.CompareBaselineContents($"MsftToUbSdkAssemblyVersions-{Config.TargetRid}.diff", diff, OutputHelper, Config.WarnOnSdkContentDiffs);
}
finally
{
@@ -86,22 +86,22 @@ public async Task CompareMsftToSbAssemblyVersions()
}
}
- private void RemoveExcludedAssemblyVersionPaths(Dictionary sbSdkAssemblyVersions, Dictionary msftSdkAssemblyVersions)
+ private void RemoveExcludedAssemblyVersionPaths(Dictionary ubSdkAssemblyVersions, Dictionary msftSdkAssemblyVersions)
{
IEnumerable assemblyVersionDiffFilters = Exclusions.GetAssemblyVersionExclusions()
.Select(filter => filter.TrimStart("./".ToCharArray()));
// Remove entries that are not in both. If they should be in both, the mismatch will be caught in another test
- foreach (var kvp in sbSdkAssemblyVersions)
+ foreach (var kvp in ubSdkAssemblyVersions)
{
if (!msftSdkAssemblyVersions.ContainsKey(kvp.Key))
{
- sbSdkAssemblyVersions.Remove(kvp.Key);
+ ubSdkAssemblyVersions.Remove(kvp.Key);
}
}
foreach (var kvp in msftSdkAssemblyVersions)
{
- if (!sbSdkAssemblyVersions.ContainsKey(kvp.Key))
+ if (!ubSdkAssemblyVersions.ContainsKey(kvp.Key))
{
msftSdkAssemblyVersions.Remove(kvp.Key);
}
@@ -110,16 +110,16 @@ private void RemoveExcludedAssemblyVersionPaths(Dictionary sbS
// Remove any excluded files as long as UB SDK's file has the same or greater assembly version compared to the corresponding
// file in the MSFT SDK. If the version is less, the file will show up in the results as this is not a scenario
// that is valid for shipping.
- string[] sbSdkFileArray = sbSdkAssemblyVersions.Keys.ToArray();
- for (int i = sbSdkFileArray.Length - 1; i >= 0; i--)
+ string[] ubSdkFileArray = ubSdkAssemblyVersions.Keys.ToArray();
+ for (int i = ubSdkFileArray.Length - 1; i >= 0; i--)
{
- string assemblyPath = sbSdkFileArray[i];
- if (sbSdkAssemblyVersions.TryGetValue(assemblyPath, out Version? sbVersion) &&
+ string assemblyPath = ubSdkFileArray[i];
+ if (ubSdkAssemblyVersions.TryGetValue(assemblyPath, out Version? ubVersion) &&
msftSdkAssemblyVersions.TryGetValue(assemblyPath, out Version? msftVersion) &&
- sbVersion >= msftVersion &&
+ ubVersion >= msftVersion &&
Utilities.IsFileExcluded(assemblyPath, assemblyVersionDiffFilters))
{
- sbSdkAssemblyVersions.Remove(assemblyPath);
+ ubSdkAssemblyVersions.Remove(assemblyPath);
msftSdkAssemblyVersions.Remove(assemblyPath);
}
}
@@ -146,16 +146,16 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
return null;
}
- private Dictionary GetSdkAssemblyVersions(string sbSdkPath, string? prefix = null)
+ private Dictionary GetSdkAssemblyVersions(string ubSdkPath, string? prefix = null)
{
Exclusions ex = Exclusions;
IEnumerable exclusionFilters = ex.GetFileExclusions(prefix)
.Concat(ex.GetNativeDllExclusions(prefix))
.Concat(ex.GetAssemblyVersionExclusions(prefix))
.Select(filter => filter.TrimStart("./".ToCharArray()));
- ConcurrentDictionary sbSdkAssemblyVersions = new();
+ ConcurrentDictionary ubSdkAssemblyVersions = new();
List tasks = new List();
- foreach (string dir in Directory.EnumerateDirectories(sbSdkPath, "*", SearchOption.AllDirectories).Append(sbSdkPath))
+ foreach (string dir in Directory.EnumerateDirectories(ubSdkPath, "*", SearchOption.AllDirectories).Append(ubSdkPath))
{
var t = Task.Run(() =>
{
@@ -165,14 +165,14 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
if (fileExt.Equals(".dll", StringComparison.OrdinalIgnoreCase) ||
fileExt.Equals(".exe", StringComparison.OrdinalIgnoreCase))
{
- string relativePath = Path.GetRelativePath(sbSdkPath, file);
+ string relativePath = Path.GetRelativePath(ubSdkPath, file);
string normalizedPath = BaselineHelper.RemoveVersions(relativePath);
if (!ex.IsFileExcluded(normalizedPath, exclusionFilters))
{
try
{
AssemblyName assemblyName = AssemblyName.GetAssemblyName(file);
- Assert.True(sbSdkAssemblyVersions.TryAdd(normalizedPath, GetVersion(assemblyName)));
+ Assert.True(ubSdkAssemblyVersions.TryAdd(normalizedPath, GetVersion(assemblyName)));
}
catch (BadImageFormatException)
{
@@ -185,7 +185,7 @@ private static void WriteAssemblyVersionsToFile(Dictionary ass
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
- return sbSdkAssemblyVersions.ToDictionary();
+ return ubSdkAssemblyVersions.ToDictionary();
}
private void WriteTarballFileList(string? tarballPath, string outputFileName, bool isPortable, string sdkType)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
deleted file mode 100644
index 8b137891791f..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkAssemblyVersions.diff
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
deleted file mode 100644
index 85386b7a5d9b..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-linux-x64.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/msftSdkFiles.txt b/sbSdkFiles.txt
-index ------------
---- a/msftSdkFiles.txt
-+++ b/sbSdkFiles.txt
-@@ ------------ @@
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
-+./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Windows.Extensions.dll
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/System.CodeDom.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
new file mode 100644
index 000000000000..fb5689c6ca41
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
@@ -0,0 +1,738 @@
+diff --git a/msft_assemblyversions.txt b/ub_assemblyversions.txt
+index ------------
+--- a/msft_assemblyversions.txt
++++ b/ub_assemblyversions.txt
+@@ ------------ @@ sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\cs\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\cs\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\cs\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\cs\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\cs\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\cs\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\cs\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\cs\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\cs\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\de\dotnet.resources.dll - 9.0.100
+ sdk\x.y.z\de\Microsoft.Build.resources.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\de\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\de\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\de\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\de\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\de\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\de\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\de\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\de\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\de\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\dotnet.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-dev-certs\x.y.z\tools/netx.y/any\dotnet-dev-certs.dll - 9.0.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hans\System.CommandLine
+ sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\Microsoft.CodeAnalysis.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\cs\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\cs\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\cs\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\de\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\de\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\de\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\dotnet-format.dll - 9.0.10
+-sdk\x.y.z\DotnetTools\dotnet-format\es\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\dotnet-format.dll - 9.0.100
++sdk\x.y.z\DotnetTools\dotnet-format\es\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\es\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\fr\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\fr\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.Workspaces.MSBuild
+ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\fr\System.CommandLine.resources.dll - 2.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Humanizer.dll - 2.14.0
+-sdk\x.y.z\DotnetTools\dotnet-format\it\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\it\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\it\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\ja\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\ja\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ja\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\ko\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\ko\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ko\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Bcl.AsyncInterfaces.dll - 8.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Bcl.AsyncInterfaces.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Locator.dll - 1.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Tasks.Core.dll - 15.1.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Utilities.Core.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.VisualBasic.Workspace
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll - 4.10.0
+-sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.DiaSymReader.dll - 2.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.DiaSymReader.dll - 2.1.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.DependencyInjection.Abstractions.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.DependencyInjection.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.FileSystemGlobbing.dll - 9.0.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.Primitives.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.NET.StringTools.dll - 1.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.VisualStudio.Setup.Configuration.Interop.dll - 1.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\Newtonsoft.Json.dll - 13.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\pl\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\pl\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pl\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.VisualBasic.Wor
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\ru\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\ru\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\ru\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Security.Cryptography.Pkcs.dll - 7.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Windows.Extensions.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.CodeDom.dll - 7.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Security.Cryptography.Pkcs.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Windows.Extensions.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.CodeDom.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\System.CommandLine.dll - 2.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\System.CommandLine.Rendering.dll - 0.4.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.AttributedModel.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Convention.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Hosting.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Runtime.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.TypedParts.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Configuration.ConfigurationManager.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Diagnostics.EventLog.dll - 8.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.AttributedModel.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Convention.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Hosting.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Runtime.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.TypedParts.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Configuration.ConfigurationManager.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Diagnostics.EventLog.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-format\System.IO.Pipelines.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Reflection.MetadataLoadContext.dll - 7.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Resources.Extensions.dll - 7.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Pkcs.dll - 7.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.ProtectedData.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Xml.dll - 7.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Permissions.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\System.Windows.Extensions.dll - 8.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\tr\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\System.Reflection.MetadataLoadContext.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Resources.Extensions.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Pkcs.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.ProtectedData.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Xml.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Permissions.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\System.Windows.Extensions.dll - 9.0.0
++sdk\x.y.z\DotnetTools\dotnet-format\tr\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.VisualBasic.Worksp
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\tr\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.VisualBasic.W
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\dotnet-format.resources.dll - 9.0.10
++sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\dotnet-format.resources.dll - 9.0.100
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
+@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll - 4.10.0
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll - 4.10.0
+-sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.DiaSymReader.dll - 2.0.0
++sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.DiaSymReader.dll - 2.1.0
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.Extensions.DependencyInjection.Abstractions.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.Extensions.Logging.Abstractions.dll - 9.0.0
+ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.VisualStudio.Setup.Configuration.Interop.dll - 1.0.0
+@@ ------------ @@ sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\es\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\es\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\es\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\es\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\es\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\es\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\es\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\es\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\es\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\Extensions\cs\Microsoft.TestPlatform.Extensions.BlameDataCollector.resources.dll - 15.0.0
+ sdk\x.y.z\Extensions\cs\Microsoft.TestPlatform.Extensions.EventLogCollector.resources.dll - 15.0.0
+@@ ------------ @@ sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\fr\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\fr\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\fr\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\fr\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\fr\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\fr\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\fr\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\fr\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\fr\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\FSharp\cs\FSharp.Build.resources.dll - 12.8.300
+ sdk\x.y.z\FSharp\cs\FSharp.Compiler.Interactive.Settings.resources.dll - 12.8.300
+@@ ------------ @@ sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\it\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\it\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\it\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\it\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\it\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\it\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\it\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\it\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\it\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\ja\dotnet.resources.dll - 9.0.100
+ sdk\x.y.z\ja\Microsoft.Build.resources.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\ja\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\ja\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\ja\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\ja\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\ja\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\ja\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\ja\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\ja\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\ja\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\ko\dotnet.resources.dll - 9.0.100
+ sdk\x.y.z\ko\Microsoft.Build.resources.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\ko\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\ko\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\ko\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\ko\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\ko\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\ko\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\ko\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\ko\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\ko\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\Microsoft.ApplicationInsights.dll - 2.22.0
+ sdk\x.y.z\Microsoft.AspNetCore.DeveloperCertificates.XPlat.dll - 9.0.0
+@@ ------------ @@ sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\pl\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\pl\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\pl\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\pl\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\pl\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\pl\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\pl\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\pl\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\pl\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\pt-BR\dotnet.resources.dll - 9.0.100
+ sdk\x.y.z\pt-BR\Microsoft.Build.resources.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.
+ sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\pt-BR\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\pt-BR\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\pt-BR\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\pt-BR\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\pt-BR\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\pt-BR\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\pt-BR\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\pt-BR\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\pt-BR\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\ref\Microsoft.Build.Framework.dll - 15.1.0
+ sdk\x.y.z\ref\Microsoft.Build.Utilities.Core.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\ru\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\ru\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\ru\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\ru\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\ru\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\ru\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\ru\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\ru\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\ru\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 9.0.0
+ sdk\x.y.z\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 9.0.0
+@@ ------------ @@ sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
+ sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\tr\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\tr\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\tr\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\tr\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\tr\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\tr\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\tr\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\tr\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\tr\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\vstest.console.dll - 15.0.0
+ sdk\x.y.z\zh-Hans\dotnet.resources.dll - 9.0.100
+@@ ------------ @@ sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.
+ sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\zh-Hans\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\zh-Hans\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hans\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\zh-Hans\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hans\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\zh-Hans\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\zh-Hans\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\zh-Hans\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\zh-Hans\vstest.console.resources.dll - 15.0.0
+ sdk\x.y.z\zh-Hant\dotnet.resources.dll - 9.0.100
+ sdk\x.y.z\zh-Hant\Microsoft.Build.resources.dll - 15.1.0
+@@ ------------ @@ sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.
+ sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
+ sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
+ sdk\x.y.z\zh-Hant\MSBuild.resources.dll - 15.1.0
+-sdk\x.y.z\zh-Hant\NuGet.Commands.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Common.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Configuration.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Credentials.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Frameworks.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.LibraryModel.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Localization.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.PackageManagement.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Packaging.Core.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Packaging.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.ProjectModel.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Protocol.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Resolver.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.Versioning.resources.dll - 6.0.0
+-sdk\x.y.z\zh-Hant\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
++sdk\x.y.z\zh-Hant\NuGet.Commands.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Common.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Configuration.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Credentials.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Frameworks.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.LibraryModel.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Localization.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.PackageManagement.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Packaging.Core.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Packaging.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.ProjectModel.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Protocol.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Resolver.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.Versioning.resources.dll - 6.10.0
++sdk\x.y.z\zh-Hant\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
+ sdk\x.y.z\zh-Hant\System.CommandLine.resources.dll - 2.0.0
+-sdk\x.y.z\zh-Hant\Test.Utility.resources.dll - 6.0.0
++sdk\x.y.z\zh-Hant\Test.Utility.resources.dll - 6.10.0
+ sdk\x.y.z\zh-Hant\vstest.console.resources.dll - 15.0.0
+ shared\Microsoft.AspNetCore.App\x.y.z\Microsoft.AspNetCore.Antiforgery.dll - 9.0.0
+ shared\Microsoft.AspNetCore.App\x.y.z\Microsoft.AspNetCore.Authentication.Abstractions.dll - 9.0.0
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-win-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-win-x64.diff
similarity index 100%
rename from src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToSbSdkFiles-win-x64.diff
rename to src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-win-x64.diff
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
new file mode 100644
index 000000000000..a4ee90f6a0e8
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
@@ -0,0 +1,286 @@
+diff --git a/msftSdkFiles.txt b/ubSdkFiles.txt
+index ------------
+--- a/msftSdkFiles.txt
++++ b/ubSdkFiles.txt
+@@ ------------ @@
+ ./sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/System.CommandLine.resources.dll
+ ./sdk/x.y.z/cs/
+ ./sdk/x.y.z/cs/dotnet.resources.dll
+-./sdk/x.y.z/cs/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/cs/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/cs/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/cs/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/cs/MSBuild.resources.dll
+-./sdk/x.y.z/cs/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/cs/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/cs/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/cs/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/cs/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/cs/NuGet.Common.resources.dll
+ ./sdk/x.y.z/cs/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/datacollector.runtimeconfig.json
+ ./sdk/x.y.z/de/
+ ./sdk/x.y.z/de/dotnet.resources.dll
+-./sdk/x.y.z/de/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/de/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/de/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/de/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/de/MSBuild.resources.dll
+-./sdk/x.y.z/de/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/de/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/de/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/de/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/de/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/de/NuGet.Common.resources.dll
+ ./sdk/x.y.z/de/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/
+-./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
+@@ ------------ @@
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
++./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Windows.Extensions.dll
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/System.CodeDom.dll
+@@ ------------ @@
+ ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/System.CommandLine.resources.dll
+ ./sdk/x.y.z/es/
+ ./sdk/x.y.z/es/dotnet.resources.dll
+-./sdk/x.y.z/es/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/es/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/es/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/es/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/es/MSBuild.resources.dll
+-./sdk/x.y.z/es/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/es/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/es/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/es/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/es/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/es/NuGet.Common.resources.dll
+ ./sdk/x.y.z/es/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
+ ./sdk/x.y.z/fr/
+ ./sdk/x.y.z/fr/dotnet.resources.dll
+-./sdk/x.y.z/fr/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/fr/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/fr/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/fr/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/fr/MSBuild.resources.dll
+-./sdk/x.y.z/fr/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/fr/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/fr/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/fr/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/fr/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/fr/NuGet.Common.resources.dll
+ ./sdk/x.y.z/fr/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/FSharp/zh-Hant/FSharp.DependencyManager.Nuget.resources.dll
+ ./sdk/x.y.z/it/
+ ./sdk/x.y.z/it/dotnet.resources.dll
+-./sdk/x.y.z/it/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/it/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/it/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/it/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/it/MSBuild.resources.dll
+-./sdk/x.y.z/it/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/it/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/it/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/it/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/it/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/it/NuGet.Common.resources.dll
+ ./sdk/x.y.z/it/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/it/vstest.console.resources.dll
+ ./sdk/x.y.z/ja/
+ ./sdk/x.y.z/ja/dotnet.resources.dll
+-./sdk/x.y.z/ja/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/ja/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/ja/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/ja/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/ja/MSBuild.resources.dll
+-./sdk/x.y.z/ja/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/ja/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/ja/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/ja/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/ja/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/ja/NuGet.Common.resources.dll
+ ./sdk/x.y.z/ja/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/KnownWorkloadManifests.txt
+ ./sdk/x.y.z/ko/
+ ./sdk/x.y.z/ko/dotnet.resources.dll
+-./sdk/x.y.z/ko/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/ko/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/ko/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/ko/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/ko/MSBuild.resources.dll
+-./sdk/x.y.z/ko/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/ko/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/ko/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/ko/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/ko/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/ko/NuGet.Common.resources.dll
+ ./sdk/x.y.z/ko/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/NuGet.Versioning.dll
+ ./sdk/x.y.z/pl/
+ ./sdk/x.y.z/pl/dotnet.resources.dll
+-./sdk/x.y.z/pl/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/pl/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/pl/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/pl/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/pl/MSBuild.resources.dll
+-./sdk/x.y.z/pl/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/pl/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/pl/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/pl/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/pl/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/pl/NuGet.Common.resources.dll
+ ./sdk/x.y.z/pl/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/PortableRuntimeIdentifierGraph.json
+ ./sdk/x.y.z/pt-BR/
+ ./sdk/x.y.z/pt-BR/dotnet.resources.dll
+-./sdk/x.y.z/pt-BR/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/pt-BR/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/pt-BR/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/pt-BR/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/pt-BR/MSBuild.resources.dll
+-./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/pt-BR/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/pt-BR/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/pt-BR/NuGet.Common.resources.dll
+ ./sdk/x.y.z/pt-BR/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/Roslyn/zh-Hant/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
+ ./sdk/x.y.z/ru/
+ ./sdk/x.y.z/ru/dotnet.resources.dll
+-./sdk/x.y.z/ru/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/ru/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/ru/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/ru/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/ru/MSBuild.resources.dll
+-./sdk/x.y.z/ru/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/ru/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/ru/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/ru/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/ru/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/ru/NuGet.Common.resources.dll
+ ./sdk/x.y.z/ru/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets
+-./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets
++./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props
+@@ ------------ @@
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.props
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.targets
++./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/
++./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.6_0.temp.targets
++./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.9_0.temp.targets
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/
+ ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
+@@ ------------ @@
+ ./sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/tr/
+ ./sdk/x.y.z/tr/dotnet.resources.dll
+-./sdk/x.y.z/tr/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/tr/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/tr/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/tr/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/tr/MSBuild.resources.dll
+-./sdk/x.y.z/tr/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/tr/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/tr/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/tr/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/tr/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/tr/NuGet.Common.resources.dll
+ ./sdk/x.y.z/tr/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/vstest.console.runtimeconfig.json
+ ./sdk/x.y.z/zh-Hans/
+ ./sdk/x.y.z/zh-Hans/dotnet.resources.dll
+-./sdk/x.y.z/zh-Hans/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/zh-Hans/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/zh-Hans/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/zh-Hans/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/zh-Hans/MSBuild.resources.dll
+-./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/zh-Hans/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/zh-Hans/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/zh-Hans/NuGet.Common.resources.dll
+ ./sdk/x.y.z/zh-Hans/NuGet.Configuration.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/zh-Hans/vstest.console.resources.dll
+ ./sdk/x.y.z/zh-Hant/
+ ./sdk/x.y.z/zh-Hant/dotnet.resources.dll
+-./sdk/x.y.z/zh-Hant/Microsoft.Build.NuGetSdkResolver.resources.dll
+ ./sdk/x.y.z/zh-Hant/Microsoft.Build.resources.dll
+ ./sdk/x.y.z/zh-Hant/Microsoft.Build.Tasks.Core.resources.dll
+ ./sdk/x.y.z/zh-Hant/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@
+ ./sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ ./sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ ./sdk/x.y.z/zh-Hant/MSBuild.resources.dll
+-./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Console.resources.dll
+-./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.resources.dll
+-./sdk/x.y.z/zh-Hant/NuGet.CommandLine.XPlat.resources.dll
++./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Pack.resources.dll
+ ./sdk/x.y.z/zh-Hant/NuGet.Commands.resources.dll
+ ./sdk/x.y.z/zh-Hant/NuGet.Common.resources.dll
+ ./sdk/x.y.z/zh-Hant/NuGet.Configuration.resources.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
new file mode 100644
index 000000000000..e69de29bb2d1
From 5c57672381f84f3ab9938a0cd1265d9bee4f1913 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 21 Mar 2024 08:23:58 -0700
Subject: [PATCH 15/41] Update assets, log sdk download info during setup
---
.../Config.cs | 9 +-
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 7 +-
.../SdkAssemblyVersionDiffExclusions.txt | 44 ++
.../SdkFileDiffExclusions-linux-any.txt | 2 +-
...MsftToUbSdkAssemblyVersions-linux-x64.diff | 738 ------------------
.../baselines/MsftToUbSdkFiles-win-x64.diff | 269 +++++++
.../xunit.runner.json | 4 +
7 files changed, 327 insertions(+), 746 deletions(-)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/xunit.runner.json
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index ef4fd0e6ebd7..532046d57ce3 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -7,13 +7,17 @@
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
+using Xunit.Abstractions;
+using Xunit.Sdk;
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
public class Config : IDisposable
{
- public Config()
+ IMessageSink _sink;
+ public Config(IMessageSink sink)
{
+ _sink = sink;
BuildVersion = Environment.GetEnvironmentVariable(BuildVersionEnv) ?? throw new InvalidOperationException($"'{BuildVersionEnv}' must be specified");
PortableRid = Environment.GetEnvironmentVariable(PortableRidEnv) ?? throw new InvalidOperationException($"'{PortableRidEnv}' must be specified");
UbSdkArchivePath = Environment.GetEnvironmentVariable(UbSdkTarballPathEnv) ?? throw new InvalidOperationException($"'{UbSdkTarballPathEnv}' must be specified");
@@ -55,6 +59,7 @@ public async Task DownloadMsftSdkArchive()
var client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
var channel = BuildVersion[..5] + "xx";
var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/dotnet-sdk-{TargetRid}{GetArchiveExtension(UbSdkArchivePath)}";
+ _sink.OnMessage(new DiagnosticMessage($"Downloading latest sdk from '{akaMsUrl}'"));
var redirectResponse = await client.GetAsync(akaMsUrl);
// aka.ms returns a 301 for valid redirects and a 302 to Bing for invalid URLs
if (redirectResponse.StatusCode != HttpStatusCode.Moved)
@@ -62,9 +67,11 @@ public async Task DownloadMsftSdkArchive()
throw new InvalidOperationException($"Could not find download link for Microsoft built sdk at '{akaMsUrl}'");
}
var closestUrl = redirectResponse.Headers.Location!.ToString();
+ _sink.OnMessage(new DiagnosticMessage($"Redirected to '{closestUrl}'"));
HttpResponseMessage packageResponse = await client.GetAsync(closestUrl);
var packageUriPath = packageResponse.RequestMessage!.RequestUri!.LocalPath;
_downloadedMsftSdkPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + "." + Path.GetFileName(packageUriPath));
+ _sink.OnMessage(new DiagnosticMessage($"Downloading to '{_downloadedMsftSdkPath}'"));
using (var file = File.Create(_downloadedMsftSdkPath))
{
await packageResponse.Content.CopyToAsync(file);
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 2896655818cf..817f4d57d3df 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -18,12 +18,7 @@
-
-
-
-
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
index e5b0530164f9..86ad25225027 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkAssemblyVersionDiffExclusions.txt
@@ -11,3 +11,47 @@
#
# We do not want to filter-out folder entries, therefore, we should use: '?*' and not just '*'
+./sdk/x.y.z/*/NuGet.Commands.resources.dll
+./sdk/x.y.z/*/NuGet.Common.resources.dll
+./sdk/x.y.z/*/NuGet.Configuration.resources.dll
+./sdk/x.y.z/*/NuGet.Credentials.resources.dll
+./sdk/x.y.z/*/NuGet.DependencyResolver.Core.resources.dll
+./sdk/x.y.z/*/NuGet.Frameworks.resources.dll
+./sdk/x.y.z/*/NuGet.LibraryModel.resources.dll
+./sdk/x.y.z/*/NuGet.Localization.resources.dll
+./sdk/x.y.z/*/NuGet.PackageManagement.resources.dll
+./sdk/x.y.z/*/NuGet.Packaging.Core.resources.dll
+./sdk/x.y.z/*/NuGet.Packaging.resources.dll
+./sdk/x.y.z/*/NuGet.ProjectModel.resources.dll
+./sdk/x.y.z/*/NuGet.Protocol.resources.dll
+./sdk/x.y.z/*/NuGet.Resolver.resources.dll
+./sdk/x.y.z/*/NuGet.Versioning.resources.dll
+./sdk/x.y.z/*/NuGet.VisualStudio.Contracts.resources.dll
+./sdk/x.y.z/*/Test.Utility.resources.dll
+
+
+./sdk/x.y.z/DotnetTools/dotnet-format/dotnet-format.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/*/dotnet-format.resources.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/Microsoft.Bcl.AsyncInterfaces.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/Microsoft.DiaSymReader.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Windows.Extensions.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.CodeDom.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Composition.AttributedModel.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Composition.Convention.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Composition.Hosting.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Composition.Runtime.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Composition.TypedParts.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Configuration.ConfigurationManager.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Diagnostics.EventLog.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Reflection.MetadataLoadContext.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Resources.Extensions.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Security.Cryptography.Pkcs.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Security.Cryptography.ProtectedData.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Security.Cryptography.Xml.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Security.Permissions.dll
+./sdk/x.y.z/DotnetTools/dotnet-format/System.Windows.Extensions.dll
+
+./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/Microsoft.DiaSymReader.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
index 869358959789..1344e262fcf2 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/SdkFileDiffExclusions-linux-any.txt
@@ -9,6 +9,6 @@
# 'folder/*' matches 'folder/' and 'folder/abc'
# 'folder/?*' matches 'folder/abc' but not 'folder/'
-# These files are Windows specific and should never have been in the Microsoft build
+# These files are Windows specific and should not be in the Microsoft build
msft,./sdk/x.y.z/Containers/containerize/*
msft,./sdk/x.y.z/Containers/tasks/net472/*
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
index fb5689c6ca41..e69de29bb2d1 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkAssemblyVersions-linux-x64.diff
@@ -1,738 +0,0 @@
-diff --git a/msft_assemblyversions.txt b/ub_assemblyversions.txt
-index ------------
---- a/msft_assemblyversions.txt
-+++ b/ub_assemblyversions.txt
-@@ ------------ @@ sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\cs\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\cs\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\cs\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\cs\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\cs\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\cs\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\cs\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\cs\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\cs\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\cs\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\de\dotnet.resources.dll - 9.0.100
- sdk\x.y.z\de\Microsoft.Build.resources.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\de\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\de\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\de\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\de\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\de\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\de\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\de\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\de\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\de\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\de\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\dotnet.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-dev-certs\x.y.z\tools/netx.y/any\dotnet-dev-certs.dll - 9.0.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hans\System.CommandLine
- sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\Microsoft.CodeAnalysis.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\BuildHost-netcore\zh-Hant\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\cs\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\cs\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\cs\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\de\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\de\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\de\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\de\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\dotnet-format.dll - 9.0.10
--sdk\x.y.z\DotnetTools\dotnet-format\es\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\dotnet-format.dll - 9.0.100
-+sdk\x.y.z\DotnetTools\dotnet-format\es\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\es\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\es\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\fr\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\fr\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.Workspaces.MSBuild
- sdk\x.y.z\DotnetTools\dotnet-format\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\fr\System.CommandLine.resources.dll - 2.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Humanizer.dll - 2.14.0
--sdk\x.y.z\DotnetTools\dotnet-format\it\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\it\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\it\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\it\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\ja\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\ja\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ja\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\ko\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\ko\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ko\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Bcl.AsyncInterfaces.dll - 8.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Bcl.AsyncInterfaces.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Locator.dll - 1.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Tasks.Core.dll - 15.1.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Build.Utilities.Core.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.VisualBasic.Workspace
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll - 4.10.0
--sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.DiaSymReader.dll - 2.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.DiaSymReader.dll - 2.1.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.DependencyInjection.Abstractions.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.DependencyInjection.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.FileSystemGlobbing.dll - 9.0.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.Extensions.Primitives.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.NET.StringTools.dll - 1.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Microsoft.VisualStudio.Setup.Configuration.Interop.dll - 1.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\Newtonsoft.Json.dll - 13.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\pl\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\pl\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pl\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.VisualBasic.Wor
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\pt-BR\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\ru\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\ru\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\ru\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Security.Cryptography.Pkcs.dll - 7.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Windows.Extensions.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.CodeDom.dll - 7.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Security.Cryptography.Pkcs.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\runtimes\win\lib/netx.y/System.Windows.Extensions.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.CodeDom.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\System.CommandLine.dll - 2.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\System.CommandLine.Rendering.dll - 0.4.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.AttributedModel.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Convention.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Hosting.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Runtime.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.TypedParts.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Configuration.ConfigurationManager.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Diagnostics.EventLog.dll - 8.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.AttributedModel.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Convention.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Hosting.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.Runtime.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Composition.TypedParts.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Configuration.ConfigurationManager.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Diagnostics.EventLog.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-format\System.IO.Pipelines.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Reflection.MetadataLoadContext.dll - 7.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Resources.Extensions.dll - 7.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Pkcs.dll - 7.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.ProtectedData.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Xml.dll - 7.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Permissions.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\System.Windows.Extensions.dll - 8.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\tr\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Reflection.MetadataLoadContext.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Resources.Extensions.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Pkcs.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.ProtectedData.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Cryptography.Xml.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Security.Permissions.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\System.Windows.Extensions.dll - 9.0.0
-+sdk\x.y.z\DotnetTools\dotnet-format\tr\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.VisualBasic.Worksp
- sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\tr\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.VisualBasic.W
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hans\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\dotnet-format.resources.dll - 9.0.10
-+sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\dotnet-format.resources.dll - 9.0.100
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.Features.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-format\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll - 4.10.0
-@@ ------------ @@ sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll - 4.10.0
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll - 4.10.0
--sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.DiaSymReader.dll - 2.0.0
-+sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.DiaSymReader.dll - 2.1.0
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.Extensions.DependencyInjection.Abstractions.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.Extensions.Logging.Abstractions.dll - 9.0.0
- sdk\x.y.z\DotnetTools\dotnet-watch\x.y.z\tools/netx.y/any\Microsoft.VisualStudio.Setup.Configuration.Interop.dll - 1.0.0
-@@ ------------ @@ sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\es\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\es\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\es\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\es\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\es\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\es\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\es\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\es\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\es\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\es\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\Extensions\cs\Microsoft.TestPlatform.Extensions.BlameDataCollector.resources.dll - 15.0.0
- sdk\x.y.z\Extensions\cs\Microsoft.TestPlatform.Extensions.EventLogCollector.resources.dll - 15.0.0
-@@ ------------ @@ sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\fr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\fr\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\fr\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\fr\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\fr\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\fr\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\fr\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\fr\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\fr\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\fr\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\FSharp\cs\FSharp.Build.resources.dll - 12.8.300
- sdk\x.y.z\FSharp\cs\FSharp.Compiler.Interactive.Settings.resources.dll - 12.8.300
-@@ ------------ @@ sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\it\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\it\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\it\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\it\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\it\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\it\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\it\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\it\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\it\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\it\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\ja\dotnet.resources.dll - 9.0.100
- sdk\x.y.z\ja\Microsoft.Build.resources.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\ja\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\ja\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\ja\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\ja\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\ja\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\ja\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\ja\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\ja\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\ja\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\ja\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\ko\dotnet.resources.dll - 9.0.100
- sdk\x.y.z\ko\Microsoft.Build.resources.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\ko\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\ko\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\ko\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\ko\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\ko\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\ko\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\ko\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\ko\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\ko\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\ko\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\Microsoft.ApplicationInsights.dll - 2.22.0
- sdk\x.y.z\Microsoft.AspNetCore.DeveloperCertificates.XPlat.dll - 9.0.0
-@@ ------------ @@ sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\pl\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\pl\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\pl\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\pl\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\pl\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\pl\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\pl\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\pl\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\pl\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\pl\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\pt-BR\dotnet.resources.dll - 9.0.100
- sdk\x.y.z\pt-BR\Microsoft.Build.resources.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.
- sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\pt-BR\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\pt-BR\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\pt-BR\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\pt-BR\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\pt-BR\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\pt-BR\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\pt-BR\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\pt-BR\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\pt-BR\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\pt-BR\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\ref\Microsoft.Build.Framework.dll - 15.1.0
- sdk\x.y.z\ref\Microsoft.Build.Utilities.Core.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\ru\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\ru\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\ru\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\ru\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\ru\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\ru\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\ru\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\ru\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\ru\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\ru\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.dll - 9.0.0
- sdk\x.y.z\runtimes\win\lib/netx.y/System.Diagnostics.EventLog.Messages.dll - 9.0.0
-@@ ------------ @@ sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.0.0
- sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\tr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\tr\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\tr\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\tr\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\tr\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\tr\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\tr\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\tr\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\tr\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\tr\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\vstest.console.dll - 15.0.0
- sdk\x.y.z\zh-Hans\dotnet.resources.dll - 9.0.100
-@@ ------------ @@ sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.
- sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\zh-Hans\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\zh-Hans\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\zh-Hans\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hans\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\zh-Hans\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hans\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\zh-Hans\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\zh-Hans\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\zh-Hans\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\zh-Hans\vstest.console.resources.dll - 15.0.0
- sdk\x.y.z\zh-Hant\dotnet.resources.dll - 9.0.100
- sdk\x.y.z\zh-Hant\Microsoft.Build.resources.dll - 15.1.0
-@@ ------------ @@ sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.Client.resources.dll - 15.
- sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.Common.resources.dll - 15.0.0
- sdk\x.y.z\zh-Hant\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll - 15.0.0
- sdk\x.y.z\zh-Hant\MSBuild.resources.dll - 15.1.0
--sdk\x.y.z\zh-Hant\NuGet.Commands.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Common.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Configuration.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Credentials.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.DependencyResolver.Core.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Frameworks.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.LibraryModel.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Localization.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.PackageManagement.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Packaging.Core.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Packaging.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.ProjectModel.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Protocol.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Resolver.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.Versioning.resources.dll - 6.0.0
--sdk\x.y.z\zh-Hant\NuGet.VisualStudio.Contracts.resources.dll - 6.0.0
-+sdk\x.y.z\zh-Hant\NuGet.Commands.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Common.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Configuration.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Credentials.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.DependencyResolver.Core.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Frameworks.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.LibraryModel.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Localization.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.PackageManagement.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Packaging.Core.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Packaging.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.ProjectModel.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Protocol.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Resolver.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.Versioning.resources.dll - 6.10.0
-+sdk\x.y.z\zh-Hant\NuGet.VisualStudio.Contracts.resources.dll - 17.10.0
- sdk\x.y.z\zh-Hant\System.CommandLine.resources.dll - 2.0.0
--sdk\x.y.z\zh-Hant\Test.Utility.resources.dll - 6.0.0
-+sdk\x.y.z\zh-Hant\Test.Utility.resources.dll - 6.10.0
- sdk\x.y.z\zh-Hant\vstest.console.resources.dll - 15.0.0
- shared\Microsoft.AspNetCore.App\x.y.z\Microsoft.AspNetCore.Antiforgery.dll - 9.0.0
- shared\Microsoft.AspNetCore.App\x.y.z\Microsoft.AspNetCore.Authentication.Abstractions.dll - 9.0.0
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
index e69de29bb2d1..e3af585483e6 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
@@ -0,0 +1,269 @@
+diff --git a/msftSdkFiles.txt b/ubSdkFiles.txt
+index ------------
+--- a/msftSdkFiles.txt
++++ b/ubSdkFiles.txt
+@@ ------------ @@ sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.d
+ sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
+ sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/System.CommandLine.resources.dll
+ sdk/x.y.z/cs/dotnet.resources.dll
+-sdk/x.y.z/cs/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/cs/Microsoft.Build.resources.dll
+ sdk/x.y.z/cs/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/cs/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/cs/MSBuild.resources.dll
+-sdk/x.y.z/cs/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/cs/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/cs/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/cs/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/cs/NuGet.Commands.resources.dll
+ sdk/x.y.z/cs/NuGet.Common.resources.dll
+ sdk/x.y.z/cs/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/datacollector.dll
+ sdk/x.y.z/datacollector.dll.config
+ sdk/x.y.z/datacollector.runtimeconfig.json
+ sdk/x.y.z/de/dotnet.resources.dll
+-sdk/x.y.z/de/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/de/Microsoft.Build.resources.dll
+ sdk/x.y.z/de/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/de/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/de/MSBuild.resources.dll
+-sdk/x.y.z/de/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/de/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/de/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/de/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/de/NuGet.Commands.resources.dll
+ sdk/x.y.z/de/NuGet.Common.resources.dll
+ sdk/x.y.z/de/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/Microsoft.Code
+ sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll
+ sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/System.CommandLine.resources.dll
+ sdk/x.y.z/es/dotnet.resources.dll
+-sdk/x.y.z/es/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/es/Microsoft.Build.resources.dll
+ sdk/x.y.z/es/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/es/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/es/MSBuild.resources.dll
+-sdk/x.y.z/es/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/es/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/es/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/es/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/es/NuGet.Commands.resources.dll
+ sdk/x.y.z/es/NuGet.Common.resources.dll
+ sdk/x.y.z/es/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/Extensions/zh-Hant/Microsoft.TestPlatform.TestHostRuntimeProvider.reso
+ sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Html.TestLogger.resources.dll
+ sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
+ sdk/x.y.z/fr/dotnet.resources.dll
+-sdk/x.y.z/fr/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/fr/Microsoft.Build.resources.dll
+ sdk/x.y.z/fr/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/fr/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/fr/MSBuild.resources.dll
+-sdk/x.y.z/fr/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/fr/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/fr/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/fr/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/fr/NuGet.Commands.resources.dll
+ sdk/x.y.z/fr/NuGet.Common.resources.dll
+ sdk/x.y.z/fr/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/FSharp/zh-Hant/FSharp.Compiler.Service.resources.dll
+ sdk/x.y.z/FSharp/zh-Hant/FSharp.Core.resources.dll
+ sdk/x.y.z/FSharp/zh-Hant/FSharp.DependencyManager.Nuget.resources.dll
+ sdk/x.y.z/it/dotnet.resources.dll
+-sdk/x.y.z/it/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/it/Microsoft.Build.resources.dll
+ sdk/x.y.z/it/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/it/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/it/MSBuild.resources.dll
+-sdk/x.y.z/it/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/it/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/it/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/it/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/it/NuGet.Commands.resources.dll
+ sdk/x.y.z/it/NuGet.Common.resources.dll
+ sdk/x.y.z/it/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/it/System.CommandLine.resources.dll
+ sdk/x.y.z/it/Test.Utility.resources.dll
+ sdk/x.y.z/it/vstest.console.resources.dll
+ sdk/x.y.z/ja/dotnet.resources.dll
+-sdk/x.y.z/ja/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/ja/Microsoft.Build.resources.dll
+ sdk/x.y.z/ja/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/ja/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/ja/MSBuild.resources.dll
+-sdk/x.y.z/ja/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/ja/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/ja/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/ja/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/ja/NuGet.Commands.resources.dll
+ sdk/x.y.z/ja/NuGet.Common.resources.dll
+ sdk/x.y.z/ja/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/ja/Test.Utility.resources.dll
+ sdk/x.y.z/ja/vstest.console.resources.dll
+ sdk/x.y.z/KnownWorkloadManifests.txt
+ sdk/x.y.z/ko/dotnet.resources.dll
+-sdk/x.y.z/ko/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/ko/Microsoft.Build.resources.dll
+ sdk/x.y.z/ko/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/ko/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/ko/MSBuild.resources.dll
+-sdk/x.y.z/ko/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/ko/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/ko/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/ko/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/ko/NuGet.Commands.resources.dll
+ sdk/x.y.z/ko/NuGet.Common.resources.dll
+ sdk/x.y.z/ko/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/NuGet.RestoreEx.targets
+ sdk/x.y.z/NuGet.targets
+ sdk/x.y.z/NuGet.Versioning.dll
+ sdk/x.y.z/pl/dotnet.resources.dll
+-sdk/x.y.z/pl/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/pl/Microsoft.Build.resources.dll
+ sdk/x.y.z/pl/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/pl/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/pl/MSBuild.resources.dll
+-sdk/x.y.z/pl/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/pl/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/pl/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/pl/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/pl/NuGet.Commands.resources.dll
+ sdk/x.y.z/pl/NuGet.Common.resources.dll
+ sdk/x.y.z/pl/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/pl/Test.Utility.resources.dll
+ sdk/x.y.z/pl/vstest.console.resources.dll
+ sdk/x.y.z/PortableRuntimeIdentifierGraph.json
+ sdk/x.y.z/pt-BR/dotnet.resources.dll
+-sdk/x.y.z/pt-BR/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/pt-BR/Microsoft.Build.resources.dll
+ sdk/x.y.z/pt-BR/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/pt-BR/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/pt-BR/MSBuild.resources.dll
+-sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/pt-BR/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/pt-BR/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/pt-BR/NuGet.Commands.resources.dll
+ sdk/x.y.z/pt-BR/NuGet.Common.resources.dll
+ sdk/x.y.z/pt-BR/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/Roslyn/tr/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
+ sdk/x.y.z/Roslyn/zh-Hans/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
+ sdk/x.y.z/Roslyn/zh-Hant/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
+ sdk/x.y.z/ru/dotnet.resources.dll
+-sdk/x.y.z/ru/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/ru/Microsoft.Build.resources.dll
+ sdk/x.y.z/ru/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/ru/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/ru/MSBuild.resources.dll
+-sdk/x.y.z/ru/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/ru/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/ru/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/ru/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/ru/NuGet.Commands.resources.dll
+ sdk/x.y.z/ru/NuGet.Common.resources.dll
+ sdk/x.y.z/ru/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.Stati
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets
+-sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets
++sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props
+@@ ------------ @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Web/tools/net472/Microsoft.NET.Sdk.Web.Tasks.dl
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Web/tools/netx.y/Microsoft.NET.Sdk.Web.Tasks.dll
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.props
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.targets
++sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.6_0.temp.targets
++sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.9_0.temp.targets
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/netx.y/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
+ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WindowsDesktop/LICENSE.TXT
+@@ ------------ @@ sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.TestPlatform.Utilities.resource
+ sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/tr/dotnet.resources.dll
+-sdk/x.y.z/tr/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/tr/Microsoft.Build.resources.dll
+ sdk/x.y.z/tr/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/tr/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/tr/MSBuild.resources.dll
+-sdk/x.y.z/tr/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/tr/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/tr/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/tr/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/tr/NuGet.Commands.resources.dll
+ sdk/x.y.z/tr/NuGet.Common.resources.dll
+ sdk/x.y.z/tr/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/vstest.console.dll
+ sdk/x.y.z/vstest.console.dll.config
+ sdk/x.y.z/vstest.console.runtimeconfig.json
+ sdk/x.y.z/zh-Hans/dotnet.resources.dll
+-sdk/x.y.z/zh-Hans/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/zh-Hans/Microsoft.Build.resources.dll
+ sdk/x.y.z/zh-Hans/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/zh-Hans/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/zh-Hans/MSBuild.resources.dll
+-sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/zh-Hans/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/zh-Hans/NuGet.Commands.resources.dll
+ sdk/x.y.z/zh-Hans/NuGet.Common.resources.dll
+ sdk/x.y.z/zh-Hans/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/zh-Hans/System.CommandLine.resources.dll
+ sdk/x.y.z/zh-Hans/Test.Utility.resources.dll
+ sdk/x.y.z/zh-Hans/vstest.console.resources.dll
+ sdk/x.y.z/zh-Hant/dotnet.resources.dll
+-sdk/x.y.z/zh-Hant/Microsoft.Build.NuGetSdkResolver.resources.dll
+ sdk/x.y.z/zh-Hant/Microsoft.Build.resources.dll
+ sdk/x.y.z/zh-Hant/Microsoft.Build.Tasks.Core.resources.dll
+ sdk/x.y.z/zh-Hant/Microsoft.Build.Utilities.Core.resources.dll
+@@ ------------ @@ sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
+ sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
+ sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
+ sdk/x.y.z/zh-Hant/MSBuild.resources.dll
+-sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Console.resources.dll
+-sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.resources.dll
+-sdk/x.y.z/zh-Hant/NuGet.CommandLine.XPlat.resources.dll
++sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Pack.resources.dll
+ sdk/x.y.z/zh-Hant/NuGet.Commands.resources.dll
+ sdk/x.y.z/zh-Hant/NuGet.Common.resources.dll
+ sdk/x.y.z/zh-Hant/NuGet.Configuration.resources.dll
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/xunit.runner.json b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/xunit.runner.json
new file mode 100644
index 000000000000..6c0d1e49be3e
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/xunit.runner.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
+ "diagnosticMessages": true
+}
From a82bdc9bf3923a5e49420451d99b1e95ecec3daf Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 21 Mar 2024 10:03:54 -0700
Subject: [PATCH 16/41] PR feedback
- Move Directory.Build.props to build UB tests with arcade
- Use msbuild task to run tests rather than exec
- Update old condition for building UB tests
---
.../eng/unifiedBuildValidation.targets | 20 +++++++++++--------
.../content/repo-projects/installer.proj | 2 +-
.../Directory.Build.props | 0
3 files changed, 13 insertions(+), 9 deletions(-)
rename src/SourceBuild/content/test/{ => Microsoft.DotNet.SourceBuild.SmokeTests}/Directory.Build.props (100%)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index b180b6572cf3..2796305e227c 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -9,18 +9,22 @@
AfterTargets="Build"
DependsOnTargets="DetermineSourceBuiltSdkVersion">
+
+ <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH" Value="$(SdkTarballPath)" />
+ <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_TARGET_RID" Value="$(TargetRid)" />
+ <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_PORTABLE_RID" Value="$(PortableRid)" />
+ <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_BUILD_VERSION" Value="$(SourceBuiltSdkVersion)" />
+
+
%(SdkTarballItem.Identity)
+ <_EnvVarRunSettingsPrefix>RunConfiguration.EnvironmentVariables
+ @(_UnifiedBuildValidationEnvVar->'$(RunConfiguration.EnvironmentVariables).%(Identity)=%(Value)')
-
+
diff --git a/src/SourceBuild/content/repo-projects/installer.proj b/src/SourceBuild/content/repo-projects/installer.proj
index 25bf82b69ca6..78459f9977e0 100644
--- a/src/SourceBuild/content/repo-projects/installer.proj
+++ b/src/SourceBuild/content/repo-projects/installer.proj
@@ -148,6 +148,6 @@
UseHardlinksIfPossible="true" />
-
+
diff --git a/src/SourceBuild/content/test/Directory.Build.props b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Directory.Build.props
similarity index 100%
rename from src/SourceBuild/content/test/Directory.Build.props
rename to src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/Directory.Build.props
From 2a70b8a4dca4045199fde6cadd11806d272fd19b Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Fri, 22 Mar 2024 10:37:04 -0700
Subject: [PATCH 17/41] Use one env var to work around msbuild escaping
---
src/SourceBuild/content/Directory.Build.props | 3 +--
.../content/eng/unifiedBuildValidation.targets | 16 ++++++++++------
.../Config.cs | 17 ++++++++++-------
3 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/src/SourceBuild/content/Directory.Build.props b/src/SourceBuild/content/Directory.Build.props
index cdc0c6e87af7..89749fe65848 100644
--- a/src/SourceBuild/content/Directory.Build.props
+++ b/src/SourceBuild/content/Directory.Build.props
@@ -34,7 +34,7 @@
runtime
-
@@ -205,7 +205,6 @@
$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.XPlat.dll'))
$([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.dll'))
- $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff', '$(Configuration)', 'Microsoft.DotNet.SourceBuild.Tasks.SdkArchiveDiff.dll'))
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 2796305e227c..6da0c83ab870 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -2,7 +2,7 @@
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
- $([MSBuild]::NormalizeDirectory('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests'))
+ $([MSBuild]::NormalizePath('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests.csproj'))
%(SdkTarballItem.Identity)
- <_EnvVarRunSettingsPrefix>RunConfiguration.EnvironmentVariables
- @(_UnifiedBuildValidationEnvVar->'$(RunConfiguration.EnvironmentVariables).%(Identity)=%(Value)')
+ @(_UnifiedBuildValidationEnvVar->'%(Identity)=%(Value)')
+ RunConfiguration.EnvironmentVariables.UNIFIED_BUILD_VALIDATION_ARGS=$([MSBuild]::Escape($(EnvironmentVariableRunSettings)))
-
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index 532046d57ce3..c2df0ecb79c8 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -4,6 +4,7 @@
using System;
using System.IO;
+using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
@@ -11,20 +12,22 @@
using Xunit.Sdk;
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
-
public class Config : IDisposable
{
IMessageSink _sink;
public Config(IMessageSink sink)
{
_sink = sink;
- BuildVersion = Environment.GetEnvironmentVariable(BuildVersionEnv) ?? throw new InvalidOperationException($"'{BuildVersionEnv}' must be specified");
- PortableRid = Environment.GetEnvironmentVariable(PortableRidEnv) ?? throw new InvalidOperationException($"'{PortableRidEnv}' must be specified");
- UbSdkArchivePath = Environment.GetEnvironmentVariable(UbSdkTarballPathEnv) ?? throw new InvalidOperationException($"'{UbSdkTarballPathEnv}' must be specified");
- TargetRid = Environment.GetEnvironmentVariable(TargetRidEnv) ?? throw new InvalidOperationException($"'{TargetRidEnv}' must be specified");
+ sink.OnMessage(new DiagnosticMessage($"Environment: '{Environment.GetEnvironmentVariable("UNIFIED_BUILD_VALIDATION_ARGS")}'"));
+ var env = Environment.GetEnvironmentVariable("UNIFIED_BUILD_VALIDATION_ARGS") ?? throw new InvalidOperationException("UNIFIED_BUILD_VALIDATION_ARGS must be specified");
+ var envDict = env.Split(';').Select(s => s.Split('=')).ToDictionary(s => s[0], s => s[1]);
+
+ BuildVersion = envDict[BuildVersionEnv];
+ PortableRid = envDict[PortableRidEnv];
+ UbSdkArchivePath = envDict[UbSdkTarballPathEnv];
+ TargetRid = envDict[TargetRidEnv];
TargetArchitecture = TargetRid.Split('-')[1];
- WarnOnSdkContentDiffs = bool.TryParse(Environment.GetEnvironmentVariable(WarnSdkContentDiffsEnv), out bool warnOnSdkContentDiffs) && warnOnSdkContentDiffs;
- MsftSdkArchivePath = Environment.GetEnvironmentVariable(MsftSdkTarballPathEnv) ?? DownloadMsftSdkArchive().Result;
+ MsftSdkArchivePath = envDict.TryGetValue(MsftSdkTarballPathEnv, out var msftSdkPath) ? msftSdkPath : DownloadMsftSdkArchive().Result;
}
public const string BuildVersionEnv = "UNIFIED_BUILD_VALIDATION_BUILD_VERSION";
From b2f91942f20f675c756a15b3adadcdec4728be05 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 25 Mar 2024 10:32:32 -0700
Subject: [PATCH 18/41] Apply suggestions from code review
Co-authored-by: Viktor Hofer
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 2 --
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 6 +-----
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 6da0c83ab870..f3d414a43c4f 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -25,8 +25,6 @@
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 817f4d57d3df..25a393e3bad3 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,16 +1,12 @@
- net9.0
+ $(NetCurrent)
enable
- false
$(DefaultExcludesInProjectFolder);assets/**/*
-
-
-
From 01e368ff714dfb1bfcec2eca44832f76c3df7d8d Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 25 Mar 2024 14:12:53 -0700
Subject: [PATCH 19/41] PR feedback
- Integrate runtime host config settings instead of EnvVars
- Move version to Versions.props
---
src/SourceBuild/content/eng/Versions.props | 1 +
.../eng/unifiedBuildValidation.targets | 29 ++++++++++------
.../Config.cs | 33 ++++++++-----------
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 25 +++++++++++---
4 files changed, 54 insertions(+), 34 deletions(-)
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 3bf1c64c98b1..56b275402442 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -32,5 +32,6 @@
9.0.0-preview.2.24128.5
2.0.0-beta4.24126.1
+ 7.0.0
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index f3d414a43c4f..43293dfce9a8 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -9,24 +9,33 @@
AfterTargets="Build"
DependsOnTargets="DetermineSourceBuiltSdkVersion">
-
- <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH" Value="$(SdkTarballPath)" />
- <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_TARGET_RID" Value="$(TargetRid)" />
- <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_PORTABLE_RID" Value="$(PortableRid)" />
- <_UnifiedBuildValidationEnvVar Include="UNIFIED_BUILD_VALIDATION_BUILD_VERSION" Value="$(SourceBuiltSdkVersion)" />
-
-
%(SdkTarballItem.Identity)
- @(_UnifiedBuildValidationEnvVar->'%(Identity)=%(Value)')
- RunConfiguration.EnvironmentVariables.UNIFIED_BUILD_VALIDATION_ARGS=$([MSBuild]::Escape($(EnvironmentVariableRunSettings)))
+
+
+ $(SdkTarballPath)
+
+
+ $(TargetRid)
+
+
+ $(PortableRid)
+
+
+ $(SourceBuiltSdkVersion)
+
+
+
+ Microsoft_DotNet_UnifiedBuild_Tests_UbSdkArchivePath=$(SdkTarballPath);
+ Microsoft_DotNet_UnifiedBuild_Tests_TargetRid=$(TargetRid);
+ Microsoft_DotNet_UnifiedBuild_Tests_PortableRid=$(PortableRid);
+ Microsoft_DotNet_UnifiedBuild_Tests_SourceBuiltSdkVersion=$(SourceBuiltSdkVersion);" />
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index c2df0ecb79c8..e132b997ceb1 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -18,29 +18,24 @@ public class Config : IDisposable
public Config(IMessageSink sink)
{
_sink = sink;
- sink.OnMessage(new DiagnosticMessage($"Environment: '{Environment.GetEnvironmentVariable("UNIFIED_BUILD_VALIDATION_ARGS")}'"));
- var env = Environment.GetEnvironmentVariable("UNIFIED_BUILD_VALIDATION_ARGS") ?? throw new InvalidOperationException("UNIFIED_BUILD_VALIDATION_ARGS must be specified");
- var envDict = env.Split(';').Select(s => s.Split('=')).ToDictionary(s => s[0], s => s[1]);
-
- BuildVersion = envDict[BuildVersionEnv];
- PortableRid = envDict[PortableRidEnv];
- UbSdkArchivePath = envDict[UbSdkTarballPathEnv];
- TargetRid = envDict[TargetRidEnv];
+ UbBuildVersion = AppContext.GetSwitch(BuildVersionSwitch);
+ ConfigPrefix = AppContext.GetSwitch(ConfigPrefixSwitch);
+ TargetRid = AppContext.GetSwitch(TargetRidSwitch);
+ PortableRid = AppContext.GetSwitch(PortableRidSwitch);
+ UbSdkArchivePath = AppContext.GetSwitch(UbSdkArchivePathSwitch);
TargetArchitecture = TargetRid.Split('-')[1];
- MsftSdkArchivePath = envDict.TryGetValue(MsftSdkTarballPathEnv, out var msftSdkPath) ? msftSdkPath : DownloadMsftSdkArchive().Result;
+ MsftSdkArchivePath = AppContext.GetSwitch(MsftSdkArchivePathSwitch) ?? DownloadMsftSdkArchive().Result;
}
- public const string BuildVersionEnv = "UNIFIED_BUILD_VALIDATION_BUILD_VERSION";
- public const string MsftSdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_MSFT_SDK_TARBALL_PATH";
- public const string PortableRidEnv = "UNIFIED_BUILD_VALIDATION_PORTABLE_RID";
- public const string PrereqsPathEnv = "UNIFIED_BUILD_VALIDATION_PREREQS_PATH";
- public const string UbSdkTarballPathEnv = "UNIFIED_BUILD_VALIDATION_SDK_TARBALL_PATH";
- public const string SourceBuiltArtifactsPathEnv = "UNIFIED_BUILD_VALIDATION_SOURCEBUILT_ARTIFACTS_PATH";
- public const string TargetRidEnv = "UNIFIED_BUILD_VALIDATION_TARGET_RID";
- public const string WarnSdkContentDiffsEnv = "UNIFIED_BUILD_VALIDATION_WARN_SDK_CONTENT_DIFFS";
+ public const string ConfigSwitchPrefix = "Microsoft.DotNet.UnifiedBuild.Tests.";
+ public const string BuildVersionSwitch = ConfigSwitchPrefix + nameof(UbBuildVersion);
+ public const string TargetRidSwitch = ConfigSwitchPrefix + nameof(TargetRid);
+ public const string PortableRidSwitch = ConfigSwitchPrefix + nameof(PortableRid);
+ public const string UbSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(UbSdkArchivePath);
+ public const string MsftSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(MsftSdkArchivePath);
public string? MsftSdkArchivePath { get; }
- public string BuildVersion { get; }
+ public string UbBuildVersion { get; }
public string PortableRid { get; }
public string UbSdkArchivePath { get; }
public string TargetRid { get; }
@@ -60,7 +55,7 @@ static string GetArchiveExtension(string path)
public async Task DownloadMsftSdkArchive()
{
var client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
- var channel = BuildVersion[..5] + "xx";
+ var channel = UbBuildVersion[..5] + "xx";
var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/dotnet-sdk-{TargetRid}{GetArchiveExtension(UbSdkArchivePath)}";
_sink.OnMessage(new DiagnosticMessage($"Downloading latest sdk from '{akaMsUrl}'"));
var redirectResponse = await client.GetAsync(akaMsUrl);
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 25a393e3bad3..824df8c76ea4 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,4 +1,4 @@
-
+
$(NetCurrent)
@@ -7,14 +7,29 @@
-
-
+
-
+
+
+
+ $(Microsoft_DotNet_UnifiedBuild_Tests_TargetRid)
+
+
+ $(Microsoft_DotNet_UnifiedBuild_Tests_PortableRid)
+
+
+ $(Microsoft_DotNet_UnifiedBuild_Tests_UbBuildVersion)
+
+
+ $(Microsoft_DotNet_UnifiedBuild_Tests_UbSdkArchivePath)
+
+
+ $(Microsoft_DotNet_UnifiedBuild_Tests_MsftSdkArchivePath)
+
+
From 1d0b68be8bbf2b793d3372612ad54aab99d805dd Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 26 Mar 2024 13:59:50 -0700
Subject: [PATCH 20/41] PR Feedback: Use Arcade SDK to get test parameters
without passing from outer build
---
.../content/Directory.Build.targets | 1 +
.../content/eng/build.sourcebuild.targets | 3 +-
.../eng/unifiedBuildValidation.targets | 25 +-
.../content/test/Directory.Build.props | 2 +
.../Config.cs | 11 +-
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 29 +-
.../SdkContentTests.cs | 4 +-
.../baselines/MsftToUbSdkFiles-win-x64.diff | 273 +-----------------
8 files changed, 37 insertions(+), 311 deletions(-)
create mode 100644 src/SourceBuild/content/test/Directory.Build.props
diff --git a/src/SourceBuild/content/Directory.Build.targets b/src/SourceBuild/content/Directory.Build.targets
index 9ebfcf3bbfda..94b538590428 100644
--- a/src/SourceBuild/content/Directory.Build.targets
+++ b/src/SourceBuild/content/Directory.Build.targets
@@ -19,6 +19,7 @@
-->
%(SdkTarballItem.Filename)%(SdkTarballItem.Extension)
+ %(SdkTarballItem.Identity)
$(SdkFilename.Replace('$(SdkFilenamePrefix)','').Replace('-$(TargetRid)$(ArchiveExtension)',''))
diff --git a/src/SourceBuild/content/eng/build.sourcebuild.targets b/src/SourceBuild/content/eng/build.sourcebuild.targets
index a05905856cf0..daaadbc72955 100644
--- a/src/SourceBuild/content/eng/build.sourcebuild.targets
+++ b/src/SourceBuild/content/eng/build.sourcebuild.targets
@@ -40,11 +40,10 @@
$(BaseIntermediateOutputPath)SdkSymbols
$(BaseIntermediateOutputPath)Sdk
- %(SdkTarballItem.Identity)
-
+
-
- %(SdkTarballItem.Identity)
-
-
-
-
- $(SdkTarballPath)
-
-
- $(TargetRid)
-
-
- $(PortableRid)
-
-
- $(SourceBuiltSdkVersion)
-
-
-
+ VSTestLogger=trx;" />
diff --git a/src/SourceBuild/content/test/Directory.Build.props b/src/SourceBuild/content/test/Directory.Build.props
new file mode 100644
index 000000000000..8c119d5413b5
--- /dev/null
+++ b/src/SourceBuild/content/test/Directory.Build.props
@@ -0,0 +1,2 @@
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index e132b997ceb1..76b81ec38dca 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -18,13 +18,12 @@ public class Config : IDisposable
public Config(IMessageSink sink)
{
_sink = sink;
- UbBuildVersion = AppContext.GetSwitch(BuildVersionSwitch);
- ConfigPrefix = AppContext.GetSwitch(ConfigPrefixSwitch);
- TargetRid = AppContext.GetSwitch(TargetRidSwitch);
- PortableRid = AppContext.GetSwitch(PortableRidSwitch);
- UbSdkArchivePath = AppContext.GetSwitch(UbSdkArchivePathSwitch);
+ UbBuildVersion = (string)AppContext.GetData(BuildVersionSwitch);
+ TargetRid = (string)AppContext.GetData(TargetRidSwitch);
+ PortableRid = (string)AppContext.GetData(PortableRidSwitch);
+ UbSdkArchivePath = (string)AppContext.GetData(UbSdkArchivePathSwitch);
TargetArchitecture = TargetRid.Split('-')[1];
- MsftSdkArchivePath = AppContext.GetSwitch(MsftSdkArchivePathSwitch) ?? DownloadMsftSdkArchive().Result;
+ MsftSdkArchivePath = AppContext.GetData(MsftSdkArchivePathSwitch) as string ?? DownloadMsftSdkArchive().Result;
}
public const string ConfigSwitchPrefix = "Microsoft.DotNet.UnifiedBuild.Tests.";
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 824df8c76ea4..6e47edcf5585 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,5 +1,7 @@
-
+
+
+
$(NetCurrent)
enable
@@ -15,21 +17,24 @@
-
+
+
+
+ $(SdkTarballPath)
+
- $(Microsoft_DotNet_UnifiedBuild_Tests_TargetRid)
+ $(TargetRid)
- $(Microsoft_DotNet_UnifiedBuild_Tests_PortableRid)
+ $(PortableRid)
- $(Microsoft_DotNet_UnifiedBuild_Tests_UbBuildVersion)
+ $(SourceBuiltSdkVersion)
-
- $(Microsoft_DotNet_UnifiedBuild_Tests_UbSdkArchivePath)
-
-
- $(Microsoft_DotNet_UnifiedBuild_Tests_MsftSdkArchivePath)
-
-
+
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
index 6c6b57bd8111..6b64deb555ef 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkContentTests.cs
@@ -23,7 +23,7 @@ public class SdkContentTests : TestBase
{
Exclusions Exclusions;
public SdkContentTests(ITestOutputHelper outputHelper, Config config) : base(outputHelper, config)
- {
+ {
Exclusions = new(Config.TargetRid);
}
@@ -196,7 +196,7 @@ private void WriteTarballFileList(string? tarballPath, string outputFileName, bo
}
string fileListing = Utilities.GetTarballContentNames(tarballPath).Aggregate((a, b) => $"{a}{Environment.NewLine}{b}");
- fileListing = BaselineHelper.RemoveRids(fileListing, Config.PortableRidEnv, Config.TargetRid, isPortable);
+ fileListing = BaselineHelper.RemoveRids(fileListing, Config.PortableRid, Config.TargetRid, isPortable);
fileListing = BaselineHelper.RemoveVersions(fileListing);
IEnumerable files = fileListing.Split(Environment.NewLine).OrderBy(path => path);
files = Exclusions.RemoveContentDiffFileExclusions(files, sdkType);
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
index e3af585483e6..86499f04c261 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-win-x64.diff
@@ -2,268 +2,11 @@ diff --git a/msftSdkFiles.txt b/ubSdkFiles.txt
index ------------
--- a/msftSdkFiles.txt
+++ b/ubSdkFiles.txt
-@@ ------------ @@ sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/Microsoft.DotNet.Cli.Utils.resources.d
- sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/Microsoft.NET.Build.Containers.resources.dll
- sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/System.CommandLine.resources.dll
- sdk/x.y.z/cs/dotnet.resources.dll
--sdk/x.y.z/cs/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/cs/Microsoft.Build.resources.dll
- sdk/x.y.z/cs/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/cs/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/cs/MSBuild.resources.dll
--sdk/x.y.z/cs/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/cs/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/cs/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/cs/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/cs/NuGet.Commands.resources.dll
- sdk/x.y.z/cs/NuGet.Common.resources.dll
- sdk/x.y.z/cs/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/datacollector.dll
- sdk/x.y.z/datacollector.dll.config
- sdk/x.y.z/datacollector.runtimeconfig.json
- sdk/x.y.z/de/dotnet.resources.dll
--sdk/x.y.z/de/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/de/Microsoft.Build.resources.dll
- sdk/x.y.z/de/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/de/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/de/MSBuild.resources.dll
--sdk/x.y.z/de/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/de/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/de/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/de/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/de/NuGet.Commands.resources.dll
- sdk/x.y.z/de/NuGet.Common.resources.dll
- sdk/x.y.z/de/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/Microsoft.Code
- sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll
- sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/System.CommandLine.resources.dll
- sdk/x.y.z/es/dotnet.resources.dll
--sdk/x.y.z/es/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/es/Microsoft.Build.resources.dll
- sdk/x.y.z/es/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/es/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/es/MSBuild.resources.dll
--sdk/x.y.z/es/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/es/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/es/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/es/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/es/NuGet.Commands.resources.dll
- sdk/x.y.z/es/NuGet.Common.resources.dll
- sdk/x.y.z/es/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/Extensions/zh-Hant/Microsoft.TestPlatform.TestHostRuntimeProvider.reso
- sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Html.TestLogger.resources.dll
- sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
- sdk/x.y.z/fr/dotnet.resources.dll
--sdk/x.y.z/fr/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/fr/Microsoft.Build.resources.dll
- sdk/x.y.z/fr/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/fr/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/fr/MSBuild.resources.dll
--sdk/x.y.z/fr/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/fr/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/fr/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/fr/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/fr/NuGet.Commands.resources.dll
- sdk/x.y.z/fr/NuGet.Common.resources.dll
- sdk/x.y.z/fr/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/FSharp/zh-Hant/FSharp.Compiler.Service.resources.dll
- sdk/x.y.z/FSharp/zh-Hant/FSharp.Core.resources.dll
- sdk/x.y.z/FSharp/zh-Hant/FSharp.DependencyManager.Nuget.resources.dll
- sdk/x.y.z/it/dotnet.resources.dll
--sdk/x.y.z/it/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/it/Microsoft.Build.resources.dll
- sdk/x.y.z/it/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/it/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/it/MSBuild.resources.dll
--sdk/x.y.z/it/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/it/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/it/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/it/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/it/NuGet.Commands.resources.dll
- sdk/x.y.z/it/NuGet.Common.resources.dll
- sdk/x.y.z/it/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/it/System.CommandLine.resources.dll
- sdk/x.y.z/it/Test.Utility.resources.dll
- sdk/x.y.z/it/vstest.console.resources.dll
- sdk/x.y.z/ja/dotnet.resources.dll
--sdk/x.y.z/ja/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/ja/Microsoft.Build.resources.dll
- sdk/x.y.z/ja/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/ja/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/ja/MSBuild.resources.dll
--sdk/x.y.z/ja/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/ja/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/ja/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/ja/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/ja/NuGet.Commands.resources.dll
- sdk/x.y.z/ja/NuGet.Common.resources.dll
- sdk/x.y.z/ja/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/ja/Test.Utility.resources.dll
- sdk/x.y.z/ja/vstest.console.resources.dll
- sdk/x.y.z/KnownWorkloadManifests.txt
- sdk/x.y.z/ko/dotnet.resources.dll
--sdk/x.y.z/ko/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/ko/Microsoft.Build.resources.dll
- sdk/x.y.z/ko/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/ko/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/ko/MSBuild.resources.dll
--sdk/x.y.z/ko/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/ko/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/ko/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/ko/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/ko/NuGet.Commands.resources.dll
- sdk/x.y.z/ko/NuGet.Common.resources.dll
- sdk/x.y.z/ko/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/NuGet.RestoreEx.targets
- sdk/x.y.z/NuGet.targets
- sdk/x.y.z/NuGet.Versioning.dll
- sdk/x.y.z/pl/dotnet.resources.dll
--sdk/x.y.z/pl/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/pl/Microsoft.Build.resources.dll
- sdk/x.y.z/pl/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/pl/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/pl/MSBuild.resources.dll
--sdk/x.y.z/pl/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/pl/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/pl/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/pl/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/pl/NuGet.Commands.resources.dll
- sdk/x.y.z/pl/NuGet.Common.resources.dll
- sdk/x.y.z/pl/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/pl/Test.Utility.resources.dll
- sdk/x.y.z/pl/vstest.console.resources.dll
- sdk/x.y.z/PortableRuntimeIdentifierGraph.json
- sdk/x.y.z/pt-BR/dotnet.resources.dll
--sdk/x.y.z/pt-BR/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/pt-BR/Microsoft.Build.resources.dll
- sdk/x.y.z/pt-BR/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/pt-BR/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/pt-BR/MSBuild.resources.dll
--sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/pt-BR/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/pt-BR/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/pt-BR/NuGet.Commands.resources.dll
- sdk/x.y.z/pt-BR/NuGet.Common.resources.dll
- sdk/x.y.z/pt-BR/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/Roslyn/tr/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
- sdk/x.y.z/Roslyn/zh-Hans/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
- sdk/x.y.z/Roslyn/zh-Hant/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
- sdk/x.y.z/ru/dotnet.resources.dll
--sdk/x.y.z/ru/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/ru/Microsoft.Build.resources.dll
- sdk/x.y.z/ru/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/ru/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/ru/MSBuild.resources.dll
--sdk/x.y.z/ru/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/ru/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/ru/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/ru/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/ru/NuGet.Commands.resources.dll
- sdk/x.y.z/ru/NuGet.Common.resources.dll
- sdk/x.y.z/ru/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.Stati
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets
--sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets
-+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props
-@@ ------------ @@ sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Web/tools/net472/Microsoft.NET.Sdk.Web.Tasks.dl
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.Web/tools/netx.y/Microsoft.NET.Sdk.Web.Tasks.dll
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.props
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.targets
-+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.6_0.temp.targets
-+sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.9_0.temp.targets
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/netx.y/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
- sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WindowsDesktop/LICENSE.TXT
-@@ ------------ @@ sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.TestPlatform.Utilities.resource
- sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/tr/dotnet.resources.dll
--sdk/x.y.z/tr/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/tr/Microsoft.Build.resources.dll
- sdk/x.y.z/tr/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/tr/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/tr/MSBuild.resources.dll
--sdk/x.y.z/tr/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/tr/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/tr/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/tr/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/tr/NuGet.Commands.resources.dll
- sdk/x.y.z/tr/NuGet.Common.resources.dll
- sdk/x.y.z/tr/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/vstest.console.dll
- sdk/x.y.z/vstest.console.dll.config
- sdk/x.y.z/vstest.console.runtimeconfig.json
- sdk/x.y.z/zh-Hans/dotnet.resources.dll
--sdk/x.y.z/zh-Hans/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/zh-Hans/Microsoft.Build.resources.dll
- sdk/x.y.z/zh-Hans/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/zh-Hans/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/zh-Hans/MSBuild.resources.dll
--sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/zh-Hans/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/zh-Hans/NuGet.Commands.resources.dll
- sdk/x.y.z/zh-Hans/NuGet.Common.resources.dll
- sdk/x.y.z/zh-Hans/NuGet.Configuration.resources.dll
-@@ ------------ @@ sdk/x.y.z/zh-Hans/System.CommandLine.resources.dll
- sdk/x.y.z/zh-Hans/Test.Utility.resources.dll
- sdk/x.y.z/zh-Hans/vstest.console.resources.dll
- sdk/x.y.z/zh-Hant/dotnet.resources.dll
--sdk/x.y.z/zh-Hant/Microsoft.Build.NuGetSdkResolver.resources.dll
- sdk/x.y.z/zh-Hant/Microsoft.Build.resources.dll
- sdk/x.y.z/zh-Hant/Microsoft.Build.Tasks.Core.resources.dll
- sdk/x.y.z/zh-Hant/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@ sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Client.resources.dll
- sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- sdk/x.y.z/zh-Hant/MSBuild.resources.dll
--sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Console.resources.dll
--sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.resources.dll
--sdk/x.y.z/zh-Hant/NuGet.CommandLine.XPlat.resources.dll
-+sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Pack.resources.dll
- sdk/x.y.z/zh-Hant/NuGet.Commands.resources.dll
- sdk/x.y.z/zh-Hant/NuGet.Common.resources.dll
- sdk/x.y.z/zh-Hant/NuGet.Configuration.resources.dll
+@@ ------------ @@ sdk/x.y.z/Microsoft.NET.Sdk.WorkloadManifestReader.dll
+ sdk/x.y.z/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.dll
+ sdk/x.y.z/Microsoft.NET.StringTools.dll
+ sdk/x.y.z/Microsoft.NETCoreSdk.BundledCliTools.props
+-sdk/x.y.z/Microsoft.NETCoreSdk.BundledMSBuildInformation.props
+ sdk/x.y.z/Microsoft.NETCoreSdk.BundledVersions.props
+ sdk/x.y.z/Microsoft.NETFramework.CurrentVersion.props
+ sdk/x.y.z/Microsoft.NETFramework.CurrentVersion.targets
From 6101c31ba82f258c6686ec1e3eb7fe8c088dae72 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 26 Mar 2024 16:11:44 -0700
Subject: [PATCH 21/41] Fix imports issue with test project
---
src/SourceBuild/content/test/Directory.Build.props | 5 +++++
.../Microsoft.DotNet.UnifiedBuild.Tests/Config.cs | 8 ++++----
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 5 ++---
.../Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs | 14 ++++++++++++++
4 files changed, 25 insertions(+), 7 deletions(-)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
diff --git a/src/SourceBuild/content/test/Directory.Build.props b/src/SourceBuild/content/test/Directory.Build.props
index 8c119d5413b5..fca27833af42 100644
--- a/src/SourceBuild/content/test/Directory.Build.props
+++ b/src/SourceBuild/content/test/Directory.Build.props
@@ -1,2 +1,7 @@
+
+
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index 76b81ec38dca..261863f18f62 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -18,10 +18,10 @@ public class Config : IDisposable
public Config(IMessageSink sink)
{
_sink = sink;
- UbBuildVersion = (string)AppContext.GetData(BuildVersionSwitch);
- TargetRid = (string)AppContext.GetData(TargetRidSwitch);
- PortableRid = (string)AppContext.GetData(PortableRidSwitch);
- UbSdkArchivePath = (string)AppContext.GetData(UbSdkArchivePathSwitch);
+ UbBuildVersion = (string)(AppContext.GetData(BuildVersionSwitch) ?? throw new InvalidOperationException("Unified Build version must be specified"));
+ TargetRid = (string)(AppContext.GetData(TargetRidSwitch) ?? throw new InvalidOperationException("Target RID must be specified"));
+ PortableRid = (string)(AppContext.GetData(PortableRidSwitch) ?? throw new InvalidOperationException("Portable RID must be specified"));
+ UbSdkArchivePath = (string)(AppContext.GetData(UbSdkArchivePathSwitch) ?? throw new InvalidOperationException("Unified Build SDK archive path must be specified"));
TargetArchitecture = TargetRid.Split('-')[1];
MsftSdkArchivePath = AppContext.GetData(MsftSdkArchivePathSwitch) as string ?? DownloadMsftSdkArchive().Result;
}
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 6e47edcf5585..ca51f37387c7 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,7 +1,7 @@
+
-
-
+
$(NetCurrent)
enable
@@ -36,5 +36,4 @@
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
new file mode 100644
index 000000000000..f37b17e45d7a
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Microsoft.DotNet.UnifiedBuild.Tests
+{
+ internal enum SdkKind
+ {
+ Microsoft,
+ UnifiedBuild
+ }
+}
From d963e00ceee1d6deeeaee2d9373dd5287cf41c9f Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 26 Mar 2024 16:14:43 -0700
Subject: [PATCH 22/41] Uncommit unnecessary file and remove buildprops
template fluff
---
src/SourceBuild/content/test/Directory.Build.props | 5 -----
.../Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs | 14 --------------
2 files changed, 19 deletions(-)
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
diff --git a/src/SourceBuild/content/test/Directory.Build.props b/src/SourceBuild/content/test/Directory.Build.props
index fca27833af42..8c119d5413b5 100644
--- a/src/SourceBuild/content/test/Directory.Build.props
+++ b/src/SourceBuild/content/test/Directory.Build.props
@@ -1,7 +1,2 @@
-
-
-
-
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
deleted file mode 100644
index f37b17e45d7a..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/SdkKind.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Microsoft.DotNet.UnifiedBuild.Tests
-{
- internal enum SdkKind
- {
- Microsoft,
- UnifiedBuild
- }
-}
From ee8d200035369a863a2b5e918bdceaa35ab02344 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 27 Mar 2024 11:22:02 -0700
Subject: [PATCH 23/41] PR Feedback:
- Use correct format for Versions.props package name
- Pass ExcludeFromDotNetBuild=false to build UBValidation Tests
- Remove DirectoryBuildProps
- Remove gitignore
---
src/SourceBuild/content/eng/Versions.props | 3 +-
.../content/eng/tools/init-build.proj | 5 +-
.../eng/unifiedBuildValidation.targets | 3 +-
.../content/test/Directory.Build.props | 2 -
.../.gitignore | 484 ------------------
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 6 +-
6 files changed, 9 insertions(+), 494 deletions(-)
delete mode 100644 src/SourceBuild/content/test/Directory.Build.props
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 56b275402442..20f5ad816132 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -3,6 +3,7 @@
0.1.0
alpha.1
+ true
2.0.0-beta4.24126.1
- 7.0.0
+ 7.0.0
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index c6e7a6e5cd2f..13e30ae89322 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -122,9 +122,10 @@
Condition="'$(ShortStack)' != 'true' and '$(PortableBuild)' == 'true' and '$(PgoInstrument)' != 'true'" >
+ Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid());ExcludeFromDotNetBuild=false" />
+ Targets="Build"
+ Properties="ExcludeFromDotNetBuild=false" />
+ Properties="ExcludeFromDotNetBuild=false;VsTestUseMSBuildOutput=true" />
diff --git a/src/SourceBuild/content/test/Directory.Build.props b/src/SourceBuild/content/test/Directory.Build.props
deleted file mode 100644
index 8c119d5413b5..000000000000
--- a/src/SourceBuild/content/test/Directory.Build.props
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
deleted file mode 100644
index dd315077a612..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/.gitignore
+++ /dev/null
@@ -1,484 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from `dotnet new gitignore`
-
-# dotenv files
-.env
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# Tye
-.tye/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.tlog
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio 6 auto-generated project file (contains which files were open etc.)
-*.vbp
-
-# Visual Studio 6 workspace and project file (working project files containing files to include in project)
-*.dsw
-*.dsp
-
-# Visual Studio 6 technical files
-*.ncb
-*.aps
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# Visual Studio History (VSHistory) files
-.vshistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
-
-# VS Code files for those working on multiple tools
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Windows Installer files from build outputs
-*.cab
-*.msi
-*.msix
-*.msm
-*.msp
-
-# JetBrains Rider
-*.sln.iml
-.idea/
-
-##
-## Visual studio for Mac
-##
-
-
-# globs
-Makefile.in
-*.userprefs
-*.usertasks
-config.make
-config.status
-aclocal.m4
-install-sh
-autom4te.cache/
-*.tar.gz
-tarballs/
-test-results/
-
-# Mac bundle stuff
-*.dmg
-*.app
-
-# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
-# General
-.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-
-
-# Thumbnails
-._*
-
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-.com.apple.timemachine.donotpresent
-
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-
-# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
-# Windows thumbnail cache files
-Thumbs.db
-ehthumbs.db
-ehthumbs_vista.db
-
-# Dump file
-*.stackdump
-
-# Folder config file
-[Dd]esktop.ini
-
-# Recycle Bin used on file shares
-$RECYCLE.BIN/
-
-# Windows Installer files
-*.cab
-*.msi
-*.msix
-*.msm
-*.msp
-
-# Windows shortcuts
-*.lnk
-
-# Vim temporary swap files
-*.swp
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index ca51f37387c7..de62ae195420 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,6 +1,6 @@
-
+
$(NetCurrent)
@@ -9,7 +9,7 @@
-
+
@@ -19,7 +19,7 @@
+ BeforeTargets="_GenerateRuntimeConfigurationFilesInputCache">
$(SdkTarballPath)
From 51572ba188292e065e3d870b6551486b46487fb2 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 27 Mar 2024 16:05:56 -0700
Subject: [PATCH 24/41] Hardcode path to test project in restore
---
src/SourceBuild/content/eng/tools/init-build.proj | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index fc82ffa5dad4..c3f16180dbaa 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -115,10 +115,10 @@
-
-
From 9cae2dc6ecd7087ab032d4b014411aa45d05b278 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Wed, 27 Mar 2024 21:17:44 -0700
Subject: [PATCH 25/41] Update linux baseline
---
.../baselines/MsftToUbSdkFiles-linux-x64.diff | 280 +-----------------
1 file changed, 7 insertions(+), 273 deletions(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
index a4ee90f6a0e8..fff0fe82ba17 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/assets/baselines/MsftToUbSdkFiles-linux-x64.diff
@@ -2,52 +2,6 @@ diff --git a/msftSdkFiles.txt b/ubSdkFiles.txt
index ------------
--- a/msftSdkFiles.txt
+++ b/ubSdkFiles.txt
-@@ ------------ @@
- ./sdk/x.y.z/Containers/tasks/netx.y/zh-Hant/System.CommandLine.resources.dll
- ./sdk/x.y.z/cs/
- ./sdk/x.y.z/cs/dotnet.resources.dll
--./sdk/x.y.z/cs/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/cs/Microsoft.Build.resources.dll
- ./sdk/x.y.z/cs/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/cs/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/cs/MSBuild.resources.dll
--./sdk/x.y.z/cs/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/cs/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/cs/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/cs/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/cs/NuGet.Commands.resources.dll
- ./sdk/x.y.z/cs/NuGet.Common.resources.dll
- ./sdk/x.y.z/cs/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/datacollector.runtimeconfig.json
- ./sdk/x.y.z/de/
- ./sdk/x.y.z/de/dotnet.resources.dll
--./sdk/x.y.z/de/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/de/Microsoft.Build.resources.dll
- ./sdk/x.y.z/de/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/de/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/de/MSBuild.resources.dll
--./sdk/x.y.z/de/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/de/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/de/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/de/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/de/NuGet.Commands.resources.dll
- ./sdk/x.y.z/de/NuGet.Common.resources.dll
- ./sdk/x.y.z/de/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/
--./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.dll
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Diagnostics.EventLog.Messages.dll
- ./sdk/x.y.z/DotnetTools/dotnet-format/runtimes/win/lib/netx.y/System.Security.Cryptography.Pkcs.dll
@@ ------------ @@
./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/
./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/
@@ -57,230 +11,10 @@ index ------------
./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/runtimes/win/lib/netx.y/System.Windows.Extensions.dll
./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/System.CodeDom.dll
@@ ------------ @@
- ./sdk/x.y.z/DotnetTools/dotnet-watch/x.y.z/tools/netx.y/any/zh-Hant/System.CommandLine.resources.dll
- ./sdk/x.y.z/es/
- ./sdk/x.y.z/es/dotnet.resources.dll
--./sdk/x.y.z/es/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/es/Microsoft.Build.resources.dll
- ./sdk/x.y.z/es/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/es/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/es/MSBuild.resources.dll
--./sdk/x.y.z/es/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/es/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/es/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/es/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/es/NuGet.Commands.resources.dll
- ./sdk/x.y.z/es/NuGet.Common.resources.dll
- ./sdk/x.y.z/es/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/Extensions/zh-Hant/Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger.resources.dll
- ./sdk/x.y.z/fr/
- ./sdk/x.y.z/fr/dotnet.resources.dll
--./sdk/x.y.z/fr/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/fr/Microsoft.Build.resources.dll
- ./sdk/x.y.z/fr/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/fr/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/fr/MSBuild.resources.dll
--./sdk/x.y.z/fr/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/fr/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/fr/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/fr/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/fr/NuGet.Commands.resources.dll
- ./sdk/x.y.z/fr/NuGet.Common.resources.dll
- ./sdk/x.y.z/fr/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/FSharp/zh-Hant/FSharp.DependencyManager.Nuget.resources.dll
- ./sdk/x.y.z/it/
- ./sdk/x.y.z/it/dotnet.resources.dll
--./sdk/x.y.z/it/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/it/Microsoft.Build.resources.dll
- ./sdk/x.y.z/it/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/it/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/it/MSBuild.resources.dll
--./sdk/x.y.z/it/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/it/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/it/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/it/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/it/NuGet.Commands.resources.dll
- ./sdk/x.y.z/it/NuGet.Common.resources.dll
- ./sdk/x.y.z/it/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/it/vstest.console.resources.dll
- ./sdk/x.y.z/ja/
- ./sdk/x.y.z/ja/dotnet.resources.dll
--./sdk/x.y.z/ja/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/ja/Microsoft.Build.resources.dll
- ./sdk/x.y.z/ja/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/ja/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/ja/MSBuild.resources.dll
--./sdk/x.y.z/ja/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/ja/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/ja/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/ja/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/ja/NuGet.Commands.resources.dll
- ./sdk/x.y.z/ja/NuGet.Common.resources.dll
- ./sdk/x.y.z/ja/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/KnownWorkloadManifests.txt
- ./sdk/x.y.z/ko/
- ./sdk/x.y.z/ko/dotnet.resources.dll
--./sdk/x.y.z/ko/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/ko/Microsoft.Build.resources.dll
- ./sdk/x.y.z/ko/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/ko/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/ko/MSBuild.resources.dll
--./sdk/x.y.z/ko/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/ko/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/ko/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/ko/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/ko/NuGet.Commands.resources.dll
- ./sdk/x.y.z/ko/NuGet.Common.resources.dll
- ./sdk/x.y.z/ko/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/NuGet.Versioning.dll
- ./sdk/x.y.z/pl/
- ./sdk/x.y.z/pl/dotnet.resources.dll
--./sdk/x.y.z/pl/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/pl/Microsoft.Build.resources.dll
- ./sdk/x.y.z/pl/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/pl/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/pl/MSBuild.resources.dll
--./sdk/x.y.z/pl/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/pl/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/pl/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/pl/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/pl/NuGet.Commands.resources.dll
- ./sdk/x.y.z/pl/NuGet.Common.resources.dll
- ./sdk/x.y.z/pl/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/PortableRuntimeIdentifierGraph.json
- ./sdk/x.y.z/pt-BR/
- ./sdk/x.y.z/pt-BR/dotnet.resources.dll
--./sdk/x.y.z/pt-BR/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/pt-BR/Microsoft.Build.resources.dll
- ./sdk/x.y.z/pt-BR/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/pt-BR/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/pt-BR/MSBuild.resources.dll
--./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/pt-BR/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/pt-BR/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/pt-BR/NuGet.Commands.resources.dll
- ./sdk/x.y.z/pt-BR/NuGet.Common.resources.dll
- ./sdk/x.y.z/pt-BR/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/Roslyn/zh-Hant/Microsoft.Build.Tasks.CodeAnalysis.resources.dll
- ./sdk/x.y.z/ru/
- ./sdk/x.y.z/ru/dotnet.resources.dll
--./sdk/x.y.z/ru/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/ru/Microsoft.Build.resources.dll
- ./sdk/x.y.z/ru/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/ru/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/ru/MSBuild.resources.dll
--./sdk/x.y.z/ru/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/ru/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/ru/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/ru/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/ru/NuGet.Commands.resources.dll
- ./sdk/x.y.z/ru/NuGet.Common.resources.dll
- ./sdk/x.y.z/ru/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.References.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.5_0.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ScopedCss.targets
--./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorkerAssetsManifest.targets
-+./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.SingleTargeting.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Microsoft.NET.Sdk.StaticWebAssets.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.StaticWebAssets/targets/Sdk.StaticWebAssets.CurrentVersion.props
-@@ ------------ @@
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.props
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/Sdk/Sdk.targets
-+./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/
-+./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.6_0.temp.targets
-+./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/targets/Microsoft.NET.Sdk.WebAssembly.9_0.temp.targets
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/
- ./sdk/x.y.z/Sdks/Microsoft.NET.Sdk.WebAssembly/tools/net472/Microsoft.NET.Sdk.WebAssembly.Tasks.dll
-@@ ------------ @@
- ./sdk/x.y.z/TestHostNetFramework/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/tr/
- ./sdk/x.y.z/tr/dotnet.resources.dll
--./sdk/x.y.z/tr/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/tr/Microsoft.Build.resources.dll
- ./sdk/x.y.z/tr/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/tr/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/tr/MSBuild.resources.dll
--./sdk/x.y.z/tr/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/tr/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/tr/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/tr/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/tr/NuGet.Commands.resources.dll
- ./sdk/x.y.z/tr/NuGet.Common.resources.dll
- ./sdk/x.y.z/tr/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/vstest.console.runtimeconfig.json
- ./sdk/x.y.z/zh-Hans/
- ./sdk/x.y.z/zh-Hans/dotnet.resources.dll
--./sdk/x.y.z/zh-Hans/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/zh-Hans/Microsoft.Build.resources.dll
- ./sdk/x.y.z/zh-Hans/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/zh-Hans/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/zh-Hans/MSBuild.resources.dll
--./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/zh-Hans/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/zh-Hans/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/zh-Hans/NuGet.Commands.resources.dll
- ./sdk/x.y.z/zh-Hans/NuGet.Common.resources.dll
- ./sdk/x.y.z/zh-Hans/NuGet.Configuration.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/zh-Hans/vstest.console.resources.dll
- ./sdk/x.y.z/zh-Hant/
- ./sdk/x.y.z/zh-Hant/dotnet.resources.dll
--./sdk/x.y.z/zh-Hant/Microsoft.Build.NuGetSdkResolver.resources.dll
- ./sdk/x.y.z/zh-Hant/Microsoft.Build.resources.dll
- ./sdk/x.y.z/zh-Hant/Microsoft.Build.Tasks.Core.resources.dll
- ./sdk/x.y.z/zh-Hant/Microsoft.Build.Utilities.Core.resources.dll
-@@ ------------ @@
- ./sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- ./sdk/x.y.z/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
- ./sdk/x.y.z/zh-Hant/MSBuild.resources.dll
--./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Console.resources.dll
--./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.resources.dll
--./sdk/x.y.z/zh-Hant/NuGet.CommandLine.XPlat.resources.dll
-+./sdk/x.y.z/zh-Hant/NuGet.Build.Tasks.Pack.resources.dll
- ./sdk/x.y.z/zh-Hant/NuGet.Commands.resources.dll
- ./sdk/x.y.z/zh-Hant/NuGet.Common.resources.dll
- ./sdk/x.y.z/zh-Hant/NuGet.Configuration.resources.dll
+ ./sdk/x.y.z/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.dll
+ ./sdk/x.y.z/Microsoft.NET.StringTools.dll
+ ./sdk/x.y.z/Microsoft.NETCoreSdk.BundledCliTools.props
+-./sdk/x.y.z/Microsoft.NETCoreSdk.BundledMSBuildInformation.props
+ ./sdk/x.y.z/Microsoft.NETCoreSdk.BundledVersions.props
+ ./sdk/x.y.z/Microsoft.NETFramework.CurrentVersion.props
+ ./sdk/x.y.z/Microsoft.NETFramework.CurrentVersion.targets
From 8abbbd32e0914bd95075923f3237a0e7ade78b8a Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 28 Mar 2024 11:02:07 -0700
Subject: [PATCH 26/41] Don't fail build on failing test
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 0746ea4d51ca..c9cca12dcf4f 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -11,6 +11,7 @@
From 8bc48d75f04a9ec95b8f895c470867f85156191c Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 28 Mar 2024 14:44:46 -0700
Subject: [PATCH 27/41] Add Readme, just warn on baseline mismatch, log test
info
---
.../eng/unifiedBuildValidation.targets | 2 +-
.../Config.cs | 52 +++++++++++++------
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 8 +++
.../Readme.md | 26 ++++++++++
4 files changed, 71 insertions(+), 17 deletions(-)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Readme.md
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index c9cca12dcf4f..f44a81aa34dd 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -12,7 +12,7 @@
+ Properties="ExcludeFromDotNetBuild=false;VsTestUseMSBuildOutput=false" />
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index 261863f18f62..80adcabcf051 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -14,7 +14,17 @@
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
public class Config : IDisposable
{
+ public string MsftSdkArchivePath { get; }
+ public string UbBuildVersion { get; }
+ public string PortableRid { get; }
+ public string UbSdkArchivePath { get; }
+ public string TargetRid { get; }
+ public string TargetArchitecture { get; }
+ public bool WarnOnSdkContentDiffs { get; }
+
+ string? _downloadedMsftSdkPath = null;
IMessageSink _sink;
+
public Config(IMessageSink sink)
{
_sink = sink;
@@ -23,24 +33,34 @@ public Config(IMessageSink sink)
PortableRid = (string)(AppContext.GetData(PortableRidSwitch) ?? throw new InvalidOperationException("Portable RID must be specified"));
UbSdkArchivePath = (string)(AppContext.GetData(UbSdkArchivePathSwitch) ?? throw new InvalidOperationException("Unified Build SDK archive path must be specified"));
TargetArchitecture = TargetRid.Split('-')[1];
- MsftSdkArchivePath = AppContext.GetData(MsftSdkArchivePathSwitch) as string ?? DownloadMsftSdkArchive().Result;
+ WarnOnSdkContentDiffs = bool.Parse((string)(AppContext.GetData(WarnOnSdkContentDiffsSwitch) ?? "false"));
+ MsftSdkArchivePath = (string)AppContext.GetData(MsftSdkArchivePathSwitch)!;
+ if (string.IsNullOrEmpty(MsftSdkArchivePath))
+ {
+ MsftSdkArchivePath = DownloadMsftSdkArchive().Result;
+ }
+ else {
+ sink.OnMessage(new DiagnosticMessage($"Skipping downloading latest SDK. Using provided sdk archive: '{MsftSdkArchivePath}'"));
+ }
+ sink.OnMessage(new DiagnosticMessage($$"""
+ Test config values:
+ {{nameof(UbBuildVersion)}}='{{UbBuildVersion}}'
+ {{nameof(TargetRid)}}='{{TargetRid}}'
+ {{nameof(PortableRid)}}='{{PortableRid}}'
+ {{nameof(UbSdkArchivePath)}}='{{UbSdkArchivePath}}'
+ {{nameof(TargetArchitecture)}}='{{TargetArchitecture}}'
+ {{nameof(WarnOnSdkContentDiffs)}}='{{WarnOnSdkContentDiffs}}'
+ {{nameof(MsftSdkArchivePath)}}='{{MsftSdkArchivePath}}'
+ """));
}
- public const string ConfigSwitchPrefix = "Microsoft.DotNet.UnifiedBuild.Tests.";
- public const string BuildVersionSwitch = ConfigSwitchPrefix + nameof(UbBuildVersion);
- public const string TargetRidSwitch = ConfigSwitchPrefix + nameof(TargetRid);
- public const string PortableRidSwitch = ConfigSwitchPrefix + nameof(PortableRid);
- public const string UbSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(UbSdkArchivePath);
- public const string MsftSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(MsftSdkArchivePath);
-
- public string? MsftSdkArchivePath { get; }
- public string UbBuildVersion { get; }
- public string PortableRid { get; }
- public string UbSdkArchivePath { get; }
- public string TargetRid { get; }
- public string TargetArchitecture { get; }
- public bool WarnOnSdkContentDiffs { get; }
- string? _downloadedMsftSdkPath = null;
+ const string ConfigSwitchPrefix = "Microsoft.DotNet.UnifiedBuild.Tests.";
+ const string BuildVersionSwitch = ConfigSwitchPrefix + nameof(UbBuildVersion);
+ const string TargetRidSwitch = ConfigSwitchPrefix + nameof(TargetRid);
+ const string PortableRidSwitch = ConfigSwitchPrefix + nameof(PortableRid);
+ const string UbSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(UbSdkArchivePath);
+ const string MsftSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(MsftSdkArchivePath);
+ const string WarnOnSdkContentDiffsSwitch = ConfigSwitchPrefix + nameof(WarnOnSdkContentDiffs);
static string GetArchiveExtension(string path)
{
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index de62ae195420..31301c332476 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -6,6 +6,7 @@
$(NetCurrent)
enable
$(DefaultExcludesInProjectFolder);assets/**/*
+ true
@@ -33,6 +34,13 @@
$(SourceBuiltSdkVersion)
+
+ $(UBTestsWarnOnSdkContentDiffs)
+
+
+
+ $(UBTestsMsftSdkArchivePath)
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Readme.md b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Readme.md
new file mode 100644
index 000000000000..49568f86a462
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Readme.md
@@ -0,0 +1,26 @@
+# Unified Build Validation Tests
+
+This project compares the output of the Unified Build system with the official Microsoft Build. There are tests to compare the list of files in the SDK archive, and the versions of each managed assembly in each SDK.
+Files can be excluded from each comparison in by placing the file name in one of the files in the `assets/` folder. Each file will apply to a all or a subset of RIDs depending on the suffix of the filename. For example, filenames in SdkFileDiffExclusions-linux-any.txt will be excluded from all linux SDK comparisons.
+
+| File Name | Purpose |
+|--------------------------------------|------------------------------------------------------------------------------------------------------------------------|
+| SdkFileDiffExclusions.txt | Files that should not be included in any file comparisons |
+| NativeDlls.txt | Files that end in .dll or .exe that are not managed assemblies and should be excluded from assembly version validation |
+| SdkAssemblyVersionDiffExclusions.txt | Files that should not be included in the assembly version validation for any other reason |
+
+## SDK archive file list comparison
+
+The files of each sdk archive iterated through, filtered and the name is written to `msftSdkFiles.txt` or `ubSdkFiles.txt` in the same directory as the test assembly. Then the test runs `git diff --no-index msftSdkFiles.txt ubSdkFiles.txt` and writes stdout to `$(OutDir)/log/UpdatedMsftToUbSdkFiles-{Rid}.diff`. This diff is then compared with the expected baseline in `./assets/baselines/MsftToUbSdkFiles-{Rid}.diff`. If the baselines are not identical, the test fails.
+
+### Updating the baseline
+
+If the test fails, but you've inspected the `UpdatedMsftToUbSdkFiles-{RID}.diff` and the changes are expected, then overwrite `./assets/baselines/MsftToUbSdkFiles-{Rid}.diff` with the updated baseline diff.
+
+## Sdk assembly version comparison
+
+This is done the similarly to the file comparison, but only looks at files that end in `.dll` or `.exe`, and filters out filename in `SdkFileDiffExclusions.txt`, `NativeDlls.txt`, and `SdkAssemblyVersionDiffExclusions.txt`. Each file name and the assembly version are written to `ub_assemblyversions.txt` or `msft_assemblyversions.txt`. Those files are then `git diff`'ed, and stdout is written to `$(OutDir)/log/UpdatedMsftToUbSdkAssemblyVersions-{Rid}.diff`. Then, the test diffs that with the baseline.
+
+### Updating the baseline
+
+If the test fails and the changes to the baseline are expected, the overwrite `./assets/baselines/MsftToUbSdkFiles-{RID}.diff` with the updated baseline.
From a29048822eadcf9b338f0fd421139a2b179df69d Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Thu, 28 Mar 2024 18:10:44 -0700
Subject: [PATCH 28/41] Set correct test loggers to log all messages from test,
add msftsdkpath option for debugging
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 2 +-
.../content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs | 1 +
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 2 ++
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index f44a81aa34dd..c9cca12dcf4f 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -12,7 +12,7 @@
+ Properties="ExcludeFromDotNetBuild=false;VsTestUseMSBuildOutput=true" />
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index 80adcabcf051..b98834c77e66 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -8,6 +8,7 @@
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
+using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 31301c332476..db3655742cb0 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -7,10 +7,12 @@
enable
$(DefaultExcludesInProjectFolder);assets/**/*
true
+ console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic
+
From 474ab95b9aae753568bf1478f038a8a8bb3cd697 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Fri, 29 Mar 2024 13:54:59 -0700
Subject: [PATCH 29/41] Set test results output dir, set ContinueOnError=true
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 2 +-
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index c9cca12dcf4f..6bfea34e0c6c 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -11,7 +11,7 @@
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index db3655742cb0..53d55d763e21 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -8,6 +8,7 @@
$(DefaultExcludesInProjectFolder);assets/**/*
true
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic
+ $(ArtifactsTestResultsDir)
From e15c0f1bd6ce38314abee06154aa7518a2446e21 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Fri, 29 Mar 2024 15:29:57 -0700
Subject: [PATCH 30/41] Use .xml test result extension
---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 53d55d763e21..c0c6c9262843 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -7,7 +7,7 @@
enable
$(DefaultExcludesInProjectFolder);assets/**/*
true
- console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic
+ console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Texts.xml
$(ArtifactsTestResultsDir)
From 71cc6ce6a68583faa998103da9ea5299b99747ed Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Fri, 29 Mar 2024 15:59:20 -0700
Subject: [PATCH 31/41] Update
src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
Co-authored-by: Viktor Hofer
---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index c0c6c9262843..e61ed09769d3 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -7,7 +7,7 @@
enable
$(DefaultExcludesInProjectFolder);assets/**/*
true
- console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Texts.xml
+ console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
From 803aacb6566be2a45febffd93993d6057849db07 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Fri, 29 Mar 2024 16:08:45 -0700
Subject: [PATCH 32/41] Update
src/SourceBuild/content/eng/unifiedBuildValidation.targets
Co-authored-by: Viktor Hofer
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 6bfea34e0c6c..4dc8c9a2039c 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -6,8 +6,7 @@
+ AfterTargets="Build">
Date: Fri, 29 Mar 2024 16:10:38 -0700
Subject: [PATCH 33/41] Hardcode path to project file
---
src/SourceBuild/content/eng/unifiedBuildValidation.targets | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
index 4dc8c9a2039c..df2e94f78b46 100644
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
@@ -1,14 +1,9 @@
-
- $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'test', 'Microsoft.DotNet.UnifiedBuild.Tests'))
- $([MSBuild]::NormalizePath('$(UnifiedBuildValidationTestsDir)', 'Microsoft.DotNet.UnifiedBuild.Tests.csproj'))
-
-
-
From 7ba27a5ea8c6c23426a2143b6f51a5f19dda6ea8 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 1 Apr 2024 09:37:42 -0700
Subject: [PATCH 34/41] PR Feedback:
- Remove reference to Logging package
- Update FileGlobbing Version to 8.0
- Move Validation target to installer repo-projects project
- Set VSTestUseMSBuildOutput=true in test project file
---
src/SourceBuild/content/Directory.Build.props | 2 ++
src/SourceBuild/content/eng/Versions.props | 2 +-
.../content/eng/unifiedBuildValidation.targets | 13 -------------
.../content/repo-projects/installer.proj | 9 ++++++++-
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 4 +---
5 files changed, 12 insertions(+), 18 deletions(-)
delete mode 100644 src/SourceBuild/content/eng/unifiedBuildValidation.targets
diff --git a/src/SourceBuild/content/Directory.Build.props b/src/SourceBuild/content/Directory.Build.props
index 44fbdcb06a03..b3265733ede7 100644
--- a/src/SourceBuild/content/Directory.Build.props
+++ b/src/SourceBuild/content/Directory.Build.props
@@ -137,6 +137,8 @@
true
true
+
+ true
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 20f5ad816132..272ed3018dc5 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -33,6 +33,6 @@
9.0.0-preview.2.24128.5
2.0.0-beta4.24126.1
- 7.0.0
+ 8.0.0
diff --git a/src/SourceBuild/content/eng/unifiedBuildValidation.targets b/src/SourceBuild/content/eng/unifiedBuildValidation.targets
deleted file mode 100644
index df2e94f78b46..000000000000
--- a/src/SourceBuild/content/eng/unifiedBuildValidation.targets
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/SourceBuild/content/repo-projects/installer.proj b/src/SourceBuild/content/repo-projects/installer.proj
index 78459f9977e0..bbb6d778fdd5 100644
--- a/src/SourceBuild/content/repo-projects/installer.proj
+++ b/src/SourceBuild/content/repo-projects/installer.proj
@@ -148,6 +148,13 @@
UseHardlinksIfPossible="true" />
-
+
+
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index e61ed09769d3..9fa6a847b8fe 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -1,7 +1,5 @@
-
-
$(NetCurrent)
enable
@@ -9,11 +7,11 @@
true
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
+ true
-
From 266aaabc469ef4eadd5fba335c100934d0836197 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 1 Apr 2024 10:28:17 -0700
Subject: [PATCH 35/41] Make test project self-contained to work around
framework resolution issues
---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 9fa6a847b8fe..435880f6711e 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -8,6 +8,10 @@
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
true
+
+
+ true
+ $(BuildRid)
From 0ee472fc9ec258d6deffd3046fa86154c470c6fb Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 1 Apr 2024 10:47:49 -0700
Subject: [PATCH 36/41] Use portable BuildRid instead of distro specific rid
---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index 435880f6711e..c10b3f2d40a3 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -11,7 +11,7 @@
true
- $(BuildRid)
+ $([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)
From 56f1dfab5d7b3575fc360b25c75d7840469b6500 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 1 Apr 2024 11:29:12 -0700
Subject: [PATCH 37/41] Don't build self-contained
---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 4 ----
1 file changed, 4 deletions(-)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index c10b3f2d40a3..9fa6a847b8fe 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -8,10 +8,6 @@
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
true
-
-
- true
- $([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)
From 60306f3cbb7f616ff2044f7642e945001ffecbfa Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Mon, 1 Apr 2024 13:55:14 -0700
Subject: [PATCH 38/41] Remove ExcludeFromDotnetBuild from restore target, add
nugetconfig for test
---
src/SourceBuild/content/eng/tools/init-build.proj | 5 ++---
.../Microsoft.DotNet.UnifiedBuild.Tests.csproj | 4 ++++
.../test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config | 6 ++++++
3 files changed, 12 insertions(+), 3 deletions(-)
create mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index 32ceb5ffcf79..d8c659214f6e 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -117,10 +117,9 @@
Condition="'$(ShortStack)' != 'true' and '$(PortableBuild)' == 'true' and '$(PgoInstrument)' != 'true'" >
+ Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())" />
+ Targets="Build" />
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
true
+
+
+ true
+ $([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
new file mode 100644
index 000000000000..e3c623ae1e1b
--- /dev/null
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
From 6acbd2fd35b700825147f31c7f4fcea397ebae7c Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 2 Apr 2024 11:26:35 -0700
Subject: [PATCH 39/41] PR feedback:
- Remove setting VSTestUseMSBuildOutput
- Set DotnetHostPath in runsettings
- Silence output if using msbuild logger
- Remove nuget config
- Don't publish self-contained
---
src/SourceBuild/content/eng/Versions.props | 1 -
.../content/repo-projects/installer.proj | 5 ++--
.../Config.cs | 28 +++++++++++++++----
...Microsoft.DotNet.UnifiedBuild.Tests.csproj | 8 +++---
.../NuGet.config | 6 ----
5 files changed, 28 insertions(+), 20 deletions(-)
delete mode 100644 src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index ff8bb56557f9..6bb590a6bda5 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -33,6 +33,5 @@
9.0.0-preview.2.24128.5
2.0.0-beta4.24126.1
- 8.0.0
diff --git a/src/SourceBuild/content/repo-projects/installer.proj b/src/SourceBuild/content/repo-projects/installer.proj
index bbb6d778fdd5..04341f804920 100644
--- a/src/SourceBuild/content/repo-projects/installer.proj
+++ b/src/SourceBuild/content/repo-projects/installer.proj
@@ -150,11 +150,10 @@
+ Condition="'$(PortableBuild)' == 'true' and '$(PgoInstrument)' != 'true' and '$(DotNetBuildSourceOnly)' != 'true'">
+ ContinueOnError="true" />
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
index b98834c77e66..61e14a22d4fa 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Config.cs
@@ -22,6 +22,7 @@ public class Config : IDisposable
public string TargetRid { get; }
public string TargetArchitecture { get; }
public bool WarnOnSdkContentDiffs { get; }
+ public bool NoDiagnosticMessages { get; }
string? _downloadedMsftSdkPath = null;
IMessageSink _sink;
@@ -29,6 +30,8 @@ public class Config : IDisposable
public Config(IMessageSink sink)
{
_sink = sink;
+ string? noDiagnosticMessages = (string?)AppContext.GetData(NoDiagnosticMessagesSwitch);
+ NoDiagnosticMessages = string.IsNullOrEmpty(noDiagnosticMessages) ? false : bool.Parse(noDiagnosticMessages);
UbBuildVersion = (string)(AppContext.GetData(BuildVersionSwitch) ?? throw new InvalidOperationException("Unified Build version must be specified"));
TargetRid = (string)(AppContext.GetData(TargetRidSwitch) ?? throw new InvalidOperationException("Target RID must be specified"));
PortableRid = (string)(AppContext.GetData(PortableRidSwitch) ?? throw new InvalidOperationException("Portable RID must be specified"));
@@ -41,9 +44,9 @@ public Config(IMessageSink sink)
MsftSdkArchivePath = DownloadMsftSdkArchive().Result;
}
else {
- sink.OnMessage(new DiagnosticMessage($"Skipping downloading latest SDK. Using provided sdk archive: '{MsftSdkArchivePath}'"));
+ LogMessage($"Skipping downloading latest SDK. Using provided sdk archive: '{MsftSdkArchivePath}'");
}
- sink.OnMessage(new DiagnosticMessage($$"""
+ LogMessage($$"""
Test config values:
{{nameof(UbBuildVersion)}}='{{UbBuildVersion}}'
{{nameof(TargetRid)}}='{{TargetRid}}'
@@ -52,7 +55,8 @@ public Config(IMessageSink sink)
{{nameof(TargetArchitecture)}}='{{TargetArchitecture}}'
{{nameof(WarnOnSdkContentDiffs)}}='{{WarnOnSdkContentDiffs}}'
{{nameof(MsftSdkArchivePath)}}='{{MsftSdkArchivePath}}'
- """));
+ {{nameof(NoDiagnosticMessages)}}='{{NoDiagnosticMessages}}'
+ """);
}
const string ConfigSwitchPrefix = "Microsoft.DotNet.UnifiedBuild.Tests.";
@@ -62,6 +66,7 @@ public Config(IMessageSink sink)
const string UbSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(UbSdkArchivePath);
const string MsftSdkArchivePathSwitch = ConfigSwitchPrefix + nameof(MsftSdkArchivePath);
const string WarnOnSdkContentDiffsSwitch = ConfigSwitchPrefix + nameof(WarnOnSdkContentDiffs);
+ const string NoDiagnosticMessagesSwitch = ConfigSwitchPrefix + nameof(NoDiagnosticMessages);
static string GetArchiveExtension(string path)
{
@@ -77,7 +82,7 @@ public async Task DownloadMsftSdkArchive()
var client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
var channel = UbBuildVersion[..5] + "xx";
var akaMsUrl = $"https://aka.ms/dotnet/{channel}/daily/dotnet-sdk-{TargetRid}{GetArchiveExtension(UbSdkArchivePath)}";
- _sink.OnMessage(new DiagnosticMessage($"Downloading latest sdk from '{akaMsUrl}'"));
+ LogMessage($"Downloading latest sdk from '{akaMsUrl}'");
var redirectResponse = await client.GetAsync(akaMsUrl);
// aka.ms returns a 301 for valid redirects and a 302 to Bing for invalid URLs
if (redirectResponse.StatusCode != HttpStatusCode.Moved)
@@ -85,17 +90,28 @@ public async Task DownloadMsftSdkArchive()
throw new InvalidOperationException($"Could not find download link for Microsoft built sdk at '{akaMsUrl}'");
}
var closestUrl = redirectResponse.Headers.Location!.ToString();
- _sink.OnMessage(new DiagnosticMessage($"Redirected to '{closestUrl}'"));
+ LogMessage($"Redirected to '{closestUrl}'");
HttpResponseMessage packageResponse = await client.GetAsync(closestUrl);
var packageUriPath = packageResponse.RequestMessage!.RequestUri!.LocalPath;
_downloadedMsftSdkPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + "." + Path.GetFileName(packageUriPath));
- _sink.OnMessage(new DiagnosticMessage($"Downloading to '{_downloadedMsftSdkPath}'"));
+ LogMessage($"Downloading to '{_downloadedMsftSdkPath}'");
using (var file = File.Create(_downloadedMsftSdkPath))
{
await packageResponse.Content.CopyToAsync(file);
}
return _downloadedMsftSdkPath;
}
+
+ private void LogMessage(string message)
+ {
+ if (NoDiagnosticMessages)
+ return;
+ if (_sink is null)
+ throw new InvalidOperationException("Cannot log message without a message sink");
+
+ _sink.OnMessage(new DiagnosticMessage(message));
+ }
+
public void Dispose()
{
if (_downloadedMsftSdkPath != null)
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
index c10b3f2d40a3..efeaf1159889 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
+++ b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/Microsoft.DotNet.UnifiedBuild.Tests.csproj
@@ -8,10 +8,7 @@
console%3bverbosity=diagnostic;trx%3bverbosity=diagnostic%3bLogFileName=Microsoft.DotNet.UnifiedBuild.Tests.xml
$(ArtifactsTestResultsDir)
true
-
-
- true
- $([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)
+ $(VSTestCLIRunSettings);RunConfiguration.DotNetHostPath=$(DotnetTool)
@@ -46,6 +43,9 @@
$(UBTestsMsftSdkArchivePath)
+
+ $(VSTestUseMSBuildOutput)
+
diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config b/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
deleted file mode 100644
index e3c623ae1e1b..000000000000
--- a/src/SourceBuild/content/test/Microsoft.DotNet.UnifiedBuild.Tests/NuGet.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
From f5322b6e8138f23ca757a3daaa93c2f3d565203c Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 2 Apr 2024 12:50:05 -0700
Subject: [PATCH 40/41] Don't pre-build unified build validation tests
---
src/SourceBuild/content/eng/tools/init-build.proj | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index d8c659214f6e..c6ac16295a62 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,7 +15,6 @@
UnpackTarballs;
BuildUnifiedBuildTasks;
BuildMSBuildSdkResolver;
- BuildUnifiedBuildValidationTests;
BuildLeakDetection;
ExtractToolPackage;
GenerateRootFs;
@@ -113,15 +112,6 @@
-
-
-
-
-
From 27553529f279047ce64e0f6a9d2749e61ce2f0b5 Mon Sep 17 00:00:00 2001
From: Jackson Schuster <36744439+jtschuster@users.noreply.github.com>
Date: Tue, 2 Apr 2024 14:07:42 -0700
Subject: [PATCH 41/41] Restore, don't build test project
---
src/SourceBuild/content/eng/tools/init-build.proj | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/SourceBuild/content/eng/tools/init-build.proj b/src/SourceBuild/content/eng/tools/init-build.proj
index c6ac16295a62..efed2ac52d0a 100644
--- a/src/SourceBuild/content/eng/tools/init-build.proj
+++ b/src/SourceBuild/content/eng/tools/init-build.proj
@@ -15,6 +15,7 @@
UnpackTarballs;
BuildUnifiedBuildTasks;
BuildMSBuildSdkResolver;
+ RestoreUnifiedBuildValidationTests;
BuildLeakDetection;
ExtractToolPackage;
GenerateRootFs;
@@ -112,6 +113,13 @@
+
+
+
+