|
@@ -9,6 +9,7 @@ using System.Net.Http;
|
|
|
using System.Text.RegularExpressions;
|
|
|
using System.Threading.Tasks;
|
|
|
using Nuke.Common.Tooling;
|
|
|
+using Serilog;
|
|
|
using static Serilog.Log;
|
|
|
|
|
|
public static class ApiDiffHelper
|
|
@@ -47,13 +48,18 @@ public static class ApiDiffHelper
|
|
|
var baselineDllPath = await ExtractDll("baseline", baselineDll, tempFolder);
|
|
|
|
|
|
var targetTfm = baselineDll.target;
|
|
|
- if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
|
|
|
+ var targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
+ e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
+ if (targetDll is null)
|
|
|
{
|
|
|
- targetTfm = newTfm;
|
|
|
+ if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
|
|
|
+ {
|
|
|
+ targetTfm = newTfm;
|
|
|
+ targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
+ e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- var targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
- e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
if (targetDll?.entry is null)
|
|
|
{
|
|
|
throw new InvalidOperationException($"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}");
|
|
@@ -144,16 +150,32 @@ public static class ApiDiffHelper
|
|
|
var baselineDllPath = await ExtractDll("baseline", baselineDll, tempFolder);
|
|
|
|
|
|
var targetTfm = baselineDll.target;
|
|
|
- if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
|
|
|
+ var targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
+ e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
+ if (targetDll?.entry is null)
|
|
|
{
|
|
|
- targetTfm = newTfm;
|
|
|
+ if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
|
|
|
+ {
|
|
|
+ targetTfm = newTfm;
|
|
|
+ targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
+ e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (targetDll?.entry is null && targetDlls.Count == 1)
|
|
|
+ {
|
|
|
+ targetDll = targetDlls.First();
|
|
|
+ Warning(
|
|
|
+ $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}." +
|
|
|
+ $"Resolved: {targetDll.target} ({targetDll.entry.Name})");
|
|
|
}
|
|
|
|
|
|
- var targetDll = targetDlls.FirstOrDefault(e =>
|
|
|
- e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
|
|
|
- if (targetDll.entry is null)
|
|
|
+ if (targetDll?.entry is null)
|
|
|
{
|
|
|
- throw new InvalidOperationException($"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}");
|
|
|
+ var actualTargets = string.Join(", ",
|
|
|
+ targetDlls.Select(d => $"{d.target} ({baselineDll.entry.Name})"));
|
|
|
+ throw new InvalidOperationException(
|
|
|
+ $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}."
|
|
|
+ + $"\r\nActual targets: {actualTargets}.");
|
|
|
}
|
|
|
|
|
|
var targetDllPath = await ExtractDll("target", targetDll, tempFolder);
|