<#@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 = "<!--";
|
string XML_COMMENT_END = "-->";
|
|
XML_COMMENT_BEGIN = XML_COMMENT_BEGIN.ToString();
|
XML_COMMENT_END = XML_COMMENT_END.ToString();
|
|
var XmlLoad = new Func<string, XElement>(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<IEnumerable<XElement>, 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();
|
});
|
|
#>
|