diff options
author | Bob Arnson <bob@firegiant.com> | 2018-09-18 17:52:39 -0400 |
---|---|---|
committer | Rob Mensching <rob@robmensching.com> | 2018-09-18 15:04:08 -0700 |
commit | cd1709996876ac1d6ff5750cd573b9be78313a9e (patch) | |
tree | df936ce0d8e865537408a3d80ab3c6c2ce38ac60 /src/WixToolset.Core | |
parent | 954b7179a06c1933ae783b602bc29caa0370aec0 (diff) | |
download | wix-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.cs | 28 |
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 | } |