up
Some checks failed
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Policy Simulation / policy-simulate (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled

This commit is contained in:
StellaOps Bot
2025-12-13 09:37:15 +02:00
parent e00f6365da
commit 6e45066e37
349 changed files with 17160 additions and 1867 deletions

View File

@@ -45,8 +45,10 @@ public static class DotNetEntrypointResolver
continue;
}
var name = GetEntrypointName(depsPath);
DotNetRuntimeConfig? runtimeConfig = null;
var runtimeConfigPath = Path.ChangeExtension(depsPath, ".runtimeconfig.json");
var runtimeConfigPath = GetRuntimeConfigPath(depsPath, name);
string? relativeRuntimeConfig = null;
if (!string.IsNullOrEmpty(runtimeConfigPath) && File.Exists(runtimeConfigPath))
@@ -59,7 +61,6 @@ public static class DotNetEntrypointResolver
var rids = CollectRuntimeIdentifiers(depsFile, runtimeConfig);
var publishKind = DeterminePublishKind(depsFile);
var name = GetEntrypointName(depsPath);
var id = BuildDeterministicId(name, tfms, rids, publishKind);
results.Add(new DotNetEntrypoint(
@@ -101,6 +102,19 @@ public static class DotNetEntrypointResolver
return stem;
}
private static string GetRuntimeConfigPath(string depsPath, string entrypointName)
{
var directory = Path.GetDirectoryName(depsPath);
var fileName = $"{entrypointName}.runtimeconfig.json";
if (string.IsNullOrWhiteSpace(directory))
{
return fileName;
}
return Path.Combine(directory, fileName);
}
private static IReadOnlyCollection<string> CollectTargetFrameworks(DotNetDepsFile depsFile, DotNetRuntimeConfig? runtimeConfig)
{
var tfms = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
@@ -109,7 +123,11 @@ public static class DotNetEntrypointResolver
{
foreach (var tfm in library.TargetFrameworks)
{
tfms.Add(tfm);
var normalized = NormalizeTargetFrameworkMoniker(tfm);
if (!string.IsNullOrWhiteSpace(normalized))
{
tfms.Add(normalized);
}
}
}
@@ -129,6 +147,83 @@ public static class DotNetEntrypointResolver
return tfms;
}
private static string? NormalizeTargetFrameworkMoniker(string? value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
var trimmed = value.Trim();
if (TryNormalizeFrameworkMoniker(trimmed, ".NETCoreApp,Version=v", "net", out var normalized))
{
return normalized;
}
if (TryNormalizeFrameworkMoniker(trimmed, ".NETStandard,Version=v", "netstandard", out normalized))
{
return normalized;
}
if (TryNormalizeFrameworkMoniker(trimmed, ".NETFramework,Version=v", "net", out normalized))
{
return NormalizeNetFrameworkTfm(normalized!);
}
return trimmed;
}
private static bool TryNormalizeFrameworkMoniker(string value, string prefix, string replacement, out string? normalized)
{
normalized = null;
if (!value.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
{
return false;
}
var versionPart = value[prefix.Length..];
if (string.IsNullOrWhiteSpace(versionPart))
{
return false;
}
versionPart = versionPart.Trim();
if (!Version.TryParse(versionPart, out var version))
{
return false;
}
normalized = $"{replacement}{version.Major}.{version.Minor}";
return true;
}
private static string NormalizeNetFrameworkTfm(string value)
{
if (!value.StartsWith("net", StringComparison.OrdinalIgnoreCase))
{
return value;
}
var versionPart = value[3..];
if (!Version.TryParse(versionPart, out var version))
{
return value.Replace(".", string.Empty, StringComparison.Ordinal);
}
var major = Math.Max(version.Major, 0);
var minor = Math.Max(version.Minor, 0);
var build = version.Build;
if (build > 0)
{
return $"net{major}{minor}{build}";
}
return $"net{major}{minor}";
}
private static IReadOnlyCollection<string> CollectRuntimeIdentifiers(DotNetDepsFile depsFile, DotNetRuntimeConfig? runtimeConfig)
{
var rids = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);