From ecbaffc08239e061a7dbaa92ff3c72acd53a0bae Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sun, 15 Jan 2023 20:59:56 -0600 Subject: Write an error when the .NET Core BA is missing the BAFactoryAssembly. 7166 --- .../test/WixToolsetTest.Bal/BalExtensionFixture.cs | 29 ++++++++++++++++++++++ .../WixToolsetTest.Bal/TestData/Dncba/Bundle.wxs | 13 ++++++++++ src/ext/Bal/wixext/BalBurnBackendExtension.cs | 6 +++-- src/ext/Bal/wixext/BalErrors.cs | 6 +++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/ext/Bal/test/WixToolsetTest.Bal/TestData/Dncba/Bundle.wxs diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs index 32ff42b5..57dbda9c 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs @@ -184,6 +184,35 @@ namespace WixToolsetTest.Bal } } + [Fact] + public void CannotBuildUsingDncbaMissingBAFactoryPayload() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); + var bundleSourceFolder = TestData.Get(@"TestData\Dncba"); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + + var compileResult = WixRunner.Execute(new[] + { + "build", + Path.Combine(bundleSourceFolder, "Bundle.wxs"), + "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), + "-intermediateFolder", intermediateFolder, + "-o", bundleFile, + }); + WixAssert.CompareLineByLine(new[] + { + "The BA's entry point DLL must have bal:BAFactoryAssembly=\"yes\" when using the DotNetCoreBootstrapperApplicationHost.", + }, compileResult.Messages.Select(x => x.ToString()).ToArray()); + Assert.Equal(6818, compileResult.ExitCode); + + Assert.False(File.Exists(bundleFile)); + Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); + } + } + [Fact] public void CannotBuildUsingOverridableWrongCase() { diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Dncba/Bundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Dncba/Bundle.wxs new file mode 100644 index 00000000..5b25da8c --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Dncba/Bundle.wxs @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs index a27ff739..be294131 100644 --- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs +++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs @@ -121,7 +121,7 @@ namespace WixToolset.Bal if (isDNC) { - this.FinalizeBAFactorySymbol(section); + this.FinalizeBAFactorySymbol(section, baSymbol); } if (isIuiBA || isStdBA || isMBA || isDNC) @@ -135,11 +135,12 @@ namespace WixToolset.Bal } } - private void FinalizeBAFactorySymbol(IntermediateSection section) + private void FinalizeBAFactorySymbol(IntermediateSection section, WixBootstrapperApplicationDllSymbol baSymbol) { var factorySymbol = section.Symbols.OfType().SingleOrDefault(); if (null == factorySymbol) { + this.Messaging.Write(BalErrors.MissingDNCBAFactoryAssembly(baSymbol.SourceLineNumbers)); return; } @@ -148,6 +149,7 @@ namespace WixToolset.Bal .SingleOrDefault(); if (null == factoryPayloadSymbol) { + this.Messaging.Write(BalErrors.MissingDNCBAFactoryAssembly(factorySymbol.SourceLineNumbers)); return; } diff --git a/src/ext/Bal/wixext/BalErrors.cs b/src/ext/Bal/wixext/BalErrors.cs index cde37143..2548b279 100644 --- a/src/ext/Bal/wixext/BalErrors.cs +++ b/src/ext/Bal/wixext/BalErrors.cs @@ -43,6 +43,11 @@ namespace WixToolset.Bal return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageEnableFeatureSelection, "When using WixInternalUIBootstrapperApplication, primary packages must not have feature selection enabled because it interferes with the user selecting feature through the MSI UI."); } + public static Message MissingDNCBAFactoryAssembly(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.MissingDNCBAFactoryAssembly, "The BA's entry point DLL must have bal:BAFactoryAssembly=\"yes\" when using the DotNetCoreBootstrapperApplicationHost."); + } + public static Message MissingDNCPrereq() { return Message(null, Ids.MissingDNCPrereq, "There must be at least one package with bal:PrereqPackage=\"yes\" when using the DotNetCoreBootstrapperApplicationHost with SelfContainedDeployment set to \"no\"."); @@ -116,6 +121,7 @@ namespace WixToolset.Bal IuibaPrimaryPackageEnableFeatureSelection = 6815, OverridableVariableCollision = 6816, OverridableVariableCollision2 = 6817, + MissingDNCBAFactoryAssembly = 6818, } } } -- cgit v1.2.3-55-g6feb