Beispiel #1
0
        void LoadProjectConfigurationMappings(SlnPropertySetCollection sets, Solution sln, Dictionary <string, SolutionFolderItem> items, ProgressMonitor monitor)
        {
            if (sets == null)
            {
                return;
            }

            Dictionary <string, SolutionConfigurationEntry> cache = new Dictionary <string, SolutionConfigurationEntry> ();
            Dictionary <string, string> ignoredProjects           = new Dictionary <string, string> ();

            foreach (var pset in sets)
            {
                var projGuid = pset.Id;

                if (!items.ContainsKey(projGuid))
                {
                    if (ignoredProjects.ContainsKey(projGuid))
                    {
                        // already warned
                        continue;
                    }

                    LoggingService.LogWarning(GettextCatalog.GetString("{0} ({1}) : Project with guid = '{2}' not found or not loaded. Ignoring",
                                                                       sln.FileName, pset.Line + 1, projGuid));
                    ignoredProjects [projGuid] = projGuid;
                    continue;
                }

                SolutionFolderItem it;
                if (!items.TryGetValue(projGuid, out it))
                {
                    continue;
                }

                SolutionItem item = it as SolutionItem;

                if (item == null || !item.SupportsConfigurations())
                {
                    continue;
                }

                //Format:
                // {projectGuid}.SolutionConfigName|SolutionPlatform.ActiveCfg = ProjConfigName|ProjPlatform
                // {projectGuid}.SolutionConfigName|SolutionPlatform.Build.0 = ProjConfigName|ProjPlatform
                // {projectGuid}.SolutionConfigName|SolutionPlatform.Deploy.0 = ProjConfigName|ProjPlatform

                foreach (var prop in pset)
                {
                    string action;
                    string projConfig = prop.Value;

                    string left = prop.Key;
                    if (left.EndsWith(".ActiveCfg"))
                    {
                        action = "ActiveCfg";
                        left   = left.Substring(0, left.Length - 10);
                    }
                    else if (left.EndsWith(".Build.0"))
                    {
                        action = "Build.0";
                        left   = left.Substring(0, left.Length - 8);
                    }
                    else if (left.EndsWith(".Deploy.0"))
                    {
                        action = "Deploy.0";
                        left   = left.Substring(0, left.Length - 9);
                    }
                    else
                    {
                        LoggingService.LogWarning(GettextCatalog.GetString("{0} ({1}) : Unknown action. Only ActiveCfg, Build.0 and Deploy.0 supported.",
                                                                           sln.FileName, pset.Line));
                        continue;
                    }

                    string slnConfig = left;

                    string key = projGuid + "." + slnConfig;
                    SolutionConfigurationEntry combineConfigEntry = null;
                    if (cache.ContainsKey(key))
                    {
                        combineConfigEntry = cache [key];
                    }
                    else
                    {
                        combineConfigEntry       = GetConfigEntry(sln, item, slnConfig);
                        combineConfigEntry.Build = false;                         // Not buildable by default. Build will be enabled if a Build.0 entry is found
                        cache [key] = combineConfigEntry;
                    }

                    /* If both ActiveCfg & Build.0 entries are missing
                     * for a project, then default values :
                     *	ActiveCfg : same as the solution config
                     *	Build : true
                     *
                     * ELSE
                     * if Build (true/false) for the project will
                     * will depend on presence/absence of Build.0 entry
                     */

                    if (action == "ActiveCfg")
                    {
                        combineConfigEntry.ItemConfiguration = FromSlnConfigurationId(projConfig);
                    }
                    else if (action == "Build.0")
                    {
                        combineConfigEntry.Build = true;
                    }
                    else if (action == "Deploy.0")
                    {
                        combineConfigEntry.Deploy = true;
                    }
                }
            }
        }