コード例 #1
0
        /// <summary>
        /// Creates a props file to find best $(Configuration) from $(BuildConfigurations) for any $(BuildConfiguration)
        /// </summary>
        private void CreateBuildConfigurationPropsFile(string fileName)
        {
            var buildConfigurationProps = ProjectRootElement.Create();

            // pull apart BuildConfiguration, but don't set any derived properties
            // we do this even when Configuration is already set because we want to
            // parse out the BuildConfiguration-derived property values as _bc_*.
            // In the case Configuration is set we'll not use the parsed values,
            // and immediately overwrite them with the values parsed from Configuration.
            ParseProperties(BuildConfigurationProperty, buildConfigurationProps, false, p => !p.Independent, "_bc_");

            var projectConfigurationNotSet = $"'$({ConfigurationProperty})' == ''";

            var buildConfigurationsPropertyGroup = buildConfigurationProps.CreatePropertyGroupElement();

            buildConfigurationProps.AppendChild(buildConfigurationsPropertyGroup);

            // Only set props used for when Configuration is not set.
            buildConfigurationsPropertyGroup.Condition = projectConfigurationNotSet;

            // get path to import
            var buildConfigurationImportName  = $"_import_{BuildConfigurationProperty}_props";
            var significantBuildConfiguration = ConfigurationFactory.IdentityConfiguration.GetSignificantConfigurationStrings().First();
            var buildConfigurationImportPath  = $"{CurrentDirectoryIdentifier}{ConfigurationPropsPrefix}.{significantBuildConfiguration}{PropsFileExtension}";

            buildConfigurationsPropertyGroup.AddProperty(buildConfigurationImportName, buildConfigurationImportPath);

            // if BuildConfigurations is not set, then default Configuration to BuildConfiguration
            var defaultConfigurationToBuildConfiguration = buildConfigurationsPropertyGroup.AddProperty(ConfigurationProperty, $"$({BuildConfigurationProperty})");

            defaultConfigurationToBuildConfiguration.Condition = $"'$({AvailableBuildConfigurationsProperty})' == ''";

            var buildConfigurationsIsSet = $"'$({AvailableBuildConfigurationsProperty})' != ''";

            // Set error on missing import
            var missingImportError = buildConfigurationsPropertyGroup.AddProperty(ErrorMessageProperty,
                                                                                  $"$({ErrorMessageProperty}){ConfigurationProperty} is not set and $({BuildConfigurationProperty}) is not a known value for {BuildConfigurationProperty}.");

            missingImportError.Condition = $"{buildConfigurationsIsSet} AND !Exists('$({buildConfigurationImportName})')";

            // import props to set ProjectConfiguration
            var buildConfigurationImport = buildConfigurationProps.CreateImportElement($"$({buildConfigurationImportName})");

            buildConfigurationImport.Condition = $"{buildConfigurationsIsSet} AND {projectConfigurationNotSet} AND Exists('$({buildConfigurationImportName})')";
            buildConfigurationProps.AppendChild(buildConfigurationImport);

            // iterate over all possible configuration strings
            foreach (var buildConfiguration in ConfigurationFactory.GetSignficantConfigurations())
            {
                CreateBuildConfigurationPropsFile(buildConfiguration);
            }

            buildConfigurationProps.Save(Path.Combine(PropsFolder, fileName));
        }