<#@template hostspecific="true" language="C#" #> <#@assembly Name="System.Core" #> <#@assembly Name="System.Xml" #> <#@assembly Name="System.Xml.Linq" #> <#@import namespace="System" #> <#@import namespace="System.Collections.Generic" #> <#@import namespace="System.IO" #> <#@import namespace="System.Linq" #> <#@import namespace="System.Text" #> <#@import namespace="System.Xml" #> <#@import namespace="System.Xml.Linq" #> <#@assembly name="$(AssemblyRef_Microsoft_VisualStudio_Interop)" #> <#@assembly name="$(AssemblyRef_EnvDTE)" #> <#@import namespace="EnvDTE" #> <#@assembly name="$(VsSdk_Shell_Interop)" #> <#@import namespace="Microsoft.VisualStudio.Shell.Interop" #> <# /**************************************************************************** ** ** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt VS Tools. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ DTE Dte = null; try { Dte = ((IServiceProvider)Host)?.GetService(typeof(DTE)) as DTE; } catch { } IVsShell VsShell = null; try { VsShell = ((IServiceProvider)Host)?.GetService(typeof(SVsShell)) as IVsShell; } catch { } string SolutionDir = Host?.ResolveParameterValue("-", "-", "SolutionDir"); if (string.IsNullOrEmpty(SolutionDir)) { if (Dte != null) SolutionDir = Path.GetDirectoryName(Dte.Solution.FullName); else throw new Exception("Unable to obtain 'SolutionDir' parameter."); } string DevEnvDir = Host?.ResolveParameterValue("-", "-", "DevEnvDir"); if (string.IsNullOrEmpty(DevEnvDir)) { if (VsShell != null) { object vsShellPropValue = null; VsShell.GetProperty((int)__VSSPROPID.VSSPROPID_InstallDirectory, out vsShellPropValue); DevEnvDir = vsShellPropValue as string; if (string.IsNullOrEmpty(DevEnvDir)) throw new Exception("Unable to obtain 'DevEnvDir' parameter."); } else { throw new Exception("Unable to obtain 'DevEnvDir' parameter."); } } string VS_VERSION = Host?.ResolveParameterValue("-", "-", "VisualStudioVersion"); if (string.IsNullOrEmpty(VS_VERSION)) { if (Dte != null) VS_VERSION = Dte.Version; else throw new Exception("Unable to obtain 'VisualStudioVersion' parameter."); } string VS_NAME = VS_VERSION.StartsWith("17.") ? "2022" : VS_VERSION.StartsWith("16.") ? "2019" : VS_VERSION.StartsWith("15.") ? "2017" : "????"; string VC_TARGETS_PATH = Host?.ResolveParameterValue("-", "-", "VCTargetsPath"); if (string.IsNullOrEmpty(VC_TARGETS_PATH) && !string.IsNullOrEmpty(VS_VERSION)) { var proc = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo { FileName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), @"Microsoft Visual Studio\Installer\vswhere.exe"), Arguments = string.Format(@"-property installationPath -latest -Version [{0})", VS_VERSION.StartsWith("17.") ? "17.0,18.0" : VS_VERSION.StartsWith("16.") ? "16.0,17.0" : VS_VERSION.StartsWith("15.") ? "15.0,16.0" : string.Empty), WorkingDirectory = Directory.GetParent(SolutionDir).FullName, CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, }); if (proc.WaitForExit(3000) && proc.ExitCode == 0) VC_TARGETS_PATH = proc.StandardOutput.ReadLine(); } if (string.IsNullOrEmpty(VC_TARGETS_PATH)) { if (Dte != null && !string.IsNullOrEmpty(VS_VERSION)) { Path.Combine(Environment.GetEnvironmentVariable( VS_VERSION.StartsWith("17.") ? "ProgramFiles" : "ProgramFiles(x86)"), $"Microsoft Visual Studio\\{VS_NAME}\\{Dte.Edition}", VS_VERSION.StartsWith("17.") ? @"MSBuild\Microsoft\VC\v170" : VS_VERSION.StartsWith("16.") ? @"MSBuild\Microsoft\VC\v160" : VS_VERSION.StartsWith("15.") ? @"Common7\IDE\VC\VCTargets" : null); } else { throw new Exception("Unable to obtain 'VCTargetsPath' parameter."); } } /***************************************************************************/ string WARNING_GENERATED_FILE = "This file was generated automatically."; string XML_COMMENT_BEGIN = ""; XML_COMMENT_BEGIN = XML_COMMENT_BEGIN.ToString(); XML_COMMENT_END = XML_COMMENT_END.ToString(); var XmlLoad = new Func(xmlText => { XDocument xmlDoc = null; using (var reader = XmlReader.Create(new StringReader(xmlText))) xmlDoc = XDocument.Load(reader); var xmlRoot = xmlDoc.Root; xmlRoot.Descendants().ToList().ForEach(x => x.Name = x.Name.LocalName); return xmlRoot; }); var XmlPrint = new Func, string>(x => { var xmlOut = new StringBuilder(); var xmlOutSettings = new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment, OmitXmlDeclaration = true, Indent = true, }; using (var xmlOutWriter = XmlWriter.Create(xmlOut, xmlOutSettings)) { foreach (var y in x) y.WriteTo(xmlOutWriter); } return xmlOut.ToString(); }); #>