From 3588e1453240ca59ead8b5f8e63cdb8989bf8f84 Mon Sep 17 00:00:00 2001 From: Bob Arnson <bob@firegiant.com> Date: Sun, 7 Feb 2021 19:06:11 -0500 Subject: Improve duplicate-id reporting. --- .../Link/FindEntrySectionAndLoadSymbolsCommand.cs | 1 + .../RegistryFixture.cs | 26 ++++++++++++++++++++++ .../Registry/DuplicateRegistryValueIds.wxs | 14 ++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Registry/DuplicateRegistryValueIds.wxs diff --git a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs index a4b2bee3..a52d0d63 100644 --- a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs +++ b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs @@ -103,6 +103,7 @@ namespace WixToolset.Core.Link } else { + symbolWithSection.AddPossibleConflict(existingSymbol); existingSymbol.AddPossibleConflict(symbolWithSection); possibleConflicts.Add(symbolWithSection); } diff --git a/src/test/WixToolsetTest.CoreIntegration/RegistryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/RegistryFixture.cs index 654b8740..e4d95b5d 100644 --- a/src/test/WixToolsetTest.CoreIntegration/RegistryFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/RegistryFixture.cs @@ -79,6 +79,32 @@ namespace WixToolsetTest.CoreIntegration } } + [Fact] + public void DuplicateRegistryValueIdsAreDetectedSmoothly() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Registry", "DuplicateRegistryValueIds.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }, out var messages); + + Assert.Equal(2, messages.Where(m => m.Id == (int)ErrorMessages.Ids.DuplicateSymbol).Count()); + Assert.Equal(2, messages.Where(m => m.Id == (int)ErrorMessages.Ids.DuplicateSymbol2).Count()); + } + } + [Fact] public void PopulatesRegistryTableFromRemoveRegistryKey() { diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Registry/DuplicateRegistryValueIds.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Registry/DuplicateRegistryValueIds.wxs new file mode 100644 index 00000000..452aea69 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Registry/DuplicateRegistryValueIds.wxs @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" ?> +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> + <Fragment> + <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> + <Component> + <RegistryKey Root="HKLM" Key="Software\Acme\Foobar 1.0"> + <RegistryValue Type="string" Name="InstallDir" Value="[TARGETDIR]" /> + <RegistryValue Type="string" Name="InstallDir" Value="[INSTALLDIR]" /> + <RegistryValue Type="string" Name="InstallDir" Value="[ProgramFilesFolder]" /> + </RegistryKey> + </Component> + </ComponentGroup> + </Fragment> +</Wix> -- cgit v1.2.3-55-g6feb