From cd1709996876ac1d6ff5750cd573b9be78313a9e Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Tue, 18 Sep 2018 17:52:39 -0400 Subject: Fix ?foreach? so all loop values get "executed." --- src/WixToolset.Core/Preprocessor.cs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src/WixToolset.Core') diff --git a/src/WixToolset.Core/Preprocessor.cs b/src/WixToolset.Core/Preprocessor.cs index acba0b5f..9f0ab1bb 100644 --- a/src/WixToolset.Core/Preprocessor.cs +++ b/src/WixToolset.Core/Preprocessor.cs @@ -762,25 +762,27 @@ namespace WixToolset.Core } using (var fragmentStream = new MemoryStream(Encoding.UTF8.GetBytes(fragmentBuilder.ToString()))) - using (var loopReader = XmlReader.Create(fragmentStream, FragmentXmlReaderSettings)) { // process each iteration, updating the variable's value each time foreach (string varValue in varValues) { - // Always overwrite foreach variables. - this.Helper.AddVariable(this.Context, varName, varValue, false); - - try - { - this.PreprocessReader(false, loopReader, container, offset); - } - catch (XmlException e) + using (var loopReader = XmlReader.Create(fragmentStream, FragmentXmlReaderSettings)) { - this.UpdateCurrentLineNumber(loopReader, offset); - throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message)); - } + // Always overwrite foreach variables. + this.Helper.AddVariable(this.Context, varName, varValue, false); - fragmentStream.Position = 0; // seek back to the beginning for the next loop. + try + { + this.PreprocessReader(false, loopReader, container, offset); + } + catch (XmlException e) + { + this.UpdateCurrentLineNumber(loopReader, offset); + throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message)); + } + + fragmentStream.Position = 0; // seek back to the beginning for the next loop. + } } } } -- cgit v1.2.3-55-g6feb