aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-04-19 17:15:05 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-04-19 18:35:15 -0500
commit57fd164d56466a52854e825afd5fdc2b6b97f12a (patch)
tree7d4ace6d7a55c2a50302e3b6866456026a2c6222
parent6435d26c7e2ce54ec38d0cc9eb4d2cb10e9614e0 (diff)
downloadwix-57fd164d56466a52854e825afd5fdc2b6b97f12a.tar.gz
wix-57fd164d56466a52854e825afd5fdc2b6b97f12a.tar.bz2
wix-57fd164d56466a52854e825afd5fdc2b6b97f12a.zip
Replace Dnc.Host with Dnc.HostGenerator to support linker trimming.
-rw-r--r--src/clean.cmd1
-rw-r--r--src/ext/Bal/Bal.wixext.sln52
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/BootstrapperApplicationFactory.cs89
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/DnchostAssemblyLoadContext.cs58
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/Exceptions.cs145
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/IBootstrapperApplicationFactory.cs16
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/NativeMethods.cs18
-rw-r--r--src/ext/Bal/WixToolset.Dnc.Host/WixToolset.Dnc.Host.csproj39
-rw-r--r--src/ext/Bal/WixToolset.Dnc.HostGenerator/DncHostGenerator.cs127
-rw-r--r--src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.csproj27
-rw-r--r--src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.nuspec23
-rw-r--r--src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.props10
-rw-r--r--src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.targets11
-rw-r--r--src/ext/Bal/bal.cmd7
-rw-r--r--src/ext/Bal/dnchost/dnchost.cpp5
-rw-r--r--src/ext/Bal/dnchost/dnchost.h1
-rw-r--r--src/ext/Bal/dnchost/dnchost.vcxproj8
-rw-r--r--src/ext/Bal/dnchost/dncutil.cpp42
-rw-r--r--src/ext/Bal/dnchost/dncutil.h5
-rw-r--r--src/ext/Bal/dnchost/precomp.h1
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/CSharpSourceGeneratorVerifier.cs45
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/DncHostGeneratorTests.cs88
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/WixToolsetTest.Dnc.HostGenerator.csproj27
-rw-r--r--src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs153
-rw-r--r--src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs66
-rw-r--r--src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs3
-rw-r--r--src/ext/Bal/test/examples/Directory.Build.props3
-rw-r--r--src/ext/Bal/test/examples/Directory.Build.targets3
-rw-r--r--src/ext/Bal/test/examples/Directory.csproj.props5
-rw-r--r--src/ext/Bal/test/examples/Directory.wixproj.props (renamed from src/ext/Bal/test/examples/Wix.Build.props)0
-rw-r--r--src/ext/Bal/test/examples/Directory.wixproj.targets (renamed from src/ext/Bal/test/examples/Wix.Build.targets)0
-rw-r--r--src/ext/Bal/test/examples/DncBA.targets19
-rw-r--r--src/ext/Bal/test/examples/EarliestCoreMBA/Example.EarliestCoreMBA.csproj10
-rw-r--r--src/ext/Bal/test/examples/LatestCoreMBA/Example.LatestCoreMBA.csproj13
-rw-r--r--src/ext/Bal/test/examples/WPFCoreMBA/Example.WPFCoreMBA.csproj16
-rw-r--r--src/ext/Bal/test/examples/examples.proj7
-rw-r--r--src/ext/Bal/wixext/WixToolset.Bal.wixext.nuspec2
-rw-r--r--src/ext/Bal/wixlib/BalExtension_platform.wxi1
-rw-r--r--src/ext/Bal/wixlib/Dnc.wxs5
-rw-r--r--src/internal/SetBuildNumber/Directory.Packages.props.pp5
-rw-r--r--src/test/burn/TestBA/TestBA.csproj4
-rw-r--r--src/test/burn/TestBA/TestBA_x64.csproj4
-rw-r--r--src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj2
-rw-r--r--src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj2
-rw-r--r--src/test/burn/WixToolset.WixBA/WixToolset.WixBA.csproj10
-rw-r--r--src/test/burn/WixToolset.WixBA/WixToolset.WixBA_x64.csproj10
-rw-r--r--src/testresultfilelist.txt1
-rw-r--r--src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj2
48 files changed, 626 insertions, 565 deletions
diff --git a/src/clean.cmd b/src/clean.cmd
index 5bedadbd..bd44bed4 100644
--- a/src/clean.cmd
+++ b/src/clean.cmd
@@ -27,6 +27,7 @@ if exist "%_NUGET_CACHE%\wixtoolset.core.testpackage" rd /s/q "%_NUGET_CACHE%\wi
27if exist "%_NUGET_CACHE%\wixtoolset.core.windowsinstaller" rd /s/q "%_NUGET_CACHE%\wixtoolset.core.windowsinstaller" 27if exist "%_NUGET_CACHE%\wixtoolset.core.windowsinstaller" rd /s/q "%_NUGET_CACHE%\wixtoolset.core.windowsinstaller"
28if exist "%_NUGET_CACHE%\wixtoolset.data" rd /s/q "%_NUGET_CACHE%\wixtoolset.data" 28if exist "%_NUGET_CACHE%\wixtoolset.data" rd /s/q "%_NUGET_CACHE%\wixtoolset.data"
29if exist "%_NUGET_CACHE%\wixtoolset.dependency.wixext" rd /s/q "%_NUGET_CACHE%\wixtoolset.dependency.wixext" 29if exist "%_NUGET_CACHE%\wixtoolset.dependency.wixext" rd /s/q "%_NUGET_CACHE%\wixtoolset.dependency.wixext"
30if exist "%_NUGET_CACHE%\wixtoolset.dnc.hostgenerator" rd /s/q "%_NUGET_CACHE%\wixtoolset.dnc.hostgenerator"
30if exist "%_NUGET_CACHE%\wixtoolset.dtf.compression" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.compression" 31if exist "%_NUGET_CACHE%\wixtoolset.dtf.compression" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.compression"
31if exist "%_NUGET_CACHE%\wixtoolset.dtf.compression.cab" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.compression.cab" 32if exist "%_NUGET_CACHE%\wixtoolset.dtf.compression.cab" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.compression.cab"
32if exist "%_NUGET_CACHE%\wixtoolset.dtf.customaction" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.customaction" 33if exist "%_NUGET_CACHE%\wixtoolset.dtf.customaction" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.customaction"
diff --git a/src/ext/Bal/Bal.wixext.sln b/src/ext/Bal/Bal.wixext.sln
index ee14dd97..dbb70a82 100644
--- a/src/ext/Bal/Bal.wixext.sln
+++ b/src/ext/Bal/Bal.wixext.sln
@@ -15,7 +15,7 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "bal", "wixlib\bal.wixproj",
15EndProject 15EndProject
16Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Bal.wixext", "wixext\WixToolset.Bal.wixext.csproj", "{BF720A63-9D7B-456E-B60C-8122852D9FED}" 16Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Bal.wixext", "wixext\WixToolset.Bal.wixext.csproj", "{BF720A63-9D7B-456E-B60C-8122852D9FED}"
17EndProject 17EndProject
18Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Dnc.Host", "WixToolset.Dnc.Host\WixToolset.Dnc.Host.csproj", "{0D780900-C2FF-4FA2-8CB5-8A19768724C5}" 18Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Dnc.HostGenerator", "WixToolset.Dnc.HostGenerator\WixToolset.Dnc.HostGenerator.csproj", "{D6A58B36-D47E-4020-A130-58B0CEAF01A2}"
19EndProject 19EndProject
20Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Mba.Host", "WixToolset.Mba.Host\WixToolset.Mba.Host.csproj", "{F2BA1935-70FA-4156-B161-FD03850B4FAA}" 20Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Mba.Host", "WixToolset.Mba.Host\WixToolset.Mba.Host.csproj", "{F2BA1935-70FA-4156-B161-FD03850B4FAA}"
21EndProject 21EndProject
@@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.FullFramework2MBA",
23EndProject 23EndProject
24Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Example.TestEngine", "test\examples\TestEngine\Example.TestEngine.vcxproj", "{3D44B67D-A475-49BA-8310-E39F6C117CC9}" 24Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Example.TestEngine", "test\examples\TestEngine\Example.TestEngine.vcxproj", "{3D44B67D-A475-49BA-8310-E39F6C117CC9}"
25EndProject 25EndProject
26Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Dnc.HostGenerator", "test\WixToolsetTest.Dnc.HostGenerator\WixToolsetTest.Dnc.HostGenerator.csproj", "{38D80FC7-EBD4-4902-A114-C93AA75CFCA0}"
27EndProject
26Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.ManagedHost", "test\WixToolsetTest.ManagedHost\WixToolsetTest.ManagedHost.csproj", "{FED9D707-E5C3-4867-87B0-FABDB5EB0823}" 28Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.ManagedHost", "test\WixToolsetTest.ManagedHost\WixToolsetTest.ManagedHost.csproj", "{FED9D707-E5C3-4867-87B0-FABDB5EB0823}"
27EndProject 29EndProject
28Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.FullFramework4MBA", "test\examples\FullFramework4MBA\Example.FullFramework4MBA.csproj", "{44297646-706D-4508-8E96-1B35B109694C}" 30Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.FullFramework4MBA", "test\examples\FullFramework4MBA\Example.FullFramework4MBA.csproj", "{44297646-706D-4508-8E96-1B35B109694C}"
@@ -125,22 +127,22 @@ Global
125 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x64.Build.0 = Release|Any CPU 127 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x64.Build.0 = Release|Any CPU
126 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.ActiveCfg = Release|Any CPU 128 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.ActiveCfg = Release|Any CPU
127 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.Build.0 = Release|Any CPU 129 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.Build.0 = Release|Any CPU
128 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 130 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
129 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|Any CPU.Build.0 = Debug|Any CPU 131 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
130 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|ARM64.ActiveCfg = Debug|Any CPU 132 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|ARM64.ActiveCfg = Debug|AnyCPU
131 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|ARM64.Build.0 = Debug|Any CPU 133 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|ARM64.Build.0 = Debug|AnyCPU
132 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|x64.ActiveCfg = Debug|Any CPU 134 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|x64.ActiveCfg = Debug|AnyCPU
133 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|x64.Build.0 = Debug|Any CPU 135 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|x64.Build.0 = Debug|AnyCPU
134 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|x86.ActiveCfg = Debug|Any CPU 136 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|x86.ActiveCfg = Debug|AnyCPU
135 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Debug|x86.Build.0 = Debug|Any CPU 137 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Debug|x86.Build.0 = Debug|AnyCPU
136 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|Any CPU.ActiveCfg = Release|Any CPU 138 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
137 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|Any CPU.Build.0 = Release|Any CPU 139 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|Any CPU.Build.0 = Release|Any CPU
138 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|ARM64.ActiveCfg = Release|Any CPU 140 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|ARM64.ActiveCfg = Release|AnyCPU
139 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|ARM64.Build.0 = Release|Any CPU 141 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|ARM64.Build.0 = Release|AnyCPU
140 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|x64.ActiveCfg = Release|Any CPU 142 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|x64.ActiveCfg = Release|AnyCPU
141 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|x64.Build.0 = Release|Any CPU 143 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|x64.Build.0 = Release|AnyCPU
142 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|x86.ActiveCfg = Release|Any CPU 144 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|x86.ActiveCfg = Release|AnyCPU
143 {0D780900-C2FF-4FA2-8CB5-8A19768724C5}.Release|x86.Build.0 = Release|Any CPU 145 {D6A58B36-D47E-4020-A130-58B0CEAF01A2}.Release|x86.Build.0 = Release|AnyCPU
144 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 146 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
145 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU 147 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
146 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|ARM64.ActiveCfg = Debug|Any CPU 148 {F2BA1935-70FA-4156-B161-FD03850B4FAA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
@@ -189,6 +191,22 @@ Global
189 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x64.Build.0 = Release|x64 191 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x64.Build.0 = Release|x64
190 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x86.ActiveCfg = Release|Win32 192 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x86.ActiveCfg = Release|Win32
191 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x86.Build.0 = Release|Win32 193 {3D44B67D-A475-49BA-8310-E39F6C117CC9}.Release|x86.Build.0 = Release|Win32
194 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
195 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
196 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
197 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|ARM64.Build.0 = Debug|Any CPU
198 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|x64.ActiveCfg = Debug|Any CPU
199 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|x64.Build.0 = Debug|Any CPU
200 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|x86.ActiveCfg = Debug|Any CPU
201 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Debug|x86.Build.0 = Debug|Any CPU
202 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
203 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|Any CPU.Build.0 = Release|Any CPU
204 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|ARM64.ActiveCfg = Release|Any CPU
205 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|ARM64.Build.0 = Release|Any CPU
206 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|x64.ActiveCfg = Release|Any CPU
207 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|x64.Build.0 = Release|Any CPU
208 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|x86.ActiveCfg = Release|Any CPU
209 {38D80FC7-EBD4-4902-A114-C93AA75CFCA0}.Release|x86.Build.0 = Release|Any CPU
192 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 210 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
193 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|Any CPU.Build.0 = Debug|Any CPU 211 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|Any CPU.Build.0 = Debug|Any CPU
194 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|ARM64.ActiveCfg = Debug|Any CPU 212 {FED9D707-E5C3-4867-87B0-FABDB5EB0823}.Debug|ARM64.ActiveCfg = Debug|Any CPU
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/BootstrapperApplicationFactory.cs b/src/ext/Bal/WixToolset.Dnc.Host/BootstrapperApplicationFactory.cs
deleted file mode 100644
index d38fd1a9..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/BootstrapperApplicationFactory.cs
+++ /dev/null
@@ -1,89 +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
3namespace WixToolset.Dnc.Host
4{
5 using System;
6 using System.Linq;
7 using System.Reflection;
8 using System.Runtime.InteropServices;
9
10 delegate IBootstrapperApplicationFactory StaticEntryDelegate([MarshalAs(UnmanagedType.LPWStr)] string baFactoryAssemblyName, [MarshalAs(UnmanagedType.LPWStr)] string baFactoryAssemblyPath);
11
12 /// <summary>
13 /// Entry point for the .NET Core host to create and return the BA to the engine.
14 /// Reflection is used instead of referencing WixToolset.Mba.Core directly to avoid requiring it in the AssemblyLoadContext.
15 /// </summary>
16 public sealed class BootstrapperApplicationFactory : IBootstrapperApplicationFactory
17 {
18 private string baFactoryAssemblyName;
19 private string baFactoryAssemblyPath;
20
21 public BootstrapperApplicationFactory(string baFactoryAssemblyName, string baFactoryAssemblyPath)
22 {
23 this.baFactoryAssemblyName = baFactoryAssemblyName;
24 this.baFactoryAssemblyPath = baFactoryAssemblyPath;
25 }
26
27 /// <summary>
28 /// Loads the bootstrapper application assembly and calls its IBootstrapperApplicationFactory.Create method.
29 /// </summary>
30 /// <param name="pArgs">Pointer to BOOTSTRAPPER_CREATE_ARGS struct.</param>
31 /// <param name="pResults">Pointer to BOOTSTRAPPER_CREATE_RESULTS struct.</param>
32 /// <exception cref="MissingAttributeException">The bootstrapper application assembly
33 /// does not define the <see cref="BootstrapperApplicationFactoryAttribute"/>.</exception>
34 public void Create(IntPtr pArgs, IntPtr pResults)
35 {
36 // Load the BA's IBootstrapperApplicationFactory.
37 var baFactoryType = BootstrapperApplicationFactory.GetBAFactoryTypeFromAssembly(this.baFactoryAssemblyName, this.baFactoryAssemblyPath);
38 var baFactory = Activator.CreateInstance(baFactoryType);
39 if (null == baFactory)
40 {
41 throw new InvalidBootstrapperApplicationFactoryException();
42 }
43
44 var createMethod = baFactoryType.GetMethod(nameof(Create), new[] { typeof(IntPtr), typeof(IntPtr) });
45 if (null == createMethod)
46 {
47 throw new InvalidBootstrapperApplicationFactoryException();
48 }
49 createMethod.Invoke(baFactory, new object[] { pArgs, pResults });
50 }
51
52 /// <summary>
53 /// Locates the <see cref="BootstrapperApplicationFactoryAttribute"/> and returns the specified type.
54 /// </summary>
55 /// <param name="assemblyName">The assembly that defines the IBootstrapperApplicationFactory implementation.</param>
56 /// <returns>The bootstrapper application factory <see cref="Type"/>.</returns>
57 private static Type GetBAFactoryTypeFromAssembly(string assemblyName, string assemblyPath)
58 {
59 // The default ALC shouldn't need help loading the assembly, since the host should have provided the deps.json
60 // when starting the runtime. But it doesn't hurt so keep this in case an isolated ALC is ever needed.
61 var alc = new DnchostAssemblyLoadContext(assemblyPath, false);
62 var asm = alc.LoadFromAssemblyName(new AssemblyName(assemblyName));
63
64 var attr = asm.GetCustomAttributes()
65 .Where(a => a.GetType().FullName == "WixToolset.Mba.Core.BootstrapperApplicationFactoryAttribute")
66 .SingleOrDefault();
67
68 if (null == attr)
69 {
70 throw new MissingAttributeException();
71 }
72
73 var baFactoryTypeProperty = attr.GetType().GetProperty("BootstrapperApplicationFactoryType", typeof(Type));
74 if (baFactoryTypeProperty == null || baFactoryTypeProperty.GetMethod == null)
75 {
76 throw new MissingAttributeException();
77 }
78
79 var baFactoryType = (Type)baFactoryTypeProperty.GetMethod.Invoke(attr, null);
80 return baFactoryType;
81 }
82
83 // Entry point for the DNC host.
84 public static IBootstrapperApplicationFactory CreateBAFactory([MarshalAs(UnmanagedType.LPWStr)] string baFactoryAssemblyName, [MarshalAs(UnmanagedType.LPWStr)] string baFactoryAssemblyPath)
85 {
86 return new BootstrapperApplicationFactory(baFactoryAssemblyName, baFactoryAssemblyPath);
87 }
88 }
89}
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/DnchostAssemblyLoadContext.cs b/src/ext/Bal/WixToolset.Dnc.Host/DnchostAssemblyLoadContext.cs
deleted file mode 100644
index 1a383058..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/DnchostAssemblyLoadContext.cs
+++ /dev/null
@@ -1,58 +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
3namespace WixToolset.Dnc.Host
4{
5 using System;
6 using System.Reflection;
7 using System.Runtime.Loader;
8
9 public sealed class DnchostAssemblyLoadContext : AssemblyLoadContext
10 {
11 private readonly AssemblyDependencyResolver resolver;
12
13 public DnchostAssemblyLoadContext(string assemblyPath, bool isolateFromDefault)
14 : base(nameof(DnchostAssemblyLoadContext), isolateFromDefault)
15 {
16 this.resolver = new AssemblyDependencyResolver(assemblyPath);
17
18 if (!this.IsCollectible)
19 {
20 AssemblyLoadContext.Default.Resolving += this.ResolveAssembly;
21 AssemblyLoadContext.Default.ResolvingUnmanagedDll += this.ResolveUnmanagedDll;
22 }
23 }
24
25 private Assembly ResolveAssembly(AssemblyLoadContext defaultAlc, AssemblyName assemblyName)
26 {
27 var path = this.resolver.ResolveAssemblyToPath(assemblyName);
28 if (path != null)
29 {
30 var targetAlc = this.IsCollectible ? this : defaultAlc;
31 return targetAlc.LoadFromAssemblyPath(path);
32 }
33
34 return null;
35 }
36
37 private IntPtr ResolveUnmanagedDll(Assembly assembly, string unmanagedDllName)
38 {
39 var path = this.resolver.ResolveUnmanagedDllToPath(unmanagedDllName);
40 if (path != null)
41 {
42 return this.LoadUnmanagedDllFromPath(path);
43 }
44
45 return IntPtr.Zero;
46 }
47
48 protected override Assembly Load(AssemblyName assemblyName)
49 {
50 return this.ResolveAssembly(AssemblyLoadContext.Default, assemblyName);
51 }
52
53 protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
54 {
55 return this.ResolveUnmanagedDll(null, unmanagedDllName);
56 }
57 }
58}
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/Exceptions.cs b/src/ext/Bal/WixToolset.Dnc.Host/Exceptions.cs
deleted file mode 100644
index 32d4d4c5..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/Exceptions.cs
+++ /dev/null
@@ -1,145 +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
3namespace WixToolset.Dnc.Host
4{
5 using System;
6 using System.Runtime.Serialization;
7
8 /// <summary>
9 /// Base class for exception returned to the bootstrapper application host.
10 /// </summary>
11 [Serializable]
12 public abstract class BootstrapperException : Exception
13 {
14 /// <summary>
15 /// Creates an instance of the <see cref="BootstrapperException"/> base class with the given HRESULT.
16 /// </summary>
17 /// <param name="hr">The HRESULT for the exception that is used by the bootstrapper application host.</param>
18 public BootstrapperException(int hr)
19 {
20 this.HResult = hr;
21 }
22
23 /// <summary>
24 /// Initializes a new instance of the <see cref="BootstrapperException"/> class.
25 /// </summary>
26 /// <param name="message">Exception message.</param>
27 public BootstrapperException(string message)
28 : base(message)
29 {
30 }
31
32 /// <summary>
33 /// Initializes a new instance of the <see cref="BootstrapperException"/> class.
34 /// </summary>
35 /// <param name="message">Exception message</param>
36 /// <param name="innerException">Inner exception associated with this one</param>
37 public BootstrapperException(string message, Exception innerException)
38 : base(message, innerException)
39 {
40 }
41
42 /// <summary>
43 /// Initializes a new instance of the <see cref="BootstrapperException"/> class.
44 /// </summary>
45 /// <param name="info">Serialization information for this exception</param>
46 /// <param name="context">Streaming context to serialize to</param>
47 protected BootstrapperException(SerializationInfo info, StreamingContext context)
48 : base(info, context)
49 {
50 }
51 }
52
53 /// <summary>
54 /// The bootstrapper application assembly loaded by the host does not contain exactly one instance of the
55 /// <see cref="Core.BootstrapperApplicationFactoryAttribute"/> class.
56 /// </summary>
57 /// <seealso cref="Core.BootstrapperApplicationFactoryAttribute"/>
58 [Serializable]
59 public class MissingAttributeException : BootstrapperException
60 {
61 /// <summary>
62 /// Creates a new instance of the <see cref="MissingAttributeException"/> class.
63 /// </summary>
64 public MissingAttributeException()
65 : base(NativeMethods.E_NOTFOUND)
66 {
67 }
68
69 /// <summary>
70 /// Initializes a new instance of the <see cref="MissingAttributeException"/> class.
71 /// </summary>
72 /// <param name="message">Exception message.</param>
73 public MissingAttributeException(string message)
74 : base(message)
75 {
76 }
77
78 /// <summary>
79 /// Initializes a new instance of the <see cref="MissingAttributeException"/> class.
80 /// </summary>
81 /// <param name="message">Exception message</param>
82 /// <param name="innerException">Inner exception associated with this one</param>
83 public MissingAttributeException(string message, Exception innerException)
84 : base(message, innerException)
85 {
86 }
87
88 /// <summary>
89 /// Initializes a new instance of the <see cref="MissingAttributeException"/> class.
90 /// </summary>
91 /// <param name="info">Serialization information for this exception</param>
92 /// <param name="context">Streaming context to serialize to</param>
93 protected MissingAttributeException(SerializationInfo info, StreamingContext context)
94 : base(info, context)
95 {
96 }
97 }
98
99 /// <summary>
100 /// The bootstrapper application factory specified by the <see cref="Core.BootstrapperApplicationFactoryAttribute"/>
101 /// does not extend the <see cref="Core.IBootstrapperApplicationFactory"/> base class.
102 /// </summary>
103 /// <seealso cref="Core.BaseBootstrapperApplicationFactory"/>
104 /// <seealso cref="Core.BootstrapperApplicationFactoryAttribute"/>
105 [Serializable]
106 public class InvalidBootstrapperApplicationFactoryException : BootstrapperException
107 {
108 /// <summary>
109 /// Creates a new instance of the <see cref="InvalidBootstrapperApplicationFactoryException"/> class.
110 /// </summary>
111 public InvalidBootstrapperApplicationFactoryException()
112 : base(NativeMethods.E_UNEXPECTED)
113 {
114 }
115
116 /// <summary>
117 /// Initializes a new instance of the <see cref="InvalidBootstrapperApplicationFactoryException"/> class.
118 /// </summary>
119 /// <param name="message">Exception message.</param>
120 public InvalidBootstrapperApplicationFactoryException(string message)
121 : base(message)
122 {
123 }
124
125 /// <summary>
126 /// Initializes a new instance of the <see cref="InvalidBootstrapperApplicationFactoryException"/> class.
127 /// </summary>
128 /// <param name="message">Exception message</param>
129 /// <param name="innerException">Inner exception associated with this one</param>
130 public InvalidBootstrapperApplicationFactoryException(string message, Exception innerException)
131 : base(message, innerException)
132 {
133 }
134
135 /// <summary>
136 /// Initializes a new instance of the <see cref="InvalidBootstrapperApplicationFactoryException"/> class.
137 /// </summary>
138 /// <param name="info">Serialization information for this exception</param>
139 /// <param name="context">Streaming context to serialize to</param>
140 protected InvalidBootstrapperApplicationFactoryException(SerializationInfo info, StreamingContext context)
141 : base(info, context)
142 {
143 }
144 }
145}
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/IBootstrapperApplicationFactory.cs b/src/ext/Bal/WixToolset.Dnc.Host/IBootstrapperApplicationFactory.cs
deleted file mode 100644
index 96731192..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/IBootstrapperApplicationFactory.cs
+++ /dev/null
@@ -1,16 +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
3namespace WixToolset.Dnc.Host
4{
5 using System;
6 using System.Runtime.InteropServices;
7
8 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
9 public interface IBootstrapperApplicationFactory
10 {
11 void Create(
12 IntPtr pArgs,
13 IntPtr pResults
14 );
15 }
16}
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/NativeMethods.cs b/src/ext/Bal/WixToolset.Dnc.Host/NativeMethods.cs
deleted file mode 100644
index 6dc393c6..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/NativeMethods.cs
+++ /dev/null
@@ -1,18 +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
3namespace WixToolset.Dnc.Host
4{
5 using System;
6 using System.Runtime.InteropServices;
7
8 /// <summary>
9 /// Contains native constants, functions, and structures for this assembly.
10 /// </summary>
11 internal static class NativeMethods
12 {
13 #region Error Constants
14 internal const int E_NOTFOUND = unchecked((int)0x80070490);
15 internal const int E_UNEXPECTED = unchecked((int)0x8000ffff);
16 #endregion
17 }
18}
diff --git a/src/ext/Bal/WixToolset.Dnc.Host/WixToolset.Dnc.Host.csproj b/src/ext/Bal/WixToolset.Dnc.Host/WixToolset.Dnc.Host.csproj
deleted file mode 100644
index a2f0d8ec..00000000
--- a/src/ext/Bal/WixToolset.Dnc.Host/WixToolset.Dnc.Host.csproj
+++ /dev/null
@@ -1,39 +0,0 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <RootNamespace>WixToolset.Dnc.Host</RootNamespace>
8 <Description>WiX Toolset .NET Core BA Host</Description>
9 <Title>WiX Toolset .NET Core BA Host</Title>
10 <DebugType>embedded</DebugType>
11 <PlatformTarget>AnyCPU</PlatformTarget>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <HeaderPath Include="$(BaseOutputPath)obj\$(AssemblyName).h">
16 <Visible>False</Visible>
17 </HeaderPath>
18 </ItemGroup>
19
20 <Target Name="GenerateIdentityHeader" AfterTargets="Build" Inputs="$(TargetPath)" Outputs="@(HeaderPath)">
21 <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
22 <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity" />
23 </GetAssemblyIdentity>
24 <ItemGroup>
25 <Line Include='#define DNC_ASSEMBLY_FILE_NAME L"$(AssemblyName).dll"' />
26 <Line Include='#define DNC_ASSEMBLY_FULL_NAME "%(AssemblyIdentity.Identity)"' />
27 <Line Include='#define DNC_ENTRY_TYPE "$(RootNamespace).BootstrapperApplicationFactory"' />
28 <Line Include='#define DNC_ENTRY_TYPEW L"$(RootNamespace).BootstrapperApplicationFactory,$(AssemblyName)"' />
29 <Line Include='#define DNC_STATIC_ENTRY_METHOD "CreateBAFactory"' />
30 <Line Include='#define DNC_STATIC_ENTRY_METHODW L"CreateBAFactory"' />
31 <Line Include='#define DNC_STATIC_ENTRY_DELEGATEW L"$(RootNamespace).StaticEntryDelegate,$(AssemblyName)"' />
32 </ItemGroup>
33 <Message Importance="normal" Text="Generating identity definitions into @(HeaderPath->'%(FullPath)')" />
34 <WriteLinesToFile File="@(HeaderPath)" Lines="@(Line)" Overwrite="True" />
35 <ItemGroup>
36 <FileWrites Include="@(HeaderPath)" />
37 </ItemGroup>
38 </Target>
39</Project>
diff --git a/src/ext/Bal/WixToolset.Dnc.HostGenerator/DncHostGenerator.cs b/src/ext/Bal/WixToolset.Dnc.HostGenerator/DncHostGenerator.cs
new file mode 100644
index 00000000..088b2b49
--- /dev/null
+++ b/src/ext/Bal/WixToolset.Dnc.HostGenerator/DncHostGenerator.cs
@@ -0,0 +1,127 @@
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
3namespace WixToolset.Dnc.HostGenerator
4{
5 using System;
6 using System.Diagnostics.CodeAnalysis;
7 using System.Text;
8 using Microsoft.CodeAnalysis;
9 using Microsoft.CodeAnalysis.Text;
10
11 [Generator]
12 public sealed class DncHostGenerator : ISourceGenerator
13 {
14 public static readonly string Version = String.Format($"{ThisAssembly.Git.SemVer.Major}.{ThisAssembly.Git.SemVer.Minor}.{ThisAssembly.Git.SemVer.Patch}{ThisAssembly.Git.SemVer.DashLabel}+{ThisAssembly.Git.Sha}");
15 public static readonly string TargetAttributeFullName = "WixToolset.Mba.Core.BootstrapperApplicationFactoryAttribute";
16
17 [SuppressMessage("MicrosoftCodeAnalysisReleaseTracking", "RS2008:Enable analyzer release tracking", Justification = "Tracking not needed")]
18 public static readonly DiagnosticDescriptor MissingFactoryAttributeDescriptor = new DiagnosticDescriptor(
19 "WIXBAL001",
20 $"Missing assembly level attribute {TargetAttributeFullName}.",
21 $"Add [assembly: {TargetAttributeFullName}(typeof(<your IBootstrapperApplicationFactory>)].",
22 "WixToolset.Bal.wixext",
23 DiagnosticSeverity.Error,
24 true
25 );
26
27 public void Initialize(GeneratorInitializationContext context)
28 {
29 }
30
31 public void Execute(GeneratorExecutionContext context)
32 {
33 var symbolDisplayFormat = new SymbolDisplayFormat(typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces);
34
35 string baFactoryClassName = null;
36 foreach (var assemblyAttribute in context.Compilation.Assembly.GetAttributes())
37 {
38 var fullAssemblyTypeName = assemblyAttribute.AttributeClass.ToDisplayString(symbolDisplayFormat);
39
40 if (fullAssemblyTypeName == TargetAttributeFullName &&
41 assemblyAttribute.ConstructorArguments.Length == 1)
42 {
43 var arg = assemblyAttribute.ConstructorArguments[0];
44 if (arg.Value is INamedTypeSymbol argValue)
45 {
46 baFactoryClassName = argValue.ToDisplayString(symbolDisplayFormat);
47 break;
48 }
49 }
50 }
51
52 if (baFactoryClassName == null)
53 {
54 context.ReportDiagnostic(Diagnostic.Create(MissingFactoryAttributeDescriptor, null));
55 }
56 else
57 {
58 var source = String.Format(Template, Version, baFactoryClassName);
59 context.AddSource("WixToolset.Dnc.Host.g.cs", SourceText.From(source, Encoding.UTF8, SourceHashAlgorithm.Sha256));
60 }
61 }
62
63 public const string Template = @"
64//------------------------------------------------------------------------------
65// <auto-generated>
66// This code was generated by a tool.
67//
68// Changes to this file may cause incorrect behavior and will be lost if
69// the code is regenerated.
70// </auto-generated>
71//------------------------------------------------------------------------------
72
73namespace WixToolset.Dnc.Host
74{{
75 using System;
76 using System.CodeDom.Compiler;
77 using System.Diagnostics.CodeAnalysis;
78 using System.Linq;
79 using System.Reflection;
80 using System.Runtime.CompilerServices;
81 using System.Runtime.InteropServices;
82 using WixToolset.Mba.Core;
83
84 [GeneratedCode(""WixToolset.Dnc.HostGenerator.DncHostGenerator"", ""{0}"")]
85 [CompilerGenerated]
86 delegate IBootstrapperApplicationFactory StaticEntryDelegate();
87
88 /// <summary>
89 /// Entry point for the .NET Core host to create and return the BA to the engine.
90 /// </summary>
91 [GeneratedCode(""WixToolset.Dnc.HostGenerator.DncHostGenerator"", ""{0}"")]
92 [CompilerGenerated]
93 public sealed class BootstrapperApplicationFactory : IBootstrapperApplicationFactory
94 {{
95 /// <summary>
96 /// Creates the bootstrapper application factory and calls its IBootstrapperApplicationFactory.Create method.
97 /// </summary>
98 /// <param name=""pArgs"">Pointer to BOOTSTRAPPER_CREATE_ARGS struct.</param>
99 /// <param name=""pResults"">Pointer to BOOTSTRAPPER_CREATE_RESULTS struct.</param>
100 public void Create(IntPtr pArgs, IntPtr pResults)
101 {{
102 var baFactory = new {1}();
103 baFactory.Create(pArgs, pResults);
104 }}
105
106 // Entry point for the DNC host.
107 public static IBootstrapperApplicationFactory CreateBAFactory()
108 {{
109 return new BootstrapperApplicationFactory();
110 }}
111
112#if NET5_0_OR_GREATER
113 [ModuleInitializer]
114 [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BootstrapperApplicationFactory))]
115#if NET5_0
116 [DynamicDependency(""GetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)"", ""Internal.Runtime.InteropServices.ComponentActivator"", ""System.Private.CoreLib"")]
117#endif
118 /// <summary>
119 /// Empty method to attach above attributes to support linker trimming.
120 /// </summary>
121 public static void ModuleInitialize() {{ }}
122#endif
123 }}
124}}
125";
126 }
127}
diff --git a/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.csproj b/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.csproj
new file mode 100644
index 00000000..2c33ac3c
--- /dev/null
+++ b/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.csproj
@@ -0,0 +1,27 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netstandard2.0</TargetFramework>
7 <RootNamespace>WixToolset.Dnc.HostGenerator</RootNamespace>
8 <Description>WiX Toolset .NET Core BA Host Generator</Description>
9 <Title>WiX Toolset .NET Core BA Host Generator</Title>
10 <DebugType>embedded</DebugType>
11 <PlatformTarget>AnyCPU</PlatformTarget>
12 <GitThisAssembly>true</GitThisAssembly>
13 </PropertyGroup>
14
15 <ItemGroup>
16 <Content Include="build\$(AssemblyName).props" CopyToOutputDirectory="PreserveNewest" />
17 <Content Include="build\$(AssemblyName).targets" CopyToOutputDirectory="PreserveNewest" />
18 </ItemGroup>
19
20 <ItemGroup>
21 <PackageReference Include="Microsoft.CodeAnalysis.CSharp" PrivateAssets="all" />
22 <PackageReference Include="Microsoft.CodeAnalysis.Analyzers">
23 <PrivateAssets>all</PrivateAssets>
24 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
25 </PackageReference>
26 </ItemGroup>
27</Project>
diff --git a/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.nuspec b/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.nuspec
new file mode 100644
index 00000000..46dd7248
--- /dev/null
+++ b/src/ext/Bal/WixToolset.Dnc.HostGenerator/WixToolset.Dnc.HostGenerator.nuspec
@@ -0,0 +1,23 @@
1<?xml version="1.0" encoding="utf-8"?>
2<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
3 <metadata>
4 <id>$id$</id>
5 <version>$version$</version>
6 <title>$title$</title>
7 <description>$description$</description>
8 <authors>$authors$</authors>
9 <license type="expression">MS-RL</license>
10 <requireLicenseAcceptance>false</requireLicenseAcceptance>
11 <copyright>$copyright$</copyright>
12 <projectUrl>$projectUrl$</projectUrl>
13 <repository type="$repositorytype$" url="$repositoryurl$" commit="$repositorycommit$" />
14 <dependencies>
15 <dependency id="WixToolset.Mba.Core" version="[$version$,5)" />
16 </dependencies>
17 </metadata>
18
19 <files>
20 <file src="$id$.dll" target="analyzers/dotnet/cs" />
21 <file src="build\**\*" target="build" />
22 </files>
23</package>
diff --git a/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.props b/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.props
new file mode 100644
index 00000000..f9306af7
--- /dev/null
+++ b/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.props
@@ -0,0 +1,10 @@
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 xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="Current">
5 <PropertyGroup>
6 <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
7 <EnableDynamicLoading>true</EnableDynamicLoading>
8 <_EnableConsumingManagedCodeFromNativeHosting>true</_EnableConsumingManagedCodeFromNativeHosting>
9 </PropertyGroup>
10</Project>
diff --git a/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.targets b/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.targets
new file mode 100644
index 00000000..d536ef5f
--- /dev/null
+++ b/src/ext/Bal/WixToolset.Dnc.HostGenerator/build/WixToolset.Dnc.HostGenerator.targets
@@ -0,0 +1,11 @@
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 xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="Current">
5 <ItemGroup Condition=" '$(TrimMode)'=='CopyUsed' ">
6 <TrimmerRootAssembly Include="System.Diagnostics.Tools" />
7 <TrimmerRootAssembly Include="System.Runtime" />
8 <TrimmerRootAssembly Include="System.Runtime.InteropServices" />
9 <TrimmerRootAssembly Include="System.Runtime.Loader" />
10 </ItemGroup>
11</Project>
diff --git a/src/ext/Bal/bal.cmd b/src/ext/Bal/bal.cmd
index f8894f76..75f3502b 100644
--- a/src/ext/Bal/bal.cmd
+++ b/src/ext/Bal/bal.cmd
@@ -2,11 +2,12 @@
2@pushd %~dp0 2@pushd %~dp0
3 3
4@set _C=Debug 4@set _C=Debug
5@set _L=%~dp0..\..\..\build\logs
5:parse_args 6:parse_args
6@if /i "%1"=="release" set _C=Release 7@if /i "%1"=="release" set _C=Release
7@if not "%1"=="" shift & goto parse_args 8@if not "%1"=="" shift & goto parse_args
8 9
9@echo Building ext\Util %_C% using %_N% 10@echo Building ext\Bal %_C% using %_N%
10 11
11:: Restore 12:: Restore
12nuget restore dnchost\packages.config || exit /b 13nuget restore dnchost\packages.config || exit /b
@@ -22,6 +23,9 @@ msbuild -p:Configuration=%_C%;Platform=x64 mbahost\mbahost.vcxproj || exit /b
22msbuild -p:Configuration=%_C%;Platform=ARM64 mbahost\mbahost.vcxproj || exit /b 23msbuild -p:Configuration=%_C%;Platform=ARM64 mbahost\mbahost.vcxproj || exit /b
23 24
24msbuild -p:Configuration=%_C% || exit /b 25msbuild -p:Configuration=%_C% || exit /b
26
27dotnet test test\WixToolsetTest.Dnc.HostGenerator -c %_C% --nologo --no-build -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Dnc.HostGenerator.trx" || exit /b
28
25msbuild -p:Configuration=%_C% test\examples\examples.proj || exit /b 29msbuild -p:Configuration=%_C% test\examples\examples.proj || exit /b
26 30
27:: Test 31:: Test
@@ -31,6 +35,7 @@ dotnet test -c %_C% --no-build test\WixToolsetTest.Bal || exit /b
31 35
32:: Pack 36:: Pack
33msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true wixext\WixToolset.Bal.wixext.csproj || exit /b 37msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true wixext\WixToolset.Bal.wixext.csproj || exit /b
38msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true WixToolset.Dnc.HostGenerator\WixToolset.Dnc.HostGenerator.csproj || exit /b
34msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true WixToolset.Mba.Host\WixToolset.Mba.Host.csproj || exit /b 39msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true WixToolset.Mba.Host\WixToolset.Mba.Host.csproj || exit /b
35 40
36@popd 41@popd
diff --git a/src/ext/Bal/dnchost/dnchost.cpp b/src/ext/Bal/dnchost/dnchost.cpp
index 8ca326fc..dcc9fa56 100644
--- a/src/ext/Bal/dnchost/dnchost.cpp
+++ b/src/ext/Bal/dnchost/dnchost.cpp
@@ -154,9 +154,6 @@ static HRESULT LoadModulePaths(
154 hr = PathGetDirectory(pState->sczModuleFullPath, &pState->sczAppBase); 154 hr = PathGetDirectory(pState->sczModuleFullPath, &pState->sczAppBase);
155 BalExitOnFailure(hr, "Failed to get the directory of the full process path."); 155 BalExitOnFailure(hr, "Failed to get the directory of the full process path.");
156 156
157 hr = PathConcat(pState->sczAppBase, DNC_ASSEMBLY_FILE_NAME, &pState->sczManagedHostPath);
158 BalExitOnFailure(hr, "Failed to create managed host path.");
159
160LExit: 157LExit:
161 return hr; 158 return hr;
162} 159}
@@ -249,7 +246,7 @@ static HRESULT LoadRuntime(
249 hr = DnchostLoadRuntime( 246 hr = DnchostLoadRuntime(
250 &pState->hostfxrState, 247 &pState->hostfxrState,
251 pState->sczModuleFullPath, 248 pState->sczModuleFullPath,
252 pState->sczManagedHostPath, 249 pState->sczBaFactoryAssemblyPath,
253 pState->sczBaFactoryDepsJsonPath, 250 pState->sczBaFactoryDepsJsonPath,
254 pState->sczBaFactoryRuntimeConfigPath); 251 pState->sczBaFactoryRuntimeConfigPath);
255 252
diff --git a/src/ext/Bal/dnchost/dnchost.h b/src/ext/Bal/dnchost/dnchost.h
index 22fd8f5e..b0ba9638 100644
--- a/src/ext/Bal/dnchost/dnchost.h
+++ b/src/ext/Bal/dnchost/dnchost.h
@@ -23,7 +23,6 @@ struct DNCSTATE
23 HINSTANCE hInstance; 23 HINSTANCE hInstance;
24 LPWSTR sczModuleFullPath; 24 LPWSTR sczModuleFullPath;
25 LPWSTR sczAppBase; 25 LPWSTR sczAppBase;
26 LPWSTR sczManagedHostPath;
27 LPWSTR sczBaFactoryAssemblyName; 26 LPWSTR sczBaFactoryAssemblyName;
28 LPWSTR sczBaFactoryAssemblyPath; 27 LPWSTR sczBaFactoryAssemblyPath;
29 LPWSTR sczBaFactoryDepsJsonPath; 28 LPWSTR sczBaFactoryDepsJsonPath;
diff --git a/src/ext/Bal/dnchost/dnchost.vcxproj b/src/ext/Bal/dnchost/dnchost.vcxproj
index 66e52c6f..1fd2ebed 100644
--- a/src/ext/Bal/dnchost/dnchost.vcxproj
+++ b/src/ext/Bal/dnchost/dnchost.vcxproj
@@ -81,14 +81,6 @@
81 </ItemDefinitionGroup> 81 </ItemDefinitionGroup>
82 82
83 <ItemGroup> 83 <ItemGroup>
84 <ProjectReference Include="..\WixToolset.Dnc.Host\WixToolset.Dnc.Host.csproj">
85 <Project>{0D780900-C2FF-4FA2-8CB5-8A19768724C5}</Project>
86 <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
87 <SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
88 </ProjectReference>
89 </ItemGroup>
90
91 <ItemGroup>
92 <PackageReference Include="WixToolset.BalUtil" /> 84 <PackageReference Include="WixToolset.BalUtil" />
93 85
94 <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" /> 86 <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
diff --git a/src/ext/Bal/dnchost/dncutil.cpp b/src/ext/Bal/dnchost/dncutil.cpp
index 34d14911..6486e6e9 100644
--- a/src/ext/Bal/dnchost/dncutil.cpp
+++ b/src/ext/Bal/dnchost/dncutil.cpp
@@ -2,6 +2,12 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5#define DNC_ENTRY_TYPE "WixToolset.Dnc.Host.BootstrapperApplicationFactory"
6#define DNC_ENTRY_TYPEW L"WixToolset.Dnc.Host.BootstrapperApplicationFactory"
7#define DNC_STATIC_ENTRY_METHOD "CreateBAFactory"
8#define DNC_STATIC_ENTRY_METHODW L"CreateBAFactory"
9#define DNC_STATIC_ENTRY_DELEGATEW L"WixToolset.Dnc.Host.StaticEntryDelegate"
10
5// https://github.com/dotnet/runtime/blob/master/src/installer/corehost/error_codes.h 11// https://github.com/dotnet/runtime/blob/master/src/installer/corehost/error_codes.h
6#define InvalidArgFailure 0x80008081 12#define InvalidArgFailure 0x80008081
7#define HostApiBufferTooSmall 0x80008098 13#define HostApiBufferTooSmall 0x80008098
@@ -74,19 +80,28 @@ LExit:
74HRESULT DnchostCreateFactory( 80HRESULT DnchostCreateFactory(
75 __in HOSTFXR_STATE* pState, 81 __in HOSTFXR_STATE* pState,
76 __in LPCWSTR wzBaFactoryAssemblyName, 82 __in LPCWSTR wzBaFactoryAssemblyName,
77 __in LPCWSTR wzBaFactoryAssemblyPath, 83 __in LPCWSTR /*wzBaFactoryAssemblyPath*/,
78 __out IBootstrapperApplicationFactory** ppAppFactory 84 __out IBootstrapperApplicationFactory** ppAppFactory
79 ) 85 )
80{ 86{
81 HRESULT hr = S_OK; 87 HRESULT hr = S_OK;
82 PFNCREATEBAFACTORY pfnCreateBAFactory = NULL; 88 PFNCREATEBAFACTORY pfnCreateBAFactory = NULL;
89 LPWSTR sczEntryType = NULL;
90 LPWSTR sczEntryDelegate = NULL;
91 LPSTR sczBaFactoryAssemblyName = NULL;
83 92
84 if (pState->pfnGetFunctionPointer) 93 if (pState->pfnGetFunctionPointer)
85 { 94 {
95 hr = StrAllocFormatted(&sczEntryType, L"%ls,%ls", DNC_ENTRY_TYPEW, wzBaFactoryAssemblyName);
96 BalExitOnFailure(hr, "Failed to format entry type.");
97
98 hr = StrAllocFormatted(&sczEntryDelegate, L"%ls,%ls", DNC_STATIC_ENTRY_DELEGATEW, wzBaFactoryAssemblyName);
99 BalExitOnFailure(hr, "Failed to format entry delegate.");
100
86 hr = pState->pfnGetFunctionPointer( 101 hr = pState->pfnGetFunctionPointer(
87 DNC_ENTRY_TYPEW, 102 sczEntryType,
88 DNC_STATIC_ENTRY_METHODW, 103 DNC_STATIC_ENTRY_METHODW,
89 DNC_STATIC_ENTRY_DELEGATEW, 104 sczEntryDelegate,
90 NULL, 105 NULL,
91 NULL, 106 NULL,
92 reinterpret_cast<void**>(&pfnCreateBAFactory)); 107 reinterpret_cast<void**>(&pfnCreateBAFactory));
@@ -94,19 +109,26 @@ HRESULT DnchostCreateFactory(
94 } 109 }
95 else 110 else
96 { 111 {
112 hr = StrAnsiAllocString(&sczBaFactoryAssemblyName, wzBaFactoryAssemblyName, 0, CP_UTF8);
113 BalExitOnFailure(hr, "Failed to convert assembly name to UTF8: %ls", wzBaFactoryAssemblyName);
114
97 hr = pState->pfnCoreclrCreateDelegate( 115 hr = pState->pfnCoreclrCreateDelegate(
98 pState->pClrHandle, 116 pState->pClrHandle,
99 pState->dwDomainId, 117 pState->dwDomainId,
100 DNC_ASSEMBLY_FULL_NAME, 118 sczBaFactoryAssemblyName,
101 DNC_ENTRY_TYPE, 119 DNC_ENTRY_TYPE,
102 DNC_STATIC_ENTRY_METHOD, 120 DNC_STATIC_ENTRY_METHOD,
103 reinterpret_cast<void**>(&pfnCreateBAFactory)); 121 reinterpret_cast<void**>(&pfnCreateBAFactory));
104 BalExitOnFailure(hr, "Failed to create delegate in app domain."); 122 BalExitOnFailure(hr, "Failed to create delegate in app domain.");
105 } 123 }
106 124
107 *ppAppFactory = pfnCreateBAFactory(wzBaFactoryAssemblyName, wzBaFactoryAssemblyPath); 125 *ppAppFactory = pfnCreateBAFactory();
108 126
109LExit: 127LExit:
128 ReleaseStr(sczEntryType);
129 ReleaseStr(sczEntryDelegate);
130 ReleaseStr(sczBaFactoryAssemblyName);
131
110 return hr; 132 return hr;
111} 133}
112 134
@@ -233,7 +255,7 @@ static HRESULT InitializeCoreClr(
233 } 255 }
234 else 256 else
235 { 257 {
236 ExitOnFailure(hr, "HostfxrGetRuntimeDelegate failed"); 258 BalExitOnFailure(hr, "HostfxrGetRuntimeDelegate failed");
237 } 259 }
238 260
239LExit: 261LExit:
@@ -295,6 +317,8 @@ static HRESULT InitializeCoreClrPre5(
295 317
296 for (DWORD i = 0; i < cDirectories; ++i) 318 for (DWORD i = 0; i < cDirectories; ++i)
297 { 319 {
320 Assert(rgDirectories);
321
298 hr = PathConcat(rgDirectories[i], L"coreclr.dll", &sczCoreClrPath); 322 hr = PathConcat(rgDirectories[i], L"coreclr.dll", &sczCoreClrPath);
299 BalExitOnFailure(hr, "Failed to allocate path to coreclr."); 323 BalExitOnFailure(hr, "Failed to allocate path to coreclr.");
300 324
@@ -324,9 +348,9 @@ static HRESULT InitializeCoreClrPre5(
324 BalExitOnFailure(hr, "Failed to start coreclr."); 348 BalExitOnFailure(hr, "Failed to start coreclr.");
325 349
326LExit: 350LExit:
327 MemFree(rgDirectories); 351 ReleaseMem(rgDirectories);
328 MemFree(rgPropertyValues); 352 ReleaseMem(rgPropertyValues);
329 MemFree(rgPropertyKeys); 353 ReleaseMem(rgPropertyKeys);
330 ReleaseStr(sczCoreClrPath); 354 ReleaseStr(sczCoreClrPath);
331 355
332 return hr; 356 return hr;
diff --git a/src/ext/Bal/dnchost/dncutil.h b/src/ext/Bal/dnchost/dncutil.h
index 85eda3b2..f88e3f77 100644
--- a/src/ext/Bal/dnchost/dncutil.h
+++ b/src/ext/Bal/dnchost/dncutil.h
@@ -1,10 +1,7 @@
1#pragma once 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. 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 3
4typedef IBootstrapperApplicationFactory* (STDMETHODCALLTYPE* PFNCREATEBAFACTORY)( 4typedef IBootstrapperApplicationFactory* (STDMETHODCALLTYPE* PFNCREATEBAFACTORY)();
5 __in LPCWSTR wzBaFactoryAssemblyName,
6 __in LPCWSTR wzBaFactoryAssemblyPath
7 );
8 5
9struct HOSTFXR_STATE 6struct HOSTFXR_STATE
10{ 7{
diff --git a/src/ext/Bal/dnchost/precomp.h b/src/ext/Bal/dnchost/precomp.h
index 84ff6424..7aefc4e3 100644
--- a/src/ext/Bal/dnchost/precomp.h
+++ b/src/ext/Bal/dnchost/precomp.h
@@ -20,7 +20,6 @@
20#include <IBootstrapperApplicationFactory.h> 20#include <IBootstrapperApplicationFactory.h>
21#include <balutil.h> 21#include <balutil.h>
22 22
23#include <WixToolset.Dnc.Host.h>
24#define NETHOST_USE_AS_STATIC 23#define NETHOST_USE_AS_STATIC
25#include <nethost.h> 24#include <nethost.h>
26#include <hostfxr.h> 25#include <hostfxr.h>
diff --git a/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/CSharpSourceGeneratorVerifier.cs b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/CSharpSourceGeneratorVerifier.cs
new file mode 100644
index 00000000..27729ac8
--- /dev/null
+++ b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/CSharpSourceGeneratorVerifier.cs
@@ -0,0 +1,45 @@
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
3namespace WixToolsetTest.Dnc.HostGenerator
4{
5 using System;
6 using System.Collections.Immutable;
7 using Microsoft.CodeAnalysis;
8 using Microsoft.CodeAnalysis.CSharp;
9 using Microsoft.CodeAnalysis.CSharp.Testing;
10 using Microsoft.CodeAnalysis.Testing.Verifiers;
11
12 public static class CSharpSourceGeneratorVerifier<TSourceGenerator>
13 where TSourceGenerator : ISourceGenerator, new()
14 {
15 public class Test : CSharpSourceGeneratorTest<TSourceGenerator, XUnitVerifier>
16 {
17 public Test()
18 {
19 }
20
21 protected override CompilationOptions CreateCompilationOptions()
22 {
23 var compilationOptions = base.CreateCompilationOptions();
24 return compilationOptions.WithSpecificDiagnosticOptions(
25 compilationOptions.SpecificDiagnosticOptions.SetItems(GetNullableWarningsFromCompiler()));
26 }
27
28 public LanguageVersion LanguageVersion { get; set; } = LanguageVersion.Default;
29
30 private static ImmutableDictionary<string, ReportDiagnostic> GetNullableWarningsFromCompiler()
31 {
32 string[] args = { "/warnaserror:nullable" };
33 var commandLineArguments = CSharpCommandLineParser.Default.Parse(args, baseDirectory: Environment.CurrentDirectory, sdkDirectory: Environment.CurrentDirectory);
34 var nullableWarnings = commandLineArguments.CompilationOptions.SpecificDiagnosticOptions;
35
36 return nullableWarnings;
37 }
38
39 protected override ParseOptions CreateParseOptions()
40 {
41 return ((CSharpParseOptions)base.CreateParseOptions()).WithLanguageVersion(this.LanguageVersion);
42 }
43 }
44 }
45}
diff --git a/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/DncHostGeneratorTests.cs b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/DncHostGeneratorTests.cs
new file mode 100644
index 00000000..6ede1089
--- /dev/null
+++ b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/DncHostGeneratorTests.cs
@@ -0,0 +1,88 @@
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
3namespace WixToolsetTest.Dnc.HostGenerator
4{
5 using System;
6 using System.Text;
7 using System.Threading.Tasks;
8 using Microsoft.CodeAnalysis;
9 using Microsoft.CodeAnalysis.Testing;
10 using Microsoft.CodeAnalysis.Text;
11 using WixToolset.Dnc.HostGenerator;
12 using WixToolset.Mba.Core;
13 using Xunit;
14
15 using VerifyCS = CSharpSourceGeneratorVerifier<WixToolset.Dnc.HostGenerator.DncHostGenerator>;
16
17 public class DncHostGeneratorTests
18 {
19 static readonly MetadataReference MbaCoreAssembly = MetadataReference.CreateFromFile(typeof(BootstrapperApplicationFactoryAttribute).Assembly.Location);
20
21 [Fact]
22 public async Task FailsBuildWhenMissingAttribute()
23 {
24 var code = @"
25//[assembly: WixToolset.Mba.Core.BootstrapperApplicationFactory(typeof(Test.BAFactory))]
26namespace Test
27{
28 using WixToolset.Mba.Core;
29
30 public class BAFactory : BaseBootstrapperApplicationFactory
31 {
32 protected override IBootstrapperApplication Create(IEngine engine, IBootstrapperCommand bootstrapperCommand)
33 {
34 return null;
35 }
36 }
37}
38";
39
40 await new VerifyCS.Test
41 {
42 TestState =
43 {
44 Sources = { code },
45 AdditionalReferences = { MbaCoreAssembly },
46 ExpectedDiagnostics =
47 {
48 new DiagnosticResult(DncHostGenerator.MissingFactoryAttributeDescriptor),
49 },
50 },
51 }.RunAsync();
52 }
53
54 [Fact]
55 public async Task GeneratesEntryPoint()
56 {
57 var code = @"
58[assembly: WixToolset.Mba.Core.BootstrapperApplicationFactory(typeof(Test.BAFactory))]
59namespace Test
60{
61 using WixToolset.Mba.Core;
62
63 public class BAFactory : BaseBootstrapperApplicationFactory
64 {
65 protected override IBootstrapperApplication Create(IEngine engine, IBootstrapperCommand bootstrapperCommand)
66 {
67 return null;
68 }
69 }
70}
71";
72 var generated = String.Format(DncHostGenerator.Template, DncHostGenerator.Version, "Test.BAFactory");
73
74 await new VerifyCS.Test
75 {
76 TestState =
77 {
78 Sources = { code },
79 GeneratedSources =
80 {
81 (typeof(DncHostGenerator), "WixToolset.Dnc.Host.g.cs", SourceText.From(generated, Encoding.UTF8, SourceHashAlgorithm.Sha256)),
82 },
83 AdditionalReferences = { MbaCoreAssembly },
84 },
85 }.RunAsync();
86 }
87 }
88}
diff --git a/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/WixToolsetTest.Dnc.HostGenerator.csproj b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/WixToolsetTest.Dnc.HostGenerator.csproj
new file mode 100644
index 00000000..0c2b33fd
--- /dev/null
+++ b/src/ext/Bal/test/WixToolsetTest.Dnc.HostGenerator/WixToolsetTest.Dnc.HostGenerator.csproj
@@ -0,0 +1,27 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <IsPackable>false</IsPackable>
8 <SignOutput>false</SignOutput>
9 </PropertyGroup>
10
11 <ItemGroup>
12 <ProjectReference Include="..\..\WixToolset.Dnc.HostGenerator\WixToolset.Dnc.HostGenerator.csproj" />
13 </ItemGroup>
14
15 <ItemGroup>
16 <PackageReference Include="WixBuildTools.TestSupport" />
17 <PackageReference Include="WixToolset.Mba.Core" />
18 </ItemGroup>
19
20 <ItemGroup>
21 <PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing.XUnit" />
22 <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
23 <PackageReference Include="Microsoft.NET.Test.Sdk" />
24 <PackageReference Include="xunit" />
25 <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" />
26 </ItemGroup>
27</Project>
diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs
index 8dd5ff11..14b80fe8 100644
--- a/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs
+++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs
@@ -2,9 +2,7 @@
2 2
3namespace WixToolsetTest.ManagedHost 3namespace WixToolsetTest.ManagedHost
4{ 4{
5 using System.IO;
6 using WixBuildTools.TestSupport; 5 using WixBuildTools.TestSupport;
7 using WixToolset.Core.TestPackage;
8 using Xunit; 6 using Xunit;
9 7
10 public class DncHostFixture 8 public class DncHostFixture
@@ -21,11 +19,13 @@ namespace WixToolsetTest.ManagedHost
21 var testEngine = new TestEngine(); 19 var testEngine = new TestEngine();
22 20
23 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 21 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
24 var logMessages = result.Output; 22 WixAssert.CompareLineByLine(new[]
25 Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); 23 {
26 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 24 "Loading .NET Core FDD bootstrapper application.",
27 Assert.Equal("EarliestCoreBA", logMessages[2]); 25 "Creating BA thread to run asynchronously.",
28 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 26 "EarliestCoreBA",
27 "Shutdown,ReloadBootstrapper,0",
28 }, result.Output.ToArray());
29 } 29 }
30 } 30 }
31 31
@@ -39,14 +39,17 @@ namespace WixToolsetTest.ManagedHost
39 var testEngine = new TestEngine(); 39 var testEngine = new TestEngine();
40 40
41 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 41 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
42 var logMessages = result.Output; 42 WixAssert.CompareLineByLine(new[]
43 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); 43 {
44 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 44 "Loading .NET Core SCD bootstrapper application.",
45 Assert.Equal("EarliestCoreBA", logMessages[2]); 45 "Creating BA thread to run asynchronously.",
46 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 46 "EarliestCoreBA",
47 "Shutdown,ReloadBootstrapper,0",
48 }, result.Output.ToArray());
47 } 49 }
48 } 50 }
49 51
52 [Fact]
50 public void CanLoadTrimmedSCDEarliestCoreMBA() 53 public void CanLoadTrimmedSCDEarliestCoreMBA()
51 { 54 {
52 using (var fs = new DisposableFileSystem()) 55 using (var fs = new DisposableFileSystem())
@@ -56,11 +59,13 @@ namespace WixToolsetTest.ManagedHost
56 var testEngine = new TestEngine(); 59 var testEngine = new TestEngine();
57 60
58 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 61 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
59 var logMessages = result.Output; 62 WixAssert.CompareLineByLine(new[]
60 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); 63 {
61 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 64 "Loading .NET Core SCD bootstrapper application.",
62 Assert.Equal("EarliestCoreBA", logMessages[2]); 65 "Creating BA thread to run asynchronously.",
63 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 66 "EarliestCoreBA",
67 "Shutdown,ReloadBootstrapper,0",
68 }, result.Output.ToArray());
64 } 69 }
65 } 70 }
66 71
@@ -74,16 +79,19 @@ namespace WixToolsetTest.ManagedHost
74 var testEngine = new TestEngine(); 79 var testEngine = new TestEngine();
75 80
76 var result = testEngine.RunReloadEngine(bundleFile, baseFolder); 81 var result = testEngine.RunReloadEngine(bundleFile, baseFolder);
77 var logMessages = result.Output; 82 WixAssert.CompareLineByLine(new[]
78 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); 83 {
79 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 84 "Loading .NET Core SCD bootstrapper application.",
80 Assert.Equal("EarliestCoreBA", logMessages[2]); 85 "Creating BA thread to run asynchronously.",
81 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 86 "EarliestCoreBA",
82 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[4]); 87 "Shutdown,ReloadBootstrapper,0",
83 Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading 88 "Loading .NET Core SCD bootstrapper application.",
84 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); 89 "Reloaded 1 time(s)", // dnchost doesn't currently support unloading
85 Assert.Equal("EarliestCoreBA", logMessages[7]); 90 "Creating BA thread to run asynchronously.",
86 Assert.Equal("Shutdown,Restart,0", logMessages[8]); 91 "EarliestCoreBA",
92 "Shutdown,Restart,0",
93
94 }, result.Output.ToArray());
87 } 95 }
88 } 96 }
89 97
@@ -97,11 +105,13 @@ namespace WixToolsetTest.ManagedHost
97 var testEngine = new TestEngine(); 105 var testEngine = new TestEngine();
98 106
99 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 107 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
100 var logMessages = result.Output; 108 WixAssert.CompareLineByLine(new[]
101 Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); 109 {
102 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 110 "Loading .NET Core FDD bootstrapper application.",
103 Assert.Equal("LatestCoreBA", logMessages[2]); 111 "Creating BA thread to run asynchronously.",
104 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 112 "LatestCoreBA",
113 "Shutdown,ReloadBootstrapper,0",
114 }, result.Output.ToArray());
105 } 115 }
106 } 116 }
107 117
@@ -115,16 +125,18 @@ namespace WixToolsetTest.ManagedHost
115 var testEngine = new TestEngine(); 125 var testEngine = new TestEngine();
116 126
117 var result = testEngine.RunReloadEngine(bundleFile, baseFolder); 127 var result = testEngine.RunReloadEngine(bundleFile, baseFolder);
118 var logMessages = result.Output; 128 WixAssert.CompareLineByLine(new[]
119 Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); 129 {
120 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 130 "Loading .NET Core FDD bootstrapper application.",
121 Assert.Equal("LatestCoreBA", logMessages[2]); 131 "Creating BA thread to run asynchronously.",
122 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 132 "LatestCoreBA",
123 Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[4]); 133 "Shutdown,ReloadBootstrapper,0",
124 Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading 134 "Loading .NET Core FDD bootstrapper application.",
125 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); 135 "Reloaded 1 time(s)", // dnchost doesn't currently support unloading
126 Assert.Equal("LatestCoreBA", logMessages[7]); 136 "Creating BA thread to run asynchronously.",
127 Assert.Equal("Shutdown,Restart,0", logMessages[8]); 137 "LatestCoreBA",
138 "Shutdown,Restart,0",
139 }, result.Output.ToArray());
128 } 140 }
129 } 141 }
130 142
@@ -138,11 +150,14 @@ namespace WixToolsetTest.ManagedHost
138 var testEngine = new TestEngine(); 150 var testEngine = new TestEngine();
139 151
140 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 152 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
153 WixAssert.CompareLineByLine(new[]
154 {
155 "Loading .NET Core SCD bootstrapper application.",
156 "Creating BA thread to run asynchronously.",
157 "LatestCoreBA",
158 "Shutdown,ReloadBootstrapper,0",
159 }, result.Output.ToArray());
141 var logMessages = result.Output; 160 var logMessages = result.Output;
142 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]);
143 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]);
144 Assert.Equal("LatestCoreBA", logMessages[2]);
145 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]);
146 } 161 }
147 } 162 }
148 163
@@ -156,11 +171,13 @@ namespace WixToolsetTest.ManagedHost
156 var testEngine = new TestEngine(); 171 var testEngine = new TestEngine();
157 172
158 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 173 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
159 var logMessages = result.Output; 174 WixAssert.CompareLineByLine(new[]
160 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); 175 {
161 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 176 "Loading .NET Core SCD bootstrapper application.",
162 Assert.Equal("LatestCoreBA", logMessages[2]); 177 "Creating BA thread to run asynchronously.",
163 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 178 "LatestCoreBA",
179 "Shutdown,ReloadBootstrapper,0",
180 }, result.Output.ToArray());
164 } 181 }
165 } 182 }
166 183
@@ -174,16 +191,18 @@ namespace WixToolsetTest.ManagedHost
174 var testEngine = new TestEngine(); 191 var testEngine = new TestEngine();
175 192
176 var result = testEngine.RunReloadEngine(bundleFile, baseFolder); 193 var result = testEngine.RunReloadEngine(bundleFile, baseFolder);
177 var logMessages = result.Output; 194 WixAssert.CompareLineByLine(new[]
178 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); 195 {
179 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 196 "Loading .NET Core SCD bootstrapper application.",
180 Assert.Equal("LatestCoreBA", logMessages[2]); 197 "Creating BA thread to run asynchronously.",
181 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 198 "LatestCoreBA",
182 Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[4]); 199 "Shutdown,ReloadBootstrapper,0",
183 Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading 200 "Loading .NET Core SCD bootstrapper application.",
184 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); 201 "Reloaded 1 time(s)", // dnchost doesn't currently support unloading
185 Assert.Equal("LatestCoreBA", logMessages[7]); 202 "Creating BA thread to run asynchronously.",
186 Assert.Equal("Shutdown,Restart,0", logMessages[8]); 203 "LatestCoreBA",
204 "Shutdown,Restart,0",
205 }, result.Output.ToArray());
187 } 206 }
188 } 207 }
189 208
@@ -197,11 +216,13 @@ namespace WixToolsetTest.ManagedHost
197 var testEngine = new TestEngine(); 216 var testEngine = new TestEngine();
198 217
199 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 218 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
200 var logMessages = result.Output; 219 WixAssert.CompareLineByLine(new[]
201 Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); 220 {
202 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 221 "Loading .NET Core FDD bootstrapper application.",
203 Assert.Equal("WPFCoreBA", logMessages[2]); 222 "Creating BA thread to run asynchronously.",
204 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 223 "WPFCoreBA",
224 "Shutdown,ReloadBootstrapper,0",
225 }, result.Output.ToArray());
205 } 226 }
206 } 227 }
207 } 228 }
diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs
index dd37ee58..b4ebe1c6 100644
--- a/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs
+++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs
@@ -2,9 +2,7 @@
2 2
3namespace WixToolsetTest.ManagedHost 3namespace WixToolsetTest.ManagedHost
4{ 4{
5 using System.IO;
6 using WixBuildTools.TestSupport; 5 using WixBuildTools.TestSupport;
7 using WixToolset.Core.TestPackage;
8 using Xunit; 6 using Xunit;
9 7
10 public class MbaHostFixture 8 public class MbaHostFixture
@@ -21,11 +19,13 @@ namespace WixToolsetTest.ManagedHost
21 var testEngine = new TestEngine(); 19 var testEngine = new TestEngine();
22 20
23 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 21 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
24 var logMessages = result.Output; 22 WixAssert.CompareLineByLine(new[]
25 Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); 23 {
26 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 24 "Loading managed bootstrapper application.",
27 Assert.Equal("FullFramework2BA", logMessages[2]); 25 "Creating BA thread to run asynchronously.",
28 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 26 "FullFramework2BA",
27 "Shutdown,ReloadBootstrapper,0",
28 }, result.Output.ToArray());
29 } 29 }
30 } 30 }
31 31
@@ -39,11 +39,13 @@ namespace WixToolsetTest.ManagedHost
39 var testEngine = new TestEngine(); 39 var testEngine = new TestEngine();
40 40
41 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); 41 var result = testEngine.RunShutdownEngine(bundleFile, baseFolder);
42 var logMessages = result.Output; 42 WixAssert.CompareLineByLine(new[]
43 Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); 43 {
44 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 44 "Loading managed bootstrapper application.",
45 Assert.Equal("FullFramework4BA", logMessages[2]); 45 "Creating BA thread to run asynchronously.",
46 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 46 "FullFramework4BA",
47 "Shutdown,ReloadBootstrapper,0",
48 }, result.Output.ToArray());
47 } 49 }
48 } 50 }
49 51
@@ -57,15 +59,17 @@ namespace WixToolsetTest.ManagedHost
57 var testEngine = new TestEngine(); 59 var testEngine = new TestEngine();
58 60
59 var result = testEngine.RunReloadEngine(bundleFile, baseFolder); 61 var result = testEngine.RunReloadEngine(bundleFile, baseFolder);
60 var logMessages = result.Output; 62 WixAssert.CompareLineByLine(new[]
61 Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); 63 {
62 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 64 "Loading managed bootstrapper application.",
63 Assert.Equal("FullFramework2BA", logMessages[2]); 65 "Creating BA thread to run asynchronously.",
64 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 66 "FullFramework2BA",
65 Assert.Equal("Loading managed bootstrapper application.", logMessages[4]); 67 "Shutdown,ReloadBootstrapper,0",
66 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[5]); 68 "Loading managed bootstrapper application.",
67 Assert.Equal("FullFramework2BA", logMessages[6]); 69 "Creating BA thread to run asynchronously.",
68 Assert.Equal("Shutdown,Restart,0", logMessages[7]); 70 "FullFramework2BA",
71 "Shutdown,Restart,0",
72 }, result.Output.ToArray());
69 } 73 }
70 } 74 }
71 75
@@ -79,15 +83,17 @@ namespace WixToolsetTest.ManagedHost
79 var testEngine = new TestEngine(); 83 var testEngine = new TestEngine();
80 84
81 var result = testEngine.RunReloadEngine(bundleFile, baseFolder); 85 var result = testEngine.RunReloadEngine(bundleFile, baseFolder);
82 var logMessages = result.Output; 86 WixAssert.CompareLineByLine(new[]
83 Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); 87 {
84 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); 88 "Loading managed bootstrapper application.",
85 Assert.Equal("FullFramework4BA", logMessages[2]); 89 "Creating BA thread to run asynchronously.",
86 Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); 90 "FullFramework4BA",
87 Assert.Equal("Loading managed bootstrapper application.", logMessages[4]); 91 "Shutdown,ReloadBootstrapper,0",
88 Assert.Equal("Creating BA thread to run asynchronously.", logMessages[5]); 92 "Loading managed bootstrapper application.",
89 Assert.Equal("FullFramework4BA", logMessages[6]); 93 "Creating BA thread to run asynchronously.",
90 Assert.Equal("Shutdown,Restart,0", logMessages[7]); 94 "FullFramework4BA",
95 "Shutdown,Restart,0",
96 }, result.Output.ToArray());
91 } 97 }
92 } 98 }
93 } 99 }
diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs
index 9d7fc9db..30d97f3e 100644
--- a/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs
+++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs
@@ -2,6 +2,7 @@
2 2
3namespace WixToolsetTest.ManagedHost 3namespace WixToolsetTest.ManagedHost
4{ 4{
5 using System;
5 using System.Collections.Generic; 6 using System.Collections.Generic;
6 using System.Diagnostics; 7 using System.Diagnostics;
7 using System.IO; 8 using System.IO;
@@ -41,7 +42,7 @@ namespace WixToolsetTest.ManagedHost
41 { 42 {
42 var startInfo = new ProcessStartInfo(executablePath) 43 var startInfo = new ProcessStartInfo(executablePath)
43 { 44 {
44 Arguments = string.Join(' ', arguments), 45 Arguments = String.Join(' ', arguments),
45 CreateNoWindow = true, 46 CreateNoWindow = true,
46 RedirectStandardError = true, 47 RedirectStandardError = true,
47 RedirectStandardOutput = true, 48 RedirectStandardOutput = true,
diff --git a/src/ext/Bal/test/examples/Directory.Build.props b/src/ext/Bal/test/examples/Directory.Build.props
index 52b931f6..7f38564a 100644
--- a/src/ext/Bal/test/examples/Directory.Build.props
+++ b/src/ext/Bal/test/examples/Directory.Build.props
@@ -2,5 +2,6 @@
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. --> 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> 3<Project>
4 <Import Project="$(MsbuildThisFileDirectory)..\..\Directory.Build.props" /> 4 <Import Project="$(MsbuildThisFileDirectory)..\..\Directory.Build.props" />
5 <Import Project="Wix.Build.props" Condition=" '$(MSBuildProjectExtension)'=='.wixproj' " /> 5 <Import Project="Directory.csproj.props" Condition=" '$(MSBuildProjectExtension)'=='.csproj' " />
6 <Import Project="Directory.wixproj.props" Condition=" '$(MSBuildProjectExtension)'=='.wixproj' " />
6</Project> 7</Project>
diff --git a/src/ext/Bal/test/examples/Directory.Build.targets b/src/ext/Bal/test/examples/Directory.Build.targets
index 35946585..b27a1a41 100644
--- a/src/ext/Bal/test/examples/Directory.Build.targets
+++ b/src/ext/Bal/test/examples/Directory.Build.targets
@@ -2,5 +2,6 @@
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. --> 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> 3<Project>
4 <Import Project="$(MsbuildThisFileDirectory)..\..\..\..\Directory.Build.targets" /> 4 <Import Project="$(MsbuildThisFileDirectory)..\..\..\..\Directory.Build.targets" />
5 <Import Project="Wix.Build.targets" Condition=" '$(MSBuildProjectExtension)'=='.wixproj' " /> 5 <Import Project="Directory.wixproj.targets" Condition=" '$(MSBuildProjectExtension)'=='.wixproj' " />
6 <Import Project="DncBA.targets" Condition=" '$(IsDncBA)'=='true' " />
6</Project> 7</Project>
diff --git a/src/ext/Bal/test/examples/Directory.csproj.props b/src/ext/Bal/test/examples/Directory.csproj.props
new file mode 100644
index 00000000..e314ca20
--- /dev/null
+++ b/src/ext/Bal/test/examples/Directory.csproj.props
@@ -0,0 +1,5 @@
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>
4 <Import Project="$(MsbuildThisFileDirectory)..\..\WixToolset.Dnc.HostGenerator\build\WixToolset.Dnc.HostGenerator.props" />
5</Project>
diff --git a/src/ext/Bal/test/examples/Wix.Build.props b/src/ext/Bal/test/examples/Directory.wixproj.props
index 78ad462f..78ad462f 100644
--- a/src/ext/Bal/test/examples/Wix.Build.props
+++ b/src/ext/Bal/test/examples/Directory.wixproj.props
diff --git a/src/ext/Bal/test/examples/Wix.Build.targets b/src/ext/Bal/test/examples/Directory.wixproj.targets
index 7e6fe9f2..7e6fe9f2 100644
--- a/src/ext/Bal/test/examples/Wix.Build.targets
+++ b/src/ext/Bal/test/examples/Directory.wixproj.targets
diff --git a/src/ext/Bal/test/examples/DncBA.targets b/src/ext/Bal/test/examples/DncBA.targets
new file mode 100644
index 00000000..2b8c1428
--- /dev/null
+++ b/src/ext/Bal/test/examples/DncBA.targets
@@ -0,0 +1,19 @@
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>
4 <Import Project="$(MsbuildThisFileDirectory)..\..\WixToolset.Dnc.HostGenerator\build\WixToolset.Dnc.HostGenerator.targets" />
5
6 <PropertyGroup>
7 <ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>
8 </PropertyGroup>
9
10 <ItemGroup>
11 <ProjectReference Include="$(MsbuildThisFileDirectory)..\..\WixToolset.Dnc.HostGenerator\WixToolset.Dnc.HostGenerator.csproj"
12 OutputItemType="Analyzer"
13 ReferenceOutputAssembly="false" />
14 </ItemGroup>
15
16 <ItemGroup>
17 <PackageReference Include="WixToolset.Mba.Core" />
18 </ItemGroup>
19</Project>
diff --git a/src/ext/Bal/test/examples/EarliestCoreMBA/Example.EarliestCoreMBA.csproj b/src/ext/Bal/test/examples/EarliestCoreMBA/Example.EarliestCoreMBA.csproj
index 8069df45..9b9f2bf6 100644
--- a/src/ext/Bal/test/examples/EarliestCoreMBA/Example.EarliestCoreMBA.csproj
+++ b/src/ext/Bal/test/examples/EarliestCoreMBA/Example.EarliestCoreMBA.csproj
@@ -3,15 +3,7 @@
3 <PropertyGroup> 3 <PropertyGroup>
4 <TargetFramework>netcoreapp3.1</TargetFramework> 4 <TargetFramework>netcoreapp3.1</TargetFramework>
5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers> 5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
6 <EnableDynamicLoading>true</EnableDynamicLoading> 6 <IsDncBA>true</IsDncBA>
7 <Description>Earliest .NET Core MBA</Description> 7 <Description>Earliest .NET Core MBA</Description>
8 </PropertyGroup> 8 </PropertyGroup>
9
10 <ItemGroup>
11 <TrimmerRootAssembly Include="System.Runtime.Loader" />
12 </ItemGroup>
13
14 <ItemGroup>
15 <PackageReference Include="WixToolset.Mba.Core" />
16 </ItemGroup>
17</Project> 9</Project>
diff --git a/src/ext/Bal/test/examples/LatestCoreMBA/Example.LatestCoreMBA.csproj b/src/ext/Bal/test/examples/LatestCoreMBA/Example.LatestCoreMBA.csproj
index aad56a3e..a884fa07 100644
--- a/src/ext/Bal/test/examples/LatestCoreMBA/Example.LatestCoreMBA.csproj
+++ b/src/ext/Bal/test/examples/LatestCoreMBA/Example.LatestCoreMBA.csproj
@@ -3,18 +3,7 @@
3 <PropertyGroup> 3 <PropertyGroup>
4 <TargetFramework>net5.0</TargetFramework> 4 <TargetFramework>net5.0</TargetFramework>
5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers> 5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
6 <EnableDynamicLoading>true</EnableDynamicLoading> 6 <IsDncBA>true</IsDncBA>
7 <Description>Latest .NET Core MBA</Description> 7 <Description>Latest .NET Core MBA</Description>
8 </PropertyGroup> 8 </PropertyGroup>
9
10 <ItemGroup>
11 <TrimmerRootAssembly Include="System.Diagnostics.Tools" />
12 <TrimmerRootAssembly Include="System.Runtime" />
13 <TrimmerRootAssembly Include="System.Runtime.InteropServices" />
14 <TrimmerRootAssembly Include="System.Runtime.Loader" />
15 </ItemGroup>
16
17 <ItemGroup>
18 <PackageReference Include="WixToolset.Mba.Core" />
19 </ItemGroup>
20</Project> 9</Project>
diff --git a/src/ext/Bal/test/examples/WPFCoreMBA/Example.WPFCoreMBA.csproj b/src/ext/Bal/test/examples/WPFCoreMBA/Example.WPFCoreMBA.csproj
index 3d63e7b9..3186148b 100644
--- a/src/ext/Bal/test/examples/WPFCoreMBA/Example.WPFCoreMBA.csproj
+++ b/src/ext/Bal/test/examples/WPFCoreMBA/Example.WPFCoreMBA.csproj
@@ -3,22 +3,8 @@
3 <PropertyGroup> 3 <PropertyGroup>
4 <TargetFramework>net5.0-windows</TargetFramework> 4 <TargetFramework>net5.0-windows</TargetFramework>
5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers> 5 <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
6 <EnableDynamicLoading>true</EnableDynamicLoading> 6 <IsDncBA>true</IsDncBA>
7 <Description>WPF .NET Core MBA</Description> 7 <Description>WPF .NET Core MBA</Description>
8 <UseWPF>true</UseWPF> 8 <UseWPF>true</UseWPF>
9 </PropertyGroup> 9 </PropertyGroup>
10
11 <ItemGroup>
12 <PackageReference Include="WixToolset.Mba.Core" />
13 </ItemGroup>
14
15 <Target Name="GitVersion">
16 <PropertyGroup>
17 <GitBaseVersionMajor>42</GitBaseVersionMajor>
18 <GitBaseVersionMinor>42</GitBaseVersionMinor>
19 <GitBaseVersionPatch>42</GitBaseVersionPatch>
20 <GitCommits>42</GitCommits>
21 <GitSha>abc123def456</GitSha>
22 </PropertyGroup>
23 </Target>
24</Project> 10</Project>
diff --git a/src/ext/Bal/test/examples/examples.proj b/src/ext/Bal/test/examples/examples.proj
index 5722cfcb..a16af2a4 100644
--- a/src/ext/Bal/test/examples/examples.proj
+++ b/src/ext/Bal/test/examples/examples.proj
@@ -17,14 +17,15 @@
17 <ItemGroup> 17 <ItemGroup>
18 <CoreMBAProject Include="$(EarliestCoreMBAProjectPath)"> 18 <CoreMBAProject Include="$(EarliestCoreMBAProjectPath)">
19 <PublishPath>$(MBAPublishPath)Example.EarliestCoreMBA</PublishPath> 19 <PublishPath>$(MBAPublishPath)Example.EarliestCoreMBA</PublishPath>
20 <TrimMode>CopyUsed</TrimMode>
20 </CoreMBAProject> 21 </CoreMBAProject>
21 <CoreMBAProject Include="$(LatestCoreMBAProjectPath)"> 22 <CoreMBAProject Include="$(LatestCoreMBAProjectPath)">
22 <PublishPath>$(MBAPublishPath)Example.LatestCoreMBA</PublishPath> 23 <PublishPath>$(MBAPublishPath)Example.LatestCoreMBA</PublishPath>
24 <TrimMode>Link</TrimMode>
23 </CoreMBAProject> 25 </CoreMBAProject>
24 <CoreMBAProject Include="$(WPFCoreMBAProjectPath)"> 26 <CoreMBAProject Include="$(WPFCoreMBAProjectPath)">
25 <PublishPath>$(MBAPublishPath)Example.WPFCoreMBA</PublishPath> 27 <PublishPath>$(MBAPublishPath)Example.WPFCoreMBA</PublishPath>
26 <SkipSCD>true</SkipSCD> 28 <SkipSCD>true</SkipSCD>
27 <SkipTrimmedSCD>true</SkipTrimmedSCD>
28 </CoreMBAProject> 29 </CoreMBAProject>
29 30
30 <FullMBAProject Include="$(FullFramework2MBAProjectPath)" /> 31 <FullMBAProject Include="$(FullFramework2MBAProjectPath)" />
@@ -38,8 +39,8 @@
38 Condition="'%(CoreMBAProject.SkipFDD)'==''" /> 39 Condition="'%(CoreMBAProject.SkipFDD)'==''" />
39 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\scd" -r win-x86 -c $(Configuration) --self-contained true "%(CoreMBAProject.Identity)"' 40 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\scd" -r win-x86 -c $(Configuration) --self-contained true "%(CoreMBAProject.Identity)"'
40 Condition="'%(CoreMBAProject.SkipSCD)'==''" /> 41 Condition="'%(CoreMBAProject.SkipSCD)'==''" />
41 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\trimmedscd" -r win-x86 -c $(Configuration) --self-contained true -p:PublishTrimmed=true "%(CoreMBAProject.Identity)"' 42 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\trimmedscd" -r win-x86 -c $(Configuration) --self-contained true -p:PublishTrimmed=true -p:TrimMode=%(CoreMBAProject.TrimMode) "%(CoreMBAProject.Identity)"'
42 Condition="'%(CoreMBAProject.SkipTrimmedSCD)'==''" /> 43 Condition="'%(CoreMBAProject.TrimMode)'!=''" />
43 </Target> 44 </Target>
44 45
45 <Target Name="Build" DependsOnTargets="PublishCoreExamples"> 46 <Target Name="Build" DependsOnTargets="PublishCoreExamples">
diff --git a/src/ext/Bal/wixext/WixToolset.Bal.wixext.nuspec b/src/ext/Bal/wixext/WixToolset.Bal.wixext.nuspec
index 4abfa98c..cdbb001c 100644
--- a/src/ext/Bal/wixext/WixToolset.Bal.wixext.nuspec
+++ b/src/ext/Bal/wixext/WixToolset.Bal.wixext.nuspec
@@ -7,7 +7,7 @@
7 <owners>$authors$</owners> 7 <owners>$authors$</owners>
8 <icon>wix-white-bg.png</icon> 8 <icon>wix-white-bg.png</icon>
9 <license type="expression">MS-RL</license> 9 <license type="expression">MS-RL</license>
10 <projectUrl>https://github.com/wixtoolset/Bal.wixext</projectUrl> 10 <projectUrl>$projectUrl$</projectUrl>
11 <requireLicenseAcceptance>false</requireLicenseAcceptance> 11 <requireLicenseAcceptance>false</requireLicenseAcceptance>
12 <title>$title$</title> 12 <title>$title$</title>
13 <description>$description$</description> 13 <description>$description$</description>
diff --git a/src/ext/Bal/wixlib/BalExtension_platform.wxi b/src/ext/Bal/wixlib/BalExtension_platform.wxi
index e1d846ce..b2750eee 100644
--- a/src/ext/Bal/wixlib/BalExtension_platform.wxi
+++ b/src/ext/Bal/wixlib/BalExtension_platform.wxi
@@ -8,7 +8,6 @@
8 <BootstrapperApplication Id="WixDotNetCoreBootstrapperApplicationHost$(var.Suffix)"> 8 <BootstrapperApplication Id="WixDotNetCoreBootstrapperApplicationHost$(var.Suffix)">
9 <BootstrapperApplicationDll Id="WixDotNetCoreBootstrapperApplicationHost" SourceFile="!(bindpath.$(var.platform))\dnchost.dll" /> 9 <BootstrapperApplicationDll Id="WixDotNetCoreBootstrapperApplicationHost" SourceFile="!(bindpath.$(var.platform))\dnchost.dll" />
10 <Payload SourceFile="!(bindpath.$(var.platform))\wixstdba.dll" Name="dncpreq.dll" /> 10 <Payload SourceFile="!(bindpath.$(var.platform))\wixstdba.dll" Name="dncpreq.dll" />
11 <PayloadGroupRef Id="WixDotNetCoreBootstrapperApplicationHostManagedPayloads" />
12 </BootstrapperApplication> 11 </BootstrapperApplication>
13 </Fragment> 12 </Fragment>
14 13
diff --git a/src/ext/Bal/wixlib/Dnc.wxs b/src/ext/Bal/wixlib/Dnc.wxs
index d777c473..242bb30e 100644
--- a/src/ext/Bal/wixlib/Dnc.wxs
+++ b/src/ext/Bal/wixlib/Dnc.wxs
@@ -6,11 +6,6 @@
6 Dnc.wxs - .NET Core BA resources. 6 Dnc.wxs - .NET Core BA resources.
7 --> 7 -->
8 <Fragment> 8 <Fragment>
9 <PayloadGroup Id="WixDotNetCoreBootstrapperApplicationHostManagedPayloads">
10 <Payload SourceFile="WixToolset.Dnc.Host.dll" />
11 </PayloadGroup>
12 </Fragment>
13 <Fragment>
14 <PayloadGroup Id="DncPreqStandardPayloads"> 9 <PayloadGroup Id="DncPreqStandardPayloads">
15 <Payload Name="mbapreq.thm" SourceFile="!(wix.DncPreqbaThemeXml=SourceDir\dncpreq.thm)" /> 10 <Payload Name="mbapreq.thm" SourceFile="!(wix.DncPreqbaThemeXml=SourceDir\dncpreq.thm)" />
16 <Payload Name="mbapreq.png" SourceFile="!(wix.DncPreqbaLogo=SourceDir\mbapreq.png)" /> 11 <Payload Name="mbapreq.png" SourceFile="!(wix.DncPreqbaLogo=SourceDir\mbapreq.png)" />
diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp
index 6737cc38..675907e5 100644
--- a/src/internal/SetBuildNumber/Directory.Packages.props.pp
+++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp
@@ -21,6 +21,7 @@
21 <PackageVersion Include="WixToolset.Extensibility" Version="{packageversion}" /> 21 <PackageVersion Include="WixToolset.Extensibility" Version="{packageversion}" />
22 22
23 <PackageVersion Include="WixToolset.Burn" Version="{packageversion}" /> 23 <PackageVersion Include="WixToolset.Burn" Version="{packageversion}" />
24 <PackageVersion Include="WixToolset.Dnc.HostGenerator" Version="{packageversion}" />
24 25
25 <PackageVersion Include="WixToolset.Core" Version="{packageversion}" /> 26 <PackageVersion Include="WixToolset.Core" Version="{packageversion}" />
26 <PackageVersion Include="WixToolset.Core.Burn" Version="{packageversion}" /> 27 <PackageVersion Include="WixToolset.Core.Burn" Version="{packageversion}" />
@@ -45,6 +46,10 @@
45 <PackageVersion Include="System.Text.Encoding.CodePages" Version="4.6.0" /> 46 <PackageVersion Include="System.Text.Encoding.CodePages" Version="4.6.0" />
46 47
47 <PackageVersion Include="Microsoft.AspNetCore.Owin" Version="3.1.13" /> 48 <PackageVersion Include="Microsoft.AspNetCore.Owin" Version="3.1.13" />
49 <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" />
50 <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="3.8.0" />
51 <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing.XUnit" Version="1.1.1" />
52 <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.8.0" />
48 <PackageVersion Include="Microsoft.VisualStudio.Setup.Configuration.Native" Version="1.14.114" /> 53 <PackageVersion Include="Microsoft.VisualStudio.Setup.Configuration.Native" Version="1.14.114" />
49 <PackageVersion Include="Microsoft.Win32.Registry" Version="4.7.0" /> 54 <PackageVersion Include="Microsoft.Win32.Registry" Version="4.7.0" />
50 55
diff --git a/src/test/burn/TestBA/TestBA.csproj b/src/test/burn/TestBA/TestBA.csproj
index 183ea02d..7d51f4aa 100644
--- a/src/test/burn/TestBA/TestBA.csproj
+++ b/src/test/burn/TestBA/TestBA.csproj
@@ -21,4 +21,8 @@
21 <ItemGroup> 21 <ItemGroup>
22 <PackageReference Include="WixToolset.Mba.Core" /> 22 <PackageReference Include="WixToolset.Mba.Core" />
23 </ItemGroup> 23 </ItemGroup>
24
25 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'!='.NETFramework' ">
26 <PackageReference Include="WixToolset.Dnc.HostGenerator" />
27 </ItemGroup>
24</Project> 28</Project>
diff --git a/src/test/burn/TestBA/TestBA_x64.csproj b/src/test/burn/TestBA/TestBA_x64.csproj
index 8e2bf513..cb9db1c4 100644
--- a/src/test/burn/TestBA/TestBA_x64.csproj
+++ b/src/test/burn/TestBA/TestBA_x64.csproj
@@ -21,4 +21,8 @@
21 <ItemGroup> 21 <ItemGroup>
22 <PackageReference Include="WixToolset.Mba.Core" /> 22 <PackageReference Include="WixToolset.Mba.Core" />
23 </ItemGroup> 23 </ItemGroup>
24
25 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'!='.NETFramework' ">
26 <PackageReference Include="WixToolset.Dnc.HostGenerator" />
27 </ItemGroup>
24</Project> 28</Project>
diff --git a/src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj b/src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj
index fa153974..fdce5ecd 100644
--- a/src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj
+++ b/src/test/burn/TestData/TestBA/TestBAWixlib/testbawixlib.wixproj
@@ -7,7 +7,7 @@
7 </PropertyGroup> 7 </PropertyGroup>
8 <ItemGroup> 8 <ItemGroup>
9 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net35\win-x86" BindName="net2x86" /> 9 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net35\win-x86" BindName="net2x86" />
10 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net45\win-x86" BindName="net4x86" /> 10 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net472\win-x86" BindName="net4x86" />
11 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net5.0-windows\win-x86" BindName="dnc5x86" /> 11 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net5.0-windows\win-x86" BindName="dnc5x86" />
12 </ItemGroup> 12 </ItemGroup>
13 <ItemGroup> 13 <ItemGroup>
diff --git a/src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj b/src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj
index 9bba3d8f..e63eb74c 100644
--- a/src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj
+++ b/src/test/burn/TestData/TestBA/TestBAWixlib_x64/testbawixlib_x64.wixproj
@@ -8,7 +8,7 @@
8 </PropertyGroup> 8 </PropertyGroup>
9 <ItemGroup> 9 <ItemGroup>
10 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net35\win-x64" BindName="net2x64" /> 10 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net35\win-x64" BindName="net2x64" />
11 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net45\win-x64" BindName="net4x64" /> 11 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net472\win-x64" BindName="net4x64" />
12 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net5.0-windows\win-x64" BindName="dnc5x64" /> 12 <BindInputPaths Include="$(BaseOutputPath)$(Configuration)\net5.0-windows\win-x64" BindName="dnc5x64" />
13 </ItemGroup> 13 </ItemGroup>
14 <ItemGroup> 14 <ItemGroup>
diff --git a/src/test/burn/WixToolset.WixBA/WixToolset.WixBA.csproj b/src/test/burn/WixToolset.WixBA/WixToolset.WixBA.csproj
index 2a2a0073..b872457c 100644
--- a/src/test/burn/WixToolset.WixBA/WixToolset.WixBA.csproj
+++ b/src/test/burn/WixToolset.WixBA/WixToolset.WixBA.csproj
@@ -2,7 +2,7 @@
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. --> 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 Sdk="Microsoft.NET.Sdk"> 3<Project Sdk="Microsoft.NET.Sdk">
4 <PropertyGroup> 4 <PropertyGroup>
5 <TargetFrameworks>net45;net5.0-windows</TargetFrameworks> 5 <TargetFrameworks>net472;net5.0-windows</TargetFrameworks>
6 <AssemblyName>WixToolset.WixBA</AssemblyName> 6 <AssemblyName>WixToolset.WixBA</AssemblyName>
7 <RootNamespace>WixToolset.WixBA</RootNamespace> 7 <RootNamespace>WixToolset.WixBA</RootNamespace>
8 <DebugType>embedded</DebugType> 8 <DebugType>embedded</DebugType>
@@ -19,14 +19,14 @@
19 <!-- https://stackoverflow.com/questions/58844785/how-to-reference-system-windows-forms-in-net-core-3-0-for-wpf-apps --> 19 <!-- https://stackoverflow.com/questions/58844785/how-to-reference-system-windows-forms-in-net-core-3-0-for-wpf-apps -->
20 <UseWindowsForms>true</UseWindowsForms> 20 <UseWindowsForms>true</UseWindowsForms>
21 </PropertyGroup> 21 </PropertyGroup>
22 <ItemGroup Condition="'$(TargetFramework)'=='net45'"> 22 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'=='.NETFramework' ">
23 <Content Include="WixBA.BootstrapperCore.config" CopyToOutputDirectory="PreserveNewest" /> 23 <Content Include="WixBA.BootstrapperCore.config" CopyToOutputDirectory="PreserveNewest" />
24 </ItemGroup> 24 </ItemGroup>
25 <ItemGroup> 25 <ItemGroup>
26 <Resource Include="Resources\logo-white-hollow.png" /> 26 <Resource Include="Resources\logo-white-hollow.png" />
27 <Resource Include="Resources\logo-black-hollow.png" /> 27 <Resource Include="Resources\logo-black-hollow.png" />
28 </ItemGroup> 28 </ItemGroup>
29 <ItemGroup Condition="'$(TargetFramework)'=='net45'"> 29 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'=='.NETFramework' ">
30 <Reference Include="PresentationCore" /> 30 <Reference Include="PresentationCore" />
31 <Reference Include="PresentationFramework" /> 31 <Reference Include="PresentationFramework" />
32 <Reference Include="System.Windows.Forms" /> 32 <Reference Include="System.Windows.Forms" />
@@ -37,4 +37,8 @@
37 <ItemGroup> 37 <ItemGroup>
38 <PackageReference Include="WixToolset.Mba.Core" /> 38 <PackageReference Include="WixToolset.Mba.Core" />
39 </ItemGroup> 39 </ItemGroup>
40
41 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'!='.NETFramework' ">
42 <PackageReference Include="WixToolset.Dnc.HostGenerator" />
43 </ItemGroup>
40</Project> \ No newline at end of file 44</Project> \ No newline at end of file
diff --git a/src/test/burn/WixToolset.WixBA/WixToolset.WixBA_x64.csproj b/src/test/burn/WixToolset.WixBA/WixToolset.WixBA_x64.csproj
index bc1aa7bf..672f7a62 100644
--- a/src/test/burn/WixToolset.WixBA/WixToolset.WixBA_x64.csproj
+++ b/src/test/burn/WixToolset.WixBA/WixToolset.WixBA_x64.csproj
@@ -2,7 +2,7 @@
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. --> 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 Sdk="Microsoft.NET.Sdk"> 3<Project Sdk="Microsoft.NET.Sdk">
4 <PropertyGroup> 4 <PropertyGroup>
5 <TargetFrameworks>net45;net5.0-windows</TargetFrameworks> 5 <TargetFrameworks>net472;net5.0-windows</TargetFrameworks>
6 <AssemblyName>WixToolset.WixBA</AssemblyName> 6 <AssemblyName>WixToolset.WixBA</AssemblyName>
7 <RootNamespace>WixToolset.WixBA</RootNamespace> 7 <RootNamespace>WixToolset.WixBA</RootNamespace>
8 <DebugType>embedded</DebugType> 8 <DebugType>embedded</DebugType>
@@ -19,14 +19,14 @@
19 <!-- https://stackoverflow.com/questions/58844785/how-to-reference-system-windows-forms-in-net-core-3-0-for-wpf-apps --> 19 <!-- https://stackoverflow.com/questions/58844785/how-to-reference-system-windows-forms-in-net-core-3-0-for-wpf-apps -->
20 <UseWindowsForms>true</UseWindowsForms> 20 <UseWindowsForms>true</UseWindowsForms>
21 </PropertyGroup> 21 </PropertyGroup>
22 <ItemGroup Condition="'$(TargetFramework)'=='net45'"> 22 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'=='.NETFramework' ">
23 <Content Include="WixBA.BootstrapperCore.config" CopyToOutputDirectory="PreserveNewest" /> 23 <Content Include="WixBA.BootstrapperCore.config" CopyToOutputDirectory="PreserveNewest" />
24 </ItemGroup> 24 </ItemGroup>
25 <ItemGroup> 25 <ItemGroup>
26 <Resource Include="Resources\logo-white-hollow.png" /> 26 <Resource Include="Resources\logo-white-hollow.png" />
27 <Resource Include="Resources\logo-black-hollow.png" /> 27 <Resource Include="Resources\logo-black-hollow.png" />
28 </ItemGroup> 28 </ItemGroup>
29 <ItemGroup Condition="'$(TargetFramework)'=='net45'"> 29 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'=='.NETFramework' ">
30 <Reference Include="PresentationCore" /> 30 <Reference Include="PresentationCore" />
31 <Reference Include="PresentationFramework" /> 31 <Reference Include="PresentationFramework" />
32 <Reference Include="System.Windows.Forms" /> 32 <Reference Include="System.Windows.Forms" />
@@ -37,4 +37,8 @@
37 <ItemGroup> 37 <ItemGroup>
38 <PackageReference Include="WixToolset.Mba.Core" /> 38 <PackageReference Include="WixToolset.Mba.Core" />
39 </ItemGroup> 39 </ItemGroup>
40
41 <ItemGroup Condition=" '$(TargetFrameworkIdentifier)'!='.NETFramework' ">
42 <PackageReference Include="WixToolset.Dnc.HostGenerator" />
43 </ItemGroup>
40</Project> \ No newline at end of file 44</Project> \ No newline at end of file
diff --git a/src/testresultfilelist.txt b/src/testresultfilelist.txt
index 97c698e6..20531e2d 100644
--- a/src/testresultfilelist.txt
+++ b/src/testresultfilelist.txt
@@ -12,6 +12,7 @@ build/logs/TestResults/WixToolsetTest.Core.trx
12build/logs/TestResults/WixToolsetTest.Core.Burn.trx 12build/logs/TestResults/WixToolsetTest.Core.Burn.trx
13build/logs/TestResults/WixToolsetTest.Core.Native.trx 13build/logs/TestResults/WixToolsetTest.Core.Native.trx
14build/logs/TestResults/WixToolsetTest.CoreIntegration.trx 14build/logs/TestResults/WixToolsetTest.CoreIntegration.trx
15build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx
15build/logs/TestResults/WixToolsetTest.Heat.trx 16build/logs/TestResults/WixToolsetTest.Heat.trx
16build/logs/TestResults/WixToolsetTest.Mba.Core.trx 17build/logs/TestResults/WixToolsetTest.Mba.Core.trx
17build/logs/TestResults/WixToolsetTest.Sdk.trx 18build/logs/TestResults/WixToolsetTest.Sdk.trx
diff --git a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
index bab6e9b7..b6751ed9 100644
--- a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
+++ b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
@@ -4,12 +4,10 @@
4<Project Sdk="Microsoft.NET.Sdk"> 4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup> 5 <PropertyGroup>
6 <TargetFramework>netcoreapp3.1</TargetFramework> 6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <IncludeBuildOutput>false</IncludeBuildOutput>
8 <Description>WiX Toolset MSBuild integration</Description> 7 <Description>WiX Toolset MSBuild integration</Description>
9 <PublishDir>$(OutputPath)publish\WixToolset.Sdk\</PublishDir> 8 <PublishDir>$(OutputPath)publish\WixToolset.Sdk\</PublishDir>
10 <NuspecFile>$(MSBuildThisFileName).nuspec</NuspecFile> 9 <NuspecFile>$(MSBuildThisFileName).nuspec</NuspecFile>
11 <NuspecBasePath>$(PublishDir)</NuspecBasePath> 10 <NuspecBasePath>$(PublishDir)</NuspecBasePath>
12 <NuspecProperties>Id=$(MSBuildThisFileName);Authors=$(Authors);Copyright=$(Copyright);Description=$(Description)</NuspecProperties>
13 </PropertyGroup> 11 </PropertyGroup>
14 12
15 <ItemGroup> 13 <ItemGroup>