Skip to content

Commit 20a9f79

Browse files
CopilotAndriySvyryd
andcommitted
Use MSBuild-style GetTargetPlatformIdentifier to extract platform from TargetFramework
Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com>
1 parent 950dd96 commit 20a9f79

1 file changed

Lines changed: 31 additions & 12 deletions

File tree

src/dotnet-ef/RootCommand.cs

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,11 @@ protected override int Execute(string[] _)
106106
startupProject.AssemblyName + ".runtimeconfig.json");
107107
var projectAssetsFile = startupProject.ProjectAssetsFile;
108108

109-
if (!IsCurrentPlatform(startupProject.TargetPlatformIdentifier))
109+
var targetPlatformIdentifier = GetTargetPlatformIdentifier(startupProject.TargetFramework);
110+
if (!IsCurrentPlatform(targetPlatformIdentifier))
110111
{
111112
Reporter.WriteWarning(
112-
Resources.UnsupportedPlatform(startupProject.ProjectName, startupProject.TargetPlatformIdentifier));
113+
Resources.UnsupportedPlatform(startupProject.ProjectName, targetPlatformIdentifier));
113114
}
114115

115116
var targetFramework = new FrameworkName(startupProject.TargetFrameworkMoniker!);
@@ -326,28 +327,46 @@ private static bool IsCurrentPlatform(string? targetPlatformIdentifier)
326327
return true;
327328
}
328329

329-
var currentPlatformIdentifier = GetTargetPlatformIdentifier();
330-
return string.Equals(targetPlatformIdentifier, currentPlatformIdentifier, StringComparison.OrdinalIgnoreCase);
330+
if (string.Equals(targetPlatformIdentifier, "windows", StringComparison.OrdinalIgnoreCase))
331+
{
332+
return OperatingSystem.IsWindows();
333+
}
334+
335+
if (string.Equals(targetPlatformIdentifier, "linux", StringComparison.OrdinalIgnoreCase))
336+
{
337+
return OperatingSystem.IsLinux();
338+
}
339+
340+
if (string.Equals(targetPlatformIdentifier, "osx", StringComparison.OrdinalIgnoreCase)
341+
|| string.Equals(targetPlatformIdentifier, "macos", StringComparison.OrdinalIgnoreCase))
342+
{
343+
return OperatingSystem.IsMacOS();
344+
}
345+
346+
return false;
331347
}
332348

333-
private static string? GetTargetPlatformIdentifier()
349+
private static string? GetTargetPlatformIdentifier(string? targetFramework)
334350
{
335-
if (OperatingSystem.IsWindows())
351+
if (string.IsNullOrEmpty(targetFramework))
336352
{
337-
return "Windows";
353+
return null;
338354
}
339355

340-
if (OperatingSystem.IsLinux())
356+
var dashIndex = targetFramework.IndexOf('-');
357+
if (dashIndex < 0 || dashIndex >= targetFramework.Length - 1)
341358
{
342-
return "Linux";
359+
return null;
343360
}
344361

345-
if (OperatingSystem.IsMacOS())
362+
var platformAndVersion = targetFramework[(dashIndex + 1)..];
363+
var i = 0;
364+
while (i < platformAndVersion.Length && !char.IsDigit(platformAndVersion[i]))
346365
{
347-
return "macOS";
366+
i++;
348367
}
349368

350-
return null;
369+
return i > 0 ? platformAndVersion[..i] : null;
351370
}
352371

353372
private static bool ShouldHelp(IReadOnlyList<string> commands, IList<string> args)

0 commit comments

Comments
 (0)