| File: GenerateSupportedTargetFrameworkAlias.cs | Web Access |
| Project: src\sdk\src\Tasks\Microsoft.NET.Build.Tasks\Microsoft.NET.Build.Tasks.csproj (Microsoft.NET.Build.Tasks) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using NuGet.Frameworks; namespace Microsoft.NET.Build.Tasks { [MSBuildMultiThreadableTask] public class GenerateSupportedTargetFrameworkAlias : TaskBase { [Required] public ITaskItem[] SupportedTargetFramework { get; set; } [Required] public string TargetFrameworkMoniker { get; set; } public string TargetPlatformMoniker { get; set; } public bool UseWpf { get; set; } public bool UseWindowsForms { get; set; } [Output] public ITaskItem[] SupportedTargetFrameworkAlias { get; private set; } protected override void ExecuteCore() { var targetFramework = NuGetFramework.Parse(TargetFrameworkMoniker); if (!(targetFramework.Framework.Equals(".NETCoreApp") && targetFramework.Version >= new Version(5, 0)) || UseWpf || UseWindowsForms) { // Target platform properties were defaulted to windows prior to 5.0, ignore these values TargetPlatformMoniker = string.Empty; } IList<ITaskItem> convertedTfms = new List<ITaskItem>(); foreach (var tfm in SupportedTargetFramework) { var currentTargetFramework = NuGetFramework.ParseComponents(tfm.ItemSpec, TargetPlatformMoniker); if (currentTargetFramework.Framework.Equals(targetFramework.Framework)) { var targetFrameworkAlias = currentTargetFramework.GetShortFolderName(); if ((UseWindowsForms || UseWpf) && currentTargetFramework.Framework.Equals(".NETCoreApp") && currentTargetFramework.Version >= new Version(5, 0)) { // Set versionless windows as target platform for wpf and windows forms targetFrameworkAlias = $"{targetFrameworkAlias}-windows"; } var displayName = string.IsNullOrWhiteSpace(tfm.GetMetadata("DisplayName")) ? targetFrameworkAlias : tfm.GetMetadata("DisplayName"); convertedTfms.Add(new TaskItem(targetFrameworkAlias, new Dictionary<string, string>() { { "DisplayName", displayName } })); } } SupportedTargetFrameworkAlias = convertedTfms.ToArray(); } } }