aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2018-09-18 17:52:39 -0400
committerRob Mensching <rob@robmensching.com>2018-09-18 15:04:08 -0700
commitcd1709996876ac1d6ff5750cd573b9be78313a9e (patch)
treedf936ce0d8e865537408a3d80ab3c6c2ce38ac60 /src/WixToolset.Core
parent954b7179a06c1933ae783b602bc29caa0370aec0 (diff)
downloadwix-cd1709996876ac1d6ff5750cd573b9be78313a9e.tar.gz
wix-cd1709996876ac1d6ff5750cd573b9be78313a9e.tar.bz2
wix-cd1709996876ac1d6ff5750cd573b9be78313a9e.zip
Fix ?foreach? so all loop values get "executed."
Diffstat (limited to 'src/WixToolset.Core')
-rw-r--r--src/WixToolset.Core/Preprocessor.cs28
1 files changed, 15 insertions, 13 deletions
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
762 } 762 }
763 763
764 using (var fragmentStream = new MemoryStream(Encoding.UTF8.GetBytes(fragmentBuilder.ToString()))) 764 using (var fragmentStream = new MemoryStream(Encoding.UTF8.GetBytes(fragmentBuilder.ToString())))
765 using (var loopReader = XmlReader.Create(fragmentStream, FragmentXmlReaderSettings))
766 { 765 {
767 // process each iteration, updating the variable's value each time 766 // process each iteration, updating the variable's value each time
768 foreach (string varValue in varValues) 767 foreach (string varValue in varValues)
769 { 768 {
770 // Always overwrite foreach variables. 769 using (var loopReader = XmlReader.Create(fragmentStream, FragmentXmlReaderSettings))
771 this.Helper.AddVariable(this.Context, varName, varValue, false);
772
773 try
774 {
775 this.PreprocessReader(false, loopReader, container, offset);
776 }
777 catch (XmlException e)
778 { 770 {
779 this.UpdateCurrentLineNumber(loopReader, offset); 771 // Always overwrite foreach variables.
780 throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message)); 772 this.Helper.AddVariable(this.Context, varName, varValue, false);
781 }
782 773
783 fragmentStream.Position = 0; // seek back to the beginning for the next loop. 774 try
775 {
776 this.PreprocessReader(false, loopReader, container, offset);
777 }
778 catch (XmlException e)
779 {
780 this.UpdateCurrentLineNumber(loopReader, offset);
781 throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message));
782 }
783
784 fragmentStream.Position = 0; // seek back to the beginning for the next loop.
785 }
784 } 786 }
785 } 787 }
786 } 788 }