diff options
Diffstat (limited to 'src/WixToolset.Core/Preprocessor.cs')
| -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 | } |
