Add Netfx bundle extension and netfx:DotNetCoreSearch.
Remove built-in .NET Core packages since they update too quickly. Fixes 6257
Sean Hall committed
Oct 6, 2022 at 16:37 UTC
21a0685ef69e9d634600622b19ea970c6f58ef03
55 files changed
+1569
-151
src/ext/NetFx/NetFx.wixext.sln
+34
-4
@@ -1,8 +1,12 @@
1
2
Microsoft Visual Studio Solution File, Format Version 12.00
3
-# Visual Studio 15
4
-VisualStudioVersion = 15.0.27130.2010
3
+# Visual Studio Version 17
4
+VisualStudioVersion = 17.3.32811.315
5
MinimumVisualStudioVersion = 15.0.26124.0
6
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netcoresearch", "netcoresearch\netcoresearch.vcxproj", "{A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}"
7
+EndProject
8
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netfxbe", "be\netfxbe.vcxproj", "{B65719C0-B2CC-45F9-AF33-6F147F741ADB}"
9
+EndProject
10
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netfxca", "ca\netfxca.vcxproj", "{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}"
11
EndProject
12
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "netfx", "wixlib\netfx.wixproj", "{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}"
@@ -21,14 +25,40 @@ Global
25
Release|x86 = Release|x86
26
EndGlobalSection
27
GlobalSection(ProjectConfigurationPlatforms) = postSolution
28
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|Any CPU.ActiveCfg = Debug|Win32
29
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|Any CPU.Build.0 = Debug|Win32
30
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|x64.ActiveCfg = Debug|x64
31
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|x64.Build.0 = Debug|x64
32
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|x86.ActiveCfg = Debug|Win32
33
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Debug|x86.Build.0 = Debug|Win32
34
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|Any CPU.ActiveCfg = Release|Win32
35
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|Any CPU.Build.0 = Release|Win32
36
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|x64.ActiveCfg = Release|x64
37
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|x64.Build.0 = Release|x64
38
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|x86.ActiveCfg = Release|Win32
39
+ {A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}.Release|x86.Build.0 = Release|Win32
40
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|Any CPU.ActiveCfg = Debug|Win32
41
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|Any CPU.Build.0 = Debug|Win32
42
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|x64.ActiveCfg = Debug|x64
43
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|x64.Build.0 = Debug|x64
44
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|x86.ActiveCfg = Debug|Win32
45
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Debug|x86.Build.0 = Debug|Win32
46
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|Any CPU.ActiveCfg = Release|Win32
47
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|Any CPU.Build.0 = Release|Win32
48
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|x64.ActiveCfg = Release|x64
49
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|x64.Build.0 = Release|x64
50
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|x86.ActiveCfg = Release|Win32
51
+ {B65719C0-B2CC-45F9-AF33-6F147F741ADB}.Release|x86.Build.0 = Release|Win32
52
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|Any CPU.ActiveCfg = Debug|Win32
53
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|Any CPU.Build.0 = Debug|Win32
26
- {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x64.ActiveCfg = Debug|Win32
54
+ {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x64.ActiveCfg = Debug|x64
55
+ {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x64.Build.0 = Debug|x64
56
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.ActiveCfg = Debug|Win32
57
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.Build.0 = Debug|Win32
58
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|Any CPU.ActiveCfg = Release|Win32
59
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|Any CPU.Build.0 = Release|Win32
31
- {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x64.ActiveCfg = Release|Win32
60
+ {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x64.ActiveCfg = Release|x64
61
+ {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x64.Build.0 = Release|x64
62
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.ActiveCfg = Release|Win32
63
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.Build.0 = Release|Win32
64
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|Any CPU.ActiveCfg = Debug|x86
src/ext/NetFx/be/NetfxBundleExtension.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
+#include "BextBaseBundleExtension.h"
5
+
6
+class CWixNetfxBundleExtension : public CBextBaseBundleExtension
7
+{
8
+public: // IBundleExtension
9
+ virtual STDMETHODIMP Search(
10
+ __in LPCWSTR wzId,
11
+ __in LPCWSTR wzVariable
12
+ )
13
+ {
14
+ HRESULT hr = S_OK;
15
+
16
+ hr = NetfxSearchExecute(&m_searches, wzId, wzVariable, m_pEngine, m_sczBaseDirectory);
17
+
18
+ return hr;
19
+ }
20
+
21
+public: //CBextBaseBundleExtension
22
+ virtual STDMETHODIMP Initialize(
23
+ __in const BUNDLE_EXTENSION_CREATE_ARGS* pCreateArgs
24
+ )
25
+ {
26
+ HRESULT hr = S_OK;
27
+ LPWSTR sczModulePath = NULL;
28
+ IXMLDOMDocument* pixdManifest = NULL;
29
+ IXMLDOMNode* pixnBundleExtension = NULL;
30
+
31
+ hr = __super::Initialize(pCreateArgs);
32
+ BextExitOnFailure(hr, "CBextBaseBundleExtension initialization failed.");
33
+
34
+ hr = PathForCurrentProcess(&sczModulePath, m_hInstance);
35
+ BextExitOnFailure(hr, "Failed to get bundle extension path.");
36
+
37
+ hr = PathGetDirectory(sczModulePath, &m_sczBaseDirectory);
38
+ BextExitOnFailure(hr, "Failed to get bundle extension base directory.");
39
+
40
+ hr = XmlLoadDocumentFromFile(m_sczBundleExtensionDataPath, &pixdManifest);
41
+ BextExitOnFailure(hr, "Failed to load bundle extension manifest from path: %ls", m_sczBundleExtensionDataPath);
42
+
43
+ hr = BextGetBundleExtensionDataNode(pixdManifest, NETFX_BUNDLE_EXTENSION_ID, &pixnBundleExtension);
44
+ BextExitOnFailure(hr, "Failed to get BundleExtension '%ls'", NETFX_BUNDLE_EXTENSION_ID);
45
+
46
+ hr = NetfxSearchParseFromXml(&m_searches, pixnBundleExtension);
47
+ BextExitOnFailure(hr, "Failed to parse searches from bundle extension manifest.");
48
+
49
+ LExit:
50
+ ReleaseObject(pixnBundleExtension);
51
+ ReleaseObject(pixdManifest);
52
+ ReleaseStr(sczModulePath);
53
+
54
+ return hr;
55
+ }
56
+
57
+public:
58
+ CWixNetfxBundleExtension(
59
+ __in HINSTANCE hInstance,
60
+ __in IBundleExtensionEngine* pEngine
61
+ ) : CBextBaseBundleExtension(pEngine)
62
+ {
63
+ m_searches = { };
64
+ m_hInstance = hInstance;
65
+ m_sczBaseDirectory = NULL;
66
+ }
67
+
68
+ ~CWixNetfxBundleExtension()
69
+ {
70
+ NetfxSearchUninitialize(&m_searches);
71
+ ReleaseStr(m_sczBaseDirectory);
72
+ }
73
+
74
+private:
75
+ NETFX_SEARCHES m_searches;
76
+ HINSTANCE m_hInstance;
77
+ LPWSTR m_sczBaseDirectory;
78
+};
79
+
80
+HRESULT NetfxBundleExtensionCreate(
81
+ __in HINSTANCE hInstance,
82
+ __in IBundleExtensionEngine* pEngine,
83
+ __in const BUNDLE_EXTENSION_CREATE_ARGS* pArgs,
84
+ __out IBundleExtension** ppBundleExtension
85
+ )
86
+{
87
+ HRESULT hr = S_OK;
88
+ CWixNetfxBundleExtension* pExtension = NULL;
89
+
90
+ pExtension = new CWixNetfxBundleExtension(hInstance, pEngine);
91
+ BextExitOnNull(pExtension, hr, E_OUTOFMEMORY, "Failed to create new CWixNetfxBundleExtension.");
92
+
93
+ hr = pExtension->Initialize(pArgs);
94
+ BextExitOnFailure(hr, "CWixNetfxBundleExtension initialization failed.");
95
+
96
+ *ppBundleExtension = pExtension;
97
+ pExtension = NULL;
98
+
99
+LExit:
100
+ ReleaseObject(pExtension);
101
+ return hr;
102
+}
src/ext/NetFx/be/NetfxBundleExtension.h
new
+17
@@ -0,0 +1,17 @@
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
+
5
+// constants
6
+
7
+#define NETFX_BUNDLE_EXTENSION_ID BUNDLE_EXTENSION_DECORATION(L"NetfxBundleExtension")
8
+
9
+
10
+// function declarations
11
+
12
+HRESULT NetfxBundleExtensionCreate(
13
+ __in HINSTANCE hInstance,
14
+ __in IBundleExtensionEngine* pEngine,
15
+ __in const BUNDLE_EXTENSION_CREATE_ARGS* pArgs,
16
+ __out IBundleExtension** ppBundleExtension
17
+ );
src/ext/NetFx/be/detectnetcore.cpp
new
+140
@@ -0,0 +1,140 @@
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 DetectNetCore(
6
+ __in NETFX_NET_CORE_PLATFORM platform,
7
+ __in NETFX_NET_CORE_RUNTIME_TYPE runtimeType,
8
+ __in LPCWSTR wzMajorVersion,
9
+ __in LPCWSTR wzBaseDirectory,
10
+ __inout LPWSTR* psczLatestVersion
11
+ )
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);
27
+
28
+ switch (runtimeType)
29
+ {
30
+ case NETFX_NET_CORE_RUNTIME_TYPE_ASPNET:
31
+ wzRuntimeType = L"Microsoft.AspNetCore.App";
32
+ break;
33
+ case NETFX_NET_CORE_RUNTIME_TYPE_CORE:
34
+ wzRuntimeType = L"Microsoft.NETCore.App";
35
+ break;
36
+ case NETFX_NET_CORE_RUNTIME_TYPE_DESKTOP:
37
+ wzRuntimeType = L"Microsoft.WindowsDesktop.App";
38
+ break;
39
+ default:
40
+ BextExitWithRootFailure(hr, E_INVALIDARG, "Unknown runtime type: %u", runtimeType);
41
+ break;
42
+ }
43
+
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\" %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;
74
+
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
+ }
111
+
112
+LExit:
113
+ ReleaseFileHandle(hStdOutErr);
114
+ ReleaseHandle(hProcess);
115
+ ReleaseMem(rgbOutput);
116
+ ReleaseStr(sczCommandLine);
117
+ ReleaseStr(sczExePath);
118
+
119
+ return hr;
120
+}
121
+
122
+HRESULT NetfxPerformDetectNetCore(
123
+ __in LPCWSTR wzVariable,
124
+ __in NETFX_SEARCH* pSearch,
125
+ __in IBundleExtensionEngine* pEngine,
126
+ __in LPCWSTR wzBaseDirectory
127
+ )
128
+{
129
+ HRESULT hr = S_OK;
130
+ LPWSTR sczLatestVersion = FALSE;
131
+
132
+ hr = DetectNetCore(pSearch->NetCoreSearch.platform, pSearch->NetCoreSearch.runtimeType, pSearch->NetCoreSearch.sczMajorVersion, wzBaseDirectory, &sczLatestVersion);
133
+ BextExitOnFailure(hr, "DetectNetCore failed.");
134
+
135
+ hr = pEngine->SetVariableVersion(wzVariable, sczLatestVersion);
136
+ BextExitOnFailure(hr, "Failed to set variable '%ls' to '%ls'", wzVariable, sczLatestVersion);
137
+
138
+LExit:
139
+ return hr;
140
+}
src/ext/NetFx/be/detectnetcore.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 NetfxPerformDetectNetCore(
5
+ __in LPCWSTR wzVariable,
6
+ __in NETFX_SEARCH* pSearch,
7
+ __in IBundleExtensionEngine* pEngine,
8
+ __in LPCWSTR wzBaseDirectory
9
+ );
src/ext/NetFx/be/netfxbe.cpp
new
+62
@@ -0,0 +1,62 @@
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
+#include "BextBaseBundleExtensionProc.h"
5
+
6
+static HINSTANCE vhInstance = NULL;
7
+static IBundleExtension* vpBundleExtension = NULL;
8
+
9
+// function definitions
10
+
11
+extern "C" BOOL WINAPI DllMain(
12
+ __in HINSTANCE hInstance,
13
+ __in DWORD dwReason,
14
+ __in LPVOID /*pvReserved*/
15
+ )
16
+{
17
+ switch(dwReason)
18
+ {
19
+ case DLL_PROCESS_ATTACH:
20
+ vhInstance = hInstance;
21
+ break;
22
+
23
+ case DLL_PROCESS_DETACH:
24
+ vhInstance = NULL;
25
+ break;
26
+ }
27
+
28
+ return TRUE;
29
+}
30
+
31
+extern "C" HRESULT WINAPI BundleExtensionCreate(
32
+ __in const BUNDLE_EXTENSION_CREATE_ARGS* pArgs,
33
+ __inout BUNDLE_EXTENSION_CREATE_RESULTS* pResults
34
+ )
35
+{
36
+ HRESULT hr = S_OK;
37
+ IBundleExtensionEngine* pEngine = NULL;
38
+
39
+ hr = XmlInitialize();
40
+ ExitOnFailure(hr, "Failed to initialize XML.");
41
+
42
+ hr = BextInitializeFromCreateArgs(pArgs, &pEngine);
43
+ ExitOnFailure(hr, "Failed to initialize bext");
44
+
45
+ hr = NetfxBundleExtensionCreate(vhInstance, pEngine, pArgs, &vpBundleExtension);
46
+ BextExitOnFailure(hr, "Failed to create WixNetfxBundleExtension");
47
+
48
+ pResults->pfnBundleExtensionProc = BextBaseBundleExtensionProc;
49
+ pResults->pvBundleExtensionProcContext = vpBundleExtension;
50
+
51
+LExit:
52
+ ReleaseObject(pEngine);
53
+
54
+ return hr;
55
+}
56
+
57
+extern "C" void WINAPI BundleExtensionDestroy()
58
+{
59
+ BextUninitialize();
60
+ ReleaseNullObject(vpBundleExtension);
61
+ XmlUninitialize();
62
+}
src/ext/NetFx/be/netfxbe.def
new
+8
@@ -0,0 +1,8 @@
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
+
4
+LIBRARY "netfxbe"
5
+
6
+EXPORTS
7
+ BundleExtensionCreate
8
+ BundleExtensionDestroy
src/ext/NetFx/be/netfxbe.vcxproj
new
+77
@@ -0,0 +1,77 @@
1
+<?xml version="1.0" encoding="utf-8"?>
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
+<Project DefaultTargets="Build" Toolsxmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5
+ <ItemGroup Label="ProjectConfigurations">
6
+ <ProjectConfiguration Include="Debug|ARM64">
7
+ <Configuration>Debug</Configuration>
8
+ <Platform>ARM64</Platform>
9
+ </ProjectConfiguration>
10
+ <ProjectConfiguration Include="Release|ARM64">
11
+ <Configuration>Release</Configuration>
12
+ <Platform>ARM64</Platform>
13
+ </ProjectConfiguration>
14
+ <ProjectConfiguration Include="Debug|X64">
15
+ <Configuration>Debug</Configuration>
16
+ <Platform>X64</Platform>
17
+ </ProjectConfiguration>
18
+ <ProjectConfiguration Include="Release|X64">
19
+ <Configuration>Release</Configuration>
20
+ <Platform>X64</Platform>
21
+ </ProjectConfiguration>
22
+ <ProjectConfiguration Include="Debug|Win32">
23
+ <Configuration>Debug</Configuration>
24
+ <Platform>Win32</Platform>
25
+ </ProjectConfiguration>
26
+ <ProjectConfiguration Include="Release|Win32">
27
+ <Configuration>Release</Configuration>
28
+ <Platform>Win32</Platform>
29
+ </ProjectConfiguration>
30
+ </ItemGroup>
31
+
32
+ <PropertyGroup Label="Globals">
33
+ <ProjectGuid>{B65719C0-B2CC-45F9-AF33-6F147F741ADB}</ProjectGuid>
34
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
35
+ <TargetName>netfxbe</TargetName>
36
+ <CharacterSet>Unicode</CharacterSet>
37
+ <ProjectModuleDefinitionFile>netfxbe.def</ProjectModuleDefinitionFile>
38
+ <Description>WiX Toolset Netfx BundleExtension</Description>
39
+ </PropertyGroup>
40
+
41
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
42
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
43
+
44
+ <PropertyGroup>
45
+ <ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
46
+ </PropertyGroup>
47
+
48
+ <ItemGroup>
49
+ <ClCompile Include="detectnetcore.cpp" />
50
+ <ClCompile Include="netfxbe.cpp" />
51
+ <ClCompile Include="NetfxBundleExtension.cpp" />
52
+ <ClCompile Include="netfxsearch.cpp" />
53
+ <ClCompile Include="precomp.cpp">
54
+ <PrecompiledHeader>Create</PrecompiledHeader>
55
+ </ClCompile>
56
+ </ItemGroup>
57
+
58
+ <ItemGroup>
59
+ <ClInclude Include="detectnetcore.h" />
60
+ <ClInclude Include="NetfxBundleExtension.h" />
61
+ <ClInclude Include="netfxsearch.h" />
62
+ <ClInclude Include="precomp.h" />
63
+ </ItemGroup>
64
+
65
+ <ItemGroup>
66
+ <None Include="netfxbe.def" />
67
+ </ItemGroup>
68
+
69
+ <ItemGroup>
70
+ <PackageReference Include="WixToolset.BextUtil" />
71
+
72
+ <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
73
+ <PackageReference Include="GitInfo" PrivateAssets="All" />
74
+ </ItemGroup>
75
+
76
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
77
+</Project>
src/ext/NetFx/be/netfxsearch.cpp
new
+149
@@ -0,0 +1,149 @@
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
+
6
+STDMETHODIMP NetfxSearchParseFromXml(
7
+ __in NETFX_SEARCHES* pSearches,
8
+ __in IXMLDOMNode* pixnBundleExtension
9
+ )
10
+{
11
+ HRESULT hr = S_OK;
12
+ IXMLDOMNodeList* pixnNodes = NULL;
13
+ IXMLDOMNode* pixnNode = NULL;
14
+ DWORD cNodes = 0;
15
+ BSTR bstrNodeName = NULL;
16
+
17
+ // Select Netfx search nodes.
18
+ hr = XmlSelectNodes(pixnBundleExtension, L"NetFxNetCoreSearch", &pixnNodes);
19
+ BextExitOnFailure(hr, "Failed to select Netfx search nodes.");
20
+
21
+ // Get Netfx search node count.
22
+ hr = pixnNodes->get_length((long*)&cNodes);
23
+ BextExitOnFailure(hr, "Failed to get Netfx search node count.");
24
+
25
+ if (!cNodes)
26
+ {
27
+ ExitFunction();
28
+ }
29
+
30
+ // Allocate memory for searches.
31
+ pSearches->rgSearches = (NETFX_SEARCH*)MemAlloc(sizeof(NETFX_SEARCH) * cNodes, TRUE);
32
+ BextExitOnNull(pSearches->rgSearches, hr, E_OUTOFMEMORY, "Failed to allocate memory for search structs.");
33
+
34
+ pSearches->cSearches = cNodes;
35
+
36
+ // Parse search elements.
37
+ for (DWORD i = 0; i < cNodes; ++i)
38
+ {
39
+ NETFX_SEARCH* pSearch = &pSearches->rgSearches[i];
40
+
41
+ hr = XmlNextElement(pixnNodes, &pixnNode, &bstrNodeName);
42
+ BextExitOnFailure(hr, "Failed to get next node.");
43
+
44
+ // @Id
45
+ hr = XmlGetAttributeEx(pixnNode, L"Id", &pSearch->sczId);
46
+ BextExitOnFailure(hr, "Failed to get @Id.");
47
+
48
+ // Read type specific attributes.
49
+ if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"NetFxNetCoreSearch", -1))
50
+ {
51
+ pSearch->Type = NETFX_SEARCH_TYPE_NET_CORE_SEARCH;
52
+
53
+ // @RuntimeType
54
+ hr = XmlGetAttributeUInt32(pixnNode, L"RuntimeType", reinterpret_cast<DWORD*>(&pSearch->NetCoreSearch.runtimeType));
55
+ BextExitOnFailure(hr, "Failed to get @RuntimeType.");
56
+
57
+ // @Platform
58
+ hr = XmlGetAttributeUInt32(pixnNode, L"Platform", reinterpret_cast<DWORD*>(&pSearch->NetCoreSearch.platform));
59
+ BextExitOnFailure(hr, "Failed to get @Platform.");
60
+
61
+ // @MajorVersion
62
+ hr = XmlGetAttributeEx(pixnNode, L"MajorVersion", &pSearch->NetCoreSearch.sczMajorVersion);
63
+ BextExitOnFailure(hr, "Failed to get @MajorVersion.");
64
+ }
65
+ else
66
+ {
67
+ BextExitWithRootFailure(hr, E_UNEXPECTED, "Unexpected element name: %ls", bstrNodeName);
68
+ }
69
+
70
+ // prepare next iteration
71
+ ReleaseNullObject(pixnNode);
72
+ ReleaseNullBSTR(bstrNodeName);
73
+ }
74
+
75
+LExit:
76
+ ReleaseBSTR(bstrNodeName);
77
+ ReleaseObject(pixnNode);
78
+ ReleaseObject(pixnNodes);
79
+
80
+ return hr;
81
+}
82
+
83
+void NetfxSearchUninitialize(
84
+ __in NETFX_SEARCHES* pSearches
85
+ )
86
+{
87
+ if (pSearches->rgSearches)
88
+ {
89
+ for (DWORD i = 0; i < pSearches->cSearches; ++i)
90
+ {
91
+ NETFX_SEARCH* pSearch = &pSearches->rgSearches[i];
92
+
93
+ ReleaseStr(pSearch->sczId);
94
+ }
95
+ MemFree(pSearches->rgSearches);
96
+ }
97
+}
98
+
99
+STDMETHODIMP NetfxSearchExecute(
100
+ __in NETFX_SEARCHES* pSearches,
101
+ __in LPCWSTR wzSearchId,
102
+ __in LPCWSTR wzVariable,
103
+ __in IBundleExtensionEngine* pEngine,
104
+ __in LPCWSTR wzBaseDirectory
105
+ )
106
+{
107
+ HRESULT hr = S_OK;
108
+ NETFX_SEARCH* pSearch = NULL;
109
+
110
+ hr = NetfxSearchFindById(pSearches, wzSearchId, &pSearch);
111
+ BextExitOnFailure(hr, "Search id '%ls' is unknown to the util extension.", wzSearchId);
112
+
113
+ switch (pSearch->Type)
114
+ {
115
+ case NETFX_SEARCH_TYPE_NET_CORE_SEARCH:
116
+ hr = NetfxPerformDetectNetCore(wzVariable, pSearch, pEngine, wzBaseDirectory);
117
+ break;
118
+ default:
119
+ hr = E_UNEXPECTED;
120
+ }
121
+
122
+LExit:
123
+ return hr;
124
+}
125
+
126
+STDMETHODIMP NetfxSearchFindById(
127
+ __in NETFX_SEARCHES* pSearches,
128
+ __in LPCWSTR wzId,
129
+ __out NETFX_SEARCH** ppSearch
130
+ )
131
+{
132
+ HRESULT hr = S_OK;
133
+
134
+ for (DWORD i = 0; i < pSearches->cSearches; ++i)
135
+ {
136
+ NETFX_SEARCH* pSearch = &pSearches->rgSearches[i];
137
+
138
+ if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pSearch->sczId, -1, wzId, -1))
139
+ {
140
+ *ppSearch = pSearch;
141
+ ExitFunction1(hr = S_OK);
142
+ }
143
+ }
144
+
145
+ hr = E_NOTFOUND;
146
+
147
+LExit:
148
+ return hr;
149
+}
src/ext/NetFx/be/netfxsearch.h
new
+76
@@ -0,0 +1,76 @@
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
+
5
+// constants
6
+
7
+enum NETFX_SEARCH_TYPE
8
+{
9
+ NETFX_SEARCH_TYPE_NONE,
10
+ NETFX_SEARCH_TYPE_NET_CORE_SEARCH,
11
+};
12
+
13
+enum NETFX_NET_CORE_RUNTIME_TYPE
14
+{
15
+ NETFX_NET_CORE_RUNTIME_TYPE_CORE,
16
+ NETFX_NET_CORE_RUNTIME_TYPE_ASPNET,
17
+ NETFX_NET_CORE_RUNTIME_TYPE_DESKTOP,
18
+};
19
+
20
+enum NETFX_NET_CORE_PLATFORM
21
+{
22
+ NETFX_NET_CORE_PLATFORM_X86,
23
+ NETFX_NET_CORE_PLATFORM_X64,
24
+ NETFX_NET_CORE_PLATFORM_ARM64,
25
+};
26
+
27
+
28
+// structs
29
+
30
+typedef struct _NETFX_SEARCH
31
+{
32
+ LPWSTR sczId;
33
+
34
+ NETFX_SEARCH_TYPE Type;
35
+ union
36
+ {
37
+ struct
38
+ {
39
+ NETFX_NET_CORE_RUNTIME_TYPE runtimeType;
40
+ NETFX_NET_CORE_PLATFORM platform;
41
+ LPWSTR sczMajorVersion;
42
+ } NetCoreSearch;
43
+ };
44
+} NETFX_SEARCH;
45
+
46
+typedef struct _NETFX_SEARCHES
47
+{
48
+ NETFX_SEARCH* rgSearches;
49
+ DWORD cSearches;
50
+} NETFX_SEARCHES;
51
+
52
+
53
+// function declarations
54
+
55
+STDMETHODIMP NetfxSearchParseFromXml(
56
+ __in NETFX_SEARCHES* pSearches,
57
+ __in IXMLDOMNode* pixnBundleExtension
58
+ );
59
+
60
+void NetfxSearchUninitialize(
61
+ __in NETFX_SEARCHES* pSearches
62
+ );
63
+
64
+STDMETHODIMP NetfxSearchExecute(
65
+ __in NETFX_SEARCHES* pSearches,
66
+ __in LPCWSTR wzSearchId,
67
+ __in LPCWSTR wzVariable,
68
+ __in IBundleExtensionEngine* pEngine,
69
+ __in LPCWSTR wzBaseDirectory
70
+ );
71
+
72
+STDMETHODIMP NetfxSearchFindById(
73
+ __in NETFX_SEARCHES* pSearches,
74
+ __in LPCWSTR wzId,
75
+ __out NETFX_SEARCH** ppSearch
76
+ );
src/ext/NetFx/be/precomp.cpp
new
+3
@@ -0,0 +1,3 @@
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"
src/ext/NetFx/be/precomp.h
new
+33
@@ -0,0 +1,33 @@
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
+
5
+#include <windows.h>
6
+#include <msiquery.h>
7
+#include <msidefs.h>
8
+#include <stierr.h>
9
+
10
+#include <strsafe.h>
11
+
12
+#include <msxml2.h>
13
+
14
+#include <dutil.h>
15
+#include <fileutil.h>
16
+#include <memutil.h>
17
+#include <strutil.h>
18
+#include <pathutil.h>
19
+#include <procutil.h>
20
+#include <xmlutil.h>
21
+
22
+#include <BundleExtensionEngine.h>
23
+#include <BundleExtension.h>
24
+
25
+#include <IBundleExtensionEngine.h>
26
+#include <IBundleExtension.h>
27
+#include <bextutil.h>
28
+#include <BextBundleExtensionEngine.h>
29
+
30
+#include "..\..\beDecor.h"
31
+#include "netfxsearch.h"
32
+#include "detectnetcore.h"
33
+#include "NetfxBundleExtension.h"
src/ext/NetFx/netcoresearch/netcoresearch.cpp
new
+158
@@ -0,0 +1,158 @@
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
+struct NETCORESEARCH_STATE
6
+{
7
+ LPCWSTR wzTargetName;
8
+ DWORD dwMajorVersion;
9
+ VERUTIL_VERSION* pVersion;
10
+};
11
+
12
+static HRESULT GetDotnetEnvironmentInfo(
13
+ __in DWORD dwMajorVersion,
14
+ __in_z LPCWSTR wzTargetName,
15
+ __inout VERUTIL_VERSION** ppVersion
16
+ );
17
+static void HOSTFXR_CALLTYPE GetDotnetEnvironmentInfoResult(
18
+ __in const hostfxr_dotnet_environment_info* pInfo,
19
+ __in LPVOID pvContext
20
+ );
21
+
22
+int __cdecl wmain(int argc, LPWSTR argv[])
23
+{
24
+ HRESULT hr = S_OK;
25
+ DWORD dwMajorVersion = 0;
26
+ VERUTIL_VERSION* pVersion = NULL;
27
+ LPSTR pszVersion = NULL;
28
+
29
+ ::SetConsoleCP(CP_UTF8);
30
+
31
+ ConsoleInitialize();
32
+
33
+ if (argc != 3)
34
+ {
35
+ ExitFunction1(hr = E_INVALIDARG);
36
+ }
37
+
38
+ hr = StrStringToUInt32(argv[1], 0, reinterpret_cast<UINT*>(&dwMajorVersion));
39
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get target version from: %ls", argv[1]);
40
+
41
+ hr = GetDotnetEnvironmentInfo(dwMajorVersion, argv[2], &pVersion);
42
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to search for .NET Core.");
43
+
44
+ if (pVersion)
45
+ {
46
+ hr = StrAnsiAllocString(&pszVersion, pVersion->sczVersion, 0, CP_UTF8);
47
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to convert version to UTF-8.");
48
+
49
+ ConsoleWrite(CONSOLE_COLOR_NORMAL, "%hs", pszVersion);
50
+ }
51
+
52
+LExit:
53
+ ReleaseStr(pszVersion);
54
+ ReleaseVerutilVersion(pVersion);
55
+ ConsoleUninitialize();
56
+ return hr;
57
+}
58
+
59
+static HRESULT GetDotnetEnvironmentInfo(
60
+ __in DWORD dwMajorVersion,
61
+ __in_z LPCWSTR wzTargetName,
62
+ __inout VERUTIL_VERSION** ppVersion
63
+ )
64
+{
65
+ HRESULT hr = S_OK;
66
+ LPWSTR sczProcessPath = NULL;
67
+ LPWSTR sczHostfxrPath = NULL;
68
+ HMODULE hModule = NULL;
69
+ hostfxr_get_dotnet_environment_info_fn pfnGetDotnetEnvironmentInfo = NULL;
70
+ NETCORESEARCH_STATE state = { };
71
+
72
+ state.dwMajorVersion = dwMajorVersion;
73
+ state.wzTargetName = wzTargetName;
74
+
75
+ hr = PathForCurrentProcess(&sczProcessPath, NULL);
76
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get process path.");
77
+
78
+ hr = PathGetDirectory(sczProcessPath, &sczHostfxrPath);
79
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get process directory.");
80
+
81
+ hr = StrAllocConcat(&sczHostfxrPath, L"hostfxr.dll", 0);
82
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to build hostfxr path.");
83
+
84
+ hModule = ::LoadLibraryExW(sczHostfxrPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
85
+ ConsoleExitOnNullWithLastError(hModule, hr, CONSOLE_COLOR_RED, "Failed to load hostfxr.");
86
+
87
+ pfnGetDotnetEnvironmentInfo = (hostfxr_get_dotnet_environment_info_fn)::GetProcAddress(hModule, "hostfxr_get_dotnet_environment_info");
88
+ ConsoleExitOnNullWithLastError(pfnGetDotnetEnvironmentInfo, hr, CONSOLE_COLOR_RED, "Failed to get address for hostfxr_get_dotnet_environment_info.");
89
+
90
+ hr = pfnGetDotnetEnvironmentInfo(NULL, NULL, GetDotnetEnvironmentInfoResult, &state);
91
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to get .NET Core environment info.");
92
+
93
+ if (state.pVersion)
94
+ {
95
+ *ppVersion = state.pVersion;
96
+ state.pVersion = NULL;
97
+ }
98
+
99
+LExit:
100
+ ReleaseVerutilVersion(state.pVersion);
101
+ ReleaseStr(sczHostfxrPath);
102
+ ReleaseStr(sczProcessPath);
103
+
104
+ if (hModule)
105
+ {
106
+ ::FreeLibrary(hModule);
107
+ }
108
+
109
+ return hr;
110
+}
111
+
112
+static void HOSTFXR_CALLTYPE GetDotnetEnvironmentInfoResult(
113
+ __in const hostfxr_dotnet_environment_info* pInfo,
114
+ __in LPVOID pvContext
115
+ )
116
+{
117
+ NETCORESEARCH_STATE* pState = reinterpret_cast<NETCORESEARCH_STATE*>(pvContext);
118
+ HRESULT hr = S_OK;
119
+ VERUTIL_VERSION* pFrameworkVersion = NULL;
120
+ int nCompare = 0;
121
+
122
+ for (size_t i = 0; i < pInfo->framework_count; ++i)
123
+ {
124
+ const hostfxr_dotnet_environment_framework_info* pFrameworkInfo = pInfo->frameworks + i;
125
+ ReleaseVerutilVersion(pFrameworkVersion);
126
+
127
+ if (CSTR_EQUAL != ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pState->wzTargetName, -1, pFrameworkInfo->name, -1))
128
+ {
129
+ continue;
130
+ }
131
+
132
+ hr = VerParseVersion(pFrameworkInfo->version, 0, FALSE, &pFrameworkVersion);
133
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to parse framework version: %ls", pFrameworkInfo->version);
134
+
135
+ if (pFrameworkVersion->dwMajor != pState->dwMajorVersion)
136
+ {
137
+ continue;
138
+ }
139
+
140
+ if (pState->pVersion)
141
+ {
142
+ hr = VerCompareParsedVersions(pState->pVersion, pFrameworkVersion, &nCompare);
143
+ ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to compare versions.");
144
+
145
+ if (nCompare > -1)
146
+ {
147
+ continue;
148
+ }
149
+ }
150
+
151
+ ReleaseVerutilVersion(pState->pVersion);
152
+ pState->pVersion = pFrameworkVersion;
153
+ pFrameworkVersion = NULL;
154
+ }
155
+
156
+LExit:
157
+ ReleaseVerutilVersion(pFrameworkVersion);
158
+}
src/ext/NetFx/netcoresearch/netcoresearch.h
new
+10
@@ -0,0 +1,10 @@
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
+// TODO: remove when definition is provided in hostfxr.h.
5
+typedef int32_t(HOSTFXR_CALLTYPE* hostfxr_get_dotnet_environment_info_fn)(
6
+ const char_t* dotnet_root,
7
+ void* reserved,
8
+ hostfxr_get_dotnet_environment_info_result_fn result,
9
+ void* result_context
10
+ );
src/ext/NetFx/netcoresearch/netcoresearch.vcxproj
new
+73
@@ -0,0 +1,73 @@
1
+<?xml version="1.0" encoding="utf-8"?>
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
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
4
+ <ItemGroup Label="ProjectConfigurations">
5
+ <ProjectConfiguration Include="Debug|ARM64">
6
+ <Configuration>Debug</Configuration>
7
+ <Platform>ARM64</Platform>
8
+ </ProjectConfiguration>
9
+ <ProjectConfiguration Include="Release|ARM64">
10
+ <Configuration>Release</Configuration>
11
+ <Platform>ARM64</Platform>
12
+ </ProjectConfiguration>
13
+ <ProjectConfiguration Include="Debug|Win32">
14
+ <Configuration>Debug</Configuration>
15
+ <Platform>Win32</Platform>
16
+ </ProjectConfiguration>
17
+ <ProjectConfiguration Include="Release|Win32">
18
+ <Configuration>Release</Configuration>
19
+ <Platform>Win32</Platform>
20
+ </ProjectConfiguration>
21
+ <ProjectConfiguration Include="Debug|x64">
22
+ <Configuration>Debug</Configuration>
23
+ <Platform>x64</Platform>
24
+ </ProjectConfiguration>
25
+ <ProjectConfiguration Include="Release|x64">
26
+ <Configuration>Release</Configuration>
27
+ <Platform>x64</Platform>
28
+ </ProjectConfiguration>
29
+ </ItemGroup>
30
+
31
+ <PropertyGroup Label="Globals">
32
+ <ProjectGuid>{A7FD9EF2-68CF-4C8E-AD81-3E8A6C7E1937}</ProjectGuid>
33
+ <ConfigurationType>Application</ConfigurationType>
34
+ <CharacterSet>Unicode</CharacterSet>
35
+ <ProjectSubSystem>Console</ProjectSubSystem>
36
+ <TargetName>netcoresearch</TargetName>
37
+ </PropertyGroup>
38
+
39
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
40
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
41
+
42
+ <PropertyGroup>
43
+ <NetHostPlatform>$(Platform)</NetHostPlatform>
44
+ <NetHostPlatform Condition=" '$(NetHostPlatform)'=='Win32' ">x86</NetHostPlatform>
45
+ <NetHostPath>..\..\..\..\packages\runtime.win-$(NetHostPlatform).Microsoft.NETCore.DotNetAppHost.6.0.4\runtimes\win-$(NetHostPlatform)\native\</NetHostPath>
46
+ <HostfxrPath>..\..\..\..\packages\runtime.win-$(NetHostPlatform).Microsoft.NETCore.DotNetHostResolver.6.0.4\runtimes\win-$(NetHostPlatform)\native\</HostfxrPath>
47
+ <ProjectAdditionalIncludeDirectories>$(NetHostPath)</ProjectAdditionalIncludeDirectories>
48
+ </PropertyGroup>
49
+
50
+ <ItemGroup>
51
+ <ClCompile Include="netcoresearch.cpp" />
52
+ <ClCompile Include="precomp.cpp">
53
+ <PrecompiledHeader>Create</PrecompiledHeader>
54
+ </ClCompile>
55
+ </ItemGroup>
56
+
57
+ <ItemGroup>
58
+ <ClInclude Include="netcoresearch.h" />
59
+ <ClInclude Include="precomp.h" />
60
+ </ItemGroup>
61
+
62
+ <ItemGroup>
63
+ <PackageReference Include="WixToolset.Dutil" />
64
+ <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
65
+ <PackageReference Include="GitInfo" PrivateAssets="All" />
66
+ </ItemGroup>
67
+
68
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
69
+
70
+ <Target Name="CopyHostfxr" AfterTargets="Build">
71
+ <Copy SourceFiles="$(HostfxrPath)hostfxr.dll" DestinationFolder="$(OutputPath)" />
72
+ </Target>
73
+</Project>
src/ext/NetFx/netcoresearch/packages.config
new
+9
@@ -0,0 +1,9 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<packages>
3
+ <package id="runtime.win-arm64.Microsoft.NETCore.DotNetAppHost" version="6.0.4" targetFramework="native" />
4
+ <package id="runtime.win-x64.Microsoft.NETCore.DotNetAppHost" version="6.0.4" targetFramework="native" />
5
+ <package id="runtime.win-x86.Microsoft.NETCore.DotNetAppHost" version="6.0.4" targetFramework="native" />
6
+ <package id="runtime.win-arm64.Microsoft.NETCore.DotNetHostResolver" version="6.0.4" targetFramework="native" />
7
+ <package id="runtime.win-x64.Microsoft.NETCore.DotNetHostResolver" version="6.0.4" targetFramework="native" />
8
+ <package id="runtime.win-x86.Microsoft.NETCore.DotNetHostResolver" version="6.0.4" targetFramework="native" />
9
+</packages>
\ No newline at end of file
src/ext/NetFx/netcoresearch/precomp.cpp
new
+3
@@ -0,0 +1,3 @@
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"
src/ext/NetFx/netcoresearch/precomp.h
new
+18
@@ -0,0 +1,18 @@
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
+#include <windows.h>
5
+#include <msiquery.h>
6
+#include <corerror.h>
7
+
8
+#include <dutil.h>
9
+#include <conutil.h>
10
+#include <memutil.h>
11
+#include <pathutil.h>
12
+#include <strutil.h>
13
+#include <verutil.h>
14
+#include <xmlutil.h>
15
+
16
+#include <hostfxr.h>
17
+
18
+#include "netcoresearch.h"
src/ext/NetFx/netfx.cmd
+6
-1
@@ -2,14 +2,19 @@
2
@pushd %~dp0
3
4
@set _C=Debug
5
+@set _L=%~dp0..\..\..\build\logs
6
:parse_args
7
@if /i "%1"=="release" set _C=Release
8
@if not "%1"=="" shift & goto parse_args
9
10
@echo NetFx.wixext build %_C%
11
12
+:: Restore
13
+nuget restore netcoresearch\packages.config || exit /b
14
+msbuild -t:Restore -p:Configuration=%_C% || exit /b
15
+
16
:: Build
12
-msbuild -Restore -p:Configuration=%_C% || exit /b
17
+msbuild -p:Configuration=%_C% -bl:%_L%\netfx_build.binlog || exit /b
18
19
:: Test
20
dotnet test -c %_C% --no-build test\WixToolsetTest.Netfx || exit /b
src/ext/NetFx/test/WixToolsetTest.Netfx/NetfxExtensionFixture.cs
+3
@@ -25,6 +25,8 @@ namespace WixToolsetTest.Netfx
25
{
26
"build",
27
Path.Combine(bundleSourceFolder, "BundleLatest.wxs"),
28
+ Path.Combine(bundleSourceFolder, "NetCore3.1.12_x86.wxs"),
29
+ Path.Combine(bundleSourceFolder, "NetCore3.1.12_x64.wxs"),
30
"-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"),
31
"-ext", TestData.Get(@"WixToolset.Netfx.wixext.dll"),
32
"-intermediateFolder", intermediateFolder,
@@ -50,6 +52,7 @@ namespace WixToolsetTest.Netfx
52
{
53
"build",
54
Path.Combine(bundleSourceFolder, "BundleLatest_x64.wxs"),
55
+ Path.Combine(bundleSourceFolder, "NetCore3.1.12_x64.wxs"),
56
"-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"),
57
"-ext", TestData.Get(@"WixToolset.Netfx.wixext.dll"),
58
"-intermediateFolder", intermediateFolder,
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs
+7
-4
@@ -1,12 +1,15 @@
1
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
2
<Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2">
3
<BootstrapperApplication>
4
<bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" />
5
</BootstrapperApplication>
6
<Chain>
7
- <PackageGroupRef Id="AspNetCoreRuntime31Redist_x86" />
8
- <PackageGroupRef Id="DesktopNetCoreRuntime31Redist_x86" />
9
- <PackageGroupRef Id="DotNetCoreRuntime31Redist_x86" />
7
+ <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x86" />
8
+ <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x86" />
9
+ <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x86" />
10
+ <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
11
+ <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
12
+ <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
13
</Chain>
14
</Bundle>
15
</Wix>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs
+4
-4
@@ -1,12 +1,12 @@
1
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
2
<Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2">
3
<BootstrapperApplication>
4
<bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" />
5
</BootstrapperApplication>
6
<Chain>
7
- <PackageGroupRef Id="AspNetCoreRuntime31Redist_x64" />
8
- <PackageGroupRef Id="DesktopNetCoreRuntime31Redist_x64" />
9
- <PackageGroupRef Id="DotNetCoreRuntime31Redist_x64" />
7
+ <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
8
+ <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
9
+ <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
10
</Chain>
11
</Bundle>
12
</Wix>
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3.1.12_x64.wxs
renamed
+8
-8
@@ -1,6 +1,6 @@
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. -->
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
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
3
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
4
5
<?define NetCorePlatform = x64?>
6
<?define NetCoreIdVersion = 3112?>
@@ -12,9 +12,9 @@
12
<?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/2fdc3009-cf5c-4cf6-8f3b-a61e83200cbb/2c71ee04b48103a7464f4e28a8bf339b/dotnet-runtime-3.1.12-win-x64.exe?>
13
14
<Fragment>
15
- <util:DirectorySearchRef Id="$(var.AspNetCoreId)" />
15
+ <netfx:DotNetCoreSearch Id="$(var.AspNetCoreId)" RuntimeType="aspnet" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.AspNetCoreId)" />
16
17
- <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
17
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
18
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
@@ -27,9 +27,9 @@
27
</Fragment>
28
29
<Fragment>
30
- <util:DirectorySearchRef Id="$(var.DesktopNetCoreId)" />
30
+ <netfx:DotNetCoreSearch Id="$(var.DesktopNetCoreId)" RuntimeType="desktop" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DesktopNetCoreId)" />
31
32
- <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
32
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
33
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
@@ -42,9 +42,9 @@
42
</Fragment>
43
44
<Fragment>
45
- <util:DirectorySearchRef Id="$(var.DotNetCoreId)" />
45
+ <netfx:DotNetCoreSearch Id="$(var.DotNetCoreId)" RuntimeType="core" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DotNetCoreId)" />
46
47
- <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
47
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
48
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3.1.12_x86.wxs
renamed
+8
-8
@@ -1,6 +1,6 @@
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. -->
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
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
3
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
4
5
<?define NetCorePlatform = x86?>
6
<?define NetCoreIdVersion = 3112?>
@@ -12,9 +12,9 @@
12
<?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/cbdd1603-7fa9-4957-8869-94e24963ba6c/ca0b7d1be494882d5a7433accfa3c94c/dotnet-runtime-3.1.12-win-x86.exe?>
13
14
<Fragment>
15
- <util:DirectorySearchRef Id="$(var.AspNetCoreId)" />
15
+ <netfx:DotNetCoreSearch Id="$(var.AspNetCoreId)" RuntimeType="aspnet" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.AspNetCoreId)" />
16
17
- <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
17
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
18
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
@@ -27,9 +27,9 @@
27
</Fragment>
28
29
<Fragment>
30
- <util:DirectorySearchRef Id="$(var.DesktopNetCoreId)" />
30
+ <netfx:DotNetCoreSearch Id="$(var.DesktopNetCoreId)" RuntimeType="desktop" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DesktopNetCoreId)" />
31
32
- <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
32
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
33
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
@@ -42,9 +42,9 @@
42
</Fragment>
43
44
<Fragment>
45
- <util:DirectorySearchRef Id="$(var.DotNetCoreId)" />
45
+ <netfx:DotNetCoreSearch Id="$(var.DotNetCoreId)" RuntimeType="core" Platform="$(var.NetCorePlatform)" MajorVersion="3" Variable="$(var.DotNetCoreId)" />
46
47
- <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
47
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId) >= v$(var.NetCoreVersion)" Overridable="yes" />
48
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/NetCore3_Platform.wxi
renamed
+10
-26
@@ -1,44 +1,28 @@
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. -->
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
4
<Include xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6
- <?define AspNetCoreId = ASPNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
6
+ <?define AspNetCoreId = ASPNETCORERUNTIME3_$(var.NetCorePlatform)?>
7
<?define AspNetCoreRedistId = AspNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
8
<?define AspNetCoreRedistLog = AspNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
9
- <?define AspNetCoreRedistInstallArguments = /install /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
10
- <?define AspNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
9
+ <?define AspNetCoreRedistInstallArguments = /install /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
10
+ <?define AspNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
11
12
- <?define DesktopNetCoreId = DESKTOPNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
12
+ <?define DesktopNetCoreId = DESKTOPNETCORERUNTIME3_$(var.NetCorePlatform)?>
13
<?define DesktopNetCoreRedistId = DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
14
<?define DesktopNetCoreRedistLog = DesktopNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
15
- <?define DesktopNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
16
- <?define DesktopNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
15
+ <?define DesktopNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
16
+ <?define DesktopNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
17
18
- <?define DotNetCoreId = DOTNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
18
+ <?define DotNetCoreId = DOTNETCORERUNTIME3_$(var.NetCorePlatform)?>
19
<?define DotNetCoreRedistId = DotNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
20
<?define DotNetCoreRedistLog = DotNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
21
- <?define DotNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
22
- <?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
21
+ <?define DotNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
22
+ <?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
23
24
- <?define DotNetHomeId = DOTNETHOME_$(var.NetCorePlatform)?>
24
<?define NetCoreEulaLink = https://go.microsoft.com/fwlink/?LinkId=329770?>
25
27
- <Fragment>
28
- <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
29
- <util:DirectorySearch Id="$(var.AspNetCoreId)" Variable="$(var.AspNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.AspNetCore.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
30
- </Fragment>
31
-
32
- <Fragment>
33
- <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
34
- <util:DirectorySearch Id="$(var.DesktopNetCoreId)" Variable="$(var.DesktopNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.WindowsDesktop.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
35
- </Fragment>
36
-
37
- <Fragment>
38
- <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
39
- <util:DirectorySearch Id="$(var.DotNetCoreId)" Variable="$(var.DotNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.NETCore.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
40
- </Fragment>
41
-
26
<Fragment>
27
<PackageGroup Id="$(var.AspNetCoreRedistId)AsPrereq">
28
<PackageGroupRef Id="$(var.AspNetCoreRedistId)" />
src/ext/NetFx/wixext/NetFxCompiler.cs
+166
@@ -39,6 +39,19 @@ namespace WixToolset.Netfx
39
this.ParseHelper.UnexpectedElement(parentElement, element);
40
break;
41
}
42
+ break;
43
+ case "Bundle":
44
+ case "Fragment":
45
+ switch (element.Name.LocalName)
46
+ {
47
+ case "DotNetCoreSearch":
48
+ this.ParseDotNetCoreSearchElement(intermediate, section, element);
49
+ break;
50
+ case "DotNetCoreSearchRef":
51
+ this.ParseDotNetCoreSearchRefElement(intermediate, section, element);
52
+ break;
53
+ }
54
+
55
break;
56
default:
57
this.ParseHelper.UnexpectedElement(parentElement, element);
@@ -46,6 +59,159 @@ namespace WixToolset.Netfx
59
}
60
}
61
62
+ private void ParseDotNetCoreSearchElement(Intermediate intermediate, IntermediateSection section, XElement element)
63
+ {
64
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
65
+ Identifier id = null;
66
+ string variable = null;
67
+ string condition = null;
68
+ string after = null;
69
+ NetCoreSearchRuntimeType? runtimeType = null;
70
+ NetCoreSearchPlatform? platform = null;
71
+ var majorVersion = CompilerConstants.IntegerNotSet;
72
+
73
+ foreach (var attrib in element.Attributes())
74
+ {
75
+ if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
76
+ {
77
+ switch (attrib.Name.LocalName)
78
+ {
79
+ case "Id":
80
+ id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
81
+ break;
82
+ case "Variable":
83
+ variable = this.ParseHelper.GetAttributeBundleVariableNameValue(sourceLineNumbers, attrib);
84
+ break;
85
+ case "Condition":
86
+ condition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
87
+ break;
88
+ case "After":
89
+ after = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
90
+ break;
91
+ case "RuntimeType":
92
+ var runtimeTypeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
93
+ switch (runtimeTypeValue)
94
+ {
95
+ case "aspnet":
96
+ runtimeType = NetCoreSearchRuntimeType.Aspnet;
97
+ break;
98
+ case "core":
99
+ runtimeType = NetCoreSearchRuntimeType.Core;
100
+ break;
101
+ case "desktop":
102
+ runtimeType = NetCoreSearchRuntimeType.Desktop;
103
+ break;
104
+ default:
105
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "RuntimeType", runtimeTypeValue, "aspnet", "core", "desktop"));
106
+ break;
107
+ }
108
+ break;
109
+ case "Platform":
110
+ var platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
111
+ switch (platformValue)
112
+ {
113
+ case "arm64":
114
+ platform = NetCoreSearchPlatform.Arm64;
115
+ break;
116
+ case "x64":
117
+ platform = NetCoreSearchPlatform.X64;
118
+ break;
119
+ case "x86":
120
+ platform = NetCoreSearchPlatform.X86;
121
+ break;
122
+ default:
123
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86"));
124
+ break;
125
+ }
126
+ break;
127
+ case "MajorVersion":
128
+ // .NET Core had a different deployment strategy before .NET Core 3.0 which would require different detection logic.
129
+ majorVersion = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 3, Int32.MaxValue);
130
+ break;
131
+ default:
132
+ this.ParseHelper.UnexpectedAttribute(element, attrib);
133
+ break;
134
+ }
135
+ }
136
+ else
137
+ {
138
+ this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
139
+ }
140
+ }
141
+
142
+ if (id == null)
143
+ {
144
+ id = this.ParseHelper.CreateIdentifier("dncs", variable, condition, after);
145
+ }
146
+
147
+ if (!runtimeType.HasValue)
148
+ {
149
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "RuntimeType"));
150
+ }
151
+
152
+ if (!platform.HasValue)
153
+ {
154
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform"));
155
+ }
156
+
157
+ if (majorVersion == CompilerConstants.IntegerNotSet)
158
+ {
159
+ this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "MajorVersion"));
160
+ }
161
+ else if (majorVersion == 4)
162
+ {
163
+ this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "MajorVersion", "4", "3", "5+"));
164
+ }
165
+
166
+ this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
167
+
168
+ var bundleExtensionId = this.ParseHelper.CreateIdentifierValueFromPlatform("Wix4NetfxBundleExtension", this.Context.Platform, BurnPlatforms.X86 | BurnPlatforms.X64 | BurnPlatforms.ARM64);
169
+ if (bundleExtensionId == null)
170
+ {
171
+ this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, this.Context.Platform.ToString(), element.Name.LocalName));
172
+ }
173
+
174
+ if (!this.Messaging.EncounteredError)
175
+ {
176
+ this.ParseHelper.CreateWixSearchSymbol(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, bundleExtensionId);
177
+
178
+ section.AddSymbol(new NetFxNetCoreSearchSymbol(sourceLineNumbers, id)
179
+ {
180
+ RuntimeType = runtimeType.Value,
181
+ Platform = platform.Value,
182
+ MajorVersion = majorVersion,
183
+ });
184
+ }
185
+ }
186
+
187
+ private void ParseDotNetCoreSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element)
188
+ {
189
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
190
+
191
+ foreach (var attrib in element.Attributes())
192
+ {
193
+ if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
194
+ {
195
+ switch (attrib.Name.LocalName)
196
+ {
197
+ case "Id":
198
+ var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
199
+ this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, NetfxSymbolDefinitions.NetFxNetCoreSearch, refId);
200
+ break;
201
+ default:
202
+ this.ParseHelper.UnexpectedAttribute(element, attrib);
203
+ break;
204
+ }
205
+ }
206
+ else
207
+ {
208
+ this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
209
+ }
210
+ }
211
+
212
+ this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
213
+ }
214
+
215
/// <summary>
216
/// Parses a NativeImage element.
217
/// </summary>
src/ext/NetFx/wixext/NetFxExtensionData.cs
+1
-2
@@ -4,7 +4,6 @@ namespace WixToolset.Netfx
4
{
5
using WixToolset.Data;
6
using WixToolset.Extensibility;
7
- using WixToolset.Netfx.Symbols;
7
8
/// <summary>
9
/// The WiX Toolset .NET Framework Extension.
@@ -13,7 +12,7 @@ namespace WixToolset.Netfx
12
{
13
public override bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
14
{
16
- symbolDefinition = (name == NetfxSymbolDefinitionNames.NetFxNativeImage) ? NetfxSymbolDefinitions.NetFxNativeImage : null;
15
+ symbolDefinition = NetfxSymbolDefinitions.ByName(name);
16
return symbolDefinition != null;
17
}
18
src/ext/NetFx/wixext/Symbols/NetFxNativeImageSymbol.cs
+22
-1
@@ -1,5 +1,26 @@
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 NetFxNativeImage = new IntermediateSymbolDefinition(
11
+ NetfxSymbolDefinitionType.NetFxNativeImage.ToString(),
12
+ new[]
13
+ {
14
+ new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.FileRef), IntermediateFieldType.String),
15
+ new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Priority), IntermediateFieldType.Number),
16
+ new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Attributes), IntermediateFieldType.Number),
17
+ new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationFileRef), IntermediateFieldType.String),
18
+ new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef), IntermediateFieldType.String),
19
+ },
20
+ typeof(NetFxNativeImageSymbol));
21
+ }
22
+}
23
+
24
namespace WixToolset.Netfx.Symbols
25
{
26
using WixToolset.Data;
@@ -55,4 +76,4 @@ namespace WixToolset.Netfx.Symbols
76
set => this.Set((int)NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef, value);
77
}
78
}
58
-}
\ No newline at end of file
79
+}
src/ext/NetFx/wixext/Symbols/NetFxNetCoreSearchSymbol.cs
new
+77
@@ -0,0 +1,77 @@
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 NetFxNetCoreSearch = new IntermediateSymbolDefinition(
11
+ NetfxSymbolDefinitionType.NetFxNetCoreSearch.ToString(),
12
+ new[]
13
+ {
14
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSearchSymbolFields.RuntimeType), IntermediateFieldType.Number),
15
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSearchSymbolFields.Platform), IntermediateFieldType.Number),
16
+ new IntermediateFieldDefinition(nameof(NetFxNetCoreSearchSymbolFields.MajorVersion), IntermediateFieldType.Number),
17
+ },
18
+ typeof(NetFxNetCoreSearchSymbol));
19
+ }
20
+}
21
+
22
+namespace WixToolset.Netfx.Symbols
23
+{
24
+ using WixToolset.Data;
25
+
26
+ public enum NetCoreSearchRuntimeType
27
+ {
28
+ Core,
29
+ Aspnet,
30
+ Desktop,
31
+ }
32
+
33
+ public enum NetCoreSearchPlatform
34
+ {
35
+ X86,
36
+ X64,
37
+ Arm64,
38
+ }
39
+
40
+ public enum NetFxNetCoreSearchSymbolFields
41
+ {
42
+ RuntimeType,
43
+ Platform,
44
+ MajorVersion,
45
+ }
46
+
47
+ public class NetFxNetCoreSearchSymbol : IntermediateSymbol
48
+ {
49
+ public NetFxNetCoreSearchSymbol() : base(NetfxSymbolDefinitions.NetFxNetCoreSearch, null, null)
50
+ {
51
+ }
52
+
53
+ public NetFxNetCoreSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(NetfxSymbolDefinitions.NetFxNetCoreSearch, sourceLineNumber, id)
54
+ {
55
+ }
56
+
57
+ public IntermediateField this[NetFxNetCoreSearchSymbolFields index] => this.Fields[(int)index];
58
+
59
+ public NetCoreSearchRuntimeType RuntimeType
60
+ {
61
+ get => (NetCoreSearchRuntimeType)this.Fields[(int)NetFxNetCoreSearchSymbolFields.RuntimeType].AsNumber();
62
+ set => this.Set((int)NetFxNetCoreSearchSymbolFields.RuntimeType, (int)value);
63
+ }
64
+
65
+ public NetCoreSearchPlatform Platform
66
+ {
67
+ get => (NetCoreSearchPlatform)this.Fields[(int)NetFxNetCoreSearchSymbolFields.Platform].AsNumber();
68
+ set => this.Set((int)NetFxNetCoreSearchSymbolFields.Platform, (int)value);
69
+ }
70
+
71
+ public int MajorVersion
72
+ {
73
+ get => this.Fields[(int)NetFxNetCoreSearchSymbolFields.MajorVersion].AsNumber();
74
+ set => this.Set((int)NetFxNetCoreSearchSymbolFields.MajorVersion, value);
75
+ }
76
+ }
77
+}
src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs
+35
-14
@@ -1,26 +1,47 @@
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.Symbols
3
+namespace WixToolset.Netfx
4
{
5
+ using System;
6
using WixToolset.Data;
7
+ using WixToolset.Data.Burn;
8
7
- public static class NetfxSymbolDefinitionNames
9
+ public enum NetfxSymbolDefinitionType
10
{
9
- public static string NetFxNativeImage { get; } = "NetFxNativeImage";
11
+ NetFxNativeImage,
12
+ NetFxNetCoreSearch,
13
}
14
12
- public static class NetfxSymbolDefinitions
15
+ public static partial class NetfxSymbolDefinitions
16
{
14
- public static readonly IntermediateSymbolDefinition NetFxNativeImage = new IntermediateSymbolDefinition(
15
- NetfxSymbolDefinitionNames.NetFxNativeImage,
16
- new[]
17
+ public static IntermediateSymbolDefinition ByName(string name)
18
+ {
19
+ if (!Enum.TryParse(name, out NetfxSymbolDefinitionType type))
20
{
18
- new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.FileRef), IntermediateFieldType.String),
19
- new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Priority), IntermediateFieldType.Number),
20
- new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Attributes), IntermediateFieldType.Number),
21
- new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationFileRef), IntermediateFieldType.String),
22
- new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef), IntermediateFieldType.String),
23
- },
24
- typeof(NetFxNativeImageSymbol));
21
+ return null;
22
+ }
23
+
24
+ return ByType(type);
25
+ }
26
+
27
+ public static IntermediateSymbolDefinition ByType(NetfxSymbolDefinitionType type)
28
+ {
29
+ switch (type)
30
+ {
31
+ case NetfxSymbolDefinitionType.NetFxNativeImage:
32
+ return NetfxSymbolDefinitions.NetFxNativeImage;
33
+
34
+ case NetfxSymbolDefinitionType.NetFxNetCoreSearch:
35
+ return NetfxSymbolDefinitions.NetFxNetCoreSearch;
36
+
37
+ default:
38
+ throw new ArgumentOutOfRangeException(nameof(type));
39
+ }
40
+ }
41
+
42
+ static NetfxSymbolDefinitions()
43
+ {
44
+ NetFxNetCoreSearch.AddTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag);
45
+ }
46
}
47
}
src/ext/NetFx/wixlib/NetCore3.1_x64.wxs
deleted
-22
@@ -1,22 +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
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
-
5
- <Fragment>
6
- <PackageGroup Id="AspNetCoreRuntime31Redist_x64">
7
- <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
8
- </PackageGroup>
9
- </Fragment>
10
-
11
- <Fragment>
12
- <PackageGroup Id="DesktopNetCoreRuntime31Redist_x64">
13
- <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
14
- </PackageGroup>
15
- </Fragment>
16
-
17
- <Fragment>
18
- <PackageGroup Id="DotNetCoreRuntime31Redist_x64">
19
- <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
20
- </PackageGroup>
21
- </Fragment>
22
-</Wix>
src/ext/NetFx/wixlib/NetCore3.1_x86.wxs
deleted
-22
@@ -1,22 +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
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
-
5
- <Fragment>
6
- <PackageGroup Id="AspNetCoreRuntime31Redist_x86">
7
- <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x86" />
8
- </PackageGroup>
9
- </Fragment>
10
-
11
- <Fragment>
12
- <PackageGroup Id="DesktopNetCoreRuntime31Redist_x86">
13
- <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x86" />
14
- </PackageGroup>
15
- </Fragment>
16
-
17
- <Fragment>
18
- <PackageGroup Id="DotNetCoreRuntime31Redist_x86">
19
- <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x86" />
20
- </PackageGroup>
21
- </Fragment>
22
-</Wix>
src/ext/NetFx/wixlib/NetCoreShared.wxs
+2
-2
@@ -1,8 +1,8 @@
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. -->
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
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5
- <?foreach PLATFORM in x86;x64?>
5
+ <?foreach PLATFORM in x86;x64;arm64?>
6
<Fragment>
7
<util:RegistrySearch Id="DOTNETHOME_$(var.PLATFORM)" Variable="DOTNETHOME_$(var.PLATFORM)" Root="HKLM" Key="SOFTWARE\dotnet\Setup\InstalledVersions\$(var.PLATFORM)" Value="InstallLocation" Result="value" Bitness="always32" />
8
</Fragment>
src/ext/NetFx/wixlib/NetfxBundleExtension_Platform.wxi
new
+15
@@ -0,0 +1,15 @@
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
+
4
+<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
+ <?include ..\..\caDecor.wxi ?>
6
+
7
+ <Fragment>
8
+ <BundleExtension Id="$(var.Prefix)NetfxBundleExtension$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))netfxbe.dll" Name="$(var.Prefix)NetfxBundleExtension$(var.Suffix)\netfxbe.dll">
9
+ <?foreach PLATFORM in x86;x64;arm64?>
10
+ <Payload SourceFile="!(bindpath.$(var.PLATFORM))netcoresearch.exe" Name="$(var.Prefix)NetfxBundleExtension$(var.Suffix)\$(var.PLATFORM)\netcoresearch.exe" />
11
+ <Payload SourceFile="!(bindpath.$(var.PLATFORM))hostfxr.dll" Name="$(var.Prefix)NetfxBundleExtension$(var.Suffix)\$(var.PLATFORM)\hostfxr.dll" />
12
+ <?endforeach?>
13
+ </BundleExtension>
14
+ </Fragment>
15
+</Include>
src/ext/NetFx/wixlib/NetfxBundleExtension_arm64.wxs
new
+7
@@ -0,0 +1,7 @@
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
+
4
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
+ <?define platform=arm64 ?>
6
+ <?include NetfxBundleExtension_Platform.wxi ?>
7
+</Wix>
src/ext/NetFx/wixlib/NetfxBundleExtension_x64.wxs
new
+7
@@ -0,0 +1,7 @@
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
+
4
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
+ <?define platform=x64 ?>
6
+ <?include NetfxBundleExtension_Platform.wxi ?>
7
+</Wix>
src/ext/NetFx/wixlib/NetfxBundleExtension_x86.wxs
new
+7
@@ -0,0 +1,7 @@
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
+
4
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
+ <?define platform=x86 ?>
6
+ <?include NetfxBundleExtension_Platform.wxi ?>
7
+</Wix>
src/ext/NetFx/wixlib/netfx.wixproj
+9
-3
@@ -14,9 +14,15 @@
14
</ItemGroup>
15
16
<ItemGroup>
17
- <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=ARM64" ReferenceOutputAssembly="false" />
18
- <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x86" ReferenceOutputAssembly="false" />
19
- <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x64" ReferenceOutputAssembly="false" />
17
+ <ProjectReference Include="..\be\netfxbe.vcxproj" Properties="Platform=ARM64" />
18
+ <ProjectReference Include="..\be\netfxbe.vcxproj" Properties="Platform=x64" />
19
+ <ProjectReference Include="..\be\netfxbe.vcxproj" Properties="Platform=x86" />
20
+ <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=ARM64" />
21
+ <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x86" />
22
+ <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x64" />
23
+ <ProjectReference Include="..\netcoresearch\netcoresearch.vcxproj" Properties="Platform=ARM64" />
24
+ <ProjectReference Include="..\netcoresearch\netcoresearch.vcxproj" Properties="Platform=x86" />
25
+ <ProjectReference Include="..\netcoresearch\netcoresearch.vcxproj" Properties="Platform=x64" />
26
</ItemGroup>
27
28
<ItemGroup>
src/ext/Util/be/UtilBundleExtension.cpp
+6
-6
@@ -28,16 +28,16 @@ public: //CBextBaseBundleExtension
28
IXMLDOMNode* pixnBundleExtension = NULL;
29
30
hr = __super::Initialize(pCreateArgs);
31
- ExitOnFailure(hr, "CBextBaseBundleExtension initialization failed.");
31
+ BextExitOnFailure(hr, "CBextBaseBundleExtension initialization failed.");
32
33
hr = XmlLoadDocumentFromFile(m_sczBundleExtensionDataPath, &pixdManifest);
34
- ExitOnFailure(hr, "Failed to load bundle extension manifest from path: %ls", m_sczBundleExtensionDataPath);
34
+ BextExitOnFailure(hr, "Failed to load bundle extension manifest from path: %ls", m_sczBundleExtensionDataPath);
35
36
hr = BextGetBundleExtensionDataNode(pixdManifest, UTIL_BUNDLE_EXTENSION_ID, &pixnBundleExtension);
37
- ExitOnFailure(hr, "Failed to get BundleExtension '%ls'", UTIL_BUNDLE_EXTENSION_ID);
37
+ BextExitOnFailure(hr, "Failed to get BundleExtension '%ls'", UTIL_BUNDLE_EXTENSION_ID);
38
39
hr = UtilSearchParseFromXml(&m_searches, pixnBundleExtension);
40
- ExitOnFailure(hr, "Failed to parse searches from bundle extension manifest.");
40
+ BextExitOnFailure(hr, "Failed to parse searches from bundle extension manifest.");
41
42
LExit:
43
ReleaseObject(pixnBundleExtension);
@@ -73,10 +73,10 @@ HRESULT UtilBundleExtensionCreate(
73
CWixUtilBundleExtension* pExtension = NULL;
74
75
pExtension = new CWixUtilBundleExtension(pEngine);
76
- ExitOnNull(pExtension, hr, E_OUTOFMEMORY, "Failed to create new CWixUtilBundleExtension.");
76
+ BextExitOnNull(pExtension, hr, E_OUTOFMEMORY, "Failed to create new CWixUtilBundleExtension.");
77
78
hr = pExtension->Initialize(pArgs);
79
- ExitOnFailure(hr, "CWixUtilBundleExtension initialization failed.");
79
+ BextExitOnFailure(hr, "CWixUtilBundleExtension initialization failed.");
80
81
*ppBundleExtension = pExtension;
82
pExtension = NULL;
src/ext/Util/be/detectsha2support.cpp
+4
-4
@@ -13,7 +13,7 @@ HRESULT DetectSHA2CodeSigning(
13
DWORD er = ERROR_SUCCESS;
14
15
hr = LoadSystemLibrary(L"wintrust.dll", &hModule);
16
- ExitOnFailure(hr, "Failed to load wintrust.dll");
16
+ BextExitOnFailure(hr, "Failed to load wintrust.dll");
17
18
pfn = ::GetProcAddress(hModule, "CryptCATAdminAcquireContext2");
19
if (pfn)
@@ -30,7 +30,7 @@ HRESULT DetectSHA2CodeSigning(
30
}
31
32
hr = HRESULT_FROM_WIN32(er);
33
- ExitOnFailure(hr, "Failed to probe for CryptCATAdminAcquireContext2 in wintrust.dll");
33
+ BextExitOnFailure(hr, "Failed to probe for CryptCATAdminAcquireContext2 in wintrust.dll");
34
35
LExit:
36
::FreeLibrary(hModule);
@@ -48,10 +48,10 @@ HRESULT UtilPerformDetectSHA2CodeSigning(
48
BOOL fSupported = FALSE;
49
50
hr = DetectSHA2CodeSigning(&fSupported);
51
- ExitOnFailure(hr, "DetectSHA2CodeSigning failed.");
51
+ BextExitOnFailure(hr, "DetectSHA2CodeSigning failed.");
52
53
hr = pEngine->SetVariableNumeric(wzVariable, fSupported ? 1 : 0);
54
- ExitOnFailure(hr, "Failed to set variable '%ls'", wzVariable);
54
+ BextExitOnFailure(hr, "Failed to set variable '%ls'", wzVariable);
55
56
LExit:
57
return hr;
src/ext/Util/be/precomp.h
+1
-1
@@ -31,7 +31,7 @@
31
#include <bextutil.h>
32
#include <BextBundleExtensionEngine.h>
33
34
-#include "beDecor.h"
34
+#include "..\..\beDecor.h"
35
#include "utilsearch.h"
36
#include "detectsha2support.h"
37
#include "UtilBundleExtension.h"
src/ext/Util/be/utilbe.vcxproj
-1
@@ -56,7 +56,6 @@
56
</ItemGroup>
57
58
<ItemGroup>
59
- <ClInclude Include="beDecor.h" />
59
<ClInclude Include="detectsha2support.h" />
60
<ClInclude Include="precomp.h" />
61
<ClInclude Include="UtilBundleExtension.h" />
src/ext/Util/be/utilsearch.cpp
+9
-11
@@ -17,11 +17,11 @@ STDMETHODIMP UtilSearchParseFromXml(
17
18
// Select Util search nodes.
19
hr = XmlSelectNodes(pixnBundleExtension, L"WixWindowsFeatureSearch", &pixnNodes);
20
- ExitOnFailure(hr, "Failed to select Util search nodes.");
20
+ BextExitOnFailure(hr, "Failed to select Util search nodes.");
21
22
// Get Util search node count.
23
hr = pixnNodes->get_length((long*)&cNodes);
24
- ExitOnFailure(hr, "Failed to get Util search node count.");
24
+ BextExitOnFailure(hr, "Failed to get Util search node count.");
25
26
if (!cNodes)
27
{
@@ -30,7 +30,7 @@ STDMETHODIMP UtilSearchParseFromXml(
30
31
// Allocate memory for searches.
32
pSearches->rgSearches = (UTIL_SEARCH*)MemAlloc(sizeof(UTIL_SEARCH) * cNodes, TRUE);
33
- ExitOnNull(pSearches->rgSearches, hr, E_OUTOFMEMORY, "Failed to allocate memory for search structs.");
33
+ BextExitOnNull(pSearches->rgSearches, hr, E_OUTOFMEMORY, "Failed to allocate memory for search structs.");
34
35
pSearches->cSearches = cNodes;
36
@@ -40,11 +40,11 @@ STDMETHODIMP UtilSearchParseFromXml(
40
UTIL_SEARCH* pSearch = &pSearches->rgSearches[i];
41
42
hr = XmlNextElement(pixnNodes, &pixnNode, &bstrNodeName);
43
- ExitOnFailure(hr, "Failed to get next node.");
43
+ BextExitOnFailure(hr, "Failed to get next node.");
44
45
// @Id
46
hr = XmlGetAttributeEx(pixnNode, L"Id", &pSearch->sczId);
47
- ExitOnFailure(hr, "Failed to get @Id.");
47
+ BextExitOnFailure(hr, "Failed to get @Id.");
48
49
// Read type specific attributes.
50
if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"WixWindowsFeatureSearch", -1))
@@ -53,7 +53,7 @@ STDMETHODIMP UtilSearchParseFromXml(
53
54
// @Type
55
hr = XmlGetAttributeEx(pixnNode, L"Type", &scz);
56
- ExitOnFailure(hr, "Failed to get @Type.");
56
+ BextExitOnFailure(hr, "Failed to get @Type.");
57
58
if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"sha2CodeSigning", -1))
59
{
@@ -61,14 +61,12 @@ STDMETHODIMP UtilSearchParseFromXml(
61
}
62
else
63
{
64
- hr = E_INVALIDARG;
65
- ExitOnFailure(hr, "Invalid value for @Type: %ls", scz);
64
+ BextExitWithRootFailure(hr, E_INVALIDARG, "Invalid value for @Type: %ls", scz);
65
}
66
}
67
else
68
{
70
- hr = E_UNEXPECTED;
71
- ExitOnFailure(hr, "Unexpected element name: %ls", bstrNodeName);
69
+ BextExitWithRootFailure(hr, E_UNEXPECTED, "Unexpected element name: %ls", bstrNodeName);
70
}
71
72
// prepare next iteration
@@ -112,7 +110,7 @@ STDMETHODIMP UtilSearchExecute(
110
UTIL_SEARCH* pSearch = NULL;
111
112
hr = UtilSearchFindById(pSearches, wzSearchId, &pSearch);
115
- ExitOnFailure(hr, "Search id '%ls' is unknown to the util extension.");
113
+ BextExitOnFailure(hr, "Search id '%ls' is unknown to the util extension.", wzSearchId);
114
115
switch (pSearch->Type)
116
{
src/ext/Util/wixext/Symbols/UtilSymbolDefinitions.cs
-2
@@ -33,8 +33,6 @@ namespace WixToolset.Util
33
34
public static partial class UtilSymbolDefinitions
35
{
36
- public static readonly Version Version = new Version("4.0.0");
37
-
36
public static IntermediateSymbolDefinition ByName(string name)
37
{
38
if (!Enum.TryParse(name, out UtilSymbolDefinitionType type))
src/ext/beDecor.h
renamed
src/libs/dutil/WixToolset.DUtil/inc/procutil.h
+2
-1
@@ -62,6 +62,7 @@ HRESULT DAPI ProcExec(
62
__out HANDLE *phProcess
63
);
64
HRESULT DAPI ProcExecute(
65
+ __in_z_opt LPCWSTR wzApplicationName,
66
__in_z LPWSTR wzCommand,
67
__out HANDLE *phProcess,
68
__out_opt HANDLE *phChildStdIn,
@@ -73,7 +74,7 @@ HRESULT DAPI ProcWaitForCompletion(
74
__out_opt DWORD* pdwReturnCode
75
);
76
HRESULT DAPI ProcWaitForIds(
76
- __in_ecount(cProcessIds) const DWORD* pdwProcessIds,
77
+ __in_ecount(cProcessIds) const DWORD rgdwProcessIds[],
78
__in DWORD cProcessIds,
79
__in DWORD dwMilliseconds
80
);
src/libs/dutil/WixToolset.DUtil/procutil.cpp
+2
-1
@@ -375,6 +375,7 @@ LExit:
375
376
*******************************************************************/
377
extern "C" HRESULT DAPI ProcExecute(
378
+ __in_z_opt LPCWSTR wzApplicationName,
379
__in_z LPWSTR wzCommand,
380
__out HANDLE *phProcess,
381
__out_opt HANDLE *phChildStdIn,
@@ -405,7 +406,7 @@ extern "C" HRESULT DAPI ProcExecute(
406
407
#pragma prefast(push)
408
#pragma prefast(disable:25028)
408
- if (::CreateProcessW(NULL,
409
+ if (::CreateProcessW(wzApplicationName,
410
wzCommand, // command line
411
NULL, // security info
412
NULL, // thread info
src/test/burn/TestData/TestBA/TestBAWixlib/NetCore6.0.9_x86.wxs
new
+58
@@ -0,0 +1,58 @@
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
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
4
+
5
+ <?define NetCorePlatform = x86?>
6
+ <?define NetCoreIdVersion = 609?>
7
+ <?define NetCoreVersion = 6.0.9?>
8
+ <?include NetCore6_Platform.wxi?>
9
+
10
+ <?define AspNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/8f583028-b802-4661-b8dd-47139b0561ce/3c0cd3bdc6051759ccae40f78982c86e/aspnetcore-runtime-6.0.9-win-x86.exe?>
11
+ <?define DesktopNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/925f9407-2767-4341-857a-43cdfad71e17/0b84db913bdbb1dcf02db937a3cd3f63/windowsdesktop-runtime-6.0.9-win-x86.exe?>
12
+ <?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/6020f3fc-5cf8-4e25-bc7f-dcf8744137ac/4cb5ced4e015e426fddc554b130c3052/dotnet-runtime-6.0.9-win-x86.exe?>
13
+
14
+ <Fragment>
15
+ <netfx:DotNetCoreSearch Id="$(var.AspNetCoreId)" RuntimeType="aspnet" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.AspNetCoreId)" />
16
+
17
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
18
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
+
22
+ <PackageGroup Id="$(var.AspNetCoreRedistId)">
23
+ <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
+ <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 6.0.9 - Shared Framework (x86)" Description="Microsoft ASP.NET Core 6.0.9 - Shared Framework (x86)" Hash="493D9A5388A0E6BEF4FED091465B58A5CC6D9C148478E5A9822D76ECA61395CFFA93EBADAEC78C9F7E1DA5CCECC00881BAF10B757CA9C4EB9D475FB8EDE7FC53" Size="8255248" Version="6.0.9.22419" />
25
+ </ExePackage>
26
+ </PackageGroup>
27
+ </Fragment>
28
+
29
+ <Fragment>
30
+ <netfx:DotNetCoreSearch Id="$(var.DesktopNetCoreId)" RuntimeType="desktop" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DesktopNetCoreId)" />
31
+
32
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
33
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
+
37
+ <PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38
+ <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
+ <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 6.0.9 (x86)" Description="Microsoft Windows Desktop Runtime - 6.0.9 (x86)" Hash="6B45A936A15710E22A03C64AD4F37EE4A934D957D31E78F73533099109BBEECDB8EAB7EC0749C2ECBCF90B72C9D6C7462252885F7C502F68E636167CACBA3DE0" Size="52443656" Version="6.0.9.31620" />
40
+ </ExePackage>
41
+ </PackageGroup>
42
+ </Fragment>
43
+
44
+ <Fragment>
45
+ <netfx:DotNetCoreSearch Id="$(var.DotNetCoreId)" RuntimeType="core" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DotNetCoreId)" />
46
+
47
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
48
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
+
52
+ <PackageGroup Id="$(var.DotNetCoreRedistId)">
53
+ <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
+ <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Runtime - 6.0.9 (x86)" Description="Microsoft .NET Runtime - 6.0.9 (x86)" Hash="4A5EE2E0297140FB4B6064540CBB9D520C1B3BEF474F8342DFC5AAED0FD85B7FE26C49F85D17686E85540D421DA57EB2AE4D2B402C5184A6EF2EADED33B097A9" Size="25803488" Version="6.0.9.31619" />
55
+ </ExePackage>
56
+ </PackageGroup>
57
+ </Fragment>
58
+</Wix>
src/test/burn/TestData/TestBA/TestBAWixlib/NetCore6_Platform.wxi
new
+49
@@ -0,0 +1,49 @@
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
+
4
+<Include xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
+
6
+ <?define AspNetCoreId = ASPNETCORERUNTIME6_$(var.NetCorePlatform)?>
7
+ <?define AspNetCoreRedistId = AspNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
8
+ <?define AspNetCoreRedistLog = AspNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
9
+ <?define AspNetCoreRedistInstallArguments = /install /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
10
+ <?define AspNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.AspNetCoreRedistLog)]"?>
11
+
12
+ <?define DesktopNetCoreId = DESKTOPNETCORERUNTIME6_$(var.NetCorePlatform)?>
13
+ <?define DesktopNetCoreRedistId = DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
14
+ <?define DesktopNetCoreRedistLog = DesktopNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
15
+ <?define DesktopNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
16
+ <?define DesktopNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DesktopNetCoreRedistLog)]"?>
17
+
18
+ <?define DotNetCoreId = DOTNETCORERUNTIME6_$(var.NetCorePlatform)?>
19
+ <?define DotNetCoreRedistId = DotNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
20
+ <?define DotNetCoreRedistLog = DotNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
21
+ <?define DotNetCoreRedistInstallArguments = /install /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
22
+ <?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /log "[$(var.DotNetCoreRedistLog)]"?>
23
+
24
+ <?define NetCoreEulaLink = https://go.microsoft.com/fwlink/?LinkId=329770?>
25
+
26
+ <Fragment>
27
+ <PackageGroup Id="$(var.AspNetCoreRedistId)AsPrereq">
28
+ <PackageGroupRef Id="$(var.AspNetCoreRedistId)" />
29
+ </PackageGroup>
30
+
31
+ <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.AspNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
32
+ </Fragment>
33
+
34
+ <Fragment>
35
+ <PackageGroup Id="$(var.DesktopNetCoreRedistId)AsPrereq">
36
+ <PackageGroupRef Id="$(var.DesktopNetCoreRedistId)" />
37
+ </PackageGroup>
38
+
39
+ <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.DesktopNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
40
+ </Fragment>
41
+
42
+ <Fragment>
43
+ <PackageGroup Id="$(var.DotNetCoreRedistId)AsPrereq">
44
+ <PackageGroupRef Id="$(var.DotNetCoreRedistId)" />
45
+ </PackageGroup>
46
+
47
+ <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.DotNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
48
+ </Fragment>
49
+</Include>
src/test/burn/TestData/TestBA/TestBAWixlib/TestBA.wxs
+1
-1
@@ -11,7 +11,7 @@
11
</BootstrapperApplication>
12
13
<PackageGroup Id="TestBAdnc">
14
- <PackageGroupRef Id="NetFx48WebAsPrereq" /> <!-- Yes, this is wrong but we don't have .NET 6 packages yet -->
14
+ <PackageGroupRef Id="DesktopNetCoreRuntime609Redist_x86AsPrereq" />
15
</PackageGroup>
16
</Fragment>
17
<Fragment>
src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj
+1
@@ -17,5 +17,6 @@
17
</ItemGroup>
18
<ItemGroup>
19
<PackageReference Include="WixToolset.Bal.wixext" />
20
+ <PackageReference Include="WixToolset.Netfx.wixext" />
21
</ItemGroup>
22
</Project>
\ No newline at end of file
src/test/burn/TestData/TestBA/TestBAWixlib_x64/NetCore6.0.9_x64.wxs
new
+58
@@ -0,0 +1,58 @@
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
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
4
+
5
+ <?define NetCorePlatform = x64?>
6
+ <?define NetCoreIdVersion = 609?>
7
+ <?define NetCoreVersion = 6.0.9?>
8
+ <?include ..\TestBAWixlib\NetCore6_Platform.wxi?>
9
+
10
+ <?define AspNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/98dbe241-8b77-4be0-b130-a5fb6af8d724/27b655adce6250da42be9440abe847a2/aspnetcore-runtime-6.0.9-win-x64.exe?>
11
+ <?define DesktopNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/fe8415d4-8a35-4af9-80a5-51306a96282d/05f9b2a1b4884238e69468e49b3a5453/windowsdesktop-runtime-6.0.9-win-x64.exe?>
12
+ <?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/9dc77a6b-0276-4ad5-9bfa-d84b546686ef/f01bbcf2dc0e7f5dbd0a7d337fd4cd43/dotnet-runtime-6.0.9-win-x64.exe?>
13
+
14
+ <Fragment>
15
+ <netfx:DotNetCoreSearch Id="$(var.AspNetCoreId)" RuntimeType="aspnet" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.AspNetCoreId)" />
16
+
17
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
18
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20
+ <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
+
22
+ <PackageGroup Id="$(var.AspNetCoreRedistId)">
23
+ <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
+ <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 6.0.9 - Shared Framework (x64)" Description="Microsoft ASP.NET Core 6.0.9 - Shared Framework (x64)" Hash="E3FAE121878E5D98F49AEAA0A20B03ECE760FCF75429256B7AF13B78608EEAA2D2485578ED952A410CC590008023E62584233BAD0E34E9FA632D445BCE7FA1F5" Size="9010072" Version="6.0.9.22419" />
25
+ </ExePackage>
26
+ </PackageGroup>
27
+ </Fragment>
28
+
29
+ <Fragment>
30
+ <netfx:DotNetCoreSearch Id="$(var.DesktopNetCoreId)" RuntimeType="desktop" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DesktopNetCoreId)" />
31
+
32
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
33
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35
+ <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
+
37
+ <PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38
+ <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
+ <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 6.0.9 (x64)" Description="Microsoft Windows Desktop Runtime - 6.0.9 (x64)" Hash="28CC3D88E6FA54938177937118260E9129967246E30D2140FDB7A4A8E9E393EFEC689D6282EDB6982853FD3BA27701239A8D1EE81A2DD28C93B186F1A3CB1B55" Size="57328120" Version="6.0.9.31620" />
40
+ </ExePackage>
41
+ </PackageGroup>
42
+ </Fragment>
43
+
44
+ <Fragment>
45
+ <netfx:DotNetCoreSearch Id="$(var.DotNetCoreId)" RuntimeType="core" Platform="$(var.NetCorePlatform)" MajorVersion="6" Variable="$(var.DotNetCoreId)" />
46
+
47
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
48
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50
+ <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
+
52
+ <PackageGroup Id="$(var.DotNetCoreRedistId)">
53
+ <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
+ <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Runtime - 6.0.9 (x64)" Description="Microsoft .NET Runtime - 6.0.9 (x64)" Hash="5F4A73342B3563937F2EFB576AA101C29C0AD4908413BA87C415A733239B9AF196FF04778F2E8BF5845508B069812C13CA281EA5E912552AAB5227E7841E502D" Size="27912624" Version="6.0.9.31619" />
55
+ </ExePackage>
56
+ </PackageGroup>
57
+ </Fragment>
58
+</Wix>
src/test/burn/TestData/TestBA/TestBAWixlib_x64/TestBA_x64.wxs
+1
-1
@@ -11,7 +11,7 @@
11
</BootstrapperApplication>
12
13
<PackageGroup Id="TestBAdnc_x64">
14
- <PackageGroupRef Id="NetFx48WebAsPrereq" /> <!-- Yes, this is wrong but we don't have .NET 6 packages yet -->
14
+ <PackageGroupRef Id="DesktopNetCoreRuntime609Redist_x64AsPrereq" />
15
</PackageGroup>
16
</Fragment>
17
<Fragment>
src/test/burn/TestData/TestBA/TestBAWixlib_x64/WixBA_x64.wxs
+1
-1
@@ -12,7 +12,7 @@
12
</BootstrapperApplication>
13
14
<PackageGroup Id="WixBAdnc_x64">
15
- <PackageGroupRef Id="NetFx48WebAsPrereq" /> <!-- Yes, this is wrong but we don't have .NET 6 packages yet -->
15
+ <PackageGroupRef Id="DesktopNetCoreRuntime609Redist_x64AsPrereq" />
16
</PackageGroup>
17
</Fragment>
18
</Wix>
src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj
+1
@@ -29,5 +29,6 @@
29
</ItemGroup>
30
<ItemGroup>
31
<PackageReference Include="WixToolset.Bal.wixext" />
32
+ <PackageReference Include="WixToolset.Netfx.wixext" />
33
</ItemGroup>
34
</Project>
\ No newline at end of file