Наша сборка Qt VS Tools
Правки генерации и удаления moc файлов:
1) Теперь в фильтре проекта GeneratedFiles создаются подфильтры для каждой конфигурации и платформы (актуально для конфигов CODE64).
2) Исправлено добавление и удаление moc конфигураций в vcxproj и vcxproj.filter файлах проектов (в старой версии плагина с этим была проблема и как следствие - возникали ошибки сборки связанные с moc'ами).
3) Теперь при выключении сборки проекта в Solution Property -> Configuration Properties для определенной конфигурации и разрядности не будут генерироватся moc файлы.
5 files modified
181 ■■■■ changed files
QtVsTools.Core/Common/QtVSIPSettingsShared.cs 2 ●●●●● patch | view | raw | blame | history
QtVsTools.Core/HelperFunctions.cs 29 ●●●●● patch | view | raw | blame | history
QtVsTools.Core/QtProject.cs 78 ●●●● patch | view | raw | blame | history
QtVsTools.Package/Package/DteEventsHandler.cs 6 ●●●●● patch | view | raw | blame | history
vstools.sln 66 ●●●● patch | view | raw | blame | history
QtVsTools.Core/Common/QtVSIPSettingsShared.cs
@@ -91,6 +91,8 @@
                        continue;
                    foreach (VCFileConfiguration config in vcfile?.FileConfigurations as IVCCollection) {
                        if (HelperFunctions.IsConfExcludeFromSolution(config))
                            continue;
                        tool = new QtCustomBuildTool(config);
                        if (tool == null)
                            continue;
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;
        }
    }
}
QtVsTools.Core/QtProject.cs
@@ -437,7 +437,8 @@
                string description = "Uic'ing " + ProjectMacros.FileName + "...";
                foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) {
                    if (HelperFunctions.IsConfExcludeFromSolution(config))
                        continue;
                    switch (toolSettings) {
                    case CustomTool.MSBuildTarget:
                        AddUic4BuildStepMsBuild(config, description, uiFileMacro);
@@ -667,6 +668,8 @@
            if (hasDifferentMocFilePerPlatform && hasDifferentMocFilePerConfig) {
                foreach (VCFileConfiguration mocConf
                    in (IVCCollection)mocFile.FileConfigurations) {
                    if (HelperFunctions.IsConfExcludeFromSolution(mocConf))
                        continue;
                    var projectCfg = mocConf.ProjectConfiguration as VCConfiguration;
                    if (projectCfg.Name != vcConfig.Name
                        || (IsMoccedFileIncluded(sourceFile) && !mocableIsCPP)) {
@@ -680,6 +683,8 @@
            } else if (hasDifferentMocFilePerPlatform) {
                foreach (VCFileConfiguration mocConf
                    in (IVCCollection)mocFile.FileConfigurations) {
                    if (HelperFunctions.IsConfExcludeFromSolution(mocConf))
                        continue;
                    var projectCfg = mocConf.ProjectConfiguration as VCConfiguration;
                    var mocConfPlatform = projectCfg.Platform as VCPlatform;
                    if (projectCfg.ConfigurationName != vcConfig.ConfigurationName)
@@ -698,6 +703,8 @@
            } else if (hasDifferentMocFilePerConfig) {
                foreach (VCFileConfiguration mocConf
                    in (IVCCollection)mocFile.FileConfigurations) {
                    if (HelperFunctions.IsConfExcludeFromSolution(mocConf))
                        continue;
                    var projectCfg = mocConf.ProjectConfiguration as VCConfiguration;
                    var mocConfPlatform = projectCfg.Platform as VCPlatform;
                    if (platformName != mocConfPlatform.Name)
@@ -1039,6 +1046,8 @@
                file.ItemType = QtMoc.ItemTypeName;
                if (HelperFunctions.IsSourceFile(file.FullPath)) {
                    foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) {
                        if (HelperFunctions.IsConfExcludeFromSolution(config))
                            continue;
                        qtMsBuild.SetItemProperty(config, QtMoc.Property.DynamicSource, "input");
                        qtMsBuild.SetItemPropertyByName(config, "QtMocFileName", "%(Filename).moc");
                    }
@@ -1066,8 +1075,11 @@
                        HelperFunctions.EnsureCustomBuildToolAvailable(mocFileItem);
                }
                foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations)
                foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) {
                    if (HelperFunctions.IsConfExcludeFromSolution(config))
                        continue;
                    AddMocStepToConfiguration(sourceFile, config, toolSettings);
                }
            } catch {
                throw new QtVSException(SR.GetString("QtProject_CannotAddMocStep", file.FullPath));
@@ -1161,6 +1173,8 @@
            if (file == null)
                return false;
            foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) {
                if (HelperFunctions.IsConfExcludeFromSolution(config))
                    continue;
                var tool = HelperFunctions.GetCustomBuildTool(config);
                if (tool == null)
                    return false;
@@ -1408,6 +1422,8 @@
        bool IsCppMocFileQtMsBuild(VCProject vcProj, VCFile vcFile, VCFile cppFile)
        {
            foreach (VCFileConfiguration fileConfig in (IVCCollection)vcFile.FileConfigurations) {
                if (HelperFunctions.IsConfExcludeFromSolution(fileConfig))
                    continue;
                string inputFile = qtMsBuild.GetPropertyValue(fileConfig, QtMoc.Property.InputFile);
                HelperFunctions.ExpandString(ref inputFile, fileConfig);
                if (HelperFunctions.PathIsRelativeTo(inputFile, cppFile.ItemName))
@@ -1707,7 +1723,16 @@
                        }
                    }
                    if (!subfilterFound) {
                        if (!vfilt.CanAddFilter(subfilterName))
                        if (vfilt.CanAddFilter(subfilterName)) {
                            vfilt.AddFilter(subfilterName);
                            foreach (VCFilter subfilt in vfilt.Filters as IVCCollection) {
                                if (subfilt.Name.ToLower() == lowerSubFilterName) {
                                    vfilt = subfilt;
                                    break;
                                }
                            }
                        }
                        else
                            throw new QtVSException($"Project cannot add filter {filter.Name}");
                    }
                }
@@ -1759,22 +1784,47 @@
        /// <param name="file">file</param>
        public void RemoveFileFromFilter(VCFile file, VCFilter filter)
        {
            try {
                filter.RemoveFile(file);
                var fi = new FileInfo(file.FullPath);
                if (fi.Exists)
                    fi.Delete();
            } catch {
            }
            var fileName = file.FullPath;
            bool isSubFilter = false;
            VCFilter subFlt = null;
            var subfilters = (IVCCollection)filter.Filters;
            for (var i = subfilters.Count; i > 0; i--) {
                if (isSubFilter)
                    break;
                try {
                    var subfilter = (VCFilter)subfilters.Item(i);
                    RemoveFileFromFilter(file, subfilter);
                    foreach (VCFile subFile in (IVCCollection)subfilter.Files) {
                        isSubFilter = (subFile.FullPath.Contains(file.Name) && file.FullPath.Contains(subfilter.Name));
                        if (isSubFilter) {
                            subFlt = subfilter;
                            break;
                        }
                    }
                } catch {
                }
            }
            try {
                if (isSubFilter && subFlt != null) {
                    subFlt.RemoveFile(file);
                } else {
                    filter.RemoveFile(file);
                }
                var fi = new FileInfo(fileName);
                if (fi.Exists)
                    fi.Delete();
            } catch {
            }
        }
        public void MoveFileToDeletedFolder(VCFile vcfile)
@@ -2132,6 +2182,8 @@
        public static void SetPCHOption(VCFile vcFile, pchOption option)
        {
            foreach (VCFileConfiguration config in vcFile.FileConfigurations as IVCCollection) {
                if (HelperFunctions.IsConfExcludeFromSolution(config))
                    continue;
                var compiler = CompilerToolWrapper.Create(config);
                compiler.SetUsePrecompiledHeader(option);
            }
@@ -2140,6 +2192,8 @@
        private static VCFileConfiguration GetVCFileConfigurationByName(VCFile file, string configName)
        {
            foreach (VCFileConfiguration cfg in (IVCCollection)file.FileConfigurations) {
                if (HelperFunctions.IsConfExcludeFromSolution(cfg))
                    continue;
                if (cfg.Name == configName)
                    return cfg;
            }
@@ -2284,6 +2338,8 @@
                mocCmdChecker = new MocCmdChecker();
            foreach (VCFileConfiguration config in (IVCCollection)vcfile.FileConfigurations) {
                if (HelperFunctions.IsConfExcludeFromSolution(config))
                    continue;
                try {
                    string commandLine = "";
                    VCCustomBuildTool tool = null;
QtVsTools.Package/Package/DteEventsHandler.cs
@@ -301,6 +301,8 @@
                        foreach (VCFile fileInFilter in (IVCCollection)generatedFiles.Files) {
                            if (fileInFilter.Name == moccedFileName) {
                                foreach (VCFileConfiguration config in (IVCCollection)fileInFilter.FileConfigurations) {
                                    if (HelperFunctions.IsConfExcludeFromSolution(config))
                                        continue;
                                    var exclude = true;
                                    var vcConfig = config.ProjectConfiguration as VCConfiguration;
                                    if (hasDifferentMocFilesPerConfig && hasDifferentMocFilesPerPlatform) {
@@ -328,6 +330,8 @@
                            foreach (VCFile f in (IVCCollection)filt.Files) {
                                if (f.Name == moccedFileName) {
                                    foreach (VCFileConfiguration config in (IVCCollection)f.FileConfigurations) {
                                        if (HelperFunctions.IsConfExcludeFromSolution(config))
                                            continue;
                                        var vcConfig = config.ProjectConfiguration as VCConfiguration;
                                        var filterToLookFor = string.Empty;
                                        if (hasDifferentMocFilesPerConfig)
@@ -460,6 +464,8 @@
                if (filter != null) {
                    foreach (VCFile file in filter.Files as IVCCollection) {
                        foreach (VCFileConfiguration config in file.FileConfigurations as IVCCollection) {
                            if (HelperFunctions.IsConfExcludeFromSolution(config))
                                continue;
                            var tool = new QtCustomBuildTool(config);
                            var commandLine = tool.CommandLine;
                            if (!string.IsNullOrEmpty(commandLine) && commandLine.Contains("moc.exe")) {
vstools.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31717.71
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1972
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtVsTools.Package", "QtVsTools.Package\QtVsTools.Package.csproj", "{671C3821-7BD9-4C16-9A8D-EC1470EDBC9B}"
EndProject
@@ -390,20 +390,20 @@
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.ActiveCfg = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.Build.0 = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.ActiveCfg = Debug|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.Build.0 = Debug|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.ActiveCfg = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.Build.0 = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.Build.0 = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.ActiveCfg = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.Build.0 = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.ActiveCfg = Release|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.Build.0 = Release|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.ActiveCfg = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.Build.0 = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.ActiveCfg = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.Build.0 = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.ActiveCfg = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.Build.0 = Debug|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.ActiveCfg = Debug|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.Build.0 = Debug|x86
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.ActiveCfg = Release|Any CPU
        {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.Build.0 = Release|Any CPU
        {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -458,6 +458,24 @@
        {8AE9D385-A379-4F5F-A703-3DF643DA6742}.Tests|x64.Build.0 = Release|Any CPU
        {8AE9D385-A379-4F5F-A703-3DF643DA6742}.Tests|x86.ActiveCfg = Release|Any CPU
        {8AE9D385-A379-4F5F-A703-3DF643DA6742}.Tests|x86.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.Build.0 = Release|Any CPU
        {40ADFD6A-64EA-4C77-9D4B-3A91D6AB76B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {40ADFD6A-64EA-4C77-9D4B-3A91D6AB76B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {40ADFD6A-64EA-4C77-9D4B-3A91D6AB76B4}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -480,20 +498,20 @@
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x64.ActiveCfg = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x64.Build.0 = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x86.ActiveCfg = Debug|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x86.Build.0 = Debug|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x86.ActiveCfg = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Debug|x86.Build.0 = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|Any CPU.Build.0 = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x64.ActiveCfg = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x64.Build.0 = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x86.ActiveCfg = Release|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x86.Build.0 = Release|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x86.ActiveCfg = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Release|x86.Build.0 = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|Any CPU.ActiveCfg = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|Any CPU.Build.0 = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x64.ActiveCfg = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x64.Build.0 = Debug|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x86.ActiveCfg = Debug|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x86.Build.0 = Debug|x86
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x86.ActiveCfg = Release|Any CPU
        {020422DA-33AB-4495-A439-7DAC2690795C}.Tests|x86.Build.0 = Release|Any CPU
        {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Any CPU.ActiveCfg = Debug|Win32
        {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Any CPU.Build.0 = Debug|Win32
        {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64
@@ -617,24 +635,6 @@
        {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x64.Build.0 = Release|Any CPU
        {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x86.ActiveCfg = Release|Any CPU
        {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x86.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.ActiveCfg = Debug|x86
        {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.Build.0 = Debug|x86
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.ActiveCfg = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.Build.0 = Release|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.ActiveCfg = Release|x86
        {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.Build.0 = Release|x86
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.ActiveCfg = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.Build.0 = Debug|Any CPU
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.ActiveCfg = Debug|x86
        {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.Build.0 = Debug|x86
        {4B8FC08C-4901-45D4-BC00-C0C461292FF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {4B8FC08C-4901-45D4-BC00-C0C461292FF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {4B8FC08C-4901-45D4-BC00-C0C461292FF2}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -684,6 +684,7 @@
        {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16} = {DD307619-BF80-4E5D-AE54-196057187702}
        {BDA1CD69-624B-4D9D-9B88-ACBEB14AC471} = {A7918293-56E9-465A-AE1C-0724576ADD66}
        {8AE9D385-A379-4F5F-A703-3DF643DA6742} = {DD307619-BF80-4E5D-AE54-196057187702}
        {202F4A6D-77CD-4992-AA53-01B585463287} = {A7918293-56E9-465A-AE1C-0724576ADD66}
        {40ADFD6A-64EA-4C77-9D4B-3A91D6AB76B4} = {A7918293-56E9-465A-AE1C-0724576ADD66}
        {020422DA-33AB-4495-A439-7DAC2690795C} = {A7918293-56E9-465A-AE1C-0724576ADD66}
        {A7918293-56E9-465A-AE1C-0724576ADD66} = {9D9290B2-9E87-46EA-84EA-02836F699BB8}
@@ -698,7 +699,6 @@
        {A5320606-37B8-4F15-97E2-16314109CAF9} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
        {12857847-9877-466C-B056-DD286A219093} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
        {E809DDE3-AE76-4F7A-8DC5-775AC4900138} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
        {202F4A6D-77CD-4992-AA53-01B585463287} = {A7918293-56E9-465A-AE1C-0724576ADD66}
        {4B8FC08C-4901-45D4-BC00-C0C461292FF2} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
        {AFD33401-2F15-4E72-AB35-42C3EE12E897} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
    EndGlobalSection