Add netfx:DotNetCoreSdkFeatureBandSearch.
7058
Sean Hall committed
Jan 15, 2023 at 19:17 UTC
d180bc6df297422f189ffd08a0dd558bfbeba1ca
25 files changed
+745
-428
src/api/wix/WixToolset.Data/WixVersionLabel.cs
deleted
-43
@@ -1,43 +0,0 @@
1
-// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
-
3
-namespace WixToolset.Data
4
-{
5
- using System;
6
-
7
- /// <summary>
8
- /// Label in a <c>WixVersion</c>.
9
- /// </summary>
10
- [CLSCompliant(false)]
11
- public class WixVersionLabel
12
- {
13
- /// <summary>
14
- /// Creates a string only version label.
15
- /// </summary>
16
- /// <param name="label">String value for version label.</param>
17
- public WixVersionLabel(string label)
18
- {
19
- this.Label = label;
20
- }
21
-
22
- /// <summary>
23
- /// Creates a string version label with numeric value.
24
- /// </summary>
25
- /// <param name="label">String value for version label.</param>
26
- /// <param name="numeric">Numeric value for the version label.</param>
27
- public WixVersionLabel(string label, uint? numeric)
28
- {
29
- this.Label = label;
30
- this.Numeric = numeric;
31
- }
32
-
33
- /// <summary>
34
- /// Gets the string label value.
35
- /// </summary>
36
- public string Label { get; set; }
37
-
38
- /// <summary>
39
- /// Gets the optional numeric label value.
40
- /// </summary>
41
- public uint? Numeric { get; set; }
42
- }
43
-}
src/ext/NetFx/be/detectnetcore.cpp
+8
-83
@@ -12,18 +12,7 @@ HRESULT DetectNetCore(
12
{
13
HRESULT hr = S_OK;
14
LPCWSTR wzRuntimeType = NULL;
15
- LPCWSTR wzPlatformName = NULL;
16
- LPWSTR sczExePath = NULL;
17
- LPWSTR sczCommandLine = NULL;
18
- HANDLE hProcess = NULL;
19
- HANDLE hStdOutErr = INVALID_HANDLE_VALUE;
20
- BYTE* rgbOutput = NULL;
21
- DWORD cbOutput = 0;
22
- DWORD cbTotalRead = 0;
23
- DWORD cbRead = 0;
24
- DWORD dwExitCode = 0;
25
-
26
- ReleaseNullStr(*psczLatestVersion);
15
+ LPWSTR sczArguments = NULL;
16
17
switch (runtimeType)
18
{
@@ -41,80 +30,14 @@ HRESULT DetectNetCore(
30
break;
31
}
32
44
- switch (platform)
45
- {
46
- case NETFX_NET_CORE_PLATFORM_ARM64:
47
- wzPlatformName = L"arm64";
48
- break;
49
- case NETFX_NET_CORE_PLATFORM_X64:
50
- wzPlatformName = L"x64";
51
- break;
52
- case NETFX_NET_CORE_PLATFORM_X86:
53
- wzPlatformName = L"x86";
54
- break;
55
- default:
56
- BextExitWithRootFailure(hr, E_INVALIDARG, "Unknown platform: %u", platform);
57
- break;
58
- }
59
-
60
- hr = StrAllocFormatted(&sczExePath, L"%ls%ls\\netcoresearch.exe", wzBaseDirectory, wzPlatformName);
61
- BextExitOnFailure(hr, "Failed to build netcoresearch.exe path.");
62
-
63
- hr = StrAllocFormatted(&sczCommandLine, L"\"%ls\" runtime %ls %ls", sczExePath, wzMajorVersion, wzRuntimeType);
64
- BextExitOnFailure(hr, "Failed to build netcoresearch.exe command line.");
65
-
66
- hr = ProcExecute(sczExePath, sczCommandLine, &hProcess, NULL, &hStdOutErr);
67
- if (HRESULT_FROM_WIN32(ERROR_EXE_MACHINE_TYPE_MISMATCH) == hr)
68
- {
69
- ExitFunction1(hr = S_FALSE);
70
- }
71
- BextExitOnFailure(hr, "Failed to run: %ls", sczCommandLine);
72
-
73
- cbOutput = 64;
33
+ hr = StrAllocFormatted(&sczArguments, L"runtime %ls %ls", wzMajorVersion, wzRuntimeType);
34
+ BextExitOnFailure(hr, "Failed to build runtime netcoresearch.exe arguments.");
35
75
- rgbOutput = reinterpret_cast<BYTE*>(MemAlloc(cbOutput, TRUE));
76
- BextExitOnNull(rgbOutput, hr, E_OUTOFMEMORY, "Failed to alloc output string.");
77
-
78
- while (::ReadFile(hStdOutErr, rgbOutput + cbTotalRead, cbOutput - cbTotalRead, &cbRead, NULL))
79
- {
80
- cbTotalRead += cbRead;
81
-
82
- if (cbTotalRead == cbOutput)
83
- {
84
- cbOutput *= 2;
85
-
86
- LPVOID pvNew = MemReAlloc(rgbOutput, cbOutput, TRUE);
87
- BextExitOnNull(pvNew, hr, E_OUTOFMEMORY, "Failed to realloc output string.");
88
-
89
- rgbOutput = reinterpret_cast<BYTE*>(pvNew);
90
- }
91
- }
92
-
93
- if (ERROR_BROKEN_PIPE != ::GetLastError())
94
- {
95
- BextExitWithLastError(hr, "Failed to read netcoresearch.exe output.");
96
- }
97
-
98
- hr = ProcWaitForCompletion(hProcess, INFINITE, &dwExitCode);
99
- BextExitOnFailure(hr, "Failed to wait for netcoresearch.exe to exit.");
100
-
101
- if (0 != dwExitCode)
102
- {
103
- BextExitWithRootFailure(hr, E_UNEXPECTED, "netcoresearch.exe failed with exit code: 0x%x\r\nOutput:\r\n%hs", dwExitCode, rgbOutput);
104
- }
105
-
106
- if (*rgbOutput)
107
- {
108
- hr = StrAllocStringAnsi(psczLatestVersion, reinterpret_cast<LPSTR>(rgbOutput), 0, CP_UTF8);
109
- BextExitOnFailure(hr, "Failed to widen output string: %hs", rgbOutput);
110
- }
36
+ hr = RunNetCoreSearch(platform, wzBaseDirectory, sczArguments, psczLatestVersion);
37
+ BextExitOnFailure(hr, "Failed to run netcoresearch.exe for runtime.");
38
39
LExit:
113
- ReleaseFileHandle(hStdOutErr);
114
- ReleaseHandle(hProcess);
115
- ReleaseMem(rgbOutput);
116
- ReleaseStr(sczCommandLine);
117
- ReleaseStr(sczExePath);
40
+ ReleaseStr(sczArguments);
41
42
return hr;
43
}
@@ -136,5 +59,7 @@ HRESULT NetfxPerformDetectNetCore(
59
BextExitOnFailure(hr, "Failed to set variable '%ls' to '%ls'", wzVariable, sczLatestVersion);
60
61
LExit:
62
+ ReleaseStr(sczLatestVersion);
63
+
64
return hr;
65
}
src/ext/NetFx/be/detectnetcoresdk.cpp
+12
-87
@@ -4,99 +4,22 @@
4
5
HRESULT DetectNetCoreSdk(
6
__in NETFX_NET_CORE_PLATFORM platform,
7
- __in LPCWSTR wzVersion,
7
+ __in LPCWSTR wzMajorVersion,
8
__in LPCWSTR wzBaseDirectory,
9
__inout LPWSTR* psczLatestVersion
10
)
11
{
12
HRESULT hr = S_OK;
13
- LPCWSTR wzPlatformName = NULL;
14
- LPWSTR sczExePath = NULL;
15
- LPWSTR sczCommandLine = NULL;
16
- HANDLE hProcess = NULL;
17
- HANDLE hStdOutErr = INVALID_HANDLE_VALUE;
18
- BYTE* rgbOutput = NULL;
19
- DWORD cbOutput = 0;
20
- DWORD cbTotalRead = 0;
21
- DWORD cbRead = 0;
22
- DWORD dwExitCode = 0;
13
+ LPWSTR sczArguments = NULL;
14
24
- ReleaseNullStr(*psczLatestVersion);
15
+ hr = StrAllocFormatted(&sczArguments, L"sdk %ls", wzMajorVersion);
16
+ BextExitOnFailure(hr, "Failed to build sdk netcoresearch.exe arguments.");
17
26
- switch (platform)
27
- {
28
- case NETFX_NET_CORE_PLATFORM_ARM64:
29
- wzPlatformName = L"arm64";
30
- break;
31
- case NETFX_NET_CORE_PLATFORM_X64:
32
- wzPlatformName = L"x64";
33
- break;
34
- case NETFX_NET_CORE_PLATFORM_X86:
35
- wzPlatformName = L"x86";
36
- break;
37
- default:
38
- BextExitWithRootFailure(hr, E_INVALIDARG, "Unknown platform: %u", platform);
39
- break;
40
- }
41
-
42
- hr = StrAllocFormatted(&sczExePath, L"%ls%ls\\netcoresearch.exe", wzBaseDirectory, wzPlatformName);
43
- BextExitOnFailure(hr, "Failed to build netcoresearch.exe path.");
44
-
45
- hr = StrAllocFormatted(&sczCommandLine, L"\"%ls\" sdk %ls", sczExePath, wzVersion);
46
- BextExitOnFailure(hr, "Failed to build netcoresearch.exe command line.");
47
-
48
- hr = ProcExecute(sczExePath, sczCommandLine, &hProcess, NULL, &hStdOutErr);
49
- if (HRESULT_FROM_WIN32(ERROR_EXE_MACHINE_TYPE_MISMATCH) == hr)
50
- {
51
- ExitFunction1(hr = S_FALSE);
52
- }
53
- BextExitOnFailure(hr, "Failed to run: %ls", sczCommandLine);
54
-
55
- cbOutput = 64;
56
-
57
- rgbOutput = static_cast<BYTE*>(MemAlloc(cbOutput, TRUE));
58
- BextExitOnNull(rgbOutput, hr, E_OUTOFMEMORY, "Failed to alloc output string.");
59
-
60
- while (::ReadFile(hStdOutErr, rgbOutput + cbTotalRead, cbOutput - cbTotalRead, &cbRead, NULL))
61
- {
62
- cbTotalRead += cbRead;
63
-
64
- if (cbTotalRead == cbOutput)
65
- {
66
- cbOutput *= 2;
67
-
68
- const LPVOID pvNew = MemReAlloc(rgbOutput, cbOutput, TRUE);
69
- BextExitOnNull(pvNew, hr, E_OUTOFMEMORY, "Failed to realloc output string.");
70
-
71
- rgbOutput = static_cast<BYTE*>(pvNew);
72
- }
73
- }
74
-
75
- if (ERROR_BROKEN_PIPE != ::GetLastError())
76
- {
77
- BextExitWithLastError(hr, "Failed to read netcoresearch.exe output.");
78
- }
79
-
80
- hr = ProcWaitForCompletion(hProcess, INFINITE, &dwExitCode);
81
- BextExitOnFailure(hr, "Failed to wait for netcoresearch.exe to exit.");
82
-
83
- if (0 != dwExitCode)
84
- {
85
- BextExitWithRootFailure(hr, E_UNEXPECTED, "netcoresearch.exe failed with exit code: 0x%x\r\nOutput:\r\n%hs", dwExitCode, rgbOutput);
86
- }
87
-
88
- if (*rgbOutput)
89
- {
90
- hr = StrAllocStringAnsi(psczLatestVersion, reinterpret_cast<LPSTR>(rgbOutput), 0, CP_UTF8);
91
- BextExitOnFailure(hr, "Failed to widen output string: %hs", rgbOutput);
92
- }
18
+ hr = RunNetCoreSearch(platform, wzBaseDirectory, sczArguments, psczLatestVersion);
19
+ BextExitOnFailure(hr, "Failed to run netcoresearch.exe for sdk.");
20
21
LExit:
95
- ReleaseFileHandle(hStdOutErr);
96
- ReleaseHandle(hProcess);
97
- ReleaseMem(rgbOutput);
98
- ReleaseStr(sczCommandLine);
99
- ReleaseStr(sczExePath);
22
+ ReleaseStr(sczArguments);
23
24
return hr;
25
}
@@ -109,14 +32,16 @@ HRESULT NetfxPerformDetectNetCoreSdk(
32
)
33
{
34
HRESULT hr = S_OK;
112
- LPWSTR sczLatestVersion = nullptr;
113
- const auto& searchParams = pSearch->NetCoreSdkSearch;
114
- hr = DetectNetCoreSdk(searchParams.platform, searchParams.sczVersion, wzBaseDirectory, &sczLatestVersion);
35
+ LPWSTR sczLatestVersion = NULL;
36
+
37
+ hr = DetectNetCoreSdk(pSearch->NetCoreSdkSearch.platform, pSearch->NetCoreSdkSearch.sczMajorVersion, wzBaseDirectory, &sczLatestVersion);
38
BextExitOnFailure(hr, "DetectNetCoreSdk failed.");
39
40
hr = pEngine->SetVariableVersion(wzVariable, sczLatestVersion);
41
BextExitOnFailure(hr, "Failed to set variable '%ls' to '%ls'", wzVariable, sczLatestVersion);
42
43
LExit:
44
+ ReleaseStr(sczLatestVersion);
45
+
46
return hr;
47
}
src/ext/NetFx/be/detectnetcoresdkfeatureband.cpp
new
+55
@@ -0,0 +1,55 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+#include "precomp.h"
4
+
5
+HRESULT DetectNetCoreSdkFeatureBand(
6
+ __in NETFX_NET_CORE_PLATFORM platform,
7
+ __in LPCWSTR wzMajorVersion,
8
+ __in LPCWSTR wzMinorVersion,
9
+ __in LPCWSTR wzPatchVersion,
10
+ __in LPCWSTR wzBaseDirectory,
11
+ __inout LPWSTR* psczLatestVersion
12
+ )
13
+{
14
+ HRESULT hr = S_OK;
15
+ LPWSTR sczArguments = NULL;
16
+
17
+ hr = StrAllocFormatted(&sczArguments, L"sdkfeatureband %ls %ls %ls", wzMajorVersion, wzMinorVersion, wzPatchVersion);
18
+ BextExitOnFailure(hr, "Failed to build sdkfeatureband netcoresearch.exe arguments.");
19
+
20
+ hr = RunNetCoreSearch(platform, wzBaseDirectory, sczArguments, psczLatestVersion);
21
+ BextExitOnFailure(hr, "Failed to run netcoresearch.exe for sdkfeatureband.");
22
+
23
+LExit:
24
+ ReleaseStr(sczArguments);
25
+
26
+ return hr;
27
+}
28
+
29
+HRESULT NetfxPerformDetectNetCoreSdkFeatureBand(
30
+ __in LPCWSTR wzVariable,
31
+ __in NETFX_SEARCH* pSearch,
32
+ __in IBundleExtensionEngine* pEngine,
33
+ __in LPCWSTR wzBaseDirectory
34
+ )
35
+{
36
+ HRESULT hr = S_OK;
37
+ LPWSTR sczLatestVersion = NULL;
38
+
39
+ hr = DetectNetCoreSdkFeatureBand(
40
+ pSearch->NetCoreSdkFeatureBandSearch.platform,
41
+ pSearch->NetCoreSdkFeatureBandSearch.sczMajorVersion,
42
+ pSearch->NetCoreSdkFeatureBandSearch.sczMinorVersion,
43
+ pSearch->NetCoreSdkFeatureBandSearch.sczPatchVersion,
44
+ wzBaseDirectory,
45
+ &sczLatestVersion);
46
+ BextExitOnFailure(hr, "DetectNetCoreSdkFeatureBand failed.");
47
+
48
+ hr = pEngine->SetVariableVersion(wzVariable, sczLatestVersion);
49
+ BextExitOnFailure(hr, "Failed to set variable '%ls' to '%ls'", wzVariable, sczLatestVersion);
50
+
51
+LExit:
52
+ ReleaseStr(sczLatestVersion);
53
+
54
+ return hr;
55
+}
src/ext/NetFx/be/detectnetcoresdkfeatureband.h
new
+9
@@ -0,0 +1,9 @@
1
+#pragma once
2
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
+
4
+HRESULT NetfxPerformDetectNetCoreSdkFeatureBand(
5
+ __in LPCWSTR wzVariable,
6
+ __in NETFX_SEARCH* pSearch,
7
+ __in IBundleExtensionEngine* pEngine,
8
+ __in LPCWSTR wzBaseDirectory
9
+ );
src/ext/NetFx/be/netfxbe.vcxproj
+4
@@ -48,20 +48,24 @@
48
<ItemGroup>
49
<ClCompile Include="detectnetcore.cpp" />
50
<ClCompile Include="detectnetcoresdk.cpp" />
51
+ <ClCompile Include="detectnetcoresdkfeatureband.cpp" />
52
<ClCompile Include="netfxbe.cpp" />
53
<ClCompile Include="NetfxBundleExtension.cpp" />
54
<ClCompile Include="netfxsearch.cpp" />
55
<ClCompile Include="precomp.cpp">
56
<PrecompiledHeader>Create</PrecompiledHeader>
57
</ClCompile>
58
+ <ClCompile Include="runnetcoresearch.cpp" />
59
</ItemGroup>
60
61
<ItemGroup>
62
<ClInclude Include="detectnetcore.h" />
63
<ClInclude Include="detectnetcoresdk.h" />
64
+ <ClInclude Include="detectnetcoresdkfeatureband.h" />
65
<ClInclude Include="NetfxBundleExtension.h" />
66
<ClInclude Include="netfxsearch.h" />
67
<ClInclude Include="precomp.h" />
68
+ <ClInclude Include="runnetcoresearch.h" />
69
</ItemGroup>
70
71
<ItemGroup>
src/ext/NetFx/be/netfxsearch.cpp
+28
-4
@@ -15,7 +15,7 @@ STDMETHODIMP NetfxSearchParseFromXml(
15
BSTR bstrNodeName = NULL;
16
17
// Select Netfx search nodes.
18
- hr = XmlSelectNodes(pixnBundleExtension, L"NetFxNetCoreSearch|NetFxNetCoreSdkSearch", &pixnNodes);
18
+ hr = XmlSelectNodes(pixnBundleExtension, L"NetFxNetCoreSearch|NetFxNetCoreSdkSearch|NetFxNetCoreSdkFeatureBandSearch", &pixnNodes);
19
BextExitOnFailure(hr, "Failed to select Netfx search nodes.");
20
21
// Get Netfx search node count.
@@ -72,9 +72,30 @@ STDMETHODIMP NetfxSearchParseFromXml(
72
hr = XmlGetAttributeUInt32(pixnNode, L"Platform", reinterpret_cast<DWORD*>(&netCoreSdkSearch.platform));
73
BextExitOnFailure(hr, "Failed to get @Platform.");
74
75
- // @Version
76
- hr = XmlGetAttributeEx(pixnNode, L"Version", &netCoreSdkSearch.sczVersion);
77
- BextExitOnFailure(hr, "Failed to get @Version.");
75
+ // @MajorVersion
76
+ hr = XmlGetAttributeEx(pixnNode, L"MajorVersion", &netCoreSdkSearch.sczMajorVersion);
77
+ BextExitOnFailure(hr, "Failed to get @MajorVersion.");
78
+ }
79
+ else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"NetFxNetCoreSdkFeatureBandSearch", -1))
80
+ {
81
+ pSearch->Type = NETFX_SEARCH_TYPE_NET_CORE_SDK_FEATURE_BAND_SEARCH;
82
+
83
+ auto& netCoreSdkSearch = pSearch->NetCoreSdkFeatureBandSearch;
84
+ // @Platform
85
+ hr = XmlGetAttributeUInt32(pixnNode, L"Platform", reinterpret_cast<DWORD*>(&netCoreSdkSearch.platform));
86
+ BextExitOnFailure(hr, "Failed to get @Platform.");
87
+
88
+ // @MajorVersion
89
+ hr = XmlGetAttributeEx(pixnNode, L"MajorVersion", &netCoreSdkSearch.sczMajorVersion);
90
+ BextExitOnFailure(hr, "Failed to get @MajorVersion.");
91
+
92
+ // @MinorVersion
93
+ hr = XmlGetAttributeEx(pixnNode, L"MinorVersion", &netCoreSdkSearch.sczMinorVersion);
94
+ BextExitOnFailure(hr, "Failed to get @MinorVersion.");
95
+
96
+ // @PatchVersion
97
+ hr = XmlGetAttributeEx(pixnNode, L"PatchVersion", &netCoreSdkSearch.sczPatchVersion);
98
+ BextExitOnFailure(hr, "Failed to get @PatchVersion.");
99
}
100
else
101
{
@@ -132,6 +153,9 @@ STDMETHODIMP NetfxSearchExecute(
153
case NETFX_SEARCH_TYPE_NET_CORE_SDK_SEARCH:
154
hr = NetfxPerformDetectNetCoreSdk(wzVariable, pSearch, pEngine, wzBaseDirectory);
155
break;
156
+ case NETFX_SEARCH_TYPE_NET_CORE_SDK_FEATURE_BAND_SEARCH:
157
+ hr = NetfxPerformDetectNetCoreSdkFeatureBand(wzVariable, pSearch, pEngine, wzBaseDirectory);
158
+ break;
159
default:
160
hr = E_UNEXPECTED;
161
}
src/ext/NetFx/be/netfxsearch.h
+9
-1
@@ -9,6 +9,7 @@ enum NETFX_SEARCH_TYPE
9
NETFX_SEARCH_TYPE_NONE,
10
NETFX_SEARCH_TYPE_NET_CORE_SEARCH,
11
NETFX_SEARCH_TYPE_NET_CORE_SDK_SEARCH,
12
+ NETFX_SEARCH_TYPE_NET_CORE_SDK_FEATURE_BAND_SEARCH,
13
};
14
15
enum NETFX_NET_CORE_RUNTIME_TYPE
@@ -44,8 +45,15 @@ typedef struct _NETFX_SEARCH
45
struct
46
{
47
NETFX_NET_CORE_PLATFORM platform;
47
- LPWSTR sczVersion;
48
+ LPWSTR sczMajorVersion;
49
} NetCoreSdkSearch;
50
+ struct
51
+ {
52
+ NETFX_NET_CORE_PLATFORM platform;
53
+ LPWSTR sczMajorVersion;
54
+ LPWSTR sczMinorVersion;
55
+ LPWSTR sczPatchVersion;
56
+ } NetCoreSdkFeatureBandSearch;
57
};
58
} NETFX_SEARCH;
59
src/ext/NetFx/be/precomp.h
+2
@@ -31,4 +31,6 @@
31
#include "netfxsearch.h"
32
#include "detectnetcore.h"
33
#include "detectnetcoresdk.h"
34
+#include "detectnetcoresdkfeatureband.h"
35
#include "NetfxBundleExtension.h"
36
+#include "runnetcoresearch.h"
src/ext/NetFx/be/runnetcoresearch.cpp
new
+102
@@ -0,0 +1,102 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+#include "precomp.h"
4
+
5
+HRESULT RunNetCoreSearch(
6
+ __in NETFX_NET_CORE_PLATFORM platform,
7
+ __in LPCWSTR wzBaseDirectory,
8
+ __in LPCWSTR wzArguments,
9
+ __inout LPWSTR* psczLatestVersion
10
+ )
11
+{
12
+ HRESULT hr = S_OK;
13
+ LPCWSTR wzPlatformName = NULL;
14
+ LPWSTR sczExePath = NULL;
15
+ LPWSTR sczCommandLine = NULL;
16
+ HANDLE hProcess = NULL;
17
+ HANDLE hStdOutErr = INVALID_HANDLE_VALUE;
18
+ BYTE* rgbOutput = NULL;
19
+ DWORD cbOutput = 0;
20
+ DWORD cbTotalRead = 0;
21
+ DWORD cbRead = 0;
22
+ DWORD dwExitCode = 0;
23
+
24
+ ReleaseNullStr(*psczLatestVersion);
25
+
26
+ switch (platform)
27
+ {
28
+ case NETFX_NET_CORE_PLATFORM_ARM64:
29
+ wzPlatformName = L"arm64";
30
+ break;
31
+ case NETFX_NET_CORE_PLATFORM_X64:
32
+ wzPlatformName = L"x64";
33
+ break;
34
+ case NETFX_NET_CORE_PLATFORM_X86:
35
+ wzPlatformName = L"x86";
36
+ break;
37
+ default:
38
+ BextExitWithRootFailure(hr, E_INVALIDARG, "Unknown platform: %u", platform);
39
+ break;
40
+ }
41
+
42
+ hr = StrAllocFormatted(&sczExePath, L"%ls%ls\\netcoresearch.exe", wzBaseDirectory, wzPlatformName);
43
+ BextExitOnFailure(hr, "Failed to build netcoresearch.exe path.");
44
+
45
+ hr = StrAllocFormatted(&sczCommandLine, L"\"%ls\" %ls", sczExePath, wzArguments);
46
+ BextExitOnFailure(hr, "Failed to build netcoresearch.exe command line.");
47
+
48
+ hr = ProcExecute(sczExePath, sczCommandLine, &hProcess, NULL, &hStdOutErr);
49
+ if (HRESULT_FROM_WIN32(ERROR_EXE_MACHINE_TYPE_MISMATCH) == hr)
50
+ {
51
+ ExitFunction1(hr = S_FALSE);
52
+ }
53
+ BextExitOnFailure(hr, "Failed to run: %ls", sczCommandLine);
54
+
55
+ cbOutput = 64;
56
+
57
+ rgbOutput = reinterpret_cast<BYTE*>(MemAlloc(cbOutput, TRUE));
58
+ BextExitOnNull(rgbOutput, hr, E_OUTOFMEMORY, "Failed to alloc output string.");
59
+
60
+ while (::ReadFile(hStdOutErr, rgbOutput + cbTotalRead, cbOutput - cbTotalRead, &cbRead, NULL))
61
+ {
62
+ cbTotalRead += cbRead;
63
+
64
+ if (cbTotalRead == cbOutput)
65
+ {
66
+ cbOutput *= 2;
67
+
68
+ LPVOID pvNew = MemReAlloc(rgbOutput, cbOutput, TRUE);
69
+ BextExitOnNull(pvNew, hr, E_OUTOFMEMORY, "Failed to realloc output string.");
70
+
71
+ rgbOutput = reinterpret_cast<BYTE*>(pvNew);
72
+ }
73
+ }
74
+
75
+ if (ERROR_BROKEN_PIPE != ::GetLastError())
76
+ {
77
+ BextExitWithLastError(hr, "Failed to read netcoresearch.exe output.");
78
+ }
79
+
80
+ hr = ProcWaitForCompletion(hProcess, INFINITE, &dwExitCode);
81
+ BextExitOnFailure(hr, "Failed to wait for netcoresearch.exe to exit.");
82
+
83
+ if (0 != dwExitCode)
84
+ {
85
+ BextExitWithRootFailure(hr, E_UNEXPECTED, "netcoresearch.exe failed with exit code: 0x%x\r\nOutput:\r\n%hs", dwExitCode, rgbOutput);
86
+ }
87
+
88
+ if (*rgbOutput)
89
+ {
90
+ hr = StrAllocStringAnsi(psczLatestVersion, reinterpret_cast<LPSTR>(rgbOutput), 0, CP_UTF8);
91
+ BextExitOnFailure(hr, "Failed to widen output string: %hs", rgbOutput);
92
+ }
93
+
94
+LExit:
95
+ ReleaseFileHandle(hStdOutErr);
96
+ ReleaseHandle(hProcess);
97
+ ReleaseMem(rgbOutput);
98
+ ReleaseStr(sczCommandLine);
99
+ ReleaseStr(sczExePath);
100
+
101
+ return hr;
102
+}
src/ext/NetFx/be/runnetcoresearch.h
new
+9
@@ -0,0 +1,9 @@
1
+#pragma once
2
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
+
4
+HRESULT RunNetCoreSearch(
5
+ __in NETFX_NET_CORE_PLATFORM platform,
6
+ __in LPCWSTR wzBaseDirectory,
7
+ __in LPCWSTR wzArguments,
8
+ __inout LPWSTR* psczLatestVersion
9
+ );
src/ext/NetFx/netcoresearch/netcoresearch.cpp
+189
-138
@@ -2,137 +2,155 @@
2
3
#include "precomp.h"
4
5
-enum class NETCORESEARCHKIND
5
+enum class NETCORESEARCHTYPE
6
{
7
None,
8
Runtime,
9
Sdk,
10
+ SdkFeatureBand,
11
};
12
13
struct NETCORESEARCH_STATE
14
{
14
- NETCORESEARCHKIND Kind = NETCORESEARCHKIND::None;
15
- union
16
- {
17
- struct
18
- {
19
- LPCWSTR wzTargetName;
20
- DWORD dwMajorVersion;
21
- } Runtime;
22
- struct
23
- {
24
- DWORD dwMajorVersion;
25
- DWORD dwMinorVersion;
26
- DWORD dwFeatureBand;
27
- }
28
- Sdk;
29
- } Data;
15
+ NETCORESEARCHTYPE type;
16
+ HRESULT hrSearch;
17
VERUTIL_VERSION* pVersion;
18
+
19
+ struct
20
+ {
21
+ LPCWSTR wzTargetName;
22
+ DWORD dwMajorVersion;
23
+ } Runtime;
24
+ struct
25
+ {
26
+ DWORD dwMajorVersion;
27
+ } Sdk;
28
+ struct
29
+ {
30
+ DWORD dwMajorVersion;
31
+ DWORD dwMinorVersion;
32
+ DWORD dwPatchVersion;
33
+ } SdkFeatureBand;
34
};
35
36
+static HRESULT GetSearchStateFromArguments(
37
+ __in int argc,
38
+ __in LPWSTR argv[],
39
+ __in NETCORESEARCH_STATE* pSearchState
40
+ );
41
static HRESULT GetDotnetEnvironmentInfo(
34
- __in NETCORESEARCH_STATE& pSearchState,
35
- __inout VERUTIL_VERSION** ppVersion
42
+ __in NETCORESEARCH_STATE* pSearchState
43
);
44
static void HOSTFXR_CALLTYPE GetDotnetEnvironmentInfoResult(
45
__in const hostfxr_dotnet_environment_info* pInfo,
46
__in LPVOID pvContext
47
);
48
42
-bool string_equal_invariant(__in PCWSTR const x,__in PCWSTR const y) { return CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, x, -1, y, -1); }
43
-
44
-HRESULT get_search_state_from_arguments(__in int argc, __in LPWSTR argv[], __out NETCORESEARCH_STATE& searchState);
45
-
49
int __cdecl wmain(int argc, LPWSTR argv[])
50
{
51
HRESULT hr = S_OK;
49
- VERUTIL_VERSION* pVersion = NULL;
50
- NETCORESEARCH_STATE searchState = {};
51
-
52
- ::SetConsoleCP(CP_UTF8);
52
+ NETCORESEARCH_STATE searchState = { };
53
54
ConsoleInitialize();
55
56
- hr = get_search_state_from_arguments(argc, argv, OUT searchState);
57
- if (FAILED(hr))
58
- {
59
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse arguments.");
60
- }
56
+ hr = GetSearchStateFromArguments(argc, argv, &searchState);
57
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse arguments.");
58
62
- hr = GetDotnetEnvironmentInfo(searchState, &pVersion);
59
+ hr = GetDotnetEnvironmentInfo(&searchState);
60
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to search.");
61
64
-
65
- if (pVersion)
62
+ if (searchState.pVersion)
63
{
67
- ConsoleWriteW(CONSOLE_COLOR_NORMAL, pVersion->sczVersion);
64
+ ConsoleWriteW(CONSOLE_COLOR_NORMAL, searchState.pVersion->sczVersion);
65
}
66
67
LExit:
71
- ReleaseVerutilVersion(pVersion);
68
+ ReleaseVerutilVersion(searchState.pVersion);
69
ConsoleUninitialize();
70
return hr;
71
}
72
76
-HRESULT get_search_state_from_arguments(int argc, LPWSTR argv[], __out NETCORESEARCH_STATE& searchState)
73
+HRESULT GetSearchStateFromArguments(
74
+ __in int argc,
75
+ __in LPWSTR argv[],
76
+ __in NETCORESEARCH_STATE* pSearchState
77
+ )
78
{
79
HRESULT hr = S_OK;
79
- searchState = {};
80
- const auto searchKind = argv[1];
80
+ LPCWSTR wzSearchKind = NULL;
81
82
- if (argc < 3)
82
+ if (argc < 2)
83
{
84
ExitFunction1(hr = E_INVALIDARG);
85
}
86
87
+ wzSearchKind = argv[1];
88
88
- if (string_equal_invariant(searchKind, L"runtime"))
89
+ if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wzSearchKind, -1, L"runtime", -1))
90
{
91
if (argc != 4)
92
{
93
ExitFunction1(hr = E_INVALIDARG);
94
}
94
- searchState.Kind = NETCORESEARCHKIND::Runtime;
95
96
- const PCWSTR majorVersion = argv[2];
97
- const PCWSTR targetName = argv[3];
96
+ LPCWSTR wzMajorVersion = argv[2];
97
+ LPCWSTR wzTargetName = argv[3];
98
99
- auto& data = searchState.Data.Runtime;
99
+ pSearchState->type = NETCORESEARCHTYPE::Runtime;
100
101
- data.wzTargetName = targetName;
102
- hr = StrStringToUInt32(majorVersion, 0, reinterpret_cast<UINT*>(&data.dwMajorVersion));
103
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get target version from: %ls", majorVersion);
101
+ hr = StrStringToUInt32(wzMajorVersion, 0, reinterpret_cast<UINT*>(&pSearchState->Runtime.dwMajorVersion));
102
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get target version from: %ls", wzMajorVersion);
103
+
104
+ pSearchState->Runtime.wzTargetName = wzTargetName;
105
}
105
- else if(string_equal_invariant(searchKind, L"sdk"))
106
+ else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wzSearchKind, -1, L"sdk", -1))
107
{
107
- searchState.Kind = NETCORESEARCHKIND::Sdk;
108
+ if (argc != 3)
109
+ {
110
+ ExitFunction1(hr = E_INVALIDARG);
111
+ }
112
+
113
+ LPCWSTR wzMajorVersion = argv[2];
114
109
- const PCWSTR version = argv[2];
115
+ pSearchState->type = NETCORESEARCHTYPE::Sdk;
116
111
- VERUTIL_VERSION* sdkVersion = nullptr;
112
- hr = VerParseVersion(version, 0, FALSE, &sdkVersion);
113
- if (FAILED(hr))
117
+ hr = StrStringToUInt32(wzMajorVersion, 0, reinterpret_cast<UINT*>(&pSearchState->Sdk.dwMajorVersion));
118
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get sdk major version from: %ls", wzMajorVersion);
119
+ }
120
+ else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wzSearchKind, -1, L"sdkfeatureband", -1))
121
+ {
122
+ if (argc != 5)
123
{
115
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse version from: %ls", version);
124
+ ExitFunction1(hr = E_INVALIDARG);
125
}
126
118
- auto& data = searchState.Data.Sdk;
127
+ LPCWSTR wzMajorVersion = argv[2];
128
+ LPCWSTR wzMinorVersion = argv[3];
129
+ LPCWSTR wzPatchVersion = argv[4];
130
+
131
+ pSearchState->type = NETCORESEARCHTYPE::SdkFeatureBand;
132
120
- data.dwMajorVersion = sdkVersion->dwMajor;
121
- data.dwMinorVersion = sdkVersion->dwMinor;
122
- data.dwFeatureBand = sdkVersion->dwPatch;
133
+ hr = StrStringToUInt32(wzMajorVersion, 0, reinterpret_cast<UINT*>(&pSearchState->SdkFeatureBand.dwMajorVersion));
134
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get major version from: %ls", wzMajorVersion);
135
124
- VerFreeVersion(sdkVersion);
136
+ hr = StrStringToUInt32(wzMinorVersion, 0, reinterpret_cast<UINT*>(&pSearchState->SdkFeatureBand.dwMinorVersion));
137
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get minor version from: %ls", wzMinorVersion);
138
+
139
+ hr = StrStringToUInt32(wzPatchVersion, 0, reinterpret_cast<UINT*>(&pSearchState->SdkFeatureBand.dwPatchVersion));
140
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get patch version from: %ls", wzPatchVersion);
141
+ }
142
+ else
143
+ {
144
+ pSearchState->type = NETCORESEARCHTYPE::None;
145
+ ExitFunction1(hr = E_INVALIDARG);
146
}
147
148
LExit:
149
return hr;
150
}
151
131
-
132
-
152
static HRESULT GetDotnetEnvironmentInfo(
134
- __in NETCORESEARCH_STATE& state,
135
- __inout VERUTIL_VERSION** ppVersion
153
+ __in NETCORESEARCH_STATE* pState
154
)
155
{
156
HRESULT hr = S_OK;
@@ -156,17 +174,13 @@ static HRESULT GetDotnetEnvironmentInfo(
174
pfnGetDotnetEnvironmentInfo = (hostfxr_get_dotnet_environment_info_fn)::GetProcAddress(hModule, "hostfxr_get_dotnet_environment_info");
175
ConsoleExitOnNullWithLastError(pfnGetDotnetEnvironmentInfo, hr, CONSOLE_COLOR_RED, "Failed to get address for hostfxr_get_dotnet_environment_info.");
176
159
- hr = pfnGetDotnetEnvironmentInfo(NULL, NULL, GetDotnetEnvironmentInfoResult, &state);
177
+ hr = pfnGetDotnetEnvironmentInfo(NULL, NULL, GetDotnetEnvironmentInfoResult, pState);
178
ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get .NET Core environment info.");
179
162
- if (state.pVersion)
163
- {
164
- *ppVersion = state.pVersion;
165
- state.pVersion = NULL;
166
- }
180
+ hr = pState->hrSearch;
181
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to process .NET Core environment info.");
182
183
LExit:
169
- ReleaseVerutilVersion(state.pVersion);
184
ReleaseStr(sczHostfxrPath);
185
ReleaseStr(sczProcessPath);
186
@@ -178,108 +192,145 @@ LExit:
192
return hr;
193
}
194
181
-bool matches_feature_band(const int requested, const int actual)
195
+static HRESULT PerformRuntimeSearch(
196
+ __in const hostfxr_dotnet_environment_info* pInfo,
197
+ __in DWORD dwMajorVersion,
198
+ __in LPCWSTR wzTargetName,
199
+ __inout VERUTIL_VERSION** ppVersion
200
+ )
201
{
183
- // we have not requested a match on feature band, so skip the check
184
- if (requested == 0) return true;
202
+ HRESULT hr = S_OK;
203
+ VERUTIL_VERSION* pFrameworkVersion = NULL;
204
+ int nCompare = 0;
205
+
206
+ for (size_t i = 0; i < pInfo->framework_count; ++i)
207
+ {
208
+ const hostfxr_dotnet_environment_framework_info* pFrameworkInfo = pInfo->frameworks + i;
209
+ ReleaseVerutilVersion(pFrameworkVersion);
210
+
211
+ if (CSTR_EQUAL != ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wzTargetName, -1, pFrameworkInfo->name, -1))
212
+ {
213
+ continue;
214
+ }
215
+
216
+ hr = VerParseVersion(pFrameworkInfo->version, 0, FALSE, &pFrameworkVersion);
217
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse framework version: %ls", pFrameworkInfo->version);
218
+
219
+ if (pFrameworkVersion->dwMajor != dwMajorVersion)
220
+ {
221
+ continue;
222
+ }
223
+
224
+ if (*ppVersion)
225
+ {
226
+ hr = VerCompareParsedVersions(*ppVersion, pFrameworkVersion, &nCompare);
227
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to compare versions.");
228
186
- const int requestedBand = requested / 100;
187
- const int actualBand = actual / 100;
229
+ if (nCompare > -1)
230
+ {
231
+ continue;
232
+ }
233
+ }
234
189
- if (actualBand != requestedBand) return false;
235
+ ReleaseVerutilVersion(*ppVersion);
236
+ *ppVersion = pFrameworkVersion;
237
+ pFrameworkVersion = NULL;
238
+ }
239
191
- return actual >= requested;
240
+LExit:
241
+ ReleaseVerutilVersion(pFrameworkVersion);
242
+
243
+ return hr;
244
}
245
194
-static void HOSTFXR_CALLTYPE GetDotnetEnvironmentInfoResult(
246
+static HRESULT PerformSdkSearch(
247
__in const hostfxr_dotnet_environment_info* pInfo,
196
- __in LPVOID pvContext
248
+ __in BOOL fFeatureBand,
249
+ __in DWORD dwMajorVersion,
250
+ __in DWORD dwMinorVersion,
251
+ __in DWORD dwPatchVersion,
252
+ __inout VERUTIL_VERSION** ppVersion
253
)
254
{
199
- NETCORESEARCH_STATE* pState = static_cast<NETCORESEARCH_STATE*>(pvContext);
255
HRESULT hr = S_OK;
201
- VERUTIL_VERSION* pDotnetVersion = nullptr;
256
+ VERUTIL_VERSION* pSdkVersion = NULL;
257
int nCompare = 0;
258
+ DWORD dwRequestedBand = dwPatchVersion / 100;
259
204
-
205
- if (pState->Kind == NETCORESEARCHKIND::Sdk)
260
+ for (size_t i = 0; i < pInfo->sdk_count; ++i)
261
{
207
- auto& sdkData = pState->Data.Sdk;
208
- for (size_t i = 0; i < pInfo->sdk_count; ++i)
209
- {
210
- const hostfxr_dotnet_environment_sdk_info* pSdkInfo = pInfo->sdks + i;
211
- ReleaseVerutilVersion(pDotnetVersion);
262
+ const hostfxr_dotnet_environment_sdk_info* pSdkInfo = pInfo->sdks + i;
263
+ ReleaseVerutilVersion(pSdkVersion);
264
213
- hr = VerParseVersion(pSdkInfo->version, 0, FALSE, &pDotnetVersion);
214
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse sdk version: %ls", pSdkInfo->version);
265
+ hr = VerParseVersion(pSdkInfo->version, 0, FALSE, &pSdkVersion);
266
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse sdk version: %ls", pSdkInfo->version);
267
216
- if (pDotnetVersion->dwMajor != sdkData.dwMajorVersion)
217
- {
218
- continue;
219
- }
220
- if (!matches_feature_band(sdkData.dwFeatureBand, pDotnetVersion->dwPatch))
268
+ if (pSdkVersion->dwMajor != dwMajorVersion)
269
+ {
270
+ continue;
271
+ }
272
+
273
+ if (fFeatureBand)
274
+ {
275
+ if (pSdkVersion->dwMinor != dwMinorVersion)
276
{
277
continue;
278
}
279
225
- if (pState->pVersion)
280
+ if ((pSdkVersion->dwPatch / 100) != dwRequestedBand)
281
{
227
- hr = VerCompareParsedVersions(pState->pVersion, pDotnetVersion, &nCompare);
228
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to compare versions.");
229
-
230
- if (nCompare > -1)
231
- {
232
- continue;
233
- }
282
+ continue;
283
}
235
-
236
- ReleaseVerutilVersion(pState->pVersion);
237
- pState->pVersion = pDotnetVersion;
238
- pDotnetVersion = nullptr;
284
}
240
- }
241
- else if(pState->Kind == NETCORESEARCHKIND::Runtime)
242
- {
243
- auto& runtimeData = pState->Data.Runtime;
244
- for (size_t i = 0; i < pInfo->framework_count; ++i)
285
+
286
+ if (*ppVersion)
287
{
246
- const hostfxr_dotnet_environment_framework_info* pFrameworkInfo = pInfo->frameworks + i;
247
- ReleaseVerutilVersion(pDotnetVersion);
288
+ hr = VerCompareParsedVersions(*ppVersion, pSdkVersion, &nCompare);
289
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to compare versions.");
290
249
- if (string_equal_invariant(runtimeData.wzTargetName, pFrameworkInfo->name))
291
+ if (nCompare > -1)
292
{
293
continue;
294
}
295
+ }
296
254
- hr = VerParseVersion(pFrameworkInfo->version, 0, FALSE, &pDotnetVersion);
255
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse framework version: %ls", pFrameworkInfo->version);
297
+ ReleaseVerutilVersion(*ppVersion);
298
+ *ppVersion = pSdkVersion;
299
+ pSdkVersion = NULL;
300
+ }
301
257
- if (pDotnetVersion->dwMajor != runtimeData.dwMajorVersion)
258
- {
259
- continue;
260
- }
302
+LExit:
303
+ ReleaseVerutilVersion(pSdkVersion);
304
262
- if (pState->pVersion)
263
- {
264
- hr = VerCompareParsedVersions(pState->pVersion, pDotnetVersion, &nCompare);
265
- ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to compare versions.");
305
+ return hr;
306
+}
307
267
- if (nCompare > -1)
268
- {
269
- continue;
270
- }
271
- }
308
+static void HOSTFXR_CALLTYPE GetDotnetEnvironmentInfoResult(
309
+ __in const hostfxr_dotnet_environment_info* pInfo,
310
+ __in LPVOID pvContext
311
+ )
312
+{
313
+ NETCORESEARCH_STATE* pState = static_cast<NETCORESEARCH_STATE*>(pvContext);
314
+ HRESULT hr = S_OK;
315
273
- ReleaseVerutilVersion(pState->pVersion);
274
- pState->pVersion = pDotnetVersion;
275
- pDotnetVersion = nullptr;
276
- }
316
+ if (pState->type == NETCORESEARCHTYPE::Sdk)
317
+ {
318
+ hr = PerformSdkSearch(pInfo, FALSE, pState->Sdk.dwMajorVersion, 0, 0, &pState->pVersion);
319
+ }
320
+ else if (pState->type == NETCORESEARCHTYPE::SdkFeatureBand)
321
+ {
322
+ hr = PerformSdkSearch(pInfo, TRUE, pState->SdkFeatureBand.dwMajorVersion, pState->SdkFeatureBand.dwMinorVersion, pState->SdkFeatureBand.dwPatchVersion, &pState->pVersion);
323
+ }
324
+ else if (pState->type == NETCORESEARCHTYPE::Runtime)
325
+ {
326
+ hr = PerformRuntimeSearch(pInfo, pState->Runtime.dwMajorVersion, pState->Runtime.wzTargetName, &pState->pVersion);
327
}
328
else
329
{
280
- ConsoleWriteError(E_INVALIDARG, CONSOLE_COLOR_RED, "Invalid NETCORESEARCHKIND.");
330
+ hr = E_INVALIDARG;
331
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Invalid NETCORESEARCHTYPE.");
332
}
333
334
LExit:
284
- ReleaseVerutilVersion(pDotnetVersion);
335
+ pState->hrSearch = hr;
336
}
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs
+2
@@ -7,9 +7,11 @@
7
<PackageGroupRef Id="AspNetCoreRuntime3112Redist_x86" />
8
<PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x86" />
9
<PackageGroupRef Id="DotNetCoreRuntime3112Redist_x86" />
10
+ <PackageGroupRef Id="DotNetCoreSdk31425Redist_x86" />
11
<PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
12
<PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
13
<PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
14
+ <PackageGroupRef Id="DotNetCoreSdk31425Redist_x64" />
15
</Chain>
16
</Bundle>
17
</Wix>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs
+1
@@ -7,6 +7,7 @@
7
<PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
8
<PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
9
<PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
10
+ <PackageGroupRef Id="DotNetCoreSdk31425Redist_x64" />
11
</Chain>
12
</Bundle>
13
</Wix>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3.1.12_x64.wxs
+9
-8
@@ -5,7 +5,7 @@
5
<?define NetCorePlatform = x64?>
6
<?define NetCoreIdVersion = 3112?>
7
<?define NetCoreVersion = 3.1.12?>
8
- <?define NetCoreSdkPlatform = x64?>
8
+ <?define NetCoreSdkFeatureBandVersion = 31400?>
9
<?define NetCoreSdkIdVersion = 31425?>
10
<?define NetCoreSdkVersion = 3.1.425?>
11
<?include NetCore3_Platform.wxi?>
@@ -61,16 +61,17 @@
61
</Fragment>
62
63
<Fragment>
64
- <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCoreSdkPlatform)" Version="3.0.100" Variable="$(var.DotNetCoreSdkId)" />
64
+ <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DotNetCoreSdkId)" />
65
+ <netfx:DotNetCoreSdkFeatureBandSearch Id="$(var.DotNetCoreSdkFeatureBandId)" Platform="$(var.NetCorePlatform)" Version="3.1.400" Variable="$(var.DotNetCoreSdkFeatureBandId)" />
66
66
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition" Value="$(var.DotNetCoreSdkId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
67
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition" Value="" Overridable="yes" />
68
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory" Value="redist\" Overridable="yes" />
69
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)RepairArguments" Value="" Overridable="yes" />
67
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreSdkFeatureBandId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
68
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
69
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
70
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
71
72
<PackageGroup Id="$(var.DotNetCoreSdkRedistId)">
72
- <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
73
- <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCoreSdkPlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.425 (x64)" Description="Microsoft .NET Core Runtime - 3.1.425 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="135024384" Version="3.1.425" />
73
+ <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
74
+ <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.425 (x64)" Description="Microsoft .NET Core Runtime - 3.1.425 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="135024384" Version="3.1.425" />
75
</ExePackage>
76
</PackageGroup>
77
</Fragment>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3.1.12_x86.wxs
+9
-8
@@ -5,7 +5,7 @@
5
<?define NetCorePlatform = x86?>
6
<?define NetCoreIdVersion = 3112?>
7
<?define NetCoreVersion = 3.1.12?>
8
- <?define NetCoreSdkPlatform = x86?>
8
+ <?define NetCoreSdkFeatureBandVersion = 31400?>
9
<?define NetCoreSdkIdVersion = 31425?>
10
<?define NetCoreSdkVersion = 3.1.425?>
11
<?include NetCore3_Platform.wxi?>
@@ -61,16 +61,17 @@
61
</Fragment>
62
63
<Fragment>
64
- <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCoreSdkPlatform)" Version="3.0.100" Variable="$(var.DotNetCoreSdkId)" />
64
+ <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DotNetCoreSdkId)" />
65
+ <netfx:DotNetCoreSdkFeatureBandSearch Id="$(var.DotNetCoreSdkFeatureBandId)" Platform="$(var.NetCorePlatform)" Version="3.1.400" Variable="$(var.DotNetCoreSdkFeatureBandId)" />
66
66
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition" Value="$(var.DotNetCoreSdkId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
67
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition" Value="" Overridable="yes" />
68
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory" Value="redist\" Overridable="yes" />
69
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)RepairArguments" Value="" Overridable="yes" />
67
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreSdkFeatureBandId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
68
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
69
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
70
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
71
72
<PackageGroup Id="$(var.DotNetCoreSdkRedistId)">
72
- <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
73
- <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCoreSdkPlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET Core SDK - 3.1.425 (x86)" Description="Microsoft .NET Core Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="124974936" Version="3.1.425" />
73
+ <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
74
+ <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET Core SDK - 3.1.425 (x86)" Description="Microsoft .NET Core Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="124974936" Version="3.1.425" />
75
</ExePackage>
76
</PackageGroup>
77
</Fragment>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3_Platform.wxi
+3
-2
@@ -21,8 +21,9 @@
21
<?define DotNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
22
<?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
23
24
- <?define DotNetCoreSdkId = DOTNETCORESDK3_$(var.NetCoreSdkPlatform)?>
25
- <?define DotNetCoreSdkRedistId = DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist_$(var.NetCoreSdkPlatform)?>
24
+ <?define DotNetCoreSdkId = DOTNETCORESDK3_$(var.NetCorePlatform)?>
25
+ <?define DotNetCoreSdkFeatureBandId = DOTNETCORESDK$(var.NetCoreSdkFeatureBandVersion)_$(var.NetCorePlatform)?>
26
+ <?define DotNetCoreSdkRedistId = DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist_$(var.NetCorePlatform)?>
27
<?define DotNetCoreSdkRedistLog = DotNetCoreSdk$(var.NetCoreSdkIdVersion)RedistLog?>
28
<?define DotNetCoreSdkRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreSdkRedistLog)]"?>
29
<?define DotNetCoreSdkRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreSdkRedistLog)]"?>
src/ext/NetFx/wixext/NetFxCompiler.cs
+175
-15
@@ -55,6 +55,12 @@ namespace WixToolset.Netfx
55
case "DotNetCoreSdkSearchRef":
56
this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element);
57
break;
58
+ case "DotNetCoreSdkFeatureBandSearch":
59
+ this.ParseDotNetCoreSdkFeatureBandSearchElement(intermediate, section, element);
60
+ break;
61
+ case "DotNetCoreSdkFeatureBandSearchRef":
62
+ this.ParseDotNetCoreSdkFeatureBandSearchRefElement(intermediate, section, element);
63
+ break;
64
case "DotNetCompatibilityCheck":
65
this.ParseDotNetCompatibilityCheckElement(intermediate, section, element);
66
break;
@@ -81,6 +87,12 @@ namespace WixToolset.Netfx
87
case "DotNetCoreSdkSearchRef":
88
this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element);
89
break;
90
+ case "DotNetCoreSdkFeatureBandSearch":
91
+ this.ParseDotNetCoreSdkFeatureBandSearchElement(intermediate, section, element);
92
+ break;
93
+ case "DotNetCoreSdkFeatureBandSearchRef":
94
+ this.ParseDotNetCoreSdkFeatureBandSearchRefElement(intermediate, section, element);
95
+ break;
96
default:
97
this.ParseHelper.UnexpectedElement(parentElement, element);
98
break;
@@ -267,8 +279,8 @@ namespace WixToolset.Netfx
279
string variable = null;
280
string condition = null;
281
string after = null;
270
- NetCoreSdkSearchPlatform? platform = null;
271
- string version = null;
282
+ NetCoreSearchPlatform? platform = null;
283
+ var majorVersion = CompilerConstants.IntegerNotSet;
284
285
foreach (var attrib in element.Attributes())
286
{
@@ -293,22 +305,22 @@ namespace WixToolset.Netfx
305
switch (platformValue)
306
{
307
case "arm64":
296
- platform = NetCoreSdkSearchPlatform.Arm64;
308
+ platform = NetCoreSearchPlatform.Arm64;
309
break;
310
case "x64":
299
- platform = NetCoreSdkSearchPlatform.X64;
311
+ platform = NetCoreSearchPlatform.X64;
312
break;
313
case "x86":
302
- platform = NetCoreSdkSearchPlatform.X86;
314
+ platform = NetCoreSearchPlatform.X86;
315
break;
316
default:
317
this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86"));
318
break;
319
}
320
break;
309
- case "Version":
321
+ case "MajorVersion":
322
// .NET Core had a different deployment strategy before .NET Core 3.0 which would require different detection logic.
311
- version = this.ParseHelper.GetAttributeVersionValue(sourceLineNumbers, attrib);
323
+ majorVersion = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 3, Int32.MaxValue);
324
break;
325
default:
326
this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -331,16 +343,13 @@ namespace WixToolset.Netfx
343
this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform"));
344
}
345
334
-
335
- if (String.IsNullOrEmpty(version))
346
+ if (majorVersion == CompilerConstants.IntegerNotSet)
347
{
337
- this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Version"));
348
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "MajorVersion"));
349
}
339
-
340
- var ver = Version.Parse(version);
341
- if (ver.Major == 4)
350
+ else if (majorVersion == 4)
351
{
343
- this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "3.*", "5+.*"));
352
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "MajorVersion", "4", "3", "5+"));
353
}
354
355
this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
@@ -358,7 +367,7 @@ namespace WixToolset.Netfx
367
section.AddSymbol(new NetFxNetCoreSdkSearchSymbol(sourceLineNumbers, id)
368
{
369
Platform = platform.Value,
361
- Version = version,
370
+ MajorVersion = majorVersion,
371
});
372
}
373
}
@@ -391,6 +400,157 @@ namespace WixToolset.Netfx
400
this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
401
}
402
403
+ private void ParseDotNetCoreSdkFeatureBandSearchElement(Intermediate intermediate, IntermediateSection section, XElement element)
404
+ {
405
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
406
+ Identifier id = null;
407
+ string variable = null;
408
+ string condition = null;
409
+ string after = null;
410
+ NetCoreSearchPlatform? platform = null;
411
+ string version = null;
412
+ var majorVersion = 0;
413
+ var minorVersion = 0;
414
+ var patchVersion = 0;
415
+
416
+ foreach (var attrib in element.Attributes())
417
+ {
418
+ if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
419
+ {
420
+ switch (attrib.Name.LocalName)
421
+ {
422
+ case "Id":
423
+ id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
424
+ break;
425
+ case "Variable":
426
+ variable = this.ParseHelper.GetAttributeBundleVariableNameValue(sourceLineNumbers, attrib);
427
+ break;
428
+ case "Condition":
429
+ condition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
430
+ break;
431
+ case "After":
432
+ after = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
433
+ break;
434
+ case "Platform":
435
+ var platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
436
+ switch (platformValue)
437
+ {
438
+ case "arm64":
439
+ platform = NetCoreSearchPlatform.Arm64;
440
+ break;
441
+ case "x64":
442
+ platform = NetCoreSearchPlatform.X64;
443
+ break;
444
+ case "x86":
445
+ platform = NetCoreSearchPlatform.X86;
446
+ break;
447
+ default:
448
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86"));
449
+ break;
450
+ }
451
+ break;
452
+ case "Version":
453
+ version = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
454
+ break;
455
+ default:
456
+ this.ParseHelper.UnexpectedAttribute(element, attrib);
457
+ break;
458
+ }
459
+ }
460
+ else
461
+ {
462
+ this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
463
+ }
464
+ }
465
+
466
+ if (id == null)
467
+ {
468
+ id = this.ParseHelper.CreateIdentifier("dncsfbs", variable, condition, after);
469
+ }
470
+
471
+ if (!platform.HasValue)
472
+ {
473
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform"));
474
+ }
475
+
476
+ if (String.IsNullOrEmpty(version))
477
+ {
478
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Version"));
479
+ }
480
+ else
481
+ {
482
+ if (!Version.TryParse(version, out var featureBandVersion))
483
+ {
484
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "x.x.x00"));
485
+ }
486
+ else
487
+ {
488
+ majorVersion = featureBandVersion.Major;
489
+ minorVersion = featureBandVersion.Minor;
490
+ patchVersion = featureBandVersion.Build;
491
+
492
+ if ((patchVersion % 100) != 0 || featureBandVersion.Revision != -1)
493
+ {
494
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "x.x.x00"));
495
+ }
496
+
497
+ if (majorVersion == 4)
498
+ {
499
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "3.*", "5+.*"));
500
+ }
501
+ }
502
+ }
503
+
504
+ this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
505
+
506
+ var bundleExtensionId = this.ParseHelper.CreateIdentifierValueFromPlatform("Wix4NetfxBundleExtension", this.Context.Platform, BurnPlatforms.X86 | BurnPlatforms.X64 | BurnPlatforms.ARM64);
507
+ if (bundleExtensionId == null)
508
+ {
509
+ this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, this.Context.Platform.ToString(), element.Name.LocalName));
510
+ }
511
+
512
+ if (!this.Messaging.EncounteredError)
513
+ {
514
+ this.ParseHelper.CreateWixSearchSymbol(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, bundleExtensionId);
515
+
516
+ section.AddSymbol(new NetFxNetCoreSdkFeatureBandSearchSymbol(sourceLineNumbers, id)
517
+ {
518
+ Platform = platform.Value,
519
+ MajorVersion = majorVersion,
520
+ MinorVersion = minorVersion,
521
+ PatchVersion = patchVersion,
522
+ });
523
+ }
524
+ }
525
+
526
+ private void ParseDotNetCoreSdkFeatureBandSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element)
527
+ {
528
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
529
+
530
+ foreach (var attrib in element.Attributes())
531
+ {
532
+ if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
533
+ {
534
+ switch (attrib.Name.LocalName)
535
+ {
536
+ case "Id":
537
+ var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
538
+ this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, NetfxSymbolDefinitions.NetFxNetCoreSdkFeatureBandSearch, refId);
539
+ break;
540
+ default:
541
+ this.ParseHelper.UnexpectedAttribute(element, attrib);
542
+ break;
543
+ }
544
+ }
545
+ else
546
+ {
547
+ this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
548
+ }
549
+ }
550
+
551
+ this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
552
+ }
553
+
554
/// <summary>
555
/// Parses a NativeImage element.
556
/// </summary>
src/ext/NetFx/wixext/Symbols/NetFxNetCoreSearchSdkFeatureBandSymbol.cs
new
+71
@@ -0,0 +1,71 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+namespace WixToolset.Netfx
4
+{
5
+ using WixToolset.Data;
6
+ using WixToolset.Netfx.Symbols;
7
+
8
+ public static partial class NetfxSymbolDefinitions
9
+ {
10
+ public static readonly IntermediateSymbolDefinition NetFxNetCoreSdkFeatureBandSearch = new IntermediateSymbolDefinition(
11
+ NetfxSymbolDefinitionType.NetFxNetCoreSdkFeatureBandSearch.ToString(),
12
+ new[]
13
+ {
14
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkFeatureBandSearchSymbolFields.Platform), IntermediateFieldType.Number),
15
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkFeatureBandSearchSymbolFields.MajorVersion), IntermediateFieldType.Number),
16
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkFeatureBandSearchSymbolFields.MinorVersion), IntermediateFieldType.Number),
17
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkFeatureBandSearchSymbolFields.PatchVersion), IntermediateFieldType.Number),
18
+ },
19
+ typeof(NetFxNetCoreSdkFeatureBandSearchSymbol));
20
+ }
21
+}
22
+
23
+namespace WixToolset.Netfx.Symbols
24
+{
25
+ using WixToolset.Data;
26
+
27
+ public enum NetFxNetCoreSdkFeatureBandSearchSymbolFields
28
+ {
29
+ Platform,
30
+ MajorVersion,
31
+ MinorVersion,
32
+ PatchVersion,
33
+ }
34
+
35
+ public class NetFxNetCoreSdkFeatureBandSearchSymbol : IntermediateSymbol
36
+ {
37
+ public NetFxNetCoreSdkFeatureBandSearchSymbol() : base(NetfxSymbolDefinitions.NetFxNetCoreSdkFeatureBandSearch, null, null)
38
+ {
39
+ }
40
+
41
+ public NetFxNetCoreSdkFeatureBandSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(NetfxSymbolDefinitions.NetFxNetCoreSdkFeatureBandSearch, sourceLineNumber, id)
42
+ {
43
+ }
44
+
45
+ public IntermediateField this[NetFxNetCoreSdkFeatureBandSearchSymbolFields index] => this.Fields[(int)index];
46
+
47
+ public NetCoreSearchPlatform Platform
48
+ {
49
+ get => (NetCoreSearchPlatform)this.Fields[(int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.Platform].AsNumber();
50
+ set => this.Set((int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.Platform, (int)value);
51
+ }
52
+
53
+ public int MajorVersion
54
+ {
55
+ get => this.Fields[(int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.MajorVersion].AsNumber();
56
+ set => this.Set((int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.MajorVersion, value);
57
+ }
58
+
59
+ public int MinorVersion
60
+ {
61
+ get => this.Fields[(int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.MinorVersion].AsNumber();
62
+ set => this.Set((int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.MinorVersion, value);
63
+ }
64
+
65
+ public int PatchVersion
66
+ {
67
+ get => this.Fields[(int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.PatchVersion].AsNumber();
68
+ set => this.Set((int)NetFxNetCoreSdkFeatureBandSearchSymbolFields.PatchVersion, value);
69
+ }
70
+ }
71
+}
src/ext/NetFx/wixext/Symbols/NetFxNetCoreSearchSdkSymbol.cs
+8
-17
@@ -12,9 +12,9 @@ namespace WixToolset.Netfx
12
new[]
13
{
14
new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkSearchSymbolFields.Platform), IntermediateFieldType.Number),
15
- new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkSearchSymbolFields.Version), IntermediateFieldType.String),
15
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSdkSearchSymbolFields.MajorVersion), IntermediateFieldType.Number),
16
},
17
- typeof(NetFxNetCoreSearchSymbol));
17
+ typeof(NetFxNetCoreSdkSearchSymbol));
18
}
19
}
20
@@ -22,21 +22,12 @@ namespace WixToolset.Netfx.Symbols
22
{
23
using WixToolset.Data;
24
25
-
26
- public enum NetCoreSdkSearchPlatform
27
- {
28
- X86,
29
- X64,
30
- Arm64,
31
- }
32
-
25
public enum NetFxNetCoreSdkSearchSymbolFields
26
{
27
Platform,
36
- Version,
28
+ MajorVersion,
29
}
30
39
-
31
public class NetFxNetCoreSdkSearchSymbol : IntermediateSymbol
32
{
33
public NetFxNetCoreSdkSearchSymbol() : base(NetfxSymbolDefinitions.NetFxNetCoreSdkSearch, null, null)
@@ -49,16 +40,16 @@ namespace WixToolset.Netfx.Symbols
40
41
public IntermediateField this[NetFxNetCoreSdkSearchSymbolFields index] => this.Fields[(int)index];
42
52
- public NetCoreSdkSearchPlatform Platform
43
+ public NetCoreSearchPlatform Platform
44
{
54
- get => (NetCoreSdkSearchPlatform)this.Fields[(int)NetFxNetCoreSdkSearchSymbolFields.Platform].AsNumber();
45
+ get => (NetCoreSearchPlatform)this.Fields[(int)NetFxNetCoreSdkSearchSymbolFields.Platform].AsNumber();
46
set => this.Set((int)NetFxNetCoreSdkSearchSymbolFields.Platform, (int)value);
47
}
48
58
- public string Version
49
+ public int MajorVersion
50
{
60
- get => this.Fields[(int)NetFxNetCoreSdkSearchSymbolFields.Version].AsString();
61
- set => this.Set((int)NetFxNetCoreSdkSearchSymbolFields.Version, value);
51
+ get => this.Fields[(int)NetFxNetCoreSdkSearchSymbolFields.MajorVersion].AsNumber();
52
+ set => this.Set((int)NetFxNetCoreSdkSearchSymbolFields.MajorVersion, value);
53
}
54
}
55
}
src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs
+6
-1
@@ -10,8 +10,9 @@ namespace WixToolset.Netfx
10
{
11
NetFxNativeImage,
12
NetFxNetCoreSearch,
13
- NetFxNetCoreSdkSearch,
13
NetFxDotNetCompatibilityCheck,
14
+ NetFxNetCoreSdkSearch,
15
+ NetFxNetCoreSdkFeatureBandSearch,
16
}
17
18
public static partial class NetfxSymbolDefinitions
@@ -41,6 +42,9 @@ namespace WixToolset.Netfx
42
case NetfxSymbolDefinitionType.NetFxNetCoreSdkSearch:
43
return NetfxSymbolDefinitions.NetFxNetCoreSdkSearch;
44
45
+ case NetfxSymbolDefinitionType.NetFxNetCoreSdkFeatureBandSearch:
46
+ return NetfxSymbolDefinitions.NetFxNetCoreSdkFeatureBandSearch;
47
+
48
case NetfxSymbolDefinitionType.NetFxDotNetCompatibilityCheck:
49
return NetfxSymbolDefinitions.NetFxDotNetCompatibilityCheck;
50
@@ -53,6 +57,7 @@ namespace WixToolset.Netfx
57
{
58
NetFxNetCoreSearch.AddTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag);
59
NetFxNetCoreSdkSearch.AddTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag);
60
+ NetFxNetCoreSdkFeatureBandSearch.AddTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag);
61
}
62
}
63
}
src/test/burn/TestData/TestBA/TestBAWixlib/NetCore6.0.9_x86.wxs
+13
-8
@@ -5,7 +5,7 @@
5
<?define NetCorePlatform = x86?>
6
<?define NetCoreIdVersion = 609?>
7
<?define NetCoreVersion = 6.0.9?>
8
- <?define NetCoreSdkPlatform = x86?>
8
+ <?define NetCoreSdkFeatureBandVersion = 60400?>
9
<?define NetCoreSdkIdVersion = 60403?>
10
<?define NetCoreSdkVersion = 6.0.403?>
11
<?include NetCore6_Platform.wxi?>
@@ -61,16 +61,21 @@
61
</Fragment>
62
63
<Fragment>
64
- <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCoreSdkPlatform)" Version="6.0.200" Variable="$(var.DotNetCoreSdkId)" />
64
+ <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DotNetCoreSdkId)" />
65
+ <netfx:DotNetCoreSdkFeatureBandSearch Id="$(var.DotNetCoreSdkFeatureBandId)" Platform="$(var.NetCorePlatform)" Version="6.0.400" Variable="$(var.DotNetCoreSdkFeatureBandId)" />
66
+ </Fragment>
67
+
68
+ <Fragment>
69
+ <netfx:DotNetCoreSdkFeatureBandSearchRef Id="$(var.DotNetCoreSdkFeatureBandId)" />
70
66
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition" Value="$(var.DotNetCoreSdkId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
67
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition" Value="" Overridable="yes" />
68
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory" Value="redist\" Overridable="yes" />
69
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)RepairArguments" Value="" Overridable="yes" />
71
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreSdkFeatureBandId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
72
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
73
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
74
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
75
76
<PackageGroup Id="$(var.DotNetCoreSdkRedistId)">
72
- <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
73
- <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCoreSdkPlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET 6.0 SDK - 6.0.403 (x86)" Description="Microsoft .NET SDK - 6.0.403 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="194236520" Version="6.0.403" />
77
+ <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
78
+ <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET 6.0 SDK - 6.0.403 (x86)" Description="Microsoft .NET SDK - 6.0.403 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="194236520" Version="6.0.403" />
79
</ExePackage>
80
</PackageGroup>
81
</Fragment>
src/test/burn/TestData/TestBA/TestBAWixlib/NetCore6_Platform.wxi
+4
-3
@@ -21,9 +21,10 @@
21
<?define DotNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
22
<?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
23
24
- <?define DotNetCoreSdkId = DOTNETCORERUNTIME6_$(var.NetCoreSdkPlatform)?>
25
- <?define DotNetCoreSdkRedistId = DotNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCoreSdkPlatform)?>
26
- <?define DotNetCoreSdkRedistLog = DotNetCoreRuntime$(var.NetCoreSdkIdVersion)RedistLog?>
24
+ <?define DotNetCoreSdkId = DOTNETCORESDK6_$(var.NetCorePlatform)?>
25
+ <?define DotNetCoreSdkFeatureBandId = DOTNETCORESDK$(var.NetCoreSdkFeatureBandVersion)_$(var.NetCorePlatform)?>
26
+ <?define DotNetCoreSdkRedistId = DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist_$(var.NetCorePlatform)?>
27
+ <?define DotNetCoreSdkRedistLog = DotNetCoreSdk$(var.NetCoreSdkIdVersion)RedistLog?>
28
<?define DotNetCoreSdkRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreSdkRedistLog)]"?>
29
<?define DotNetCoreSdkRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreSdkRedistLog)]"?>
30
src/test/burn/TestData/TestBA/TestBAWixlib_x64/NetCore6.0.9_x64.wxs
+13
-8
@@ -5,7 +5,7 @@
5
<?define NetCorePlatform = x64?>
6
<?define NetCoreIdVersion = 609?>
7
<?define NetCoreVersion = 6.0.9?>
8
- <?define NetCoreSdkPlatform = x64?>
8
+ <?define NetCoreSdkFeatureBandVersion = 60400?>
9
<?define NetCoreSdkIdVersion = 60403?>
10
<?define NetCoreSdkVersion = 6.0.403?>
11
<?include ..\TestBAWixlib\NetCore6_Platform.wxi?>
@@ -61,16 +61,21 @@
61
</Fragment>
62
63
<Fragment>
64
- <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCoreSdkPlatform)" Version="6.0.200" Variable="$(var.DotNetCoreSdkId)" />
64
+ <netfx:DotNetCoreSdkSearch Id="$(var.DotNetCoreSdkId)" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DotNetCoreSdkId)" />
65
+ <netfx:DotNetCoreSdkFeatureBandSearch Id="$(var.DotNetCoreSdkFeatureBandId)" Platform="$(var.NetCorePlatform)" Version="6.0.400" Variable="$(var.DotNetCoreSdkFeatureBandId)" />
66
+ </Fragment>
67
+
68
+ <Fragment>
69
+ <netfx:DotNetCoreSdkFeatureBandSearchRef Id="$(var.DotNetCoreSdkFeatureBandId)" />
70
66
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition" Value="$(var.DotNetCoreSdkId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
67
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition" Value="" Overridable="yes" />
68
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory" Value="redist\" Overridable="yes" />
69
- <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)RepairArguments" Value="" Overridable="yes" />
71
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreSdkFeatureBandId) >= v$(var.NetCoreSdkVersion)" Overridable="yes" />
72
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
73
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
74
+ <WixVariable Id="DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
75
76
<PackageGroup Id="$(var.DotNetCoreSdkRedistId)">
72
- <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
73
- <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCoreSdkPlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCoreSdkPlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET 6.0 SDK - 6.0.403 (x64)" Description="Microsoft .NET SDK - 6.0.403 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="205722192" Version="6.0.403" />
77
+ <ExePackage CacheId="$(var.DotNetCoreSdkRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreSdkRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreSdkRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreSdkRedistLog)" Cache="remove">
78
+ <ExePackagePayload Name="!(wix.DotNetCoreSdk$(var.NetCoreSdkIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-sdk-$(var.NetCoreSdkVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreSdkRedistLink)" ProductName="Microsoft .NET 6.0 SDK - 6.0.403 (x64)" Description="Microsoft .NET SDK - 6.0.403 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="205722192" Version="6.0.403" />
79
</ExePackage>
80
</PackageGroup>
81
</Fragment>
src/test/burn/TestData/TestBA/TestBAWixlib_x64/WixBA_x64.wxs
+4
-2
@@ -1,5 +1,5 @@
1
-<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
1
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
3
<Fragment>
4
<BootstrapperApplication>
5
<Payload SourceFile="!(bindpath.dncx64)\WixToolset.WixBA.deps.json" />
@@ -14,5 +14,7 @@
14
<PackageGroup Id="WixBAdnc_x64">
15
<PackageGroupRef Id="DesktopNetCoreRuntime609Redist_x64AsPrereq" />
16
</PackageGroup>
17
+
18
+ <netfx:DotNetCoreSdkSearchRef Id="DOTNETCORESDK6_x64" />
19
</Fragment>
20
</Wix>