Пример #1
0
        public ITargetedProjectContext GetInnerProjectContext(ProjectConfiguration projectConfiguration, out bool isActiveConfiguration)
        {
            if (projectConfiguration.IsCrossTargeting())
            {
                string targetFrameworkMoniker =
                    projectConfiguration.Dimensions[ConfigurationGeneral.TargetFrameworkProperty];
                ITargetFramework targetFramework = TargetFrameworkProvider.GetTargetFramework(targetFrameworkMoniker);

                isActiveConfiguration = _activeTargetFramework.Equals(targetFramework);

                return(_configuredProjectContextsByTargetFramework.TryGetValue(targetFramework, out ITargetedProjectContext projectContext)
                    ? projectContext
                    : null);
            }
            else
            {
                isActiveConfiguration = true;
                if (_configuredProjectContextsByTargetFramework.Count > 1)
                {
                    return(null);
                }

                return(InnerProjectContexts.Single());
            }
        }
Пример #2
0
        /// <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 = BuildUtilities.GetPropertyValues(targetFrameworksProperty);

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

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

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

            return(true);
        }
Пример #3
0
        /// <summary>
        /// Returns true if this cross-targeting aggregate project context has the same set of target frameworks and active target framework as the given active and known configurations.
        /// </summary>
        public bool HasMatchingTargetFrameworks(ProjectConfiguration activeProjectConfiguration,
                                                IEnumerable <ProjectConfiguration> knownProjectConfigurations)
        {
            Assumes.True(IsCrossTargeting);
            Assumes.True(activeProjectConfiguration.IsCrossTargeting());
            Assumes.True(knownProjectConfigurations.All(c => c.IsCrossTargeting()));

            ITargetFramework activeTargetFramework = TargetFrameworkProvider.GetTargetFramework(activeProjectConfiguration.Dimensions[ConfigurationGeneral.TargetFrameworkProperty]);

            if (!_activeTargetFramework.Equals(activeTargetFramework))
            {
                // Active target framework is different.
                return(false);
            }

            var targetFrameworks = knownProjectConfigurations.Select(
                c => c.Dimensions[ConfigurationGeneral.TargetFrameworkProperty]).ToImmutableHashSet();

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

            foreach (string targetFrameworkMoniker in targetFrameworks)
            {
                ITargetFramework targetFramework = TargetFrameworkProvider.GetTargetFramework(targetFrameworkMoniker);
                if (!_configuredProjectContextsByTargetFramework.ContainsKey(targetFramework))
                {
                    // Differing TargetFramework
                    return(false);
                }
            }

            return(true);
        }