Example #1
0
        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);
                        }
                    }
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #5
0
        public void Process(ITargetFrameworkSelectorFilterState tfm)
        {
            if (tfm is null)
            {
                throw new ArgumentNullException(nameof(tfm));
            }

            if (tfm.Project.OutputType == ProjectOutputType.Exe)
            {
                tfm.TryUpdate(tfm.AppBase);
            }
        }
Example #6
0
        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);
                }
            }
        }
Example #7
0
        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);
                }
            }
        }
Example #8
0
        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);
                }
            }
        }
Example #9
0
        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);
            }
        }
Example #10
0
        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);
                }
            }
        }
Example #11
0
        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);
            }
        }
    }