/// <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())); var activeTargetFramework = activeProjectConfiguration.Dimensions[ConfigurationGeneral.TargetFrameworkProperty]; if (!string.Equals(activeTargetFramework, _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 (var targetFramework in targetFrameworks) { if (!_configuredProjectContextsByTargetFramework.ContainsKey(targetFramework)) { // Differing TargetFramework return(false); } } return(true); }
/// <summary> /// Returns true if the given project configurations are equal ignoring the "TargetFramework" dimension. /// </summary> internal static bool EqualIgnoringTargetFramework(this ProjectConfiguration projectConfiguration1, ProjectConfiguration projectConfiguration2) { Requires.NotNull(projectConfiguration1, nameof(projectConfiguration1)); Requires.NotNull(projectConfiguration2, nameof(projectConfiguration2)); if (projectConfiguration1.Dimensions.Count != projectConfiguration2.Dimensions.Count) { return(false); } if (!projectConfiguration1.IsCrossTargeting() || !projectConfiguration2.IsCrossTargeting()) { return(projectConfiguration1.Equals(projectConfiguration2)); } foreach ((string dimensionName, string dimensionValue) in projectConfiguration1.Dimensions) { // Ignore the TargetFramework. if (StringComparers.ConfigurationDimensionNames.Equals(dimensionName, ConfigurationGeneral.TargetFrameworkProperty)) { continue; } // Dimension values must be compared in a case-sensitive manner. if (!projectConfiguration2.Dimensions.TryGetValue(dimensionName, out string activeValue) || !string.Equals(dimensionValue, activeValue, StringComparisons.ConfigurationDimensionNames)) { return(false); } } return(true); }
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()); } }
public ITargetFramework GetProjectFramework(ProjectConfiguration projectConfiguration) { if (projectConfiguration.IsCrossTargeting()) { string targetFrameworkMoniker = projectConfiguration.Dimensions[ConfigurationGeneral.TargetFrameworkProperty]; return(_targetFrameworkProvider.GetTargetFramework(targetFrameworkMoniker)); } else { return(TargetFrameworks.Length > 1 ? null : TargetFrameworks[0]); } }
public IWorkspaceProjectContext GetInnerProjectContext(ProjectConfiguration projectConfiguration, out bool isActiveConfiguration) { if (projectConfiguration.IsCrossTargeting()) { var targetFramework = projectConfiguration.Dimensions[TargetFrameworkProjectConfigurationDimensionProvider.TargetFrameworkPropertyName]; isActiveConfiguration = string.Equals(targetFramework, _activeTargetFramework); return(_configuredProjectContextsByTargetFramework.TryGetValue(targetFramework, out IWorkspaceProjectContext projectContext) ? projectContext : null); } else { isActiveConfiguration = true; if (_configuredProjectContextsByTargetFramework.Count > 1) { return(null); } return(InnerProjectContexts.Single()); } }
/// <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, IReadOnlyCollection <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 targetFrameworkMonikers = knownProjectConfigurations .Select(c => c.Dimensions[ConfigurationGeneral.TargetFrameworkProperty]) .Distinct() .ToList(); if (targetFrameworkMonikers.Count != TargetFrameworks.Length) { // Different number of target frameworks. return(false); } foreach (string targetFrameworkMoniker in targetFrameworkMonikers) { ITargetFramework targetFramework = _targetFrameworkProvider.GetTargetFramework(targetFrameworkMoniker); if (!TargetFrameworks.Contains(targetFramework)) { // Differing TargetFramework return(false); } } return(true); }
/// <summary> /// Returns true if the given project configurations are equal ignoring the "TargetFramework" dimension. /// </summary> internal static bool EqualIgnoringTargetFramework(this ProjectConfiguration projectConfiguration1, ProjectConfiguration projectConfiguration2) { Requires.NotNull(projectConfiguration1, nameof(projectConfiguration1)); Requires.NotNull(projectConfiguration2, nameof(projectConfiguration2)); if (projectConfiguration1.Dimensions.Count != projectConfiguration2.Dimensions.Count) { return(false); } if (!projectConfiguration1.IsCrossTargeting() || !projectConfiguration2.IsCrossTargeting()) { return(projectConfiguration1.Equals(projectConfiguration2)); } foreach (var dimensionKvp in projectConfiguration1.Dimensions) { var dimensionName = dimensionKvp.Key; var dimensionValue = dimensionKvp.Value; // Ignore the TargetFramework. if (string.Equals(dimensionName, TargetFrameworkProjectConfigurationDimensionProvider.TargetFrameworkPropertyName, StringComparison.OrdinalIgnoreCase)) { continue; } // Dimension values must be compared in a case-sensitive manner. string activeValue; if (!projectConfiguration2.Dimensions.TryGetValue(dimensionName, out activeValue) || !string.Equals(dimensionValue, activeValue, StringComparison.Ordinal)) { return(false); } } return(true); }