From 34cb20862559eed3225fb0875b01aace38cbd3b6 Mon Sep 17 00:00:00 2001
From: giy <giy@omp-system.ru>
Date: Thu, 19 Jan 2023 13:19:17 +0300
Subject: [PATCH] Правки генерации и удаления moc файлов: 1) Теперь в фильтре проекта GeneratedFiles создаются подфильтры для каждой конфигурации и платформы (актуально для конфигов CODE64). 2) Исправлено добавление и удаление moc конфигураций в vcxproj и vcxproj.filter файлах проектов (в старой версии плагина с этим была проблема и как следствие - возникали ошибки сборки связанные с moc'ами). 3) Теперь при выключении сборки проекта в Solution Property -> Configuration Properties для определенной конфигурации и разрядности не будут генерироватся moc файлы.

---
 QtVsTools.Core/HelperFunctions.cs |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/QtVsTools.Core/HelperFunctions.cs b/QtVsTools.Core/HelperFunctions.cs
index a07fa89..552099c 100644
--- a/QtVsTools.Core/HelperFunctions.cs
+++ b/QtVsTools.Core/HelperFunctions.cs
@@ -47,6 +47,8 @@
 
 namespace QtVsTools.Core
 {
+    using System.Runtime.Remoting.Contexts;
+    using EnvDTE80;
     using QtMsBuild;
 
     public static class HelperFunctions
@@ -764,6 +766,8 @@
                 var excluded = false;
                 var fileConfigurations = (IVCCollection)vcfile.FileConfigurations;
                 foreach (VCFileConfiguration config in fileConfigurations) {
+                    if (IsConfExcludeFromSolution(config))
+                        continue;
                     if (config.ExcludedFromBuild && config.MatchName(configurationName, false)) {
                         excluded = true;
                         break;
@@ -1609,5 +1613,30 @@
                 path += "\\";
             return string.Format("\"{0}\"", path);
         }
+
+        public static bool IsConfExcludeFromSolution(VCFileConfiguration fileConfig)
+        {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
+            var projectConfig = fileConfig.ProjectConfiguration as VCConfiguration;
+            var projectPlatform = projectConfig.Platform as VCPlatform;
+            var project = projectConfig.project as VCProject;
+            var projectEnv = project.Object as Project;
+            var dteEnv = projectEnv.DTE as DTE;
+
+            var contextList = new List<SolutionContext>();
+            foreach (SolutionConfiguration2 solutionCfg in dteEnv.Solution.SolutionBuild.SolutionConfigurations) {
+                if (solutionCfg.PlatformName == projectPlatform.Name && solutionCfg.Name == projectConfig.ConfigurationName) {
+                    foreach (SolutionContext context in solutionCfg.SolutionContexts) {
+                        if (context.ProjectName.Contains(project.Name + ".vcxproj")) {
+                            // ������ ��������� ����� ��������� ������ ���� SolutionContext
+                            // �������� ����� �������� �������� �����
+                            contextList.Add(context);
+                        }
+                    }
+                }
+            }
+            return !contextList[0].ShouldBuild;
+        }
     }
 }

--
Gitblit v1.9.1