/// <summary>
        /// Returns true if this cross-targeting aggregate project context has the same set of target frameworks and active target framework as the given TargetFrameworks property value.
        /// </summary>
        /// <param name="targetFrameworksProperty">Property value for MSBuild property "TargetsFramework"</param>
        public bool HasMatchingTargetFrameworks(string targetFrameworksProperty)
        {
            Requires.NotNull(targetFrameworksProperty, nameof(targetFrameworksProperty));
            Requires.Range(IsCrossTargeting, nameof(targetFrameworksProperty), "This method should only be invoked for Cross targeting projects");

            ImmutableArray <string> parsedTargetFrameworks = TargetFrameworkProjectConfigurationDimensionProvider.ParseTargetFrameworks(targetFrameworksProperty);

            if (parsedTargetFrameworks.Length != _configuredProjectContextsByTargetFramework.Count)
            {
                // Different number of target frameworks.
                return(false);
            }

            if (!string.Equals(parsedTargetFrameworks[0], _activeTargetFramework))
            {
                // Active target framework is different.
                return(false);
            }

            foreach (var targetFramework in parsedTargetFrameworks.Skip(1))
            {
                if (!_configuredProjectContextsByTargetFramework.ContainsKey(targetFramework))
                {
                    // Differing TargetFramework
                    return(false);
                }
            }

            return(true);
        }
        private static ProjectReloadInterceptor CreateInstance()
        {
            var accessor = IProjectAccessorFactory.Create();
            var provider = new TargetFrameworkProjectConfigurationDimensionProvider(accessor);

            var project  = UnconfiguredProjectFactory.Create();
            var instance = new ProjectReloadInterceptor(project);

            instance.DimensionProviders.Add(provider);

            return(instance);
        }
Exemple #3
0
        /// <summary>
        /// <see cref="IActiveDebugFrameworkServices.GetProjectFrameworksAsync"/>
        /// </summary>
        public async Task <List <string> > GetProjectFrameworksAsync()
        {
            // It is important that we return the frameworks in the order they are specified in the project to ensure the default is set
            // correctly.
            var props = await CommonProjectServices.ActiveConfiguredProjectProperties.GetConfigurationGeneralPropertiesAsync().ConfigureAwait(false);

            var targetFrameworks = (string)await props.TargetFrameworks.GetValueAsync().ConfigureAwait(false);

            if (!string.IsNullOrWhiteSpace(targetFrameworks))
            {
                return(TargetFrameworkProjectConfigurationDimensionProvider.ParseTargetFrameworks(targetFrameworks).ToList());
            }
            return(null);
        }