public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (tfm.Components.HasFlag(ProjectComponents.MauiAndroid) || tfm.Components.HasFlag(ProjectComponents.MauiiOS) || tfm.Components.HasFlag(ProjectComponents.Maui)) { _logger.LogInformation("Skip minimum dependency check because .NET MAUI support multiple TFMs."); } else { foreach (var dep in tfm.Project.ProjectReferences) { var min = dep.TargetFrameworks.OrderBy(t => t, _tfmComparer) .Where(tfm => !tfm.IsFramework) .FirstOrDefault(); if (min is not null) { if (tfm.TryUpdate(min)) { _logger.LogInformation("Recommending TFM {TFM} because of dependency on project {Dependency}", min, dep.GetFile().FilePath); } } } } }
private static bool TryGetMoniker(ITargetFrameworkSelectorFilterState updater, [MaybeNullWhen(false)] out TargetFrameworkMoniker tfm) { var current = updater.Current; if (current.IsNetStandard) { current = updater.AppBase; } // Projects with Windows Desktop components or a WinExe output type should use a -windows suffix if (updater.Components.HasFlag(ProjectComponents.WindowsDesktop) || updater.Project.OutputType == ProjectOutputType.WinExe) { tfm = current with { Platform = TargetFrameworkMoniker.Platforms.Windows }; if (updater.Components.HasFlag(ProjectComponents.WinRT)) { // TODO: Default to this version to ensure everything is supported. tfm = tfm with { PlatformVersion = TargetFrameworkMoniker.Net50_Windows_10_0_19041_0.PlatformVersion }; } return(true); } tfm = null; return(false); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new System.ArgumentNullException(nameof(tfm)); } if (tfm.Components.HasFlag(ProjectComponents.AspNet) || tfm.Components.HasFlag(ProjectComponents.AspNetCore)) { tfm.TryUpdate(tfm.AppBase); } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new System.ArgumentNullException(nameof(tfm)); } if (TryGetMoniker(tfm, out var result)) { tfm.TryUpdate(result); } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (tfm.Project.OutputType == ProjectOutputType.Exe) { tfm.TryUpdate(tfm.AppBase); } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (TryGetMoniker(tfm, out var result)) { if (tfm.TryUpdate(result)) { _logger.LogInformation("Recommending Windows TFM {TFM} because the project either has Windows-specific dependencies or builds to a WinExe", result); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (tfm.Project.OutputType == ProjectOutputType.Exe) { if (tfm.TryUpdate(tfm.AppBase)) { _logger.LogInformation("Recommending executable TFM {TFM} because the project builds to an executable", tfm.AppBase); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (tfm.Components.HasFlag(ProjectComponents.AspNet) || tfm.Components.HasFlag(ProjectComponents.AspNetCore)) { if (tfm.TryUpdate(tfm.AppBase)) { _logger.LogInformation("Recommending executable TFM {TFM} because the project builds to a web app", tfm.AppBase); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } var myType = tfm.Project.GetFile().GetPropertyValue("MyType"); if (_windowsMyTypes.Contains(myType)) { _logger.LogInformation("Project {Name} contains MyType node that requires at least net5.0-windows.", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net50_Windows); } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } if (tfm.Components.HasFlag(ProjectComponents.XamarinAndroid)) { _logger.LogInformation("Project {Name} is of type Xamarin.Android, migration to .NET MAUI requires to be least net6.0-android.", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net60_Android); } if (tfm.Components.HasFlag(ProjectComponents.XamariniOS)) { _logger.LogInformation("Project {Name} is of type Xamarin.iOS, migration to .NET MAUI requires to be least net6.0-ios.", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net60_iOS); } if (tfm.Components.HasFlag(ProjectComponents.MauiAndroid)) { _logger.LogInformation("Project {Name} is of type .NET MAUI Target:Android, migration to .NET MAUI requires to be least net6.0-android.", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net60_Android); } if (tfm.Components.HasFlag(ProjectComponents.MauiiOS)) { _logger.LogInformation("Project {Name} is of type .NET MAUI Target:iOS, migration to .NET MAUI requires to be least net6.0-ios.", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net60_iOS); } if (tfm.Components.HasFlag(ProjectComponents.Maui)) { if (tfm.Project?.TargetFrameworks.Count > 1) { tfm.TryUpdate(tfm.Project.TargetFrameworks.FirstOrDefault()); } else { _logger.LogInformation("Project {Name} is of type .NET MAUI Target: MAUI head, migration to .NET MAUI requires to be multiplatform", tfm.Project); tfm.TryUpdate(TargetFrameworkMoniker.Net60_Android); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } foreach (var dep in tfm.Project.ProjectReferences) { var min = dep.TargetFrameworks.OrderBy(t => t, _tfmComparer) .Where(tfm => !tfm.IsFramework) .FirstOrDefault(); if (min is not null) { tfm.TryUpdate(min); } } }
public void Process(ITargetFrameworkSelectorFilterState tfm) { if (tfm is null) { throw new ArgumentNullException(nameof(tfm)); } var myType = tfm.Project.GetFile().GetPropertyValue("MyType"); if (_windowsMyTypes.Contains(myType)) { var final = tfm.AppBase with { Platform = TargetFrameworkMoniker.Platforms.Windows }; _logger.LogInformation("Project {Name} contains MyType node that requires at least {framework}", tfm.Project, final); tfm.TryUpdate(final); } } }