Re: MSVC 2017+ Toolset Support
Joseph Brill <[email protected]> Tue, 11 Aug 2020 11:23:20 -0400
| Newsgroups | gmane.comp.programming.tools.scons.devel |
|---|---|
| Message-ID | <CAJLrGP2MBAm4=FPMzO4nQ_60U6bk157+P_NCU4U2_YOGnAeUiQ@mail.gmail.com> |
--===============8816408217331343004==
Content-Type: multipart/alternative; boundary="000000000000508e0905ac9ba591"
--000000000000508e0905ac9ba591
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
I would like to take an opportunity to document some of the behavior of the
toolset version and some of the terminology used as a basis for further
discussion. Also, I believe that the consistency gap is for a narrow
subset of the possible extended specifications.
Toolset: 14.2[X[.YYYYY]], 14.1[X[.YYYYY]], 14.0
Product: 14.2 (MSVC 2019), 14.1 (MSVC 2017), 14.0 (MSVC 2015)
Component: Enterprise (Ent), Professional (Pro), Community (Com),
BuildTools (BT), WDExpress (Exp)
The component ids used are from Microsoft=E2=80=99s documentation of the wo=
rkloads
and component ids for 2019 and 2017. The abbreviations are similar to that
used for Express. The component ids are returned in vswhere queries. The
component id tables are shown at the end of the document along with the
reference links.
Temporarily suspend the distaste of the extended syntax (there is a method
to the madness). The extended syntax for the MSVC_VERSION is not as
=E2=80=9Cfree-wheeling=E2=80=9D as it might appear and =E2=80=9Cbinds=E2=80=
=9D to specific products in a
number of cases. This is by design.
The point of departure is the semantics for specifications that do not bind
to a specific product. This may be able to be resolved using a
command-line option to SCons and/or another argument in the environment.
I believe Bill may have suggested this earlier. A command-line argument
would have significant utility as it would not require changes to build
scripts.
The regular expression that parses/validates the format is shown below.
Currently, any specification that includes a component is automatically
bound to a specific product.
The following table includes examples from the original email and
illustrates how the specification is resolved initially by default:
User
Internal (Resolved Once Upon Entry)
MSVC_VERSION
MSVC_VERSION
Toolset
Product
Comp
14.1
14.1+
14.1
*
*
14.16
14.1+
14.16
*
*
14.16.27
14.1+
14.16.27
*
*
14.16.27023
14.1+
14.16.27023
*
*
14.26Ent
14.2
14.26
14.2
Ent
14.2Pro
14.2
14.2
14.2
Pro
14.26.27Com
14.2
14.26.27
14.2
Com
14.2BT
14.2
14.2
14.2
BT
14.1Exp
14.1
14.1
14.1
Exp
14.0 -> 14.2
14.2
14.0
14.2
*
14.1 -> 14.2BT
14.2
14.1
14.2
BT
14.16 -> 14.2Com
14.2
14.16
14.2
Com
+ Indicates that the preferred product version but may be =E2=80=9Cpromoted=
=E2=80=9D to a
later version. This is the undesirable behavior.
* Indicates that the product or component is not bound to a specific
product and/or component.
The toolset is a =E2=80=9Cproper=E2=80=9D prefix (i.e., =E2=80=9Cstartswith=
=E2=80=9D).
Again, I believe this may have been suggested earlier: the default behavior
could be changed to =E2=80=9Cbind=E2=80=9D to the native product for the to=
olset (i.e., the
=E2=80=9CProduct=E2=80=9D for the first four rows in the table above would =
be =E2=80=9C14.1=E2=80=9D). In
this case, the only ambiguity in the selection would be which product
=E2=80=9Ckind=E2=80=9D (i.e., component id) is selected which is what happe=
ns in the
current msvc detection. The alternative behavior, either via command-line
option and/or additional variable, would be the toolset functionality as
currently implemented.
Issue #3664 succinctly illustrates the differences between the two
behaviors. The two options are shown below in the context of the current
extended toolset version specification:
Assume that no 14.1 products are installed, and the 14.2 Build Tools
edition is installed with the 14.1 toolset.
No promotion
Result
MSVC_VERSION=3D"14.1"
Error =E2=80=93 14.1 Not Found
MSVC_VERSION=3D"14.1->14.2"
14.2 Build Tools
MSVC_VERSION=3D=E2=80=9D14.1->14.2BT=E2=80=9D
14.2 Build Tools
Promotion
Result
MSVC_VERSION=3D"14.1"
14.2 Build Tools
MSVC_VERSION=3D"14.1->14.2"
14.2 Build Tools
MSVC_VERSION=3D=E2=80=9D14.1->14.2BT=E2=80=9D
14.2 Build Tools
In either case, the issue of using the 14.1 toolset with the 14.2 product
can be resolved with the extended syntax and without product ambiguity
(i.e., the last row). The second specification would leave open the kind
(i.e., component) of product selected.
From an end-user perspective, adding =E2=80=9C->14.2=E2=80=9D is easier tha=
n going via the
custom batch file route or even adding an additional variable. A
command-line option to enable the extended behavior may be preferable
especially if using a batch file to launch SCons.
The point of departure is simply what should the default behavior be when a
specification is not bound to a specific product and what should the
mechanism be to enable the other behavior.
The extended MSVC_VERSION format regular expression and Microsoft component
ids for 2019 and 2017 are shown below.
Regards,
Joe
*Extended MSVC_VERSION format:*
*# Regular Expression to validate/parse MSVC_VERSION*
*#*
*# named groups:*
*# version: _VCVER version or specific version*
*# vcver: _VCVER version or None*
*# specific: specific version or None*
*# product: _VCVER version or None*
*# suffix: product type suffix or None*
_MSVC_EXTENDED_VERSION_RE =3D re.compile("""
*# anchor at start of string*
^
*# version number*
(?P<version>
*# _VCVER version: 14.2*
(?P<vcver> \d{1,2} \. \d{1} )
|
*# toolset version: 14.16, 14.16.27023*
(?P<specific> \d{1,2} \. \d{2} (?: \. \d{1,5} )* )
)
*# optional product: '->' 14.2*
(?:
*# optional whitespace*
\s*
*# right assignment literal '->'*
[-][>]
*# optional whitespace*
\s*
*# _VCVER version: 14.2*
(?P<product> \d{1,2} \. \d{1} )
)*
*# optional whitespace*
\s*
*# optional product type: Ent, Pro, Com, Exp, BT, etc.*
(?P<suffix> [A-Z][A-Za-z]+)*
*# anchor at end of string*
$
""", re.VERBOSE)
*Component IDs =E2=80=93 2019 and 2017 (vswhere query components):*
https://docs.microsoft.com/en-us/visualstudio/install/workload-and-componen=
t-ids?view=3Dvs-2019
*Edition*
*ID*
Visual Studio Enterprise 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-enterprise?view=3Dvs-2019>
Microsoft.VisualStudio.Product.Enterprise
Visual Studio Professional 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-professional?view=3Dvs-2019>
Microsoft.VisualStudio.Product.Professional
Visual Studio Community 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-community?view=3Dvs-2019>
Microsoft.VisualStudio.Product.Community
Visual Studio Team Explorer 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-team-explorer?view=3Dvs-2019>
Microsoft.VisualStudio.Product.TeamExplorer
Visual Studio Build Tools 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-build-tools?view=3Dvs-2019>
Microsoft.VisualStudio.Product.BuildTools
Visual Studio Test Agent 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-test-agent?view=3Dvs-2019>
Microsoft.VisualStudio.Product.TestAgent
Visual Studio Load Test Controller 2019
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-test-controller?view=3Dvs-2019>
Microsoft.VisualStudio.Product.TestController
https://docs.microsoft.com/en-us/visualstudio/install/workload-and-componen=
t-ids?view=3Dvs-2017
*Edition*
*ID*
Visual Studio Enterprise 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-enterprise?view=3Dvs-2017>
Microsoft.VisualStudio.Product.Enterprise
Visual Studio Professional 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-professional?view=3Dvs-2017>
Microsoft.VisualStudio.Product.Professional
Visual Studio Community 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-community?view=3Dvs-2017>
Microsoft.VisualStudio.Product.Community
Visual Studio Team Explorer 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-team-explorer?view=3Dvs-2017>
Microsoft.VisualStudio.Product.TeamExplorer
Visual Studio Desktop Express 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-express?view=3Dvs-2017>
Microsoft.VisualStudio.Product.WDExpress
Visual Studio Build Tools 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-build-tools?view=3Dvs-2017>
Microsoft.VisualStudio.Product.BuildTools
Visual Studio Test Agent 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-test-agent?view=3Dvs-2017>
Microsoft.VisualStudio.Product.TestAgent
Visual Studio Test Controller 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-test-controller?view=3Dvs-2017>
Microsoft.VisualStudio.Product.TestController
Visual Studio Test Professional 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-test-professional?view=3Dvs-2017>
Microsoft.VisualStudio.Product.TestProfessional
Visual Studio Feedback Client 2017
<https://docs.microsoft.com/en-us/visualstudio/install/workload-component-i=
d-vs-feedback-client?view=3Dvs-2017>
Microsoft.VisualStudio.Product.FeedbackClient
--000000000000508e0905ac9ba591
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;fo=
nt-size:11pt;font-family:Calibri,sans-serif">I would like to take an opport=
unity to document some of the
behavior of the toolset version and some of the terminology used as a basis=
for
further discussion.=C2=A0 Also, I believe that
the consistency gap is for a narrow subset of the possible extended specifi=
cations.=C2=A0 </p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Toolset:=C2=A0 14.2[X[.YYYYY]],=C2=A0 14.1[X[.Y=
YYYY]], 14.0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Product:=C2=A0 14.2 (MSVC
2019),=C2=A0 14.1 (MSVC 2017), 14.0 (MSVC
2015)</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Component: =C2=A0Enterprise
(Ent), =C2=A0Professional (Pro), =C2=A0Community (Com), BuildTools (BT), =
=C2=A0WDExpress (Exp)</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The component ids used are from Microsoft=E2=80=
=99s documentation of
the workloads and component ids for 2019 and 2017.=C2=A0 The abbreviations =
are similar to that used
for Express.=C2=A0 The component ids are
returned in vswhere queries.=C2=A0 The
component id tables are shown at the end of the document along with the
reference links.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Temporarily suspend the distaste of the extende=
d syntax (there
is a method to the madness).=C2=A0 The
extended syntax for the MSVC_VERSION is not as =E2=80=9Cfree-wheeling=E2=80=
=9D as it might
appear and =E2=80=9Cbinds=E2=80=9D to specific products in a number of case=
s.=C2=A0 This is by design.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The point of departure is the semantics for spe=
cifications
that do not bind to a specific product.=C2=A0
This may be able to be resolved using a command-line option to SCons
and/or another argument in the environment. =C2=A0=C2=A0I believe Bill may =
have suggested this
earlier. A command-line argument would have significant utility as it would=
not
require changes to build scripts.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The regular expression that parses/validates th=
e format is
shown below.=C2=A0 Currently, any
specification that includes a component is automatically bound to a specifi=
c
product.=C2=A0 </p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The following table includes examples from the =
original
email and illustrates how the specification is resolved initially by defaul=
t:</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<table class=3D"gmail-MsoTableGrid" border=3D"1" cellspacing=3D"0" cellpadd=
ing=3D"0" style=3D"margin-left:0.5in;border-collapse:collapse;border:none">
<tbody><tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border:1pt solid w=
indowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">User</p>
</td>
<td width=3D"318" colspan=3D"4" valign=3D"top" style=3D"width:238.5pt;bor=
der-top:1pt solid windowtext;border-right:1pt solid windowtext;border-botto=
m:1pt solid windowtext;border-left:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Internal (=
Resolved Once
Upon Entry)</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">MSVC_VERSI=
ON</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">MSVC_VERSI=
ON</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Toolset</p=
>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Product</p=
>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Comp</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1<span =
style=3D"color:rgb(192,0,0)">+</span></p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span styl=
e=3D"color:rgb(192,0,0)">*</span></p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">*</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1<span =
style=3D"color:rgb(192,0,0)">+</span></p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span styl=
e=3D"color:rgb(192,0,0)">*</span></p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">*</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16.27</=
p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1<span =
style=3D"color:rgb(192,0,0)">+</span></p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16.27</=
p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span styl=
e=3D"color:rgb(192,0,0)">*</span></p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">*</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16.2702=
3</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1<span =
style=3D"color:rgb(192,0,0)">+</span></p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16.2702=
3</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span styl=
e=3D"color:rgb(192,0,0)">*</span></p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">*</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.26Ent</=
p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.26</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Ent</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2Pro</p=
>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Pro</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.26.27Co=
m</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.26.27</=
p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Com</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2BT</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">BT</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1Exp</p=
>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Exp</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.0 ->=
14.2</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.0</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">*</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1 ->=
14.2BT</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.1</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">BT</p>
</td>
</tr>
<tr>
<td width=3D"119" valign=3D"top" style=3D"width:89.6pt;border-right:1pt s=
olid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid wi=
ndowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16 ->=
; 14.2Com</p>
</td>
<td width=3D"114" valign=3D"top" style=3D"width:85.8pt;border-top:none;bo=
rder-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid wi=
ndowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"90" valign=3D"top" style=3D"width:67.2pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.16</p>
</td>
<td width=3D"62" valign=3D"top" style=3D"width:0.65in;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">14.2</p>
</td>
<td width=3D"52" valign=3D"top" style=3D"width:38.7pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;margin=
:0in 0in 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif">Com</p>
</td>
</tr>
</tbody></table>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">+</spa=
n>
Indicates that the preferred product version but may be =E2=80=9Cpromoted=
=E2=80=9D to a later
version.=C2=A0 This is the undesirable behavior.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">* Indicates that the product or
component is not bound to a specific product and/or component. </p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">The toolset is a =E2=80=9Cproper=E2=80=9D=
prefix (i.e.,
=E2=80=9Cstartswith=E2=80=9D).</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Again, I believe this may have been suggested e=
arlier: the
default behavior could be changed to =E2=80=9Cbind=E2=80=9D to the native p=
roduct for the
toolset (i.e., the =E2=80=9CProduct=E2=80=9D for the first four rows in the=
table above would
be =E2=80=9C14.1=E2=80=9D).=C2=A0 In this case, the only
ambiguity in the selection would be which product =E2=80=9Ckind=E2=80=9D (i=
.e., component id)
is selected which is what happens in the current msvc detection.=C2=A0 The =
alternative behavior, either via
command-line option and/or additional variable, would be the toolset functi=
onality
as currently implemented.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Issue #3664 succinctly illustrates the differen=
ces between
the two behaviors.=C2=A0 The two options are
shown below in the context of the current extended toolset version specific=
ation:</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">Assume that no 14.1 products are
installed, and the 14.2 Build Tools edition=C2=A0is installed with the 14.1
toolset.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<table class=3D"gmail-MsoTableGrid" border=3D"1" cellspacing=3D"0" cellpadd=
ing=3D"0" style=3D"margin-left:0.5in;border-collapse:collapse;border:none">
<tbody><tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border:1pt solid =
windowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">No promotion</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:1pt soli=
d windowtext;border-right:1pt solid windowtext;border-bottom:1pt solid wind=
owtext;border-left:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">Result</p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D"14.1"</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Error =E2=
=80=93 14.1 Not Found</span></p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D"14.1->14.2"</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">14.2 Build Tools</p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D=E2=80=9D14.1->14.2BT=E2=80=
=9D</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">14.2 Build Tools</p>
</td>
</tr>
</tbody></table>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<table class=3D"gmail-MsoTableGrid" border=3D"1" cellspacing=3D"0" cellpadd=
ing=3D"0" style=3D"margin-left:0.5in;border-collapse:collapse;border:none">
<tbody><tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border:1pt solid =
windowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">Promotion</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:1pt soli=
d windowtext;border-right:1pt solid windowtext;border-bottom:1pt solid wind=
owtext;border-left:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">Result</p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D"14.1"</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">14.2 Build=
Tools</span></p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D"14.1->14.2"</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">14.2 Build Tools</p>
</td>
</tr>
<tr>
<td width=3D"215" valign=3D"top" style=3D"width:161.6pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">MSVC_VERSION=3D=E2=80=9D14.1->14.2BT=E2=80=
=9D</p>
</td>
<td width=3D"156" valign=3D"top" style=3D"width:117pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;padding:0in 5.4pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif">14.2 Build Tools</p>
</td>
</tr>
</tbody></table>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">In either case, the issue of using the 14.1 too=
lset with the
14.2 product can be resolved with the extended syntax and without product
ambiguity (i.e., the last row).=C2=A0 The second
specification would leave open the kind (i.e., component) of product select=
ed.=C2=A0 </p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">From an end-user perspective, adding =E2=80=9C-=
>14.2=E2=80=9D is easier
than going via the custom batch file route or even adding an additional
variable.=C2=A0 A command-line option to
enable the extended behavior may be preferable especially if using a batch =
file
to launch SCons.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The point of departure is simply what should th=
e default
behavior be when a specification is not bound to a specific product and wha=
t
should the mechanism be to enable the other behavior.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">The extended MSVC_VERSION format regular expres=
sion and
Microsoft component ids for 2019 and 2017 are shown below.</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Regards,</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">Joe</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif"><b>Extended MSVC_VERSION
format:</b></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green"># Regular Expression to
validate/parse MSVC_VERSION</span></i><span style=3D"font-size:10pt;font-fa=
mily:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#</span></i><span style=3D"font=
-size:10pt;font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0 named group=
s:</span></i><span style=3D"font-size:10pt;font-family:"Courier New&qu=
ot;;color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 version:=C2=A0
_VCVER version or specific version</span></i><span style=3D"font-size:10pt;=
font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 vcver:=C2=A0=C2=A0=C2=A0
_VCVER version or None</span></i><span style=3D"font-size:10pt;font-family:=
"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 specific: specific version or None</span></i><span style=3D"font-siz=
e:10pt;font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 product:=C2=A0
_VCVER version or None</span></i><span style=3D"font-size:10pt;font-family:=
"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><i><span style=3D"font-size:10pt;font-=
family:"Courier New";color:green">#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 suffix:=C2=A0=C2=A0
product type suffix or None</span></i><span style=3D"font-size:10pt;font-fa=
mily:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">_MSVC_EXTENDED_VERSION_RE
</span><span style=3D"font-size:10pt;font-family:"Courier New";co=
lor:maroon">=3D</span><span style=3D"font-size:10pt;font-family:"Couri=
er New";color:black">
re</span><span style=3D"font-size:10pt;font-family:"Courier New";=
color:maroon">.</span><span style=3D"font-size:10pt;font-family:"Couri=
er New";color:rgb(192,64,0)">compile</span><span style=3D"font-size:10=
pt;font-family:"Courier New";color:maroon">(</span><span style=3D=
"font-size:10pt;font-family:"Courier New";color:teal">""=
;"</span><span style=3D"font-size:10pt;font-family:"Courier New&q=
uot;;color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
anchor at start of string</span></i><span style=3D"font-size:10pt;font-fami=
ly:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 ^</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
version number</span></i><span style=3D"font-size:10pt;font-family:"Co=
urier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><span st=
yle=3D"font-size:10pt;font-family:"Courier New";color:maroon">(</=
span><span style=3D"font-size:10pt;font-family:"Courier New";colo=
r:black">?P<</span><span style=3D"font-size:10pt;font-family:"Couri=
er New";color:rgb(192,64,0)">version</span><span style=3D"font-size:10=
pt;font-family:"Courier New";color:black">></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
_VCVER version: 14.2</span></i><span style=3D"font-size:10pt;font-family:&q=
uot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">(</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black">?P<vcver> \d</span><span style=3D"f=
ont-size:10pt;font-family:"Courier New";color:maroon">{</span><sp=
an style=3D"font-size:10pt;font-family:"Courier New";color:navy">=
1</span><span style=3D"font-size:10pt;font-family:"Courier New";c=
olor:maroon">,</span><span style=3D"font-size:10pt;font-family:"Courie=
r New";color:navy">2</span><span style=3D"font-size:10pt;font-family:&=
quot;Courier New";color:maroon">}</span><span style=3D"font-size:10pt;=
font-family:"Courier New";color:black"> \</span><span style=3D"fo=
nt-size:10pt;font-family:"Courier New";color:maroon">.</span><spa=
n style=3D"font-size:10pt;font-family:"Courier New";color:black">=
\d</span><span style=3D"font-size:10pt;font-family:"Courier New"=
;color:maroon">{</span><span style=3D"font-size:10pt;font-family:"Cour=
ier New";color:navy">1</span><span style=3D"font-size:10pt;font-family=
:"Courier New";color:maroon">}</span><span style=3D"font-size:10p=
t;font-family:"Courier New";color:black"> </span><span style=3D"f=
ont-size:10pt;font-family:"Courier New";color:maroon">)</span><sp=
an style=3D"font-size:10pt;font-family:"Courier New";color:black"=
></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
toolset version: 14.16, 14.16.27023</span></i><span style=3D"font-size:10pt=
;font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">(</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black">?P<specific> \d</span><span style=
=3D"font-size:10pt;font-family:"Courier New";color:maroon">{</spa=
n><span style=3D"font-size:10pt;font-family:"Courier New";color:n=
avy">1</span><span style=3D"font-size:10pt;font-family:"Courier New&qu=
ot;;color:maroon">,</span><span style=3D"font-size:10pt;font-family:"C=
ourier New";color:navy">2</span><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:maroon">}</span><span style=3D"font-size:=
10pt;font-family:"Courier New";color:black"> \</span><span style=
=3D"font-size:10pt;font-family:"Courier New";color:maroon">.</spa=
n><span style=3D"font-size:10pt;font-family:"Courier New";color:b=
lack"> \d</span><span style=3D"font-size:10pt;font-family:"Courier New=
";color:maroon">{</span><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New";color:navy">2</span><span style=3D"font-size:10pt;font-=
family:"Courier New";color:maroon">}</span><span style=3D"font-si=
ze:10pt;font-family:"Courier New";color:black"> </span><span styl=
e=3D"font-size:10pt;font-family:"Courier New";color:maroon">(</sp=
an><span style=3D"font-size:10pt;font-family:"Courier New";color:=
black">?</span><span style=3D"font-size:10pt;font-family:"Courier New&=
quot;;color:maroon">:</span><span style=3D"font-size:10pt;font-family:"=
;Courier New";color:black"> \</span><span style=3D"font-size:10pt;font=
-family:"Courier New";color:maroon">.</span><span style=3D"font-s=
ize:10pt;font-family:"Courier New";color:black"> \d</span><span s=
tyle=3D"font-size:10pt;font-family:"Courier New";color:maroon">{<=
/span><span style=3D"font-size:10pt;font-family:"Courier New";col=
or:navy">1</span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">,</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:navy">5</span><span style=3D"font-size:10pt;font=
-family:"Courier New";color:maroon">}</span><span style=3D"font-s=
ize:10pt;font-family:"Courier New";color:black"> </span><span sty=
le=3D"font-size:10pt;font-family:"Courier New";color:maroon">)</s=
pan><span style=3D"font-size:10pt;font-family:"Courier New";color=
:black">* </span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">)</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><span st=
yle=3D"font-size:10pt;font-family:"Courier New";color:maroon">)</=
span><span style=3D"font-size:10pt;font-family:"Courier New";colo=
r:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
optional product: '->' 14.2</span></i><span style=3D"font-size:1=
0pt;font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><span st=
yle=3D"font-size:10pt;font-family:"Courier New";color:maroon">(</=
span><span style=3D"font-size:10pt;font-family:"Courier New";colo=
r:black">?</span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">:</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
optional whitespace</span></i><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 \s*</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
right assignment literal '->'</span></i><span style=3D"font-size=
:10pt;font-family:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">[</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black">-</span><span style=3D"font-size:10pt;fon=
t-family:"Courier New";color:maroon">][</span><span style=3D"font=
-size:10pt;font-family:"Courier New";color:black">></span><spa=
n style=3D"font-size:10pt;font-family:"Courier New";color:maroon"=
>]</span><span style=3D"font-size:10pt;font-family:"Courier New";=
color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
optional whitespace</span></i><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 \s*</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><i><span style=3D"font-size:10pt;font-family:"Courier=
New";color:green">#
_VCVER version: 14.2</span></i><span style=3D"font-size:10pt;font-family:&q=
uot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 </span><span style=3D"font-size:10pt;font-family:"Courier Ne=
w";color:maroon">(</span><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black">?P<product> \d</span><span style=3D=
"font-size:10pt;font-family:"Courier New";color:maroon">{</span><=
span style=3D"font-size:10pt;font-family:"Courier New";color:navy=
">1</span><span style=3D"font-size:10pt;font-family:"Courier New"=
;color:maroon">,</span><span style=3D"font-size:10pt;font-family:"Cour=
ier New";color:navy">2</span><span style=3D"font-size:10pt;font-family=
:"Courier New";color:maroon">}</span><span style=3D"font-size:10p=
t;font-family:"Courier New";color:black"> \</span><span style=3D"=
font-size:10pt;font-family:"Courier New";color:maroon">.</span><s=
pan style=3D"font-size:10pt;font-family:"Courier New";color:black=
"> \d</span><span style=3D"font-size:10pt;font-family:"Courier New&quo=
t;;color:maroon">{</span><span style=3D"font-size:10pt;font-family:"Co=
urier New";color:navy">1</span><span style=3D"font-size:10pt;font-fami=
ly:"Courier New";color:maroon">}</span><span style=3D"font-size:1=
0pt;font-family:"Courier New";color:black"> </span><span style=3D=
"font-size:10pt;font-family:"Courier New";color:maroon">)</span><=
span style=3D"font-size:10pt;font-family:"Courier New";color:blac=
k"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><span st=
yle=3D"font-size:10pt;font-family:"Courier New";color:maroon">)</=
span><span style=3D"font-size:10pt;font-family:"Courier New";colo=
r:black">*</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
optional whitespace</span></i><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 \s*</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
optional product type: Ent, Pro, Com, Exp, BT, etc.</span></i><span style=
=3D"font-size:10pt;font-family:"Courier New";color:black"></span>=
</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><span st=
yle=3D"font-size:10pt;font-family:"Courier New";color:maroon">(</=
span><span style=3D"font-size:10pt;font-family:"Courier New";colo=
r:black">?P<suffix> </span><span style=3D"font-size:10pt;font-family:=
"Courier New";color:maroon">[</span><span style=3D"font-size:10pt=
;font-family:"Courier New";color:black">A-Z</span><span style=3D"=
font-size:10pt;font-family:"Courier New";color:maroon">][</span><=
span style=3D"font-size:10pt;font-family:"Courier New";color:blac=
k">A-Za-z</span><span style=3D"font-size:10pt;font-family:"Courier New=
";color:maroon">]</span><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New";color:black">+</span><span style=3D"font-size:10pt;font=
-family:"Courier New";color:maroon">)</span><span style=3D"font-s=
ize:10pt;font-family:"Courier New";color:black">*</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 </span><i><span=
style=3D"font-size:10pt;font-family:"Courier New";color:green">#
anchor at end of string</span></i><span style=3D"font-size:10pt;font-family=
:"Courier New";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:black">=C2=A0=C2=A0=C2=A0 $</span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;background-im=
age:initial;background-position:initial;background-size:initial;background-=
repeat:initial;background-origin:initial;background-clip:initial;font-size:=
11pt;font-family:Calibri,sans-serif"><span style=3D"font-size:10pt;font-fam=
ily:"Courier New";color:teal">""",
re.VERBOSE)</span><span style=3D"font-size:10pt;font-family:"Courier N=
ew";color:black"></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif"><b>Component IDs =E2=80=93 2019
and 2017 (vswhere query components):</b></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0<span style=3D"font-size:11pt">=C2=A0</sp=
an><span style=3D"font-size:11pt">=C2=A0</span><span style=3D"font-size:11p=
t"><br></span></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"https://docs.micro=
soft.com/en-us/visualstudio/install/workload-and-component-ids?view=3Dvs-20=
19" style=3D"color:blue">https://docs.microsoft.com/en-us/visualstudio/inst=
all/workload-and-component-ids?view=3Dvs-2019</a></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<table class=3D"gmail-MsoNormalTable" border=3D"1" cellspacing=3D"0" cellpa=
dding=3D"0" width=3D"606" style=3D"width:454.5pt;margin-left:35.6pt;backgro=
und-image:initial;background-position:initial;background-size:initial;backg=
round-repeat:initial;background-origin:initial;background-clip:initial;bord=
er-collapse:collapse;border:none">
<thead>
<tr>
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border:1pt solid=
windowtext;padding:0.75pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;f=
ont-family:Calibri,sans-serif"><strong><span style=3D"color:rgb(23,23,23)">=
Edition</span></strong><b><span style=3D"font-size:12pt;color:rgb(23,23,23)=
"></span></b></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:1pt sol=
id windowtext;border-right:1pt solid windowtext;border-bottom:1pt solid win=
dowtext;border-left:none;padding:0.75pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;f=
ont-family:Calibri,sans-serif"><strong><span style=3D"color:rgb(23,23,23)">=
ID</span></strong><b><span style=3D"font-size:12pt;color:rgb(23,23,23)"></s=
pan></b></p>
</td>
</tr>
</thead>
<tbody><tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-enterprise?view=3Dvs-2019" style=3D"color:blue"><span style=3D"text=
-decoration-line:none">Visual=C2=A0Studio
Enterprise=C2=A02019</span></a></span><span style=3D"font-size:12pt;color=
:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Enterprise</span><span style=3D"font-size:12pt;color:r=
gb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-professional?view=3Dvs-2019" style=3D"color:blue"><span style=3D"te=
xt-decoration-line:none">Visual=C2=A0Studio
Professional=C2=A02019</span></a></span><span style=3D"font-size:12pt;col=
or:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Professional</span><span style=3D"font-size:12pt;color=
:rgb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-community?view=3Dvs-2019" style=3D"color:blue"><span style=3D"text-=
decoration-line:none">Visual=C2=A0Studio
Community=C2=A02019</span></a></span><span style=3D"font-size:12pt;color:=
rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Community</span><span style=3D"font-size:12pt;color:rg=
b(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-team-explorer?view=3Dvs-2019" style=3D"color:blue"><span style=3D"t=
ext-decoration-line:none">Visual=C2=A0Studio
Team=C2=A0Explorer=C2=A02019</span></a></span><span style=3D"font-size:12=
pt;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TeamExplorer</span><span style=3D"font-size:12pt;colo=
r:rgb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-build-tools?view=3Dvs-2019" style=3D"color:blue"><span style=3D"tex=
t-decoration-line:none">Visual=C2=A0Studio
Build=C2=A0Tools=C2=A02019</span></a></span><span style=3D"font-size:12pt=
;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.BuildTools</span><span style=3D"font-size:12pt;color:r=
gb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-test-agent?view=3Dvs-2019" style=3D"color:blue"><span style=3D"text=
-decoration-line:none">Visual=C2=A0Studio
Test=C2=A0Agent=C2=A02019</span></a></span><span style=3D"font-size:12pt;=
color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TestAgent</span><span style=3D"font-size:12pt;color:r=
gb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-test-controller?view=3Dvs-2019" style=3D"color:blue"><span style=3D=
"text-decoration-line:none">Visual=C2=A0Studio
Load=C2=A0Test=C2=A0Controller 2019</span></a></span><span style=3D"font-=
size:12pt;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TestController</span><span style=3D"font-size:12pt;co=
lor:rgb(23,23,23)"></span></p>
</td>
</tr>
</tbody></table>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0</p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;font=
-family:Calibri,sans-serif">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"https://docs.micro=
soft.com/en-us/visualstudio/install/workload-and-component-ids?view=3Dvs-20=
17" style=3D"color:blue">https://docs.microsoft.com/en-us/visualstudio/inst=
all/workload-and-component-ids?view=3Dvs-2017</a></p>
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt 0.5in;font-size:11p=
t;font-family:Calibri,sans-serif">=C2=A0</p>
<table class=3D"gmail-MsoNormalTable" border=3D"1" cellspacing=3D"0" cellpa=
dding=3D"0" width=3D"606" style=3D"width:454.5pt;margin-left:35.6pt;backgro=
und-image:initial;background-position:initial;background-size:initial;backg=
round-repeat:initial;background-origin:initial;background-clip:initial;bord=
er-collapse:collapse;border:none">
<thead>
<tr>
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border:1pt solid=
windowtext;padding:0.75pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;f=
ont-family:Calibri,sans-serif"><strong><span style=3D"color:rgb(23,23,23)">=
Edition</span></strong><b><span style=3D"font-size:12pt;color:rgb(23,23,23)=
"></span></b></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:1pt sol=
id windowtext;border-right:1pt solid windowtext;border-bottom:1pt solid win=
dowtext;border-left:none;padding:0.75pt">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;f=
ont-family:Calibri,sans-serif"><strong><span style=3D"color:rgb(23,23,23)">=
ID</span></strong><b><span style=3D"font-size:12pt;color:rgb(23,23,23)"></s=
pan></b></p>
</td>
</tr>
</thead>
<tbody><tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-enterprise?view=3Dvs-2017" style=3D"color:blue"><span style=3D"text=
-decoration-line:none">Visual=C2=A0Studio
Enterprise=C2=A02017</span></a></span><span style=3D"font-size:12pt;color=
:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Enterprise</span><span style=3D"font-size:12pt;color:r=
gb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-professional?view=3Dvs-2017" style=3D"color:blue"><span style=3D"te=
xt-decoration-line:none">Visual=C2=A0Studio
Professional=C2=A02017</span></a></span><span style=3D"font-size:12pt;col=
or:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Professional</span><span style=3D"font-size:12pt;color=
:rgb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-community?view=3Dvs-2017" style=3D"color:blue"><span style=3D"text-=
decoration-line:none">Visual=C2=A0Studio
Community=C2=A02017</span></a></span><span style=3D"font-size:12pt;color:=
rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.Community</span><span style=3D"font-size:12pt;color:rg=
b(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-team-explorer?view=3Dvs-2017" style=3D"color:blue"><span style=3D"t=
ext-decoration-line:none">Visual=C2=A0Studio
Team=C2=A0Explorer=C2=A02017</span></a></span><span style=3D"font-size:12=
pt;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TeamExplorer</span><span style=3D"font-size:12pt;colo=
r:rgb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-express?view=3Dvs-2017" style=3D"color:blue"><span style=3D"text-de=
coration-line:none">Visual Studio Desktop
Express 2017</span></a></span><span style=3D"font-size:12pt;color:rgb(23,=
23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.WDExpress</span><span style=3D"font-size:12pt;color:rg=
b(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-build-tools?view=3Dvs-2017" style=3D"color:blue"><span style=3D"tex=
t-decoration-line:none">Visual=C2=A0Studio
Build=C2=A0Tools=C2=A02017</span></a></span><span style=3D"font-size:12pt=
;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(192,0,0)">Microsoft.=
VisualStudio.Product.BuildTools</span><span style=3D"font-size:12pt;color:r=
gb(192,0,0)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-test-agent?view=3Dvs-2017" style=3D"color:blue"><span style=3D"text=
-decoration-line:none">Visual=C2=A0Studio
Test=C2=A0Agent=C2=A02017</span></a></span><span style=3D"font-size:12pt;=
color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TestAgent</span><span style=3D"font-size:12pt;color:r=
gb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-test-controller?view=3Dvs-2017" style=3D"color:blue"><span style=3D=
"text-decoration-line:none">Visual=C2=A0Studio
Test=C2=A0Controller 2017</span></a></span><span style=3D"font-size:12pt;=
color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TestController</span><span style=3D"font-size:12pt;co=
lor:rgb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-test-professional?view=3Dvs-2017" style=3D"color:blue"><span style=
=3D"text-decoration-line:none">Visual=C2=A0Studio
Test=C2=A0Professional=C2=A02017</span></a></span><span style=3D"font-siz=
e:12pt;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.TestProfessional</span><span style=3D"font-size:12pt;=
color:rgb(23,23,23)"></span></p>
</td>
</tr>
<tr style=3D"box-sizing:inherit;outline-color:inherit">
<td width=3D"282" valign=3D"top" style=3D"width:211.5pt;border-right:1pt =
solid windowtext;border-bottom:1pt solid windowtext;border-left:1pt solid w=
indowtext;border-top:none;box-sizing:inherit;padding:0.75rem 1rem;outline-c=
olor:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)"><a href=
=3D"https://docs.microsoft.com/en-us/visualstudio/install/workload-componen=
t-id-vs-feedback-client?view=3Dvs-2017" style=3D"color:blue"><span style=3D=
"text-decoration-line:none">Visual=C2=A0Studio
Feedback=C2=A0Client=C2=A02017</span></a></span><span style=3D"font-size:=
12pt;color:rgb(23,23,23)"></span></p>
</td>
<td width=3D"324" valign=3D"top" style=3D"width:243pt;border-top:none;bor=
der-left:none;border-bottom:1pt solid windowtext;border-right:1pt solid win=
dowtext;box-sizing:inherit;padding:0.75rem 1rem;outline-color:inherit">
<p class=3D"MsoNormal" style=3D"margin:0in 0in 0.0001pt;font-size:11pt;fo=
nt-family:Calibri,sans-serif"><span style=3D"color:rgb(23,23,23)">Microsoft=
.VisualStudio.Product.FeedbackClient</span><span style=3D"font-size:12pt;co=
lor:rgb(23,23,23)"></span></p>
</td>
</tr>
</tbody></table>
<p class=3D"gmail-MsoListParagraph" style=3D"margin:0in 0in 0.0001pt;font-s=
ize:11pt;font-family:Calibri,sans-serif">=C2=A0</p></div>
--000000000000508e0905ac9ba591--
--===============8816408217331343004==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev
--===============8816408217331343004==--