예제 #1
0
        public async ValueTask <TargetFrameworkMoniker> SelectTargetFrameworkAsync(IProject project, CancellationToken token)
        {
            if (project is null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            var appBase = _selectorOptions.TargetTfmSupport switch
            {
                UpgradeTarget.Current => _selectorOptions.Current,
                UpgradeTarget.Preview => _selectorOptions.Preview,
                UpgradeTarget.LTS => _selectorOptions.LTS,
                _ => _selectorOptions.LTS,
            };

            var current = GetDefaultTargetFrameworkMoniker(project);

            if (!_comparer.TryParse(appBase, out var appBaseTfm))
            {
                throw new InvalidOperationException("Invalid app base TFM");
            }

            var updater = new FilterState(_comparer, project, current, appBaseTfm, _logger)
            {
                Components = await project.GetComponentsAsync(token).ConfigureAwait(false),
            };

            foreach (var selector in _selectors)
            {
                selector.Process(updater);
            }

            return(updater.Current);
        }
예제 #2
0
 public IEnumerator <TargetFrameworkMoniker> GetEnumerator()
 {
     foreach (var tfm in RawValues)
     {
         if (_comparer.TryParse(tfm, out var parsed))
         {
             yield return(parsed);
         }
     }
 }