aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2017-12-19 12:25:40 -0800
committerRob Mensching <rob@firegiant.com>2017-12-19 12:25:40 -0800
commit155a6e96346e0cb3d9ab6f5372fa29b46ebaee89 (patch)
tree59d1f151bfde8068b6014b05b5c8cfea3402c974 /src
parent6f1665ed759b31bd095f186f9239232c653597cd (diff)
downloadwix-155a6e96346e0cb3d9ab6f5372fa29b46ebaee89.tar.gz
wix-155a6e96346e0cb3d9ab6f5372fa29b46ebaee89.tar.bz2
wix-155a6e96346e0cb3d9ab6f5372fa29b46ebaee89.zip
Integrate simplified message handling
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.BuildTasks/DoIt.cs65
-rw-r--r--src/WixToolset.BuildTasks/WixToolTask.cs2
-rw-r--r--src/WixToolset.Core.Burn/Bundles/BurnCommon.cs21
-rw-r--r--src/WixToolset.Core.Burn/Bundles/BurnReader.cs9
-rw-r--r--src/WixToolset.Core.Burn/Bundles/BurnWriter.cs11
-rw-r--r--src/WixToolset.Core.Burn/Inscribe/InscribeBundleCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs21
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs49
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs15
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs22
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs11
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs41
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs10
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs26
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs18
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs37
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs43
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs11
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs46
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Data/Xsd/actions.xsd73
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Data/Xsd/tables.xsd248
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Differ.cs30
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs14
-rw-r--r--src/WixToolset.Core.WindowsInstaller/MelterCore.cs4
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs4
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Patch.cs9
-rw-r--r--src/WixToolset.Core.WindowsInstaller/PatchTransform.cs11
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs9
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs7
-rw-r--r--src/WixToolset.Core.WindowsInstaller/UnbindContext.cs7
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Unbinder.cs4
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Validator.cs42
-rw-r--r--src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs36
-rw-r--r--src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs4
-rw-r--r--src/WixToolset.Core/AppCommon.cs102
-rw-r--r--src/WixToolset.Core/BackendContext.cs16
-rw-r--r--src/WixToolset.Core/Bind/FileResolver.cs2
-rw-r--r--src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs10
-rw-r--r--src/WixToolset.Core/Bind/ResolveFieldsCommand.cs9
-rw-r--r--src/WixToolset.Core/Bind/TransferFilesCommand.cs26
-rw-r--r--src/WixToolset.Core/BindContext.cs2
-rw-r--r--src/WixToolset.Core/Binder.cs13
-rw-r--r--src/WixToolset.Core/BinderFileManagerCore.cs9
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs59
-rw-r--r--src/WixToolset.Core/CommandLine/CommandLine.cs26
-rw-r--r--src/WixToolset.Core/CommandLine/CommandLineContext.cs3
-rw-r--r--src/WixToolset.Core/CommandLine/CompileCommand.cs9
-rw-r--r--src/WixToolset.Core/Common.cs53
-rw-r--r--src/WixToolset.Core/CompileContext.cs3
-rw-r--r--src/WixToolset.Core/Compiler.cs1250
-rw-r--r--src/WixToolset.Core/CompilerCore.cs66
-rw-r--r--src/WixToolset.Core/Converter.cs11
-rw-r--r--src/WixToolset.Core/Data/WixToolset.Core.Data.messages.resourcesbin137688 -> 0 bytes
-rw-r--r--src/WixToolset.Core/Data/WixToolset.Core.WixStrings.resourcesbin5655 -> 0 bytes
-rw-r--r--src/WixToolset.Core/Data/messages.cs3106
-rw-r--r--src/WixToolset.Core/Data/messages.xml.old3998
-rw-r--r--src/WixToolset.Core/Extensibility/HeatExtension.cs12
-rw-r--r--src/WixToolset.Core/Extensibility/IHarvesterCore.cs18
-rw-r--r--src/WixToolset.Core/Extensibility/IHeatCore.cs14
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs (renamed from src/WixToolset.Core/ExtensionManager.cs)8
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/Messaging.cs194
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs66
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/PreprocessHelper.cs38
-rw-r--r--src/WixToolset.Core/Harvester.cs2
-rw-r--r--src/WixToolset.Core/HarvesterCore.cs39
-rw-r--r--src/WixToolset.Core/HeatCore.cs21
-rw-r--r--src/WixToolset.Core/ICommand.cs9
-rw-r--r--src/WixToolset.Core/IfDefEventHandler.cs46
-rw-r--r--src/WixToolset.Core/IncribeContext.cs4
-rw-r--r--src/WixToolset.Core/Inscriber.cs7
-rw-r--r--src/WixToolset.Core/InspectorCore.cs32
-rw-r--r--src/WixToolset.Core/Librarian.cs6
-rw-r--r--src/WixToolset.Core/LibraryContext.cs3
-rw-r--r--src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs14
-rw-r--r--src/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs10
-rw-r--r--src/WixToolset.Core/Link/ResolveReferencesCommand.cs18
-rw-r--r--src/WixToolset.Core/Link/WixGroupingOrdering.cs56
-rw-r--r--src/WixToolset.Core/LinkContext.cs2
-rw-r--r--src/WixToolset.Core/Linker.cs54
-rw-r--r--src/WixToolset.Core/Localizer.cs91
-rw-r--r--src/WixToolset.Core/Mutator.cs6
-rw-r--r--src/WixToolset.Core/Preprocess/IfDefEventHandler.cs28
-rw-r--r--src/WixToolset.Core/Preprocess/IncludedFileEventHandler.cs (renamed from src/WixToolset.Core/IncludedFileEventHandler.cs)19
-rw-r--r--src/WixToolset.Core/Preprocess/ProcessedStreamEventHandler.cs (renamed from src/WixToolset.Core/ProcessedStreamEventHandler.cs)2
-rw-r--r--src/WixToolset.Core/Preprocess/ResolvedVariableEventHandler.cs25
-rw-r--r--src/WixToolset.Core/PreprocessContext.cs3
-rw-r--r--src/WixToolset.Core/Preprocessor.cs72
-rw-r--r--src/WixToolset.Core/ResolvedVariableEventHandler.cs39
-rw-r--r--src/WixToolset.Core/SourceFile.cs2
-rw-r--r--src/WixToolset.Core/Util.cs17
-rw-r--r--src/WixToolset.Core/Uuid.cs9
-rw-r--r--src/WixToolset.Core/WixFileNotFoundException.cs (renamed from src/WixToolset.Core/Exceptions/WixFileNotFoundException.cs)12
-rw-r--r--src/WixToolset.Core/WixGenericMessageEventArgs.cs45
-rw-r--r--src/WixToolset.Core/WixStrings.Designer.cs250
-rw-r--r--src/WixToolset.Core/WixStrings.resx75
-rw-r--r--src/WixToolset.Core/WixToolsetServiceProvider.cs6
-rw-r--r--src/WixToolset.Core/WixVariableResolver.cs26
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs4
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs16
-rw-r--r--src/wix/Program.cs70
104 files changed, 2055 insertions, 9192 deletions
diff --git a/src/WixToolset.BuildTasks/DoIt.cs b/src/WixToolset.BuildTasks/DoIt.cs
index dddf433c..aabd92b5 100644
--- a/src/WixToolset.BuildTasks/DoIt.cs
+++ b/src/WixToolset.BuildTasks/DoIt.cs
@@ -9,6 +9,7 @@ namespace WixToolset.BuildTasks
9 using Microsoft.Build.Utilities; 9 using Microsoft.Build.Utilities;
10 using WixToolset.Core; 10 using WixToolset.Core;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
13 14
14 /// <summary> 15 /// <summary>
@@ -16,11 +17,13 @@ namespace WixToolset.BuildTasks
16 /// </summary> 17 /// </summary>
17 public sealed class DoIt : Task 18 public sealed class DoIt : Task
18 { 19 {
19 public DoIt() 20 public DoIt() : this(null)
20 { 21 {
21 Messaging.Instance.InitializeAppName("WIX", "wix.exe"); 22 }
22 23
23 Messaging.Instance.Display += this.DisplayMessage; 24 public DoIt(IMessageListener listener)
25 {
26 this.Listener = listener ?? new MsbuildMessageListener(this.Log, "WIX", "wix.exe");
24 } 27 }
25 28
26 public string AdditionalOptions { get; set; } 29 public string AdditionalOptions { get; set; }
@@ -112,6 +115,8 @@ namespace WixToolset.BuildTasks
112 public string[] SuppressIces { get; set; } 115 public string[] SuppressIces { get; set; }
113 public string AdditionalCub { get; set; } 116 public string AdditionalCub { get; set; }
114 117
118 private IMessageListener Listener { get; }
119
115 public override bool Execute() 120 public override bool Execute()
116 { 121 {
117 try 122 try
@@ -168,7 +173,11 @@ namespace WixToolset.BuildTasks
168 var serviceProvider = new WixToolsetServiceProvider(); 173 var serviceProvider = new WixToolsetServiceProvider();
169 174
170 var context = serviceProvider.GetService<ICommandLineContext>(); 175 var context = serviceProvider.GetService<ICommandLineContext>();
171 context.Messaging = Messaging.Instance; 176
177 var messaging = serviceProvider.GetService<IMessaging>();
178 messaging.SetListener(this.Listener);
179
180 context.Messaging = messaging;
172 context.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider); 181 context.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider);
173 context.Arguments = commandLineString; 182 context.Arguments = commandLineString;
174 183
@@ -284,5 +293,53 @@ namespace WixToolset.BuildTasks
284 // commandLineBuilder.AppendFileNamesIfNotNull(this.SourceFiles, " "); 293 // commandLineBuilder.AppendFileNamesIfNotNull(this.SourceFiles, " ");
285 // } 294 // }
286 //} 295 //}
296
297 private class MsbuildMessageListener : IMessageListener
298 {
299 public MsbuildMessageListener(TaskLoggingHelper logger, string longName, string shortName)
300 {
301 this.Logger = logger;
302 this.LongAppName = longName;
303 this.ShortAppName = shortName;
304 }
305
306 public string ShortAppName { get; }
307
308 public string LongAppName { get; }
309
310 private TaskLoggingHelper Logger { get; }
311
312 public void Write(Message message)
313 {
314 switch (message.Level)
315 {
316 case MessageLevel.Error:
317 this.Logger.LogError(null, this.ShortAppName + message.Id.ToString(), null, message.SourceLineNumbers?.FileName ?? this.LongAppName, message.SourceLineNumbers?.LineNumber ?? 0, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
318 break;
319
320 case MessageLevel.Warning:
321 this.Logger.LogWarning(null, this.ShortAppName + message.Id.ToString(), null, message.SourceLineNumbers?.FileName ?? this.LongAppName, message.SourceLineNumbers?.LineNumber ?? 0, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
322 break;
323
324 default:
325 // TODO: Revisit this because something is going horribly awry. The commented out LogMessage call is crashing saying that the "message" parameter is null. When you look at the call stack, the code
326 // is in the wrong LogMessage override and the "null" subcategory was passed in as the message. Not clear why it is picking the wrong overload.
327 //if (message.Id > 0)
328 //{
329 // this.Logger.LogMessage(null, code, null, message.SourceLineNumber?.FileName, message.SourceLineNumber?.LineNumber ?? 0, 0, 0, 0, MessageImportance.Normal, message.Format, message.FormatData);
330 //}
331 //else
332 //{
333 this.Logger.LogMessage(MessageImportance.Normal, message.ResourceNameOrFormat, message.MessageArgs);
334 //}
335 break;
336 }
337 }
338
339 public void Write(string message)
340 {
341 this.Logger.LogMessage(MessageImportance.Low, message);
342 }
343 }
287 } 344 }
288} 345}
diff --git a/src/WixToolset.BuildTasks/WixToolTask.cs b/src/WixToolset.BuildTasks/WixToolTask.cs
index 2e5e8705..69c837c3 100644
--- a/src/WixToolset.BuildTasks/WixToolTask.cs
+++ b/src/WixToolset.BuildTasks/WixToolTask.cs
@@ -184,8 +184,6 @@ namespace WixToolset.BuildTasks
184 this.messagesAvailable = new ManualResetEvent(false); 184 this.messagesAvailable = new ManualResetEvent(false);
185 this.toolExited = new ManualResetEvent(false); 185 this.toolExited = new ManualResetEvent(false);
186 186
187 Util.RunningInMsBuild = true;
188
189 WixToolTaskLogger logger = new WixToolTaskLogger(this.messageQueue, this.messagesAvailable); 187 WixToolTaskLogger logger = new WixToolTaskLogger(this.messageQueue, this.messagesAvailable);
190 TextWriter saveConsoleOut = Console.Out; 188 TextWriter saveConsoleOut = Console.Out;
191 TextWriter saveConsoleError = Console.Error; 189 TextWriter saveConsoleError = Console.Error;
diff --git a/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs b/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs
index 0baa6094..df328eb6 100644
--- a/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs
+++ b/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs
@@ -6,6 +6,7 @@ namespace WixToolset.Core.Burn.Bundles
6 using System.Diagnostics; 6 using System.Diagnostics;
7 using System.IO; 7 using System.IO;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility.Services;
9 10
10 /// <summary> 11 /// <summary>
11 /// Common functionality for Burn PE Writer & Reader for the WiX toolset. 12 /// Common functionality for Burn PE Writer & Reader for the WiX toolset.
@@ -77,7 +78,6 @@ namespace WixToolset.Core.Burn.Bundles
77 78
78 protected const UInt32 BURN_SECTION_MAGIC = 0x00f14300; 79 protected const UInt32 BURN_SECTION_MAGIC = 0x00f14300;
79 protected const UInt32 BURN_SECTION_VERSION = 0x00000002; 80 protected const UInt32 BURN_SECTION_VERSION = 0x00000002;
80
81 protected string fileExe; 81 protected string fileExe;
82 protected UInt32 peOffset = UInt32.MaxValue; 82 protected UInt32 peOffset = UInt32.MaxValue;
83 protected UInt16 sections = UInt16.MaxValue; 83 protected UInt16 sections = UInt16.MaxValue;
@@ -103,8 +103,9 @@ namespace WixToolset.Core.Burn.Bundles
103 /// </summary> 103 /// </summary>
104 /// <param name="fileExe">File to modify in-place.</param> 104 /// <param name="fileExe">File to modify in-place.</param>
105 /// <param name="bundleGuid">GUID for the bundle.</param> 105 /// <param name="bundleGuid">GUID for the bundle.</param>
106 public BurnCommon(string fileExe) 106 public BurnCommon(IMessaging messaging, string fileExe)
107 { 107 {
108 this.messaging = messaging;
108 this.fileExe = fileExe; 109 this.fileExe = fileExe;
109 } 110 }
110 111
@@ -123,6 +124,8 @@ namespace WixToolset.Core.Burn.Bundles
123 public UInt32 AttachedContainerAddress { get; protected set; } 124 public UInt32 AttachedContainerAddress { get; protected set; }
124 public UInt32 AttachedContainerSize { get; protected set; } 125 public UInt32 AttachedContainerSize { get; protected set; }
125 126
127 protected IMessaging messaging { get; }
128
126 public void Dispose() 129 public void Dispose()
127 { 130 {
128 Dispose(true); 131 Dispose(true);
@@ -176,21 +179,21 @@ namespace WixToolset.Core.Burn.Bundles
176 uint32 = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_MAGIC); 179 uint32 = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_MAGIC);
177 if (BURN_SECTION_MAGIC != uint32) 180 if (BURN_SECTION_MAGIC != uint32)
178 { 181 {
179 Messaging.Instance.OnMessage(WixErrors.InvalidBundle(this.fileExe)); 182 this.messaging.Write(ErrorMessages.InvalidBundle(this.fileExe));
180 return false; 183 return false;
181 } 184 }
182 185
183 this.Version = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_VERSION); 186 this.Version = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_VERSION);
184 if (BURN_SECTION_VERSION != this.Version) 187 if (BURN_SECTION_VERSION != this.Version)
185 { 188 {
186 Messaging.Instance.OnMessage(WixErrors.BundleTooNew(this.fileExe, this.Version)); 189 this.messaging.Write(ErrorMessages.BundleTooNew(this.fileExe, this.Version));
187 return false; 190 return false;
188 } 191 }
189 192
190 uint32 = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_FORMAT); // We only know how to deal with CABs right now 193 uint32 = BurnCommon.ReadUInt32(bytes, BURN_SECTION_OFFSET_FORMAT); // We only know how to deal with CABs right now
191 if (1 != uint32) 194 if (1 != uint32)
192 { 195 {
193 Messaging.Instance.OnMessage(WixErrors.InvalidBundle(this.fileExe)); 196 this.messaging.Write(ErrorMessages.InvalidBundle(this.fileExe));
194 return false; 197 return false;
195 } 198 }
196 199
@@ -257,7 +260,7 @@ namespace WixToolset.Core.Burn.Bundles
257 260
258 if (UInt32.MaxValue == wixburnSectionOffset) 261 if (UInt32.MaxValue == wixburnSectionOffset)
259 { 262 {
260 Messaging.Instance.OnMessage(WixErrors.StubMissingWixburnSection(this.fileExe)); 263 this.messaging.Write(ErrorMessages.StubMissingWixburnSection(this.fileExe));
261 return false; 264 return false;
262 } 265 }
263 266
@@ -265,7 +268,7 @@ namespace WixToolset.Core.Burn.Bundles
265 // the smallest alignment (512 bytes), but just to be paranoid... 268 // the smallest alignment (512 bytes), but just to be paranoid...
266 if (BURN_SECTION_SIZE > BurnCommon.ReadUInt32(bytes, IMAGE_SECTION_HEADER_OFFSET_SIZEOFRAWDATA)) 269 if (BURN_SECTION_SIZE > BurnCommon.ReadUInt32(bytes, IMAGE_SECTION_HEADER_OFFSET_SIZEOFRAWDATA))
267 { 270 {
268 Messaging.Instance.OnMessage(WixErrors.StubWixburnSectionTooSmall(this.fileExe)); 271 this.messaging.Write(ErrorMessages.StubWixburnSectionTooSmall(this.fileExe));
269 return false; 272 return false;
270 } 273 }
271 274
@@ -294,7 +297,7 @@ namespace WixToolset.Core.Burn.Bundles
294 // Verify the NT signature... 297 // Verify the NT signature...
295 if (IMAGE_NT_SIGNATURE != BurnCommon.ReadUInt32(bytes, IMAGE_NT_HEADER_OFFSET_SIGNATURE)) 298 if (IMAGE_NT_SIGNATURE != BurnCommon.ReadUInt32(bytes, IMAGE_NT_HEADER_OFFSET_SIGNATURE))
296 { 299 {
297 Messaging.Instance.OnMessage(WixErrors.InvalidStubExe(this.fileExe)); 300 this.messaging.Write(ErrorMessages.InvalidStubExe(this.fileExe));
298 return false; 301 return false;
299 } 302 }
300 303
@@ -329,7 +332,7 @@ namespace WixToolset.Core.Burn.Bundles
329 // Verify the DOS 'MZ' signature. 332 // Verify the DOS 'MZ' signature.
330 if (IMAGE_DOS_SIGNATURE != BurnCommon.ReadUInt16(bytes, IMAGE_DOS_HEADER_OFFSET_MAGIC)) 333 if (IMAGE_DOS_SIGNATURE != BurnCommon.ReadUInt16(bytes, IMAGE_DOS_HEADER_OFFSET_MAGIC))
331 { 334 {
332 Messaging.Instance.OnMessage(WixErrors.InvalidStubExe(this.fileExe)); 335 this.messaging.Write(ErrorMessages.InvalidStubExe(this.fileExe));
333 return false; 336 return false;
334 } 337 }
335 338
diff --git a/src/WixToolset.Core.Burn/Bundles/BurnReader.cs b/src/WixToolset.Core.Burn/Bundles/BurnReader.cs
index 3b3076c4..b4e23623 100644
--- a/src/WixToolset.Core.Burn/Bundles/BurnReader.cs
+++ b/src/WixToolset.Core.Burn/Bundles/BurnReader.cs
@@ -8,6 +8,7 @@ namespace WixToolset.Core.Burn.Bundles
8 using System.IO; 8 using System.IO;
9 using System.Xml; 9 using System.Xml;
10 using WixToolset.Core.Native; 10 using WixToolset.Core.Native;
11 using WixToolset.Extensibility.Services;
11 12
12 /// <summary> 13 /// <summary>
13 /// Burn PE reader for the WiX toolset. 14 /// Burn PE reader for the WiX toolset.
@@ -32,8 +33,8 @@ namespace WixToolset.Core.Burn.Bundles
32 /// Creates a BurnReader for reading a PE file. 33 /// Creates a BurnReader for reading a PE file.
33 /// </summary> 34 /// </summary>
34 /// <param name="fileExe">File to read.</param> 35 /// <param name="fileExe">File to read.</param>
35 private BurnReader(string fileExe) 36 private BurnReader(IMessaging messaging, string fileExe)
36 : base(fileExe) 37 : base(messaging, fileExe)
37 { 38 {
38 this.attachedContainerPayloadNames = new List<DictionaryEntry>(); 39 this.attachedContainerPayloadNames = new List<DictionaryEntry>();
39 } 40 }
@@ -59,9 +60,9 @@ namespace WixToolset.Core.Burn.Bundles
59 /// </summary> 60 /// </summary>
60 /// <param name="fileExe">Path to file.</param> 61 /// <param name="fileExe">Path to file.</param>
61 /// <returns>Burn reader.</returns> 62 /// <returns>Burn reader.</returns>
62 public static BurnReader Open(string fileExe) 63 public static BurnReader Open(IMessaging messaging, string fileExe)
63 { 64 {
64 BurnReader reader = new BurnReader(fileExe); 65 BurnReader reader = new BurnReader(messaging, fileExe);
65 66
66 reader.binaryReader = new BinaryReader(File.Open(fileExe, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)); 67 reader.binaryReader = new BinaryReader(File.Open(fileExe, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete));
67 if (!reader.Initialize(reader.binaryReader)) 68 if (!reader.Initialize(reader.binaryReader))
diff --git a/src/WixToolset.Core.Burn/Bundles/BurnWriter.cs b/src/WixToolset.Core.Burn/Bundles/BurnWriter.cs
index e7365212..08eeaa15 100644
--- a/src/WixToolset.Core.Burn/Bundles/BurnWriter.cs
+++ b/src/WixToolset.Core.Burn/Bundles/BurnWriter.cs
@@ -6,6 +6,7 @@ namespace WixToolset.Core.Burn.Bundles
6 using System.Diagnostics; 6 using System.Diagnostics;
7 using System.IO; 7 using System.IO;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility.Services;
9 10
10 /// <summary> 11 /// <summary>
11 /// Burn PE writer for the WiX toolset. 12 /// Burn PE writer for the WiX toolset.
@@ -30,8 +31,8 @@ namespace WixToolset.Core.Burn.Bundles
30 /// </summary> 31 /// </summary>
31 /// <param name="fileExe">File to modify in-place.</param> 32 /// <param name="fileExe">File to modify in-place.</param>
32 /// <param name="bundleGuid">GUID for the bundle.</param> 33 /// <param name="bundleGuid">GUID for the bundle.</param>
33 private BurnWriter(string fileExe) 34 private BurnWriter(IMessaging messaging, string fileExe)
34 : base(fileExe) 35 : base(messaging, fileExe)
35 { 36 {
36 } 37 }
37 38
@@ -40,9 +41,9 @@ namespace WixToolset.Core.Burn.Bundles
40 /// </summary> 41 /// </summary>
41 /// <param name="fileExe">Path to file.</param> 42 /// <param name="fileExe">Path to file.</param>
42 /// <returns>Burn writer.</returns> 43 /// <returns>Burn writer.</returns>
43 public static BurnWriter Open(string fileExe) 44 public static BurnWriter Open(IMessaging messaging, string fileExe)
44 { 45 {
45 BurnWriter writer = new BurnWriter(fileExe); 46 BurnWriter writer = new BurnWriter(messaging, fileExe);
46 47
47 using (BinaryReader binaryReader = new BinaryReader(File.Open(fileExe, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete))) 48 using (BinaryReader binaryReader = new BinaryReader(File.Open(fileExe, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)))
48 { 49 {
@@ -76,7 +77,7 @@ namespace WixToolset.Core.Burn.Bundles
76 this.WriteToBurnSectionOffset(BURN_SECTION_OFFSET_MAGIC, BURN_SECTION_MAGIC); 77 this.WriteToBurnSectionOffset(BURN_SECTION_OFFSET_MAGIC, BURN_SECTION_MAGIC);
77 this.WriteToBurnSectionOffset(BURN_SECTION_OFFSET_VERSION, BURN_SECTION_VERSION); 78 this.WriteToBurnSectionOffset(BURN_SECTION_OFFSET_VERSION, BURN_SECTION_VERSION);
78 79
79 Messaging.Instance.OnMessage(WixVerboses.BundleGuid(bundleId.ToString("B"))); 80 this.messaging.Write(VerboseMessages.BundleGuid(bundleId.ToString("B")));
80 this.binaryWriter.BaseStream.Seek(this.wixburnDataOffset + BURN_SECTION_OFFSET_BUNDLEGUID, SeekOrigin.Begin); 81 this.binaryWriter.BaseStream.Seek(this.wixburnDataOffset + BURN_SECTION_OFFSET_BUNDLEGUID, SeekOrigin.Begin);
81 this.binaryWriter.Write(bundleId.ToByteArray()); 82 this.binaryWriter.Write(bundleId.ToByteArray());
82 83
diff --git a/src/WixToolset.Core.Burn/Inscribe/InscribeBundleCommand.cs b/src/WixToolset.Core.Burn/Inscribe/InscribeBundleCommand.cs
index 5eb76479..0dea8b1d 100644
--- a/src/WixToolset.Core.Burn/Inscribe/InscribeBundleCommand.cs
+++ b/src/WixToolset.Core.Burn/Inscribe/InscribeBundleCommand.cs
@@ -29,7 +29,7 @@ namespace WixToolset.Core.Burn.Inscribe
29 { 29 {
30 reader.Stream.Seek(reader.AttachedContainerAddress, SeekOrigin.Begin); 30 reader.Stream.Seek(reader.AttachedContainerAddress, SeekOrigin.Begin);
31 31
32 using (BurnWriter writer = BurnWriter.Open(tempFile)) 32 using (BurnWriter writer = BurnWriter.Open(this.Context.Messaging, tempFile))
33 { 33 {
34 writer.RememberThenResetSignature(); 34 writer.RememberThenResetSignature();
35 writer.AppendContainer(reader.Stream, reader.AttachedContainerSize, BurnCommon.Container.Attached); 35 writer.AppendContainer(reader.Stream, reader.AttachedContainerSize, BurnCommon.Container.Attached);
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
index 1f2cee74..0f278640 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
@@ -8,22 +8,25 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Rows;
12 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Tuples;
12 using WixToolset.Extensibility.Services;
13 13
14 /// <summary> 14 /// <summary>
15 /// AssignMediaCommand assigns files to cabs based on Media or MediaTemplate rows. 15 /// AssignMediaCommand assigns files to cabs based on Media or MediaTemplate rows.
16 /// </summary> 16 /// </summary>
17 internal class AssignMediaCommand 17 internal class AssignMediaCommand
18 { 18 {
19 public AssignMediaCommand(IntermediateSection section) 19 public AssignMediaCommand(IntermediateSection section, IMessaging messaging)
20 { 20 {
21 this.CabinetNameTemplate = "Cab{0}.cab"; 21 this.CabinetNameTemplate = "Cab{0}.cab";
22 this.Section = section; 22 this.Section = section;
23 this.Messaging = messaging;
23 } 24 }
24 25
25 private IntermediateSection Section { get; } 26 private IntermediateSection Section { get; }
26 27
28 private IMessaging Messaging { get; }
29
27 public IEnumerable<FileFacade> FileFacades { private get; set; } 30 public IEnumerable<FileFacade> FileFacades { private get; set; }
28 31
29 public bool FilesCompressed { private get; set; } 32 public bool FilesCompressed { private get; set; }
@@ -60,7 +63,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
60 // If both tables are authored, it is an error. 63 // If both tables are authored, it is an error.
61 if (mediaTemplateTable.Count > 0 && mediaTable.Count > 1) 64 if (mediaTemplateTable.Count > 0 && mediaTable.Count > 1)
62 { 65 {
63 throw new WixException(WixErrors.MediaTableCollision(null)); 66 throw new WixException(ErrorMessages.MediaTableCollision(null));
64 } 67 }
65 68
66 // When building merge module, all the files go to "#MergeModule.CABinet". 69 // When building merge module, all the files go to "#MergeModule.CABinet".
@@ -144,11 +147,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
144 } 147 }
145 catch (FormatException) 148 catch (FormatException)
146 { 149 {
147 throw new WixException(WixErrors.IllegalEnvironmentVariable("WIX_MUMS", mumsString)); 150 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("WIX_MUMS", mumsString));
148 } 151 }
149 catch (OverflowException) 152 catch (OverflowException)
150 { 153 {
151 throw new WixException(WixErrors.MaximumUncompressedMediaSizeTooLarge(null, maxPreCabSizeInMB)); 154 throw new WixException(ErrorMessages.MaximumUncompressedMediaSizeTooLarge(null, maxPreCabSizeInMB));
152 } 155 }
153 156
154 foreach (FileFacade facade in this.FileFacades) 157 foreach (FileFacade facade in this.FileFacades)
@@ -234,8 +237,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
234 { 237 {
235 if (cabinetMediaRows.TryGetValue(mediaRow.Cabinet, out var existingRow)) 238 if (cabinetMediaRows.TryGetValue(mediaRow.Cabinet, out var existingRow))
236 { 239 {
237 Messaging.Instance.OnMessage(WixErrors.DuplicateCabinetName(mediaRow.SourceLineNumbers, mediaRow.Cabinet)); 240 this.Messaging.Write(ErrorMessages.DuplicateCabinetName(mediaRow.SourceLineNumbers, mediaRow.Cabinet));
238 Messaging.Instance.OnMessage(WixErrors.DuplicateCabinetName2(existingRow.SourceLineNumbers, existingRow.Cabinet)); 241 this.Messaging.Write(ErrorMessages.DuplicateCabinetName2(existingRow.SourceLineNumbers, existingRow.Cabinet));
239 } 242 }
240 else 243 else
241 { 244 {
@@ -259,7 +262,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
259 { 262 {
260 if (!mediaRows.TryGetValue(facade.WixFile.DiskId, out var mediaRow)) 263 if (!mediaRows.TryGetValue(facade.WixFile.DiskId, out var mediaRow))
261 { 264 {
262 Messaging.Instance.OnMessage(WixErrors.MissingMedia(facade.File.SourceLineNumbers, facade.WixFile.DiskId)); 265 this.Messaging.Write(ErrorMessages.MissingMedia(facade.File.SourceLineNumbers, facade.WixFile.DiskId));
263 continue; 266 continue;
264 } 267 }
265 268
@@ -279,7 +282,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
279 } 282 }
280 else 283 else
281 { 284 {
282 Messaging.Instance.OnMessage(WixErrors.ExpectedMediaCabinet(facade.File.SourceLineNumbers, facade.File.File, facade.WixFile.DiskId)); 285 this.Messaging.Write(ErrorMessages.ExpectedMediaCabinet(facade.File.SourceLineNumbers, facade.File.File, facade.WixFile.DiskId));
283 } 286 }
284 } 287 }
285 } 288 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
index 9e30aed2..410e462a 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
@@ -35,6 +35,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
35 this.ExpectedEmbeddedFiles = context.ExpectedEmbeddedFiles; 35 this.ExpectedEmbeddedFiles = context.ExpectedEmbeddedFiles;
36 this.Extensions = context.Extensions; 36 this.Extensions = context.Extensions;
37 this.Intermediate = context.IntermediateRepresentation; 37 this.Intermediate = context.IntermediateRepresentation;
38 this.Messaging = context.Messaging;
38 this.OutputPath = context.OutputPath; 39 this.OutputPath = context.OutputPath;
39 this.PdbFile = context.OutputPdbPath; 40 this.PdbFile = context.OutputPdbPath;
40 this.IntermediateFolder = context.IntermediateFolder; 41 this.IntermediateFolder = context.IntermediateFolder;
@@ -68,6 +69,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
68 69
69 private Intermediate Intermediate { get; } 70 private Intermediate Intermediate { get; }
70 71
72 private IMessaging Messaging { get; }
73
71 private string OutputPath { get; } 74 private string OutputPath { get; }
72 75
73 private bool SuppressAddingValidationRows { get; } 76 private bool SuppressAddingValidationRows { get; }
@@ -160,7 +163,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
160 // Sequence all the actions. 163 // Sequence all the actions.
161 { 164 {
162 var command = new SequenceActionsCommand(section); 165 var command = new SequenceActionsCommand(section);
163 command.Messaging = Messaging.Instance; 166 command.Messaging = this.Messaging;
164 command.Execute(); 167 command.Execute();
165 } 168 }
166 169
@@ -191,12 +194,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
191 ////} 194 ////}
192#endif 195#endif
193 196
194 if (Messaging.Instance.EncounteredError) 197 if (this.Messaging.EncounteredError)
195 { 198 {
196 return; 199 return;
197 } 200 }
198 201
199 Messaging.Instance.OnMessage(WixVerboses.UpdatingFileInformation()); 202 this.Messaging.Write(VerboseMessages.UpdatingFileInformation());
200 203
201 // This must occur after all variables and source paths have been resolved. 204 // This must occur after all variables and source paths have been resolved.
202 List<FileFacade> fileFacades; 205 List<FileFacade> fileFacades;
@@ -215,7 +218,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
215 218
216 // Gather information about files that did not come from merge modules (i.e. rows with a reference to the File table). 219 // Gather information about files that did not come from merge modules (i.e. rows with a reference to the File table).
217 { 220 {
218 var command = new UpdateFileFacadesCommand(section); 221 var command = new UpdateFileFacadesCommand(this.Messaging, section);
219 command.FileFacades = fileFacades; 222 command.FileFacades = fileFacades;
220 command.UpdateFileFacades = fileFacades.Where(f => !f.FromModule); 223 command.UpdateFileFacades = fileFacades.Where(f => !f.FromModule);
221 command.OverwriteHash = true; 224 command.OverwriteHash = true;
@@ -227,13 +230,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
227 // Now that the variable cache is populated, resolve any delayed fields. 230 // Now that the variable cache is populated, resolve any delayed fields.
228 if (this.DelayedFields.Any()) 231 if (this.DelayedFields.Any())
229 { 232 {
230 var command = new ResolveDelayedFieldsCommand(this.DelayedFields, variableCache); 233 var command = new ResolveDelayedFieldsCommand(this.Messaging, this.DelayedFields, variableCache);
231 command.Execute(); 234 command.Execute();
232 } 235 }
233 236
234 // Set generated component guids. 237 // Set generated component guids.
235 { 238 {
236 var command = new CalculateComponentGuids(section); 239 var command = new CalculateComponentGuids(this.Messaging, section);
237 command.Execute(); 240 command.Execute();
238 } 241 }
239 242
@@ -244,7 +247,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
244 247
245 if (wixMergeTuples.Any()) 248 if (wixMergeTuples.Any())
246 { 249 {
247 var command = new ExtractMergeModuleFilesCommand(section, wixMergeTuples); 250 var command = new ExtractMergeModuleFilesCommand(this.Messaging, section, wixMergeTuples);
248 command.FileFacades = fileFacades; 251 command.FileFacades = fileFacades;
249 command.OutputInstallerVersion = installerVersion; 252 command.OutputInstallerVersion = installerVersion;
250 command.SuppressLayout = this.SuppressLayout; 253 command.SuppressLayout = this.SuppressLayout;
@@ -265,7 +268,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
265#endif 268#endif
266 269
267 // stop processing if an error previously occurred 270 // stop processing if an error previously occurred
268 if (Messaging.Instance.EncounteredError) 271 if (this.Messaging.EncounteredError)
269 { 272 {
270 return; 273 return;
271 } 274 }
@@ -280,7 +283,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
280 Dictionary<MediaTuple, IEnumerable<FileFacade>> filesByCabinetMedia; 283 Dictionary<MediaTuple, IEnumerable<FileFacade>> filesByCabinetMedia;
281 IEnumerable<FileFacade> uncompressedFiles; 284 IEnumerable<FileFacade> uncompressedFiles;
282 { 285 {
283 var command = new AssignMediaCommand(section); 286 var command = new AssignMediaCommand(section, this.Messaging);
284 command.FileFacades = fileFacades; 287 command.FileFacades = fileFacades;
285 command.FilesCompressed = compressed; 288 command.FilesCompressed = compressed;
286 command.Execute(); 289 command.Execute();
@@ -291,7 +294,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
291 } 294 }
292 295
293 // stop processing if an error previously occurred 296 // stop processing if an error previously occurred
294 if (Messaging.Instance.EncounteredError) 297 if (this.Messaging.EncounteredError)
295 { 298 {
296 return; 299 return;
297 } 300 }
@@ -355,7 +358,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
355#endif 358#endif
356 359
357 // Stop processing if an error previously occurred. 360 // Stop processing if an error previously occurred.
358 if (Messaging.Instance.EncounteredError) 361 if (this.Messaging.EncounteredError)
359 { 362 {
360 return; 363 return;
361 } 364 }
@@ -374,13 +377,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
374 string layoutDirectory = Path.GetDirectoryName(this.OutputPath); 377 string layoutDirectory = Path.GetDirectoryName(this.OutputPath);
375 if (!this.SuppressLayout || OutputType.Module == output.Type) 378 if (!this.SuppressLayout || OutputType.Module == output.Type)
376 { 379 {
377 Messaging.Instance.OnMessage(WixVerboses.CreatingCabinetFiles()); 380 this.Messaging.Write(VerboseMessages.CreatingCabinetFiles());
378 381
379 var command = new CreateCabinetsCommand(); 382 var command = new CreateCabinetsCommand();
380 command.CabbingThreadCount = this.CabbingThreadCount; 383 command.CabbingThreadCount = this.CabbingThreadCount;
381 command.CabCachePath = this.CabCachePath; 384 command.CabCachePath = this.CabCachePath;
382 command.DefaultCompressionLevel = this.DefaultCompressionLevel; 385 command.DefaultCompressionLevel = this.DefaultCompressionLevel;
383 command.Output = output; 386 command.Output = output;
387 command.Messaging = this.Messaging;
384 command.BackendExtensions = this.BackendExtensions; 388 command.BackendExtensions = this.BackendExtensions;
385 command.LayoutDirectory = layoutDirectory; 389 command.LayoutDirectory = layoutDirectory;
386 command.Compressed = compressed; 390 command.Compressed = compressed;
@@ -435,13 +439,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
435 this.ValidateComponentGuids(output); 439 this.ValidateComponentGuids(output);
436 440
437 // stop processing if an error previously occurred 441 // stop processing if an error previously occurred
438 if (Messaging.Instance.EncounteredError) 442 if (this.Messaging.EncounteredError)
439 { 443 {
440 return; 444 return;
441 } 445 }
442 446
443 // Generate database file. 447 // Generate database file.
444 Messaging.Instance.OnMessage(WixVerboses.GeneratingDatabase()); 448 this.Messaging.Write(VerboseMessages.GeneratingDatabase());
445 string tempDatabaseFile = Path.Combine(this.IntermediateFolder, Path.GetFileName(this.OutputPath)); 449 string tempDatabaseFile = Path.Combine(this.IntermediateFolder, Path.GetFileName(this.OutputPath));
446 this.GenerateDatabase(output, tempDatabaseFile, false, false); 450 this.GenerateDatabase(output, tempDatabaseFile, false, false);
447 451
@@ -452,7 +456,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
452 } 456 }
453 457
454 // Stop processing if an error previously occurred. 458 // Stop processing if an error previously occurred.
455 if (Messaging.Instance.EncounteredError) 459 if (this.Messaging.EncounteredError)
456 { 460 {
457 return; 461 return;
458 } 462 }
@@ -468,7 +472,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
468 // Merge modules. 472 // Merge modules.
469 if (OutputType.Product == output.Type) 473 if (OutputType.Product == output.Type)
470 { 474 {
471 Messaging.Instance.OnMessage(WixVerboses.MergingModules()); 475 this.Messaging.Write(VerboseMessages.MergingModules());
472 476
473 var command = new MergeModulesCommand(); 477 var command = new MergeModulesCommand();
474 command.FileFacades = fileFacades; 478 command.FileFacades = fileFacades;
@@ -478,7 +482,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
478 command.Execute(); 482 command.Execute();
479 } 483 }
480 484
481 if (Messaging.Instance.EncounteredError) 485 if (this.Messaging.EncounteredError)
482 { 486 {
483 return; 487 return;
484 } 488 }
@@ -492,12 +496,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
492 // set the output file for source line information 496 // set the output file for source line information
493 this.Validator.Output = this.Output; 497 this.Validator.Output = this.Output;
494 498
495 Messaging.Instance.OnMessage(WixVerboses.ValidatingDatabase()); 499 Messaging.Instance.Write(WixVerboses.ValidatingDatabase());
496 500
497 this.Validator.Validate(tempDatabaseFile); 501 this.Validator.Validate(tempDatabaseFile);
498 502
499 stopwatch.Stop(); 503 stopwatch.Stop();
500 Messaging.Instance.OnMessage(WixVerboses.ValidatedDatabase(stopwatch.ElapsedMilliseconds)); 504 Messaging.Instance.Write(WixVerboses.ValidatedDatabase(stopwatch.ElapsedMilliseconds));
501 505
502 // Stop processing if an error occurred. 506 // Stop processing if an error occurred.
503 if (Messaging.Instance.EncounteredError) 507 if (Messaging.Instance.EncounteredError)
@@ -508,7 +512,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
508#endif 512#endif
509 513
510 // Process uncompressed files. 514 // Process uncompressed files.
511 if (!Messaging.Instance.EncounteredError && !this.SuppressLayout && uncompressedFiles.Any()) 515 if (!this.Messaging.EncounteredError && !this.SuppressLayout && uncompressedFiles.Any())
512 { 516 {
513 var command = new ProcessUncompressedFilesCommand(section); 517 var command = new ProcessUncompressedFilesCommand(section);
514 command.Compressed = compressed; 518 command.Compressed = compressed;
@@ -908,11 +912,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
908 912
909 if (allComponentsHaveConditions) 913 if (allComponentsHaveConditions)
910 { 914 {
911 Messaging.Instance.OnMessage(WixWarnings.DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(row.SourceLineNumbers, row.Component, row.Guid)); 915 this.Messaging.Write(WarningMessages.DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(row.SourceLineNumbers, row.Component, row.Guid));
912 } 916 }
913 else 917 else
914 { 918 {
915 Messaging.Instance.OnMessage(WixErrors.DuplicateComponentGuids(row.SourceLineNumbers, row.Component, row.Guid)); 919 this.Messaging.Write(ErrorMessages.DuplicateComponentGuids(row.SourceLineNumbers, row.Component, row.Guid));
916 } 920 }
917 } 921 }
918 922
@@ -929,6 +933,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
929 private void UpdateControlText(Output output) 933 private void UpdateControlText(Output output)
930 { 934 {
931 var command = new UpdateControlTextCommand(); 935 var command = new UpdateControlTextCommand();
936 command.Messaging = this.Messaging;
932 command.BBControlTable = output.Tables["BBControl"]; 937 command.BBControlTable = output.Tables["BBControl"];
933 command.WixBBControlTable = output.Tables["WixBBControl"]; 938 command.WixBBControlTable = output.Tables["WixBBControl"];
934 command.ControlTable = output.Tables["Control"]; 939 command.ControlTable = output.Tables["Control"];
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
index 49440cea..800ebac0 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
@@ -6,11 +6,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Globalization; 7 using System.Globalization;
8 using System.IO; 8 using System.IO;
9 using WixToolset.Core.Native;
9 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.WindowsInstaller;
10 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Services;
11 using WixToolset.Msi; 14 using WixToolset.Msi;
12 using WixToolset.Core.Native;
13 using WixToolset.Data.WindowsInstaller;
14 15
15 internal class BindTransformCommand 16 internal class BindTransformCommand
16 { 17 {
@@ -22,6 +23,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
22 23
23 public Output Transform { private get; set; } 24 public Output Transform { private get; set; }
24 25
26 public IMessaging Messaging { private get; set; }
27
25 public string OutputPath { private get; set; } 28 public string OutputPath { private get; set; }
26 29
27 public void Execute() 30 public void Execute()
@@ -197,7 +200,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
197 if (((int)TransformFlags.ValidateUpgradeCode & transformFlags) != 0 && 200 if (((int)TransformFlags.ValidateUpgradeCode & transformFlags) != 0 &&
198 (String.IsNullOrEmpty(targetUpgradeCode) || String.IsNullOrEmpty(updatedUpgradeCode))) 201 (String.IsNullOrEmpty(targetUpgradeCode) || String.IsNullOrEmpty(updatedUpgradeCode)))
199 { 202 {
200 Messaging.Instance.OnMessage(WixErrors.BothUpgradeCodesRequired()); 203 this.Messaging.Write(ErrorMessages.BothUpgradeCodesRequired());
201 } 204 }
202 205
203 string emptyFile = null; 206 string emptyFile = null;
@@ -276,7 +279,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
276 { 279 {
277 if (RowOperation.Add == fileRow.Operation) 280 if (RowOperation.Add == fileRow.Operation)
278 { 281 {
279 Messaging.Instance.OnMessage(WixErrors.InvalidAddedFileRowWithoutSequence(fileRow.SourceLineNumbers, (string)fileRow[0])); 282 this.Messaging.Write(ErrorMessages.InvalidAddedFileRowWithoutSequence(fileRow.SourceLineNumbers, (string)fileRow[0]));
280 break; 283 break;
281 } 284 }
282 285
@@ -384,7 +387,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
384 //} 387 //}
385 388
386 // Any errors encountered up to this point can cause errors during generation. 389 // Any errors encountered up to this point can cause errors during generation.
387 if (Messaging.Instance.EncounteredError) 390 if (this.Messaging.EncounteredError)
388 { 391 {
389 return; 392 return;
390 } 393 }
@@ -419,7 +422,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
419 } 422 }
420 else 423 else
421 { 424 {
422 Messaging.Instance.OnMessage(WixErrors.NoDifferencesInTransform(this.Transform.SourceLineNumbers)); 425 this.Messaging.Write(ErrorMessages.NoDifferencesInTransform(this.Transform.SourceLineNumbers));
423 } 426 }
424 } 427 }
425 } 428 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
index fde781a3..0c167699 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
@@ -4,13 +4,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
4{ 4{
5 using System; 5 using System;
6 using System.Collections; 6 using System.Collections;
7 using System.Collections.Generic;
8 using System.IO; 7 using System.IO;
9 using System.Linq; 8 using System.Linq;
10 using System.Threading; 9 using System.Threading;
11 using WixToolset.Core.Bind; 10 using WixToolset.Core.Bind;
12 using WixToolset.Core.Native; 11 using WixToolset.Core.Native;
13 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Extensibility.Services;
14 14
15 /// <summary> 15 /// <summary>
16 /// Builds cabinets using multiple threads. This implements a thread pool that generates cabinets with multiple 16 /// Builds cabinets using multiple threads. This implements a thread pool that generates cabinets with multiple
@@ -25,16 +25,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
25 // Address of Binder's callback function for Cabinet Splitting 25 // Address of Binder's callback function for Cabinet Splitting
26 private IntPtr newCabNamesCallBackAddress; 26 private IntPtr newCabNamesCallBackAddress;
27 27
28 public int MaximumCabinetSizeForLargeFileSplitting { get; set; }
29
30 public int MaximumUncompressedMediaSize { get; set; }
31
32 /// <summary> 28 /// <summary>
33 /// Instantiate a new CabinetBuilder. 29 /// Instantiate a new CabinetBuilder.
34 /// </summary> 30 /// </summary>
35 /// <param name="threadCount">number of threads to use</param> 31 /// <param name="threadCount">number of threads to use</param>
36 /// <param name="newCabNamesCallBackAddress">Address of Binder's callback function for Cabinet Splitting</param> 32 /// <param name="newCabNamesCallBackAddress">Address of Binder's callback function for Cabinet Splitting</param>
37 public CabinetBuilder(int threadCount, IntPtr newCabNamesCallBackAddress) 33 public CabinetBuilder(IMessaging messaging, int threadCount, IntPtr newCabNamesCallBackAddress)
38 { 34 {
39 if (0 >= threadCount) 35 if (0 >= threadCount)
40 { 36 {
@@ -43,13 +39,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
43 39
44 this.cabinetWorkItems = new Queue(); 40 this.cabinetWorkItems = new Queue();
45 this.lockObject = new object(); 41 this.lockObject = new object();
46 42 this.Messaging = messaging;
47 this.threadCount = threadCount; 43 this.threadCount = threadCount;
48 44
49 // Set Address of Binder's callback function for Cabinet Splitting 45 // Set Address of Binder's callback function for Cabinet Splitting
50 this.newCabNamesCallBackAddress = newCabNamesCallBackAddress; 46 this.newCabNamesCallBackAddress = newCabNamesCallBackAddress;
51 } 47 }
52 48
49 private IMessaging Messaging { get; }
50
51 public int MaximumCabinetSizeForLargeFileSplitting { get; set; }
52
53 public int MaximumUncompressedMediaSize { get; set; }
54
53 /// <summary> 55 /// <summary>
54 /// Enqueues a CabinetWorkItem to the queue. 56 /// Enqueues a CabinetWorkItem to the queue.
55 /// </summary> 57 /// </summary>
@@ -119,11 +121,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
119 } 121 }
120 catch (WixException we) 122 catch (WixException we)
121 { 123 {
122 Messaging.Instance.OnMessage(we.Error); 124 this.Messaging.Write(we.Error);
123 } 125 }
124 catch (Exception e) 126 catch (Exception e)
125 { 127 {
126 Messaging.Instance.OnMessage(WixErrors.UnexpectedException(e.Message, e.GetType().ToString(), e.StackTrace)); 128 this.Messaging.Write(ErrorMessages.UnexpectedException(e.Message, e.GetType().ToString(), e.StackTrace));
127 } 129 }
128 } 130 }
129 131
@@ -133,7 +135,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
133 /// <param name="cabinetWorkItem">CabinetWorkItem containing information about the cabinet to create.</param> 135 /// <param name="cabinetWorkItem">CabinetWorkItem containing information about the cabinet to create.</param>
134 private void CreateCabinet(CabinetWorkItem cabinetWorkItem) 136 private void CreateCabinet(CabinetWorkItem cabinetWorkItem)
135 { 137 {
136 Messaging.Instance.OnMessage(WixVerboses.CreateCabinet(cabinetWorkItem.CabinetFile)); 138 this.Messaging.Write(VerboseMessages.CreateCabinet(cabinetWorkItem.CabinetFile));
137 139
138 int maxCabinetSize = 0; // The value of 0 corresponds to default of 2GB which means no cabinet splitting 140 int maxCabinetSize = 0; // The value of 0 corresponds to default of 2GB which means no cabinet splitting
139 ulong maxPreCompressedSizeInBytes = 0; 141 ulong maxPreCompressedSizeInBytes = 0;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs
index 370d4b9c..cf8eb338 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs
@@ -109,7 +109,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
109 } 109 }
110 catch (ArgumentException) 110 catch (ArgumentException)
111 { 111 {
112 throw new WixException(WixErrors.IllegalCharactersInPath(path)); 112 throw new WixException(ErrorMessages.IllegalCharactersInPath(path));
113 } 113 }
114 } 114 }
115 } 115 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
index 0c0aea1f..056f92a7 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
@@ -10,17 +10,21 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using WixToolset.Core.Native; 10 using WixToolset.Core.Native;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Tuples;
13 using WixToolset.Extensibility.Services;
13 14
14 /// <summary> 15 /// <summary>
15 /// Set the guids for components with generatable guids. 16 /// Set the guids for components with generatable guids.
16 /// </summary> 17 /// </summary>
17 internal class CalculateComponentGuids 18 internal class CalculateComponentGuids
18 { 19 {
19 public CalculateComponentGuids(IntermediateSection section) 20 public CalculateComponentGuids(IMessaging messaging, IntermediateSection section)
20 { 21 {
22 this.Messaging = messaging;
21 this.Section = section; 23 this.Section = section;
22 } 24 }
23 25
26 private IMessaging Messaging { get; }
27
24 private IntermediateSection Section { get; } 28 private IntermediateSection Section { get; }
25 29
26 public void Execute() 30 public void Execute()
@@ -43,7 +47,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
43 47
44 if (String.IsNullOrEmpty(componentRow.KeyPath) || odbcDataSourceKeyPath) 48 if (String.IsNullOrEmpty(componentRow.KeyPath) || odbcDataSourceKeyPath)
45 { 49 {
46 Messaging.Instance.OnMessage(WixErrors.IllegalComponentWithAutoGeneratedGuid(componentRow.SourceLineNumbers)); 50 this.Messaging.Write(ErrorMessages.IllegalComponentWithAutoGeneratedGuid(componentRow.SourceLineNumbers));
47 continue; 51 continue;
48 } 52 }
49 53
@@ -143,13 +147,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
143 path.StartsWith(@"StartMenuFolder\programs", StringComparison.Ordinal) || 147 path.StartsWith(@"StartMenuFolder\programs", StringComparison.Ordinal) ||
144 path.StartsWith(@"WindowsFolder\fonts", StringComparison.Ordinal)) 148 path.StartsWith(@"WindowsFolder\fonts", StringComparison.Ordinal))
145 { 149 {
146 Messaging.Instance.OnMessage(WixErrors.IllegalPathForGeneratedComponentGuid(componentRow.SourceLineNumbers, fileRow.Component_, path)); 150 this.Messaging.Write(ErrorMessages.IllegalPathForGeneratedComponentGuid(componentRow.SourceLineNumbers, fileRow.Component_, path));
147 } 151 }
148 152
149 // if component has more than one file, the key path must be versioned 153 // if component has more than one file, the key path must be versioned
150 if (1 < numFilesInComponent && String.IsNullOrEmpty(fileRow.Version)) 154 if (1 < numFilesInComponent && String.IsNullOrEmpty(fileRow.Version))
151 { 155 {
152 Messaging.Instance.OnMessage(WixErrors.IllegalGeneratedGuidComponentUnversionedKeypath(componentRow.SourceLineNumbers)); 156 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentUnversionedKeypath(componentRow.SourceLineNumbers));
153 } 157 }
154 } 158 }
155 else 159 else
@@ -157,13 +161,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
157 // not a key path, so it must be an unversioned file if component has more than one file 161 // not a key path, so it must be an unversioned file if component has more than one file
158 if (1 < numFilesInComponent && !String.IsNullOrEmpty(fileRow.Version)) 162 if (1 < numFilesInComponent && !String.IsNullOrEmpty(fileRow.Version))
159 { 163 {
160 Messaging.Instance.OnMessage(WixErrors.IllegalGeneratedGuidComponentVersionedNonkeypath(componentRow.SourceLineNumbers)); 164 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentVersionedNonkeypath(componentRow.SourceLineNumbers));
161 } 165 }
162 } 166 }
163 } 167 }
164 168
165 // if the rules were followed, reward with a generated guid 169 // if the rules were followed, reward with a generated guid
166 if (!Messaging.Instance.EncounteredError) 170 if (!this.Messaging.EncounteredError)
167 { 171 {
168 componentRow.ComponentId = Uuid.NewUuid(BindDatabaseCommand.WixComponentGuidNamespace, path).ToString("B").ToUpperInvariant(); 172 componentRow.ComponentId = Uuid.NewUuid(BindDatabaseCommand.WixComponentGuidNamespace, path).ToString("B").ToUpperInvariant();
169 } 173 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
index 559d440c..13408312 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
@@ -12,13 +12,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
12 using WixToolset.Data.WindowsInstaller; 12 using WixToolset.Data.WindowsInstaller;
13 using WixToolset.Data.WindowsInstaller.Rows; 13 using WixToolset.Data.WindowsInstaller.Rows;
14 using WixToolset.Extensibility; 14 using WixToolset.Extensibility;
15 using WixToolset.Extensibility.Services;
15 16
16 internal class CopyTransformDataCommand 17 internal class CopyTransformDataCommand
17 { 18 {
18 public bool CopyOutFileRows { private get; set; } 19 public bool CopyOutFileRows { private get; set; }
19 20
20 public IEnumerable<IBinderExtension> Extensions { private get; set; } 21 public IEnumerable<IBinderExtension> Extensions { private get; set; }
21 22
23 public IMessaging Messaging { private get; set; }
24
22 public Output Output { private get; set; } 25 public Output Output { private get; set; }
23 26
24 public TableDefinitionCollection TableDefinitions { private get; set; } 27 public TableDefinitionCollection TableDefinitions { private get; set; }
@@ -465,14 +468,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
465 { 468 {
466 if (seqDuplicateFiles < seqInstallFiles) 469 if (seqDuplicateFiles < seqInstallFiles)
467 { 470 {
468 throw new WixException(WixErrors.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); 471 throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
469 } 472 }
470 else 473 else
471 { 474 {
472 sequence = (seqDuplicateFiles + seqInstallFiles) / 2; 475 sequence = (seqDuplicateFiles + seqInstallFiles) / 2;
473 if (seqInstallFiles == sequence || seqDuplicateFiles == sequence) 476 if (seqInstallFiles == sequence || seqDuplicateFiles == sequence)
474 { 477 {
475 throw new WixException(WixErrors.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); 478 throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
476 } 479 }
477 } 480 }
478 } 481 }
@@ -579,7 +582,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
579 // Make sure all changes to non keypath files also had a change in the keypath. 582 // Make sure all changes to non keypath files also had a change in the keypath.
580 if (!componentWithChangedKeyPath.ContainsKey(componentFile.Key) && componentKeyPath.ContainsKey(componentFile.Key)) 583 if (!componentWithChangedKeyPath.ContainsKey(componentFile.Key) && componentKeyPath.ContainsKey(componentFile.Key))
581 { 584 {
582 Messaging.Instance.OnMessage(WixWarnings.UpdateOfNonKeyPathFile((string)componentFile.Value, (string)componentFile.Key, (string)componentKeyPath[componentFile.Key])); 585 this.Messaging.Write(WarningMessages.UpdateOfNonKeyPathFile((string)componentFile.Value, (string)componentFile.Key, (string)componentKeyPath[componentFile.Key]));
583 } 586 }
584 } 587 }
585 } 588 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
index 0aa50bd9..28e7f6df 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
@@ -16,6 +16,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
16 using WixToolset.Data.WindowsInstaller; 16 using WixToolset.Data.WindowsInstaller;
17 using WixToolset.Data.WindowsInstaller.Rows; 17 using WixToolset.Data.WindowsInstaller.Rows;
18 using WixToolset.Extensibility; 18 using WixToolset.Extensibility;
19 using WixToolset.Extensibility.Services;
19 20
20 /// <summary> 21 /// <summary>
21 /// Creates cabinet files. 22 /// Creates cabinet files.
@@ -45,6 +46,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
45 46
46 public string CabCachePath { private get; set; } 47 public string CabCachePath { private get; set; }
47 48
49 public IMessaging Messaging { private get; set; }
50
48 public string TempFilesLocation { private get; set; } 51 public string TempFilesLocation { private get; set; }
49 52
50 /// <summary> 53 /// <summary>
@@ -85,7 +88,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
85 this.SetCabbingThreadCount(); 88 this.SetCabbingThreadCount();
86 89
87 // Send Binder object to Facilitate NewCabNamesCallBack Callback 90 // Send Binder object to Facilitate NewCabNamesCallBack Callback
88 CabinetBuilder cabinetBuilder = new CabinetBuilder(this.CabbingThreadCount, Marshal.GetFunctionPointerForDelegate(this.newCabNamesCallBack)); 91 CabinetBuilder cabinetBuilder = new CabinetBuilder(this.Messaging, this.CabbingThreadCount, Marshal.GetFunctionPointerForDelegate(this.newCabNamesCallBack));
89 92
90 // Supply Compile MediaTemplate Attributes to Cabinet Builder 93 // Supply Compile MediaTemplate Attributes to Cabinet Builder
91 this.GetMediaTemplateAttributes(out var MaximumCabinetSizeForLargeFileSplitting, out var MaximumUncompressedMediaSize); 94 this.GetMediaTemplateAttributes(out var MaximumCabinetSizeForLargeFileSplitting, out var MaximumUncompressedMediaSize);
@@ -120,14 +123,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
120 } 123 }
121 124
122 // stop processing if an error previously occurred 125 // stop processing if an error previously occurred
123 if (Messaging.Instance.EncounteredError) 126 if (this.Messaging.EncounteredError)
124 { 127 {
125 return; 128 return;
126 } 129 }
127 130
128 // create queued cabinets with multiple threads 131 // create queued cabinets with multiple threads
129 cabinetBuilder.CreateQueuedCabinets(); 132 cabinetBuilder.CreateQueuedCabinets();
130 if (Messaging.Instance.EncounteredError) 133 if (this.Messaging.EncounteredError)
131 { 134 {
132 return; 135 return;
133 } 136 }
@@ -152,7 +155,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
152 155
153 if (0 >= this.CabbingThreadCount) 156 if (0 >= this.CabbingThreadCount)
154 { 157 {
155 throw new WixException(WixErrors.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors)); 158 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors));
156 } 159 }
157 } 160 }
158 else // default to 1 if the environment variable is not set 161 else // default to 1 if the environment variable is not set
@@ -160,15 +163,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
160 this.CabbingThreadCount = 1; 163 this.CabbingThreadCount = 1;
161 } 164 }
162 165
163 Messaging.Instance.OnMessage(WixVerboses.SetCabbingThreadCount(this.CabbingThreadCount.ToString())); 166 this.Messaging.Write(VerboseMessages.SetCabbingThreadCount(this.CabbingThreadCount.ToString()));
164 } 167 }
165 catch (ArgumentException) 168 catch (ArgumentException)
166 { 169 {
167 throw new WixException(WixErrors.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors)); 170 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors));
168 } 171 }
169 catch (FormatException) 172 catch (FormatException)
170 { 173 {
171 throw new WixException(WixErrors.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors)); 174 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("NUMBER_OF_PROCESSORS", numberOfProcessors));
172 } 175 }
173 } 176 }
174 } 177 }
@@ -202,11 +205,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
202 // If building a patch, remind them to run -p for torch. 205 // If building a patch, remind them to run -p for torch.
203 if (OutputType.Patch == output.Type) 206 if (OutputType.Patch == output.Type)
204 { 207 {
205 Messaging.Instance.OnMessage(WixWarnings.EmptyCabinet(mediaRow.SourceLineNumbers, cabinetName, true)); 208 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaRow.SourceLineNumbers, cabinetName, true));
206 } 209 }
207 else 210 else
208 { 211 {
209 Messaging.Instance.OnMessage(WixWarnings.EmptyCabinet(mediaRow.SourceLineNumbers, cabinetName)); 212 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaRow.SourceLineNumbers, cabinetName));
210 } 213 }
211 } 214 }
212 215
@@ -223,7 +226,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
223 } 226 }
224 else // reuse the cabinet from the cabinet cache. 227 else // reuse the cabinet from the cabinet cache.
225 { 228 {
226 Messaging.Instance.OnMessage(WixVerboses.ReusingCabCache(mediaRow.SourceLineNumbers, mediaRow.Cabinet, resolvedCabinet.Path)); 229 this.Messaging.Write(VerboseMessages.ReusingCabCache(mediaRow.SourceLineNumbers, mediaRow.Cabinet, resolvedCabinet.Path));
227 230
228 try 231 try
229 { 232 {
@@ -237,7 +240,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
237 } 240 }
238 catch (Exception e) 241 catch (Exception e)
239 { 242 {
240 Messaging.Instance.OnMessage(WixWarnings.CannotUpdateCabCache(mediaRow.SourceLineNumbers, resolvedCabinet.Path, e.Message)); 243 this.Messaging.Write(WarningMessages.CannotUpdateCabCache(mediaRow.SourceLineNumbers, resolvedCabinet.Path, e.Message));
241 } 244 }
242 } 245 }
243 246
@@ -303,7 +306,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
303 if (!mutex.WaitOne(0, false)) // Check if you can get the lock 306 if (!mutex.WaitOne(0, false)) // Check if you can get the lock
304 { 307 {
305 // Cound not get the Lock 308 // Cound not get the Lock
306 Messaging.Instance.OnMessage(WixVerboses.CabinetsSplitInParallel()); 309 this.Messaging.Write(VerboseMessages.CabinetsSplitInParallel());
307 mutex.WaitOne(); // Wait on other thread 310 mutex.WaitOne(); // Wait on other thread
308 } 311 }
309 312
@@ -333,7 +336,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
333 // Check if File Transfer was added 336 // Check if File Transfer was added
334 if (!transferAdded) 337 if (!transferAdded)
335 { 338 {
336 throw new WixException(WixErrors.SplitCabinetCopyRegistrationFailed(newCabinetName, firstCabinetName)); 339 throw new WixException(ErrorMessages.SplitCabinetCopyRegistrationFailed(newCabinetName, firstCabinetName));
337 } 340 }
338 341
339 // Add the new Cabinets to media table using LastSequence of Base Cabinet 342 // Add the new Cabinets to media table using LastSequence of Base Cabinet
@@ -365,14 +368,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
365 if (newCabinetName.Equals(mediaRow.Cabinet, StringComparison.InvariantCultureIgnoreCase)) 368 if (newCabinetName.Equals(mediaRow.Cabinet, StringComparison.InvariantCultureIgnoreCase))
366 { 369 {
367 // Name Collision of generated Split Cabinet Name and user Specified Cab name for current row 370 // Name Collision of generated Split Cabinet Name and user Specified Cab name for current row
368 throw new WixException(WixErrors.SplitCabinetNameCollision(newCabinetName, firstCabinetName)); 371 throw new WixException(ErrorMessages.SplitCabinetNameCollision(newCabinetName, firstCabinetName));
369 } 372 }
370 } 373 }
371 374
372 // Check if the last Split Cabinet was found in the Media Table 375 // Check if the last Split Cabinet was found in the Media Table
373 if (!lastSplitCabinetFound) 376 if (!lastSplitCabinetFound)
374 { 377 {
375 throw new WixException(WixErrors.SplitCabinetInsertionFailed(newCabinetName, firstCabinetName, lastCabinetOfThisSequence)); 378 throw new WixException(ErrorMessages.SplitCabinetInsertionFailed(newCabinetName, firstCabinetName, lastCabinetOfThisSequence));
376 } 379 }
377 380
378 // The new Row has to be inserted just after the last cab in this cabinet split chain according to DiskID Sort 381 // The new Row has to be inserted just after the last cab in this cabinet split chain according to DiskID Sort
@@ -454,11 +457,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
454 } 457 }
455 catch (FormatException) 458 catch (FormatException)
456 { 459 {
457 throw new WixException(WixErrors.IllegalEnvironmentVariable("WIX_MCSLFS", mcslfsString)); 460 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("WIX_MCSLFS", mcslfsString));
458 } 461 }
459 catch (OverflowException) 462 catch (OverflowException)
460 { 463 {
461 throw new WixException(WixErrors.MaximumCabinetSizeForLargeFileSplittingTooLarge(null, maxCabSizeForLargeFileInMB, MaxValueOfMaxCabSizeForLargeFileSplitting)); 464 throw new WixException(ErrorMessages.MaximumCabinetSizeForLargeFileSplittingTooLarge(null, maxCabSizeForLargeFileInMB, MaxValueOfMaxCabSizeForLargeFileSplitting));
462 } 465 }
463 466
464 try 467 try
@@ -476,11 +479,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
476 } 479 }
477 catch (FormatException) 480 catch (FormatException)
478 { 481 {
479 throw new WixException(WixErrors.IllegalEnvironmentVariable("WIX_MUMS", mumsString)); 482 throw new WixException(ErrorMessages.IllegalEnvironmentVariable("WIX_MUMS", mumsString));
480 } 483 }
481 catch (OverflowException) 484 catch (OverflowException)
482 { 485 {
483 throw new WixException(WixErrors.MaximumUncompressedMediaSizeTooLarge(null, maxPreCompressedSizeInMB)); 486 throw new WixException(ErrorMessages.MaximumUncompressedMediaSizeTooLarge(null, maxPreCompressedSizeInMB));
484 } 487 }
485 488
486 maxCabSizeForLargeFileSplitting = maxCabSizeForLargeFileInMB; 489 maxCabSizeForLargeFileSplitting = maxCabSizeForLargeFileInMB;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs
index 1fc7d068..9afb3260 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs
@@ -8,17 +8,21 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.Text; 8 using System.Text;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.WindowsInstaller; 10 using WixToolset.Data.WindowsInstaller;
11 using WixToolset.Extensibility.Services;
11 12
12 internal class CreateIdtFileCommand 13 internal class CreateIdtFileCommand
13 { 14 {
14 public CreateIdtFileCommand(Table table, int codepage, string intermediateFolder, bool keepAddedColumns) 15 public CreateIdtFileCommand(IMessaging messaging, Table table, int codepage, string intermediateFolder, bool keepAddedColumns)
15 { 16 {
17 this.Messaging = messaging;
16 this.Table = table; 18 this.Table = table;
17 this.Codepage = codepage; 19 this.Codepage = codepage;
18 this.IntermediateFolder = intermediateFolder; 20 this.IntermediateFolder = intermediateFolder;
19 this.KeepAddedColumns = keepAddedColumns; 21 this.KeepAddedColumns = keepAddedColumns;
20 } 22 }
21 23
24 private IMessaging Messaging { get; }
25
22 private Table Table { get; } 26 private Table Table { get; }
23 27
24 private int Codepage { get; set; } 28 private int Codepage { get; set; }
@@ -67,7 +71,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
67 71
68 if (TableDefinition.MaxColumnsInRealTable < table.Definition.Columns.Count) 72 if (TableDefinition.MaxColumnsInRealTable < table.Definition.Columns.Count)
69 { 73 {
70 throw new WixException(WixDataErrors.TooManyColumnsInRealTable(table.Definition.Name, table.Definition.Columns.Count, TableDefinition.MaxColumnsInRealTable)); 74 throw new WixException(ErrorMessages.TooManyColumnsInRealTable(table.Definition.Name, table.Definition.Columns.Count, TableDefinition.MaxColumnsInRealTable));
71 } 75 }
72 76
73 // Tack on the table header, and flush before we start writing bytes directly to the stream. 77 // Tack on the table header, and flush before we start writing bytes directly to the stream.
@@ -98,7 +102,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
98 } 102 }
99 catch (EncoderFallbackException) 103 catch (EncoderFallbackException)
100 { 104 {
101 Messaging.Instance.OnMessage(WixDataErrors.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.WindowsCodePage, CultureInfo.InvariantCulture))); 105 this.Messaging.Write(ErrorMessages.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.WindowsCodePage, CultureInfo.InvariantCulture)));
102 106
103 rowBytes = convertEncoding.GetBytes(rowString); 107 rowBytes = convertEncoding.GetBytes(rowString);
104 } 108 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
index a31c8079..e1777246 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
@@ -15,18 +15,22 @@ namespace WixToolset.Core.WindowsInstaller.Bind
15 using WixToolset.Core.Native; 15 using WixToolset.Core.Native;
16 using WixToolset.Core.Bind; 16 using WixToolset.Core.Bind;
17 using WixToolset.Data.Tuples; 17 using WixToolset.Data.Tuples;
18 using WixToolset.Extensibility.Services;
18 19
19 /// <summary> 20 /// <summary>
20 /// Retrieve files information and extract them from merge modules. 21 /// Retrieve files information and extract them from merge modules.
21 /// </summary> 22 /// </summary>
22 internal class ExtractMergeModuleFilesCommand 23 internal class ExtractMergeModuleFilesCommand
23 { 24 {
24 public ExtractMergeModuleFilesCommand(IntermediateSection section, List<WixMergeTuple> wixMergeTuples) 25 public ExtractMergeModuleFilesCommand(IMessaging messaging, IntermediateSection section, List<WixMergeTuple> wixMergeTuples)
25 { 26 {
27 this.Messaging = messaging;
26 this.Section = section; 28 this.Section = section;
27 this.WixMergeTuples = wixMergeTuples; 29 this.WixMergeTuples = wixMergeTuples;
28 } 30 }
29 31
32 private IMessaging Messaging { get; }
33
30 private IntermediateSection Section { get; } 34 private IntermediateSection Section { get; }
31 35
32 private List<WixMergeTuple> WixMergeTuples { get; } 36 private List<WixMergeTuple> WixMergeTuples { get; }
@@ -121,11 +125,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
121 // If case-sensitive collision with another merge module or a user-authored file identifier. 125 // If case-sensitive collision with another merge module or a user-authored file identifier.
122 if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.File, out var collidingFacade)) 126 if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.File, out var collidingFacade))
123 { 127 {
124 Messaging.Instance.OnMessage(WixErrors.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.File)); 128 this.Messaging.Write(ErrorMessages.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.File));
125 } 129 }
126 else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.File, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module 130 else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.File, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module
127 { 131 {
128 Messaging.Instance.OnMessage(WixErrors.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.File, collidingFacade.File.File)); 132 this.Messaging.Write(ErrorMessages.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.File, collidingFacade.File.File));
129 } 133 }
130 else // no collision 134 else // no collision
131 { 135 {
@@ -152,23 +156,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
152 int moduleInstallerVersion = Convert.ToInt32(moduleInstallerVersionString, CultureInfo.InvariantCulture); 156 int moduleInstallerVersion = Convert.ToInt32(moduleInstallerVersionString, CultureInfo.InvariantCulture);
153 if (moduleInstallerVersion > this.OutputInstallerVersion) 157 if (moduleInstallerVersion > this.OutputInstallerVersion)
154 { 158 {
155 Messaging.Instance.OnMessage(WixWarnings.InvalidHigherInstallerVersionInModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, moduleInstallerVersion, this.OutputInstallerVersion)); 159 this.Messaging.Write(WarningMessages.InvalidHigherInstallerVersionInModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, moduleInstallerVersion, this.OutputInstallerVersion));
156 } 160 }
157 } 161 }
158 catch (FormatException) 162 catch (FormatException)
159 { 163 {
160 throw new WixException(WixErrors.MissingOrInvalidModuleInstallerVersion(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, wixMergeRow.SourceFile, moduleInstallerVersionString)); 164 throw new WixException(ErrorMessages.MissingOrInvalidModuleInstallerVersion(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, wixMergeRow.SourceFile, moduleInstallerVersionString));
161 } 165 }
162 } 166 }
163 } 167 }
164 } 168 }
165 catch (FileNotFoundException) 169 catch (FileNotFoundException)
166 { 170 {
167 throw new WixException(WixErrors.FileNotFound(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile)); 171 throw new WixException(ErrorMessages.FileNotFound(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile));
168 } 172 }
169 catch (Win32Exception) 173 catch (Win32Exception)
170 { 174 {
171 throw new WixException(WixErrors.CannotOpenMergeModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, wixMergeRow.SourceFile)); 175 throw new WixException(ErrorMessages.CannotOpenMergeModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, wixMergeRow.SourceFile));
172 } 176 }
173 177
174 return containsFiles; 178 return containsFiles;
@@ -187,7 +191,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
187 } 191 }
188 catch (FormatException) 192 catch (FormatException)
189 { 193 {
190 Messaging.Instance.OnMessage(WixErrors.InvalidMergeLanguage(wixMergeRow.SourceLineNumbers, mergeId, wixMergeRow.Language.ToString())); 194 this.Messaging.Write(ErrorMessages.InvalidMergeLanguage(wixMergeRow.SourceLineNumbers, mergeId, wixMergeRow.Language.ToString()));
191 return; 195 return;
192 } 196 }
193 197
@@ -210,16 +214,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
210 } 214 }
211 catch (FileNotFoundException) 215 catch (FileNotFoundException)
212 { 216 {
213 throw new WixException(WixErrors.CabFileDoesNotExist(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); 217 throw new WixException(ErrorMessages.CabFileDoesNotExist(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath));
214 } 218 }
215 catch 219 catch
216 { 220 {
217 throw new WixException(WixErrors.CabExtractionFailed(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); 221 throw new WixException(ErrorMessages.CabExtractionFailed(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath));
218 } 222 }
219 } 223 }
220 catch (COMException ce) 224 catch (COMException ce)
221 { 225 {
222 throw new WixException(WixErrors.UnableToOpenModule(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile, ce.Message)); 226 throw new WixException(ErrorMessages.UnableToOpenModule(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile, ce.Message));
223 } 227 }
224 finally 228 finally
225 { 229 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs
index e4e66559..ee7cc61b 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs
@@ -13,6 +13,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
13 using WixToolset.Msi; 13 using WixToolset.Msi;
14 using WixToolset.Core.Native; 14 using WixToolset.Core.Native;
15 using WixToolset.Data.WindowsInstaller; 15 using WixToolset.Data.WindowsInstaller;
16 using WixToolset.Extensibility.Services;
16 17
17 internal class GenerateDatabaseCommand 18 internal class GenerateDatabaseCommand
18 { 19 {
@@ -25,6 +26,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
25 /// </summary> 26 /// </summary>
26 public bool KeepAddedColumns { private get; set; } 27 public bool KeepAddedColumns { private get; set; }
27 28
29 public IMessaging Messaging { private get; set; }
30
28 public Output Output { private get; set; } 31 public Output Output { private get; set; }
29 32
30 public string OutputPath { private get; set; } 33 public string OutputPath { private get; set; }
@@ -177,7 +180,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
177 try 180 try
178 { 181 {
179 //db.ImportTable(this.Output.Codepage, importTable, baseDirectory, this.KeepAddedColumns); 182 //db.ImportTable(this.Output.Codepage, importTable, baseDirectory, this.KeepAddedColumns);
180 var command = new CreateIdtFileCommand(importTable, this.Output.Codepage, baseDirectory, this.KeepAddedColumns); 183 var command = new CreateIdtFileCommand(this.Messaging, importTable, this.Output.Codepage, baseDirectory, this.KeepAddedColumns);
181 command.Execute(); 184 command.Execute();
182 185
183 db.Import(command.IdtPath); 186 db.Import(command.IdtPath);
@@ -262,11 +265,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
262 { 265 {
263 if (0xA1 == e.NativeErrorCode) // ERROR_BAD_PATHNAME 266 if (0xA1 == e.NativeErrorCode) // ERROR_BAD_PATHNAME
264 { 267 {
265 throw new WixException(WixErrors.FileNotFound(row.SourceLineNumbers, (string)row[i])); 268 throw new WixException(ErrorMessages.FileNotFound(row.SourceLineNumbers, (string)row[i]));
266 } 269 }
267 else 270 else
268 { 271 {
269 throw new WixException(WixErrors.Win32Exception(e.NativeErrorCode, e.Message)); 272 throw new WixException(ErrorMessages.Win32Exception(e.NativeErrorCode, e.Message));
270 } 273 }
271 } 274 }
272 } 275 }
@@ -279,7 +282,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
279 // check for a stream name that is more than 62 characters long (the maximum allowed length) 282 // check for a stream name that is more than 62 characters long (the maximum allowed length)
280 if (needStream && MsiInterop.MsiMaxStreamNameLength < streamName.Length) 283 if (needStream && MsiInterop.MsiMaxStreamNameLength < streamName.Length)
281 { 284 {
282 Messaging.Instance.OnMessage(WixErrors.StreamNameTooLong(row.SourceLineNumbers, table.Name, streamName.ToString(), streamName.Length)); 285 this.Messaging.Write(ErrorMessages.StreamNameTooLong(row.SourceLineNumbers, table.Name, streamName.ToString(), streamName.Length));
283 } 286 }
284 else // add the row to the database 287 else // add the row to the database
285 { 288 {
@@ -309,7 +312,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
309 // Bind the transform. 312 // Bind the transform.
310 this.BindTransform(subStorage.Data, transformFile); 313 this.BindTransform(subStorage.Data, transformFile);
311 314
312 if (Messaging.Instance.EncounteredError) 315 if (this.Messaging.EncounteredError)
313 { 316 {
314 continue; 317 continue;
315 } 318 }
@@ -338,7 +341,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
338 341
339 private void BindTransform(Output transform, string outputPath) 342 private void BindTransform(Output transform, string outputPath)
340 { 343 {
341 BindTransformCommand command = new BindTransformCommand(); 344 var command = new BindTransformCommand();
345 command.Messaging = this.Messaging;
342 command.Extensions = this.Extensions; 346 command.Extensions = this.Extensions;
343 command.TempFilesLocation = this.TempFilesLocation; 347 command.TempFilesLocation = this.TempFilesLocation;
344 command.Transform = transform; 348 command.Transform = transform;
@@ -372,7 +376,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
372 catch (WixInvalidIdtException) 376 catch (WixInvalidIdtException)
373 { 377 {
374 // the IDT should be valid, so an invalid code page was given 378 // the IDT should be valid, so an invalid code page was given
375 throw new WixException(WixErrors.IllegalCodepage(codepage)); 379 throw new WixException(ErrorMessages.IllegalCodepage(codepage));
376 } 380 }
377 } 381 }
378 } 382 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
index 32a05d93..8d1edb41 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
@@ -13,6 +13,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Data.WindowsInstaller.Rows; 15 using WixToolset.Data.WindowsInstaller.Rows;
16 using WixToolset.Extensibility.Services;
16 using WixToolset.MergeMod; 17 using WixToolset.MergeMod;
17 using WixToolset.Msi; 18 using WixToolset.Msi;
18 19
@@ -23,6 +24,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
23 { 24 {
24 public IEnumerable<FileFacade> FileFacades { private get; set; } 25 public IEnumerable<FileFacade> FileFacades { private get; set; }
25 26
27 public IMessaging Messaging { private get; set; }
28
26 public Output Output { private get; set; } 29 public Output Output { private get; set; }
27 30
28 public string OutputPath { private get; set; } 31 public string OutputPath { private get; set; }
@@ -73,11 +76,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
73 } 76 }
74 catch (FormatException) 77 catch (FormatException)
75 { 78 {
76 Messaging.Instance.OnMessage(WixErrors.InvalidMergeLanguage(wixMergeRow.SourceLineNumbers, wixMergeRow.Id, wixMergeRow.Language)); 79 this.Messaging.Write(ErrorMessages.InvalidMergeLanguage(wixMergeRow.SourceLineNumbers, wixMergeRow.Id, wixMergeRow.Language));
77 continue; 80 continue;
78 } 81 }
79 82
80 Messaging.Instance.OnMessage(WixVerboses.OpeningMergeModule(wixMergeRow.SourceFile, mergeLanguage)); 83 this.Messaging.Write(VerboseMessages.OpeningMergeModule(wixMergeRow.SourceFile, mergeLanguage));
81 merge.OpenModule(wixMergeRow.SourceFile, mergeLanguage); 84 merge.OpenModule(wixMergeRow.SourceFile, mergeLanguage);
82 moduleOpen = true; 85 moduleOpen = true;
83 86
@@ -89,7 +92,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
89 } 92 }
90 93
91 // merge the module into the database that's being built 94 // merge the module into the database that's being built
92 Messaging.Instance.OnMessage(WixVerboses.MergingMergeModule(wixMergeRow.SourceFile)); 95 this.Messaging.Write(VerboseMessages.MergingMergeModule(wixMergeRow.SourceFile));
93 merge.MergeEx(wixMergeRow.Feature, wixMergeRow.Directory, callback); 96 merge.MergeEx(wixMergeRow.Feature, wixMergeRow.Directory, callback);
94 97
95 // connect any non-primary features 98 // connect any non-primary features
@@ -99,7 +102,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
99 { 102 {
100 if (wixMergeRow.Id == (string)row[1]) 103 if (wixMergeRow.Id == (string)row[1])
101 { 104 {
102 Messaging.Instance.OnMessage(WixVerboses.ConnectingMergeModule(wixMergeRow.SourceFile, (string)row[0])); 105 this.Messaging.Write(VerboseMessages.ConnectingMergeModule(wixMergeRow.SourceFile, (string)row[0]));
103 merge.Connect((string)row[0]); 106 merge.Connect((string)row[0]);
104 } 107 }
105 } 108 }
@@ -144,38 +147,38 @@ namespace WixToolset.Core.WindowsInstaller.Bind
144 switch (mergeError.Type) 147 switch (mergeError.Type)
145 { 148 {
146 case MsmErrorType.msmErrorExclusion: 149 case MsmErrorType.msmErrorExclusion:
147 Messaging.Instance.OnMessage(WixErrors.MergeExcludedModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id, moduleKeys.ToString())); 150 this.Messaging.Write(ErrorMessages.MergeExcludedModule(wixMergeRow.SourceLineNumbers, wixMergeRow.Id, moduleKeys.ToString()));
148 break; 151 break;
149 case MsmErrorType.msmErrorFeatureRequired: 152 case MsmErrorType.msmErrorFeatureRequired:
150 Messaging.Instance.OnMessage(WixErrors.MergeFeatureRequired(wixMergeRow.SourceLineNumbers, mergeError.ModuleTable, moduleKeys.ToString(), wixMergeRow.SourceFile, wixMergeRow.Id)); 153 this.Messaging.Write(ErrorMessages.MergeFeatureRequired(wixMergeRow.SourceLineNumbers, mergeError.ModuleTable, moduleKeys.ToString(), wixMergeRow.SourceFile, wixMergeRow.Id));
151 break; 154 break;
152 case MsmErrorType.msmErrorLanguageFailed: 155 case MsmErrorType.msmErrorLanguageFailed:
153 Messaging.Instance.OnMessage(WixErrors.MergeLanguageFailed(wixMergeRow.SourceLineNumbers, mergeError.Language, wixMergeRow.SourceFile)); 156 this.Messaging.Write(ErrorMessages.MergeLanguageFailed(wixMergeRow.SourceLineNumbers, mergeError.Language, wixMergeRow.SourceFile));
154 break; 157 break;
155 case MsmErrorType.msmErrorLanguageUnsupported: 158 case MsmErrorType.msmErrorLanguageUnsupported:
156 Messaging.Instance.OnMessage(WixErrors.MergeLanguageUnsupported(wixMergeRow.SourceLineNumbers, mergeError.Language, wixMergeRow.SourceFile)); 159 this.Messaging.Write(ErrorMessages.MergeLanguageUnsupported(wixMergeRow.SourceLineNumbers, mergeError.Language, wixMergeRow.SourceFile));
157 break; 160 break;
158 case MsmErrorType.msmErrorResequenceMerge: 161 case MsmErrorType.msmErrorResequenceMerge:
159 Messaging.Instance.OnMessage(WixWarnings.MergeRescheduledAction(wixMergeRow.SourceLineNumbers, mergeError.DatabaseTable, databaseKeys.ToString(), wixMergeRow.SourceFile)); 162 this.Messaging.Write(WarningMessages.MergeRescheduledAction(wixMergeRow.SourceLineNumbers, mergeError.DatabaseTable, databaseKeys.ToString(), wixMergeRow.SourceFile));
160 break; 163 break;
161 case MsmErrorType.msmErrorTableMerge: 164 case MsmErrorType.msmErrorTableMerge:
162 if ("_Validation" != mergeError.DatabaseTable) // ignore merge errors in the _Validation table 165 if ("_Validation" != mergeError.DatabaseTable) // ignore merge errors in the _Validation table
163 { 166 {
164 Messaging.Instance.OnMessage(WixWarnings.MergeTableFailed(wixMergeRow.SourceLineNumbers, mergeError.DatabaseTable, databaseKeys.ToString(), wixMergeRow.SourceFile)); 167 this.Messaging.Write(WarningMessages.MergeTableFailed(wixMergeRow.SourceLineNumbers, mergeError.DatabaseTable, databaseKeys.ToString(), wixMergeRow.SourceFile));
165 } 168 }
166 break; 169 break;
167 case MsmErrorType.msmErrorPlatformMismatch: 170 case MsmErrorType.msmErrorPlatformMismatch:
168 Messaging.Instance.OnMessage(WixErrors.MergePlatformMismatch(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile)); 171 this.Messaging.Write(ErrorMessages.MergePlatformMismatch(wixMergeRow.SourceLineNumbers, wixMergeRow.SourceFile));
169 break; 172 break;
170 default: 173 default:
171 Messaging.Instance.OnMessage(WixErrors.UnexpectedException(String.Format(CultureInfo.CurrentUICulture, WixStrings.EXP_UnexpectedMergerErrorWithType, Enum.GetName(typeof(MsmErrorType), mergeError.Type), logPath), "InvalidOperationException", Environment.StackTrace)); 174 this.Messaging.Write(ErrorMessages.UnexpectedException(String.Format(CultureInfo.CurrentUICulture, WixStrings.EXP_UnexpectedMergerErrorWithType, Enum.GetName(typeof(MsmErrorType), mergeError.Type), logPath), "InvalidOperationException", Environment.StackTrace));
172 break; 175 break;
173 } 176 }
174 } 177 }
175 178
176 if (0 >= mergeErrors.Count && !commit) 179 if (0 >= mergeErrors.Count && !commit)
177 { 180 {
178 Messaging.Instance.OnMessage(WixErrors.UnexpectedException(String.Format(CultureInfo.CurrentUICulture, WixStrings.EXP_UnexpectedMergerErrorInSourceFile, wixMergeRow.SourceFile, logPath), "InvalidOperationException", Environment.StackTrace)); 181 this.Messaging.Write(ErrorMessages.UnexpectedException(String.Format(CultureInfo.CurrentUICulture, WixStrings.EXP_UnexpectedMergerErrorInSourceFile, wixMergeRow.SourceFile, logPath), "InvalidOperationException", Environment.StackTrace));
179 } 182 }
180 183
181 if (moduleOpen) 184 if (moduleOpen)
@@ -199,7 +202,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
199 } 202 }
200 203
201 // stop processing if an error previously occurred 204 // stop processing if an error previously occurred
202 if (Messaging.Instance.EncounteredError) 205 if (this.Messaging.EncounteredError)
203 { 206 {
204 return; 207 return;
205 } 208 }
@@ -223,7 +226,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
223 { 226 {
224 if (null != record) 227 if (null != record)
225 { 228 {
226 Messaging.Instance.OnMessage(WixWarnings.SuppressMergedAction((string)row[1], row[0].ToString())); 229 this.Messaging.Write(WarningMessages.SuppressMergedAction((string)row[1], row[0].ToString()));
227 view.Modify(ModifyView.Delete, record); 230 view.Modify(ModifyView.Delete, record);
228 } 231 }
229 } 232 }
@@ -251,7 +254,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
251 break; 254 break;
252 } 255 }
253 256
254 Messaging.Instance.OnMessage(WixWarnings.SuppressMergedAction(resultRecord.GetString(1), tableName)); 257 this.Messaging.Write(WarningMessages.SuppressMergedAction(resultRecord.GetString(1), tableName));
255 } 258 }
256 } 259 }
257 } 260 }
@@ -273,7 +276,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
273 } 276 }
274 277
275 // now update the Attributes column for the files from the Merge Modules 278 // now update the Attributes column for the files from the Merge Modules
276 Messaging.Instance.OnMessage(WixVerboses.ResequencingMergeModuleFiles()); 279 this.Messaging.Write(VerboseMessages.ResequencingMergeModuleFiles());
277 using (View view = db.OpenView("SELECT `Sequence`, `Attributes` FROM `File` WHERE `File`=?")) 280 using (View view = db.OpenView("SELECT `Sequence`, `Attributes` FROM `File` WHERE `File`=?"))
278 { 281 {
279 foreach (var file in this.FileFacades) 282 foreach (var file in this.FileFacades)
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
index aa4382f5..e1a26a67 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
@@ -97,7 +97,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
97 { 97 {
98 if (null == fileRecord) 98 if (null == fileRecord)
99 { 99 {
100 throw new WixException(WixErrors.FileIdentifierNotFound(facade.File.SourceLineNumbers, facade.File.File)); 100 throw new WixException(ErrorMessages.FileIdentifierNotFound(facade.File.SourceLineNumbers, facade.File.File));
101 } 101 }
102 102
103 relativeFileLayoutPath = Binder.GetFileSourcePath(directories, fileRecord[1], fileRecord[2], this.Compressed, this.LongNamesInImage); 103 relativeFileLayoutPath = Binder.GetFileSourcePath(directories, fileRecord[1], fileRecord[2], this.Compressed, this.LongNamesInImage);
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
index cf9c0332..47eb9408 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
@@ -9,6 +9,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
9 using WixToolset.Core.Native; 9 using WixToolset.Core.Native;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Tuples;
12 using WixToolset.Extensibility.Services;
12 13
13 internal class SequenceActionsCommand 14 internal class SequenceActionsCommand
14 { 15 {
@@ -27,7 +28,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
27 28
28 private Dictionary<string, WixActionTuple> StandardActionsById { get; } 29 private Dictionary<string, WixActionTuple> StandardActionsById { get; }
29 30
30 public Messaging Messaging { private get; set; } 31 public IMessaging Messaging { private get; set; }
31 32
32 public void Execute() 33 public void Execute()
33 { 34 {
@@ -64,10 +65,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
64 { 65 {
65 if (overridableActionRows.TryGetValue(actionRow.Id.Id, out var collidingActionRow)) 66 if (overridableActionRows.TryGetValue(actionRow.Id.Id, out var collidingActionRow))
66 { 67 {
67 this.Messaging.OnMessage(WixErrors.OverridableActionCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); 68 this.Messaging.Write(ErrorMessages.OverridableActionCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action));
68 if (null != collidingActionRow.SourceLineNumbers) 69 if (null != collidingActionRow.SourceLineNumbers)
69 { 70 {
70 this.Messaging.OnMessage(WixErrors.OverridableActionCollision2(collidingActionRow.SourceLineNumbers)); 71 this.Messaging.Write(ErrorMessages.OverridableActionCollision2(collidingActionRow.SourceLineNumbers));
71 } 72 }
72 } 73 }
73 else 74 else
@@ -93,10 +94,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
93 94
94 if (overridableActionRows.TryGetValue(actionRow.Id.Id, out var collidingActionRow)) 95 if (overridableActionRows.TryGetValue(actionRow.Id.Id, out var collidingActionRow))
95 { 96 {
96 this.Messaging.OnMessage(WixErrors.ActionCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); 97 this.Messaging.Write(ErrorMessages.ActionCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action));
97 if (null != collidingActionRow.SourceLineNumbers) 98 if (null != collidingActionRow.SourceLineNumbers)
98 { 99 {
99 this.Messaging.OnMessage(WixErrors.ActionCollision2(collidingActionRow.SourceLineNumbers)); 100 this.Messaging.Write(ErrorMessages.ActionCollision2(collidingActionRow.SourceLineNumbers));
100 } 101 }
101 } 102 }
102 else 103 else
@@ -127,20 +128,20 @@ namespace WixToolset.Core.WindowsInstaller.Bind
127 { 128 {
128 if (requiredActionRow.Overridable) 129 if (requiredActionRow.Overridable)
129 { 130 {
130 this.Messaging.OnMessage(WixWarnings.SuppressAction(suppressActionRow.SourceLineNumbers, suppressActionRow.Action, suppressActionRow.SequenceTable.ToString())); 131 this.Messaging.Write(WarningMessages.SuppressAction(suppressActionRow.SourceLineNumbers, suppressActionRow.Action, suppressActionRow.SequenceTable.ToString()));
131 if (null != requiredActionRow.SourceLineNumbers) 132 if (null != requiredActionRow.SourceLineNumbers)
132 { 133 {
133 this.Messaging.OnMessage(WixWarnings.SuppressAction2(requiredActionRow.SourceLineNumbers)); 134 this.Messaging.Write(WarningMessages.SuppressAction2(requiredActionRow.SourceLineNumbers));
134 } 135 }
135 136
136 requiredActionRows.Remove(key); 137 requiredActionRows.Remove(key);
137 } 138 }
138 else // suppressing a non-overridable action row 139 else // suppressing a non-overridable action row
139 { 140 {
140 this.Messaging.OnMessage(WixErrors.SuppressNonoverridableAction(suppressActionRow.SourceLineNumbers, suppressActionRow.SequenceTable.ToString(), suppressActionRow.Action)); 141 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction(suppressActionRow.SourceLineNumbers, suppressActionRow.SequenceTable.ToString(), suppressActionRow.Action));
141 if (null != requiredActionRow.SourceLineNumbers) 142 if (null != requiredActionRow.SourceLineNumbers)
142 { 143 {
143 this.Messaging.OnMessage(WixErrors.SuppressNonoverridableAction2(requiredActionRow.SourceLineNumbers)); 144 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction2(requiredActionRow.SourceLineNumbers));
144 } 145 }
145 } 146 }
146 } 147 }
@@ -156,14 +157,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
156 // check for standard actions that don't have a sequence number in a merge module 157 // check for standard actions that don't have a sequence number in a merge module
157 if (SectionType.Module == this.Section.Type && WindowsInstallerStandard.IsStandardAction(actionRow.Action)) 158 if (SectionType.Module == this.Section.Type && WindowsInstallerStandard.IsStandardAction(actionRow.Action))
158 { 159 {
159 this.Messaging.OnMessage(WixErrors.StandardActionRelativelyScheduledInModule(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); 160 this.Messaging.Write(ErrorMessages.StandardActionRelativelyScheduledInModule(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action));
160 } 161 }
161 162
162 this.SequenceActionRow(actionRow, requiredActionRows); 163 this.SequenceActionRow(actionRow, requiredActionRows);
163 } 164 }
164 else if (SectionType.Module == this.Section.Type && 0 < actionRow.Sequence && !WindowsInstallerStandard.IsStandardAction(actionRow.Action)) // check for custom actions and dialogs that have a sequence number 165 else if (SectionType.Module == this.Section.Type && 0 < actionRow.Sequence && !WindowsInstallerStandard.IsStandardAction(actionRow.Action)) // check for custom actions and dialogs that have a sequence number
165 { 166 {
166 this.Messaging.OnMessage(WixErrors.CustomActionSequencedInModule(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); 167 this.Messaging.Write(ErrorMessages.CustomActionSequencedInModule(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action));
167 } 168 }
168 } 169 }
169 170
@@ -231,10 +232,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
231 { 232 {
232 if (sequenceScheduledActionRow.Sequence == actionRow.Sequence) 233 if (sequenceScheduledActionRow.Sequence == actionRow.Sequence)
233 { 234 {
234 this.Messaging.OnMessage(WixWarnings.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence)); 235 this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence));
235 if (null != sequenceScheduledActionRow.SourceLineNumbers) 236 if (null != sequenceScheduledActionRow.SourceLineNumbers)
236 { 237 {
237 this.Messaging.OnMessage(WixWarnings.ActionSequenceCollision2(sequenceScheduledActionRow.SourceLineNumbers)); 238 this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionRow.SourceLineNumbers));
238 } 239 }
239 } 240 }
240 } 241 }
@@ -262,19 +263,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
262 // Create errors for all the before actions. 263 // Create errors for all the before actions.
263 foreach (var actionRow in relativeActions.PreviousActions) 264 foreach (var actionRow in relativeActions.PreviousActions)
264 { 265 {
265 this.Messaging.OnMessage(WixErrors.ActionScheduledRelativeToTerminationAction(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, absoluteActionRow.Action)); 266 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, absoluteActionRow.Action));
266 } 267 }
267 268
268 // Create errors for all the after actions. 269 // Create errors for all the after actions.
269 foreach (var actionRow in relativeActions.NextActions) 270 foreach (var actionRow in relativeActions.NextActions)
270 { 271 {
271 this.Messaging.OnMessage(WixErrors.ActionScheduledRelativeToTerminationAction(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, absoluteActionRow.Action)); 272 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, absoluteActionRow.Action));
272 } 273 }
273 274
274 // If there is source line information for the absolutely scheduled action display it 275 // If there is source line information for the absolutely scheduled action display it
275 if (absoluteActionRow.SourceLineNumbers != null) 276 if (absoluteActionRow.SourceLineNumbers != null)
276 { 277 {
277 this.Messaging.OnMessage(WixErrors.ActionScheduledRelativeToTerminationAction2(absoluteActionRow.SourceLineNumbers)); 278 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction2(absoluteActionRow.SourceLineNumbers));
278 } 279 }
279 280
280 continue; 281 continue;
@@ -289,10 +290,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
289 // look for collisions 290 // look for collisions
290 if (unusedSequence == previousUsedSequence) 291 if (unusedSequence == previousUsedSequence)
291 { 292 {
292 this.Messaging.OnMessage(WixErrors.NoUniqueActionSequenceNumber(relativeActionRow.SourceLineNumbers, relativeActionRow.SequenceTable.ToString(), relativeActionRow.Action, absoluteActionRow.Action)); 293 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionRow.SourceLineNumbers, relativeActionRow.SequenceTable.ToString(), relativeActionRow.Action, absoluteActionRow.Action));
293 if (absoluteActionRow.SourceLineNumbers != null) 294 if (absoluteActionRow.SourceLineNumbers != null)
294 { 295 {
295 this.Messaging.OnMessage(WixErrors.NoUniqueActionSequenceNumber2(absoluteActionRow.SourceLineNumbers)); 296 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionRow.SourceLineNumbers));
296 } 297 }
297 298
298 unusedSequence++; 299 unusedSequence++;
@@ -319,10 +320,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
319 320
320 if (unusedSequence == nextUsedSequence) 321 if (unusedSequence == nextUsedSequence)
321 { 322 {
322 this.Messaging.OnMessage(WixErrors.NoUniqueActionSequenceNumber(relativeActionRow.SourceLineNumbers, relativeActionRow.SequenceTable.ToString(), relativeActionRow.Action, absoluteActionRow.Action)); 323 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionRow.SourceLineNumbers, relativeActionRow.SequenceTable.ToString(), relativeActionRow.Action, absoluteActionRow.Action));
323 if (absoluteActionRow.SourceLineNumbers != null) 324 if (absoluteActionRow.SourceLineNumbers != null)
324 { 325 {
325 this.Messaging.OnMessage(WixErrors.NoUniqueActionSequenceNumber2(absoluteActionRow.SourceLineNumbers)); 326 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionRow.SourceLineNumbers));
326 } 327 }
327 328
328 unusedSequence--; 329 unusedSequence--;
@@ -596,7 +597,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
596 } 597 }
597 else if (actionRow == parentActionRow || this.ContainsChildActionRow(actionRow, parentActionRow)) // cycle detected 598 else if (actionRow == parentActionRow || this.ContainsChildActionRow(actionRow, parentActionRow)) // cycle detected
598 { 599 {
599 throw new WixException(WixErrors.ActionCircularDependency(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, parentActionRow.Action)); 600 throw new WixException(ErrorMessages.ActionCircularDependency(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, parentActionRow.Action));
600 } 601 }
601 602
602 // Add this action to the appropriate list of dependent action rows. 603 // Add this action to the appropriate list of dependent action rows.
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs
index dddc9380..3ad2470f 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs
@@ -7,9 +7,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.WindowsInstaller; 8 using WixToolset.Data.WindowsInstaller;
9 using WixToolset.Data.WindowsInstaller.Rows; 9 using WixToolset.Data.WindowsInstaller.Rows;
10 using WixToolset.Extensibility.Services;
10 11
11 internal class UpdateControlTextCommand 12 internal class UpdateControlTextCommand
12 { 13 {
14 public IMessaging Messaging { private get; set; }
15
13 public Table BBControlTable { private get; set; } 16 public Table BBControlTable { private get; set; }
14 17
15 public Table WixBBControlTable { private get; set; } 18 public Table WixBBControlTable { private get; set; }
@@ -60,19 +63,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
60 } 63 }
61 catch (DirectoryNotFoundException e) 64 catch (DirectoryNotFoundException e)
62 { 65 {
63 Messaging.Instance.OnMessage(WixErrors.BinderFileManagerMissingFile(sourceLineNumbers, e.Message)); 66 this.Messaging.Write(ErrorMessages.BinderFileManagerMissingFile(sourceLineNumbers, e.Message));
64 } 67 }
65 catch (FileNotFoundException e) 68 catch (FileNotFoundException e)
66 { 69 {
67 Messaging.Instance.OnMessage(WixErrors.BinderFileManagerMissingFile(sourceLineNumbers, e.Message)); 70 this.Messaging.Write(ErrorMessages.BinderFileManagerMissingFile(sourceLineNumbers, e.Message));
68 } 71 }
69 catch (IOException e) 72 catch (IOException e)
70 { 73 {
71 Messaging.Instance.OnMessage(WixErrors.BinderFileManagerMissingFile(sourceLineNumbers, e.Message)); 74 this.Messaging.Write(ErrorMessages.BinderFileManagerMissingFile(sourceLineNumbers, e.Message));
72 } 75 }
73 catch (NotSupportedException) 76 catch (NotSupportedException)
74 { 77 {
75 Messaging.Instance.OnMessage(WixErrors.FileNotFound(sourceLineNumbers, source)); 78 this.Messaging.Write(ErrorMessages.FileNotFound(sourceLineNumbers, source));
76 } 79 }
77 80
78 return text; 81 return text;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
index cf620e72..10eae8f8 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
@@ -15,6 +15,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
15 using WixToolset.Data; 15 using WixToolset.Data;
16 using WixToolset.Data.Tuples; 16 using WixToolset.Data.Tuples;
17 using WixToolset.Data.WindowsInstaller; 17 using WixToolset.Data.WindowsInstaller;
18 using WixToolset.Extensibility.Services;
18 using WixToolset.Msi; 19 using WixToolset.Msi;
19 20
20 /// <summary> 21 /// <summary>
@@ -22,11 +23,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
22 /// </summary> 23 /// </summary>
23 internal class UpdateFileFacadesCommand 24 internal class UpdateFileFacadesCommand
24 { 25 {
25 public UpdateFileFacadesCommand(IntermediateSection section) 26 public UpdateFileFacadesCommand(IMessaging messaging, IntermediateSection section)
26 { 27 {
28 this.Messaging = messaging;
27 this.Section = section; 29 this.Section = section;
28 } 30 }
29 31
32 private IMessaging Messaging { get; }
33
30 private IntermediateSection Section { get; } 34 private IntermediateSection Section { get; }
31 35
32 public IEnumerable<FileFacade> FileFacades { private get; set; } 36 public IEnumerable<FileFacade> FileFacades { private get; set; }
@@ -62,23 +66,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
62 } 66 }
63 catch (ArgumentException) 67 catch (ArgumentException)
64 { 68 {
65 Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); 69 this.Messaging.Write(ErrorMessages.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path));
66 return; 70 return;
67 } 71 }
68 catch (PathTooLongException) 72 catch (PathTooLongException)
69 { 73 {
70 Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); 74 this.Messaging.Write(ErrorMessages.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path));
71 return; 75 return;
72 } 76 }
73 catch (NotSupportedException) 77 catch (NotSupportedException)
74 { 78 {
75 Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); 79 this.Messaging.Write(ErrorMessages.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path));
76 return; 80 return;
77 } 81 }
78 82
79 if (!fileInfo.Exists) 83 if (!fileInfo.Exists)
80 { 84 {
81 Messaging.Instance.OnMessage(WixErrors.CannotFindFile(file.File.SourceLineNumbers, file.File.File, file.File.LongFileName, file.WixFile.Source.Path)); 85 this.Messaging.Write(ErrorMessages.CannotFindFile(file.File.SourceLineNumbers, file.File.File, file.File.LongFileName, file.WixFile.Source.Path));
82 return; 86 return;
83 } 87 }
84 88
@@ -86,7 +90,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
86 { 90 {
87 if (Int32.MaxValue < fileStream.Length) 91 if (Int32.MaxValue < fileStream.Length)
88 { 92 {
89 throw new WixException(WixErrors.FileTooLarge(file.File.SourceLineNumbers, file.WixFile.Source.Path)); 93 throw new WixException(ErrorMessages.FileTooLarge(file.File.SourceLineNumbers, file.WixFile.Source.Path));
90 } 94 }
91 95
92 file.File.FileSize = Convert.ToInt32(fileStream.Length, CultureInfo.InvariantCulture); 96 file.File.FileSize = Convert.ToInt32(fileStream.Length, CultureInfo.InvariantCulture);
@@ -102,11 +106,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
102 { 106 {
103 if (0x2 == e.NativeErrorCode) // ERROR_FILE_NOT_FOUND 107 if (0x2 == e.NativeErrorCode) // ERROR_FILE_NOT_FOUND
104 { 108 {
105 throw new WixException(WixErrors.FileNotFound(file.File.SourceLineNumbers, fileInfo.FullName)); 109 throw new WixException(ErrorMessages.FileNotFound(file.File.SourceLineNumbers, fileInfo.FullName));
106 } 110 }
107 else 111 else
108 { 112 {
109 throw new WixException(WixErrors.Win32Exception(e.NativeErrorCode, e.Message)); 113 throw new WixException(ErrorMessages.Win32Exception(e.NativeErrorCode, e.Message));
110 } 114 }
111 } 115 }
112 116
@@ -128,14 +132,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
128 // for unversioned file. That's allowed but generally a dangerous thing to do so let's point that out to the user. 132 // for unversioned file. That's allowed but generally a dangerous thing to do so let's point that out to the user.
129 if (!this.FileFacades.Any(r => file.File.Version.Equals(r.File.File, StringComparison.Ordinal))) 133 if (!this.FileFacades.Any(r => file.File.Version.Equals(r.File.File, StringComparison.Ordinal)))
130 { 134 {
131 Messaging.Instance.OnMessage(WixWarnings.DefaultVersionUsedForUnversionedFile(file.File.SourceLineNumbers, file.File.Version, file.File.File)); 135 this.Messaging.Write(WarningMessages.DefaultVersionUsedForUnversionedFile(file.File.SourceLineNumbers, file.File.Version, file.File.File));
132 } 136 }
133 } 137 }
134 else 138 else
135 { 139 {
136 if (null != file.File.Language) 140 if (null != file.File.Language)
137 { 141 {
138 Messaging.Instance.OnMessage(WixWarnings.DefaultLanguageUsedForUnversionedFile(file.File.SourceLineNumbers, file.File.Language, file.File.File)); 142 this.Messaging.Write(WarningMessages.DefaultLanguageUsedForUnversionedFile(file.File.SourceLineNumbers, file.File.Language, file.File.File));
139 } 143 }
140 144
141 int[] hash; 145 int[] hash;
@@ -147,11 +151,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
147 { 151 {
148 if (0x2 == e.NativeErrorCode) // ERROR_FILE_NOT_FOUND 152 if (0x2 == e.NativeErrorCode) // ERROR_FILE_NOT_FOUND
149 { 153 {
150 throw new WixException(WixErrors.FileNotFound(file.File.SourceLineNumbers, fileInfo.FullName)); 154 throw new WixException(ErrorMessages.FileNotFound(file.File.SourceLineNumbers, fileInfo.FullName));
151 } 155 }
152 else 156 else
153 { 157 {
154 throw new WixException(WixErrors.Win32Exception(e.NativeErrorCode, fileInfo.FullName, e.Message)); 158 throw new WixException(ErrorMessages.Win32Exception(e.NativeErrorCode, fileInfo.FullName, e.Message));
155 } 159 }
156 } 160 }
157 161
@@ -193,7 +197,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
193 197
194 if (!String.IsNullOrEmpty(file.File.Language) && String.IsNullOrEmpty(language)) 198 if (!String.IsNullOrEmpty(file.File.Language) && String.IsNullOrEmpty(language))
195 { 199 {
196 Messaging.Instance.OnMessage(WixWarnings.DefaultLanguageUsedForVersionedFile(file.File.SourceLineNumbers, file.File.Language, file.File.File)); 200 this.Messaging.Write(WarningMessages.DefaultLanguageUsedForVersionedFile(file.File.SourceLineNumbers, file.File.Language, file.File.File));
197 } 201 }
198 else // override the default provided by the user (usually nothing) with the actual language from the file itself. 202 else // override the default provided by the user (usually nothing) with the actual language from the file itself.
199 { 203 {
@@ -260,7 +264,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
260 } 264 }
261 else if (file.WixFile.File_AssemblyApplication == null) 265 else if (file.WixFile.File_AssemblyApplication == null)
262 { 266 {
263 throw new WixException(WixErrors.GacAssemblyNoStrongName(file.File.SourceLineNumbers, fileInfo.FullName, file.File.Component_)); 267 throw new WixException(ErrorMessages.GacAssemblyNoStrongName(file.File.SourceLineNumbers, fileInfo.FullName, file.File.Component_));
264 } 268 }
265 269
266 string assemblyVersion = referenceIdentity.GetAttribute(null, "Version"); 270 string assemblyVersion = referenceIdentity.GetAttribute(null, "Version");
@@ -271,7 +275,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
271 } 275 }
272 else 276 else
273 { 277 {
274 Messaging.Instance.OnMessage(WixErrors.InvalidAssemblyFile(file.File.SourceLineNumbers, fileInfo.FullName, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", result))); 278 this.Messaging.Write(ErrorMessages.InvalidAssemblyFile(file.File.SourceLineNumbers, fileInfo.FullName, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", result)));
275 return; 279 return;
276 } 280 }
277 281
@@ -360,7 +364,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
360 FileFacade fileManifest = this.FileFacades.SingleOrDefault(r => r.File.File.Equals(file.WixFile.File_AssemblyManifest, StringComparison.Ordinal)); 364 FileFacade fileManifest = this.FileFacades.SingleOrDefault(r => r.File.File.Equals(file.WixFile.File_AssemblyManifest, StringComparison.Ordinal));
361 if (null == fileManifest) 365 if (null == fileManifest)
362 { 366 {
363 Messaging.Instance.OnMessage(WixErrors.MissingManifestForWin32Assembly(file.File.SourceLineNumbers, file.File.File, file.WixFile.File_AssemblyManifest)); 367 this.Messaging.Write(ErrorMessages.MissingManifestForWin32Assembly(file.File.SourceLineNumbers, file.File.File, file.WixFile.File_AssemblyManifest));
364 } 368 }
365 369
366 string win32Type = null; 370 string win32Type = null;
@@ -397,7 +401,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
397 } 401 }
398 if (!hasNextSibling) 402 if (!hasNextSibling)
399 { 403 {
400 Messaging.Instance.OnMessage(WixErrors.InvalidManifestContent(file.File.SourceLineNumbers, fileManifest.WixFile.Source.Path)); 404 this.Messaging.Write(ErrorMessages.InvalidManifestContent(file.File.SourceLineNumbers, fileManifest.WixFile.Source.Path));
401 return; 405 return;
402 } 406 }
403 407
@@ -435,11 +439,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
435 } 439 }
436 catch (FileNotFoundException fe) 440 catch (FileNotFoundException fe)
437 { 441 {
438 Messaging.Instance.OnMessage(WixErrors.FileNotFound(new SourceLineNumber(fileManifest.WixFile.Source.Path), fe.FileName, "AssemblyManifest")); 442 this.Messaging.Write(ErrorMessages.FileNotFound(new SourceLineNumber(fileManifest.WixFile.Source.Path), fe.FileName, "AssemblyManifest"));
439 } 443 }
440 catch (XmlException xe) 444 catch (XmlException xe)
441 { 445 {
442 Messaging.Instance.OnMessage(WixErrors.InvalidXml(new SourceLineNumber(fileManifest.WixFile.Source.Path), "manifest", xe.Message)); 446 this.Messaging.Write(ErrorMessages.InvalidXml(new SourceLineNumber(fileManifest.WixFile.Source.Path), "manifest", xe.Message));
443 } 447 }
444 448
445 if (!String.IsNullOrEmpty(win32Name)) 449 if (!String.IsNullOrEmpty(win32Name))
@@ -482,7 +486,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
482 // check for null value (this can occur when grabbing the file version from an assembly without one) 486 // check for null value (this can occur when grabbing the file version from an assembly without one)
483 if (String.IsNullOrEmpty(value)) 487 if (String.IsNullOrEmpty(value))
484 { 488 {
485 Messaging.Instance.OnMessage(WixWarnings.NullMsiAssemblyNameValue(file.File.SourceLineNumbers, file.File.Component_, name)); 489 this.Messaging.Write(WarningMessages.NullMsiAssemblyNameValue(file.File.SourceLineNumbers, file.File.Component_, name));
486 } 490 }
487 else 491 else
488 { 492 {
@@ -491,7 +495,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
491 String.IsNullOrEmpty(file.WixFile.File_AssemblyApplication) && 495 String.IsNullOrEmpty(file.WixFile.File_AssemblyApplication) &&
492 !String.Equals(Path.GetFileNameWithoutExtension(file.File.LongFileName), value, StringComparison.OrdinalIgnoreCase)) 496 !String.Equals(Path.GetFileNameWithoutExtension(file.File.LongFileName), value, StringComparison.OrdinalIgnoreCase))
493 { 497 {
494 Messaging.Instance.OnMessage(WixErrors.GACAssemblyIdentityWarning(file.File.SourceLineNumbers, Path.GetFileNameWithoutExtension(file.File.LongFileName), value)); 498 this.Messaging.Write(ErrorMessages.GACAssemblyIdentityWarning(file.File.SourceLineNumbers, Path.GetFileNameWithoutExtension(file.File.LongFileName), value));
495 } 499 }
496 500
497 // override directly authored value 501 // override directly authored value
diff --git a/src/WixToolset.Core.WindowsInstaller/Data/Xsd/actions.xsd b/src/WixToolset.Core.WindowsInstaller/Data/Xsd/actions.xsd
new file mode 100644
index 00000000..bf0ccb95
--- /dev/null
+++ b/src/WixToolset.Core.WindowsInstaller/Data/Xsd/actions.xsd
@@ -0,0 +1,73 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 targetNamespace="http://wixtoolset.org/schemas/v4/wi/actions"
7 xmlns="http://wixtoolset.org/schemas/v4/wi/actions">
8 <xs:annotation>
9 <xs:documentation>
10 Schema for describing standard actions in the Windows Installer.
11 </xs:documentation>
12 </xs:annotation>
13
14 <xs:element name="actions">
15 <xs:complexType>
16 <xs:sequence maxOccurs="unbounded">
17 <xs:element ref="action" />
18 </xs:sequence>
19 </xs:complexType>
20 </xs:element>
21
22 <xs:element name="action">
23 <xs:complexType>
24 <xs:attribute name="name" type="xs:string" use="required">
25 <xs:annotation>
26 <xs:documentation>Name of action</xs:documentation>
27 </xs:annotation>
28 </xs:attribute>
29 <xs:attribute name="condition" type="xs:string">
30 <xs:annotation>
31 <xs:documentation>Default condition for action</xs:documentation>
32 </xs:annotation>
33 </xs:attribute>
34 <xs:attribute name="sequence" type="xs:integer" use="required">
35 <xs:annotation>
36 <xs:documentation>Sequence of action</xs:documentation>
37 </xs:annotation>
38 </xs:attribute>
39 <xs:attribute name="AdminExecuteSequence" type="ActionsYesNoType">
40 <xs:annotation>
41 <xs:documentation>Specifies if action is allowed in AdminExecuteSequence</xs:documentation>
42 </xs:annotation>
43 </xs:attribute>
44 <xs:attribute name="AdminUISequence" type="ActionsYesNoType">
45 <xs:annotation>
46 <xs:documentation>Specifies if action is allowed in AdminUISequence</xs:documentation>
47 </xs:annotation>
48 </xs:attribute>
49 <xs:attribute name="AdvtExecuteSequence" type="ActionsYesNoType">
50 <xs:annotation>
51 <xs:documentation>Specifies if action is allowed in AdvtExecuteSequence</xs:documentation>
52 </xs:annotation>
53 </xs:attribute>
54 <xs:attribute name="InstallExecuteSequence" type="ActionsYesNoType">
55 <xs:annotation>
56 <xs:documentation>Specifies if action is allowed in InstallExecuteSequence</xs:documentation>
57 </xs:annotation>
58 </xs:attribute>
59 <xs:attribute name="InstallUISequence" type="ActionsYesNoType">
60 <xs:annotation>
61 <xs:documentation>Specifies if action is allowed in InstallUISequence</xs:documentation>
62 </xs:annotation>
63 </xs:attribute>
64 </xs:complexType>
65 </xs:element>
66
67 <xs:simpleType name="ActionsYesNoType">
68 <xs:restriction base="xs:NMTOKEN">
69 <xs:enumeration value="no" />
70 <xs:enumeration value="yes" />
71 </xs:restriction>
72 </xs:simpleType>
73</xs:schema>
diff --git a/src/WixToolset.Core.WindowsInstaller/Data/Xsd/tables.xsd b/src/WixToolset.Core.WindowsInstaller/Data/Xsd/tables.xsd
new file mode 100644
index 00000000..f87471bb
--- /dev/null
+++ b/src/WixToolset.Core.WindowsInstaller/Data/Xsd/tables.xsd
@@ -0,0 +1,248 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 targetNamespace="http://wixtoolset.org/schemas/v4/wi/tables"
7 xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
8 <xs:annotation>
9 <xs:documentation>
10 Schema for describing table definitions in Windows Installer.
11 </xs:documentation>
12 </xs:annotation>
13
14 <xs:element name="tableDefinitions">
15 <xs:complexType>
16 <xs:sequence maxOccurs="unbounded">
17 <xs:element ref="tableDefinition" />
18 </xs:sequence>
19 </xs:complexType>
20 </xs:element>
21
22 <xs:element name="tableDefinition">
23 <xs:complexType>
24 <xs:sequence maxOccurs="unbounded">
25 <xs:element ref="columnDefinition" />
26 </xs:sequence>
27 <xs:attribute name="createSymbols" type="TablesYesNoType">
28 <xs:annotation>
29 <xs:documentation>Boolean whether rows in this table create symbols</xs:documentation>
30 </xs:annotation>
31 </xs:attribute>
32 <xs:attribute name="name" type="NameType" use="required">
33 <xs:annotation>
34 <xs:documentation>Name of table in Windows Installer database</xs:documentation>
35 </xs:annotation>
36 </xs:attribute>
37 <xs:attribute name="unreal" type="TablesYesNoType">
38 <xs:annotation>
39 <xs:documentation>Specifies if table is virtual or not</xs:documentation>
40 </xs:annotation>
41 </xs:attribute>
42 <xs:attribute name="bootstrapperApplicationData" type="TablesYesNoType">
43 <xs:annotation>
44 <xs:documentation>Specifies if the table is a part of the Bootstrapper Application Data manifest</xs:documentation>
45 </xs:annotation>
46 </xs:attribute>
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="columnDefinition">
51 <xs:complexType>
52 <xs:attribute name="name" type="NameType" use="required">
53 <xs:annotation>
54 <xs:documentation>Name of column in Windows Installer table</xs:documentation>
55 </xs:annotation>
56 </xs:attribute>
57
58 <xs:attribute name="added" type="TablesYesNoType">
59 <xs:annotation>
60 <xs:documentation>Whether this column was added by a transform.</xs:documentation>
61 </xs:annotation>
62 </xs:attribute>
63
64 <xs:attribute name="type" type="ColumnDefinitionType" use="required">
65 <xs:annotation>
66 <xs:documentation>Type of column in Windows Installer table</xs:documentation>
67 </xs:annotation>
68 </xs:attribute>
69
70 <xs:attribute name="length" use="required">
71 <xs:annotation>
72 <xs:documentation>Type of column in Windows Installer table</xs:documentation>
73 </xs:annotation>
74 <xs:simpleType>
75 <xs:restriction base="xs:integer">
76 <xs:minInclusive value="0" />
77 <xs:maxInclusive value="255" />
78 </xs:restriction>
79 </xs:simpleType>
80 </xs:attribute>
81
82 <xs:attribute name="primaryKey" type="TablesYesNoType">
83 <xs:annotation>
84 <xs:documentation>Boolean whether column is primary key of Windows Installer table</xs:documentation>
85 </xs:annotation>
86 </xs:attribute>
87
88 <xs:attribute name="nullable" type="TablesYesNoType">
89 <xs:annotation>
90 <xs:documentation>Boolean whether column is nullable in Windows Installer table</xs:documentation>
91 </xs:annotation>
92 </xs:attribute>
93
94 <xs:attribute name="unreal" type="TablesYesNoType">
95 <xs:annotation>
96 <xs:documentation>Boolean whether column is virtual in Windows Installer table</xs:documentation>
97 </xs:annotation>
98 </xs:attribute>
99
100 <xs:attribute name="modularize" type="TablesModularizeType">
101 <xs:annotation>
102 <xs:documentation>Enumeration specifying how column should have the ModuleId appended</xs:documentation>
103 </xs:annotation>
104 </xs:attribute>
105
106 <xs:attribute name="localizable" type="TablesYesNoType">
107 <xs:annotation>
108 <xs:documentation>Set to "yes" in order to allow substitution for localized variables.</xs:documentation>
109 </xs:annotation>
110 </xs:attribute>
111
112 <xs:attribute name="minValue" type="xs:long">
113 <xs:annotation>
114 <xs:documentation>Minimum value for column in Windows Installer table</xs:documentation>
115 </xs:annotation>
116 </xs:attribute>
117
118 <xs:attribute name="maxValue" type="xs:long">
119 <xs:annotation>
120 <xs:documentation>Maximum value for column in Windows Installer table</xs:documentation>
121 </xs:annotation>
122 </xs:attribute>
123
124 <xs:attribute name="keyTable" type="NameType">
125 <xs:annotation>
126 <xs:documentation>Foreign key table for column in Windows Installer table</xs:documentation>
127 </xs:annotation>
128 </xs:attribute>
129
130 <xs:attribute name="keyColumn">
131 <xs:annotation>
132 <xs:documentation>Maximum value for column in Windows Installer table</xs:documentation>
133 </xs:annotation>
134 <xs:simpleType>
135 <xs:restriction base="xs:integer">
136 <xs:minInclusive value="1" />
137 <xs:maxInclusive value="32" />
138 </xs:restriction>
139 </xs:simpleType>
140 </xs:attribute>
141
142 <xs:attribute name="category" type="TablesCategoryType">
143 <xs:annotation>
144 <xs:documentation>Specific column data types for column</xs:documentation>
145 </xs:annotation>
146 </xs:attribute>
147
148 <xs:attribute name="set" type="TablesSetType">
149 <xs:annotation>
150 <xs:documentation>List of permissible values for the column</xs:documentation>
151 </xs:annotation>
152 </xs:attribute>
153
154 <xs:attribute name="description" type="xs:string">
155 <xs:annotation>
156 <xs:documentation>Description of column</xs:documentation>
157 </xs:annotation>
158 </xs:attribute>
159
160 <xs:attribute name="escapeIdtCharacters" type="TablesYesNoType">
161 <xs:annotation>
162 <xs:documentation>Set to "yes" in order to make the idt exporter escape whitespace characters \r, \n, and \t.</xs:documentation>
163 </xs:annotation>
164 </xs:attribute>
165
166 <xs:attribute name="useCData" type="TablesYesNoType">
167 <xs:annotation>
168 <xs:documentation>Set to "yes" in order to make the Intermediate and Output objects wrap their data in a CDATA element to preserve whitespace.</xs:documentation>
169 </xs:annotation>
170 </xs:attribute>
171 </xs:complexType>
172 </xs:element>
173
174 <xs:simpleType name="NameType">
175 <xs:restriction base="xs:string">
176 <xs:minLength value="1" />
177 <xs:maxLength value="64" />
178 </xs:restriction>
179 </xs:simpleType>
180
181 <xs:simpleType name="ColumnDefinitionType">
182 <xs:restriction base="xs:NMTOKEN">
183 <xs:enumeration value="string" />
184 <xs:enumeration value="localized" />
185 <xs:enumeration value="number" />
186 <xs:enumeration value="object" />
187 <xs:enumeration value="preserved" />
188 </xs:restriction>
189 </xs:simpleType>
190
191 <xs:simpleType name="TablesYesNoType">
192 <xs:restriction base="xs:NMTOKEN">
193 <xs:enumeration value="yes" />
194 <xs:enumeration value="no" />
195 </xs:restriction>
196 </xs:simpleType>
197
198 <xs:simpleType name="TablesModularizeType">
199 <xs:restriction base="xs:NMTOKEN">
200 <xs:enumeration value="column" />
201 <xs:enumeration value="companionFile" />
202 <xs:enumeration value="condition" />
203 <xs:enumeration value="controlEventArgument" />
204 <xs:enumeration value="controlText" />
205 <xs:enumeration value="icon" />
206 <xs:enumeration value="none" />
207 <xs:enumeration value="property" />
208 <xs:enumeration value="semicolonDelimited" />
209 </xs:restriction>
210 </xs:simpleType>
211
212 <xs:simpleType name="TablesCategoryType">
213 <xs:restriction base="xs:NMTOKEN">
214 <xs:enumeration value="text" />
215 <xs:enumeration value="upperCase" />
216 <xs:enumeration value="lowerCase" />
217 <xs:enumeration value="integer" />
218 <xs:enumeration value="doubleInteger" />
219 <xs:enumeration value="timeDate" />
220 <xs:enumeration value="identifier" />
221 <xs:enumeration value="property" />
222 <xs:enumeration value="filename" />
223 <xs:enumeration value="wildCardFilename" />
224 <xs:enumeration value="path" />
225 <xs:enumeration value="paths" />
226 <xs:enumeration value="anyPath" />
227 <xs:enumeration value="defaultDir" />
228 <xs:enumeration value="regPath" />
229 <xs:enumeration value="formatted" />
230 <xs:enumeration value="formattedSddl" />
231 <xs:enumeration value="template" />
232 <xs:enumeration value="condition" />
233 <xs:enumeration value="guid" />
234 <xs:enumeration value="version" />
235 <xs:enumeration value="language" />
236 <xs:enumeration value="binary" />
237 <xs:enumeration value="customSource" />
238 <xs:enumeration value="cabinet" />
239 <xs:enumeration value="shortcut" />
240 </xs:restriction>
241 </xs:simpleType>
242
243 <xs:simpleType name="TablesSetType">
244 <xs:restriction base="xs:string">
245 <xs:pattern value="\w+(;\w+)*" />
246 </xs:restriction>
247 </xs:simpleType>
248</xs:schema>
diff --git a/src/WixToolset.Core.WindowsInstaller/Differ.cs b/src/WixToolset.Core.WindowsInstaller/Differ.cs
index 9bbde302..7cc204f9 100644
--- a/src/WixToolset.Core.WindowsInstaller/Differ.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Differ.cs
@@ -10,26 +10,29 @@ namespace WixToolset.Core.WindowsInstaller
10 using WixToolset.Data.WindowsInstaller; 10 using WixToolset.Data.WindowsInstaller;
11 using WixToolset.Data.WindowsInstaller.Rows; 11 using WixToolset.Data.WindowsInstaller.Rows;
12 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Services;
13 using WixToolset.Msi; 14 using WixToolset.Msi;
14 15
15 /// <summary> 16 /// <summary>
16 /// Creates a transform by diffing two outputs. 17 /// Creates a transform by diffing two outputs.
17 /// </summary> 18 /// </summary>
18 public sealed class Differ : IMessageHandler 19 public sealed class Differ
19 { 20 {
20 private List<IInspectorExtension> inspectorExtensions; 21 private List<IInspectorExtension> inspectorExtensions;
21 private bool showPedanticMessages; 22 private bool showPedanticMessages;
22 private bool suppressKeepingSpecialRows; 23 private bool suppressKeepingSpecialRows;
23 private bool preserveUnchangedRows; 24 private bool preserveUnchangedRows;
24 private const char sectionDelimiter = '/'; 25 private const char sectionDelimiter = '/';
26 private readonly IMessaging messaging;
25 private SummaryInformationStreams transformSummaryInfo; 27 private SummaryInformationStreams transformSummaryInfo;
26 28
27 /// <summary> 29 /// <summary>
28 /// Instantiates a new Differ class. 30 /// Instantiates a new Differ class.
29 /// </summary> 31 /// </summary>
30 public Differ() 32 public Differ(IMessaging messaging)
31 { 33 {
32 this.inspectorExtensions = new List<IInspectorExtension>(); 34 this.inspectorExtensions = new List<IInspectorExtension>();
35 this.messaging = messaging;
33 } 36 }
34 37
35 /// <summary> 38 /// <summary>
@@ -99,17 +102,17 @@ namespace WixToolset.Core.WindowsInstaller
99 // compare the codepages 102 // compare the codepages
100 if (targetOutput.Codepage != updatedOutput.Codepage && 0 == (TransformFlags.ErrorChangeCodePage & validationFlags)) 103 if (targetOutput.Codepage != updatedOutput.Codepage && 0 == (TransformFlags.ErrorChangeCodePage & validationFlags))
101 { 104 {
102 this.OnMessage(WixErrors.OutputCodepageMismatch(targetOutput.SourceLineNumbers, targetOutput.Codepage, updatedOutput.Codepage)); 105 this.messaging.Write(ErrorMessages.OutputCodepageMismatch(targetOutput.SourceLineNumbers, targetOutput.Codepage, updatedOutput.Codepage));
103 if (null != updatedOutput.SourceLineNumbers) 106 if (null != updatedOutput.SourceLineNumbers)
104 { 107 {
105 this.OnMessage(WixErrors.OutputCodepageMismatch2(updatedOutput.SourceLineNumbers)); 108 this.messaging.Write(ErrorMessages.OutputCodepageMismatch2(updatedOutput.SourceLineNumbers));
106 } 109 }
107 } 110 }
108 111
109 // compare the output types 112 // compare the output types
110 if (targetOutput.Type != updatedOutput.Type) 113 if (targetOutput.Type != updatedOutput.Type)
111 { 114 {
112 throw new WixException(WixErrors.OutputTypeMismatch(targetOutput.SourceLineNumbers, targetOutput.Type.ToString(), updatedOutput.Type.ToString())); 115 throw new WixException(ErrorMessages.OutputTypeMismatch(targetOutput.SourceLineNumbers, targetOutput.Type.ToString(), updatedOutput.Type.ToString()));
113 } 116 }
114 117
115 // compare the contents of the tables 118 // compare the contents of the tables
@@ -160,15 +163,6 @@ namespace WixToolset.Core.WindowsInstaller
160 } 163 }
161 164
162 /// <summary> 165 /// <summary>
163 /// Sends a message to the message delegate if there is one.
164 /// </summary>
165 /// <param name="mea">Message event arguments.</param>
166 public void OnMessage(MessageEventArgs e)
167 {
168 Messaging.Instance.OnMessage(e);
169 }
170
171 /// <summary>
172 /// Add a row to the <paramref name="index"/> using the primary key. 166 /// Add a row to the <paramref name="index"/> using the primary key.
173 /// </summary> 167 /// </summary>
174 /// <param name="index">The indexed rows.</param> 168 /// <param name="index">The indexed rows.</param>
@@ -210,7 +204,7 @@ namespace WixToolset.Core.WindowsInstaller
210 } 204 }
211 else if (this.showPedanticMessages) 205 else if (this.showPedanticMessages)
212 { 206 {
213 this.OnMessage(WixWarnings.DuplicatePrimaryKey(row.SourceLineNumbers, primaryKey, row.Table.Name)); 207 this.messaging.Write(ErrorMessages.DuplicatePrimaryKey(row.SourceLineNumbers, primaryKey, row.Table.Name));
214 } 208 }
215 } 209 }
216 else // use the string representation of the row as its primary key (it may not be unique) 210 else // use the string representation of the row as its primary key (it may not be unique)
@@ -370,7 +364,7 @@ namespace WixToolset.Core.WindowsInstaller
370 if (0 != targetTable.Definition.CompareTo(updatedTable.Definition)) 364 if (0 != targetTable.Definition.CompareTo(updatedTable.Definition))
371 { 365 {
372 // continue to the next table; may be more mismatches 366 // continue to the next table; may be more mismatches
373 this.OnMessage(WixErrors.DatabaseSchemaMismatch(targetOutput.SourceLineNumbers, targetTable.Name)); 367 this.messaging.Write(ErrorMessages.DatabaseSchemaMismatch(targetOutput.SourceLineNumbers, targetTable.Name));
374 } 368 }
375 else 369 else
376 { 370 {
@@ -425,7 +419,7 @@ namespace WixToolset.Core.WindowsInstaller
425 this.transformSummaryInfo.TargetProductCode = (string)row[1]; 419 this.transformSummaryInfo.TargetProductCode = (string)row[1];
426 if ("*" == this.transformSummaryInfo.TargetProductCode) 420 if ("*" == this.transformSummaryInfo.TargetProductCode)
427 { 421 {
428 this.OnMessage(WixErrors.ProductCodeInvalidForTransform(row.SourceLineNumbers)); 422 this.messaging.Write(ErrorMessages.ProductCodeInvalidForTransform(row.SourceLineNumbers));
429 } 423 }
430 } 424 }
431 else if ("ProductVersion" == (string)row[0]) 425 else if ("ProductVersion" == (string)row[0])
@@ -466,7 +460,7 @@ namespace WixToolset.Core.WindowsInstaller
466 this.transformSummaryInfo.UpdatedProductCode = (string)row[1]; 460 this.transformSummaryInfo.UpdatedProductCode = (string)row[1];
467 if ("*" == this.transformSummaryInfo.UpdatedProductCode) 461 if ("*" == this.transformSummaryInfo.UpdatedProductCode)
468 { 462 {
469 this.OnMessage(WixErrors.ProductCodeInvalidForTransform(row.SourceLineNumbers)); 463 this.messaging.Write(ErrorMessages.ProductCodeInvalidForTransform(row.SourceLineNumbers));
470 } 464 }
471 } 465 }
472 else if ("ProductVersion" == (string)row[0]) 466 else if ("ProductVersion" == (string)row[0])
diff --git a/src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs b/src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs
index 5c56d9aa..93dd9d3b 100644
--- a/src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs
@@ -36,7 +36,7 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
36 FileAttributes attributes = File.GetAttributes(this.Context.InputFilePath); 36 FileAttributes attributes = File.GetAttributes(this.Context.InputFilePath);
37 if (FileAttributes.ReadOnly == (attributes & FileAttributes.ReadOnly)) 37 if (FileAttributes.ReadOnly == (attributes & FileAttributes.ReadOnly))
38 { 38 {
39 this.Context.Messaging.OnMessage(WixErrors.ReadOnlyOutputFile(this.Context.InputFilePath)); 39 this.Context.Messaging.Write(ErrorMessages.ReadOnlyOutputFile(this.Context.InputFilePath));
40 return shouldCommit; 40 return shouldCommit;
41 } 41 }
42 42
@@ -179,7 +179,7 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
179 // If the cabs aren't there, throw an error but continue to catch the other errors 179 // If the cabs aren't there, throw an error but continue to catch the other errors
180 if (!File.Exists(cabPath)) 180 if (!File.Exists(cabPath))
181 { 181 {
182 this.Context.Messaging.OnMessage(WixErrors.WixFileNotFound(cabPath)); 182 this.Context.Messaging.Write(ErrorMessages.WixFileNotFound(cabPath));
183 continue; 183 continue;
184 } 184 }
185 185
@@ -205,11 +205,11 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
205 if ((5 == Environment.OSVersion.Version.Major && 2 == Environment.OSVersion.Version.Minor) || // W2K3 205 if ((5 == Environment.OSVersion.Version.Major && 2 == Environment.OSVersion.Version.Minor) || // W2K3
206 (5 == Environment.OSVersion.Version.Major && 1 == Environment.OSVersion.Version.Minor)) // XP 206 (5 == Environment.OSVersion.Version.Major && 1 == Environment.OSVersion.Version.Minor)) // XP
207 { 207 {
208 this.Context.Messaging.OnMessage(WixErrors.UnableToGetAuthenticodeCertOfFileDownlevelOS(cabPath, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", HResult))); 208 this.Context.Messaging.Write(ErrorMessages.UnableToGetAuthenticodeCertOfFileDownlevelOS(cabPath, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", HResult)));
209 } 209 }
210 else // otherwise, generic error 210 else // otherwise, generic error
211 { 211 {
212 this.Context.Messaging.OnMessage(WixErrors.UnableToGetAuthenticodeCertOfFile(cabPath, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", HResult))); 212 this.Context.Messaging.Write(ErrorMessages.UnableToGetAuthenticodeCertOfFile(cabPath, String.Format(CultureInfo.InvariantCulture, "HRESULT: 0x{0:x8}", HResult)));
213 } 213 }
214 } 214 }
215 215
@@ -252,7 +252,7 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
252 252
253 if (digitalCertificateTable.Rows.Count > 0) 253 if (digitalCertificateTable.Rows.Count > 0)
254 { 254 {
255 var command = new CreateIdtFileCommand(digitalCertificateTable, codepage, this.Context.IntermediateFolder, true); 255 var command = new CreateIdtFileCommand(this.Context.Messaging, digitalCertificateTable, codepage, this.Context.IntermediateFolder, true);
256 command.Execute(); 256 command.Execute();
257 257
258 database.Import(command.IdtPath); 258 database.Import(command.IdtPath);
@@ -261,7 +261,7 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
261 261
262 if (digitalSignatureTable.Rows.Count > 0) 262 if (digitalSignatureTable.Rows.Count > 0)
263 { 263 {
264 var command = new CreateIdtFileCommand(digitalSignatureTable, codepage, this.Context.IntermediateFolder, true); 264 var command = new CreateIdtFileCommand(this.Context.Messaging, digitalSignatureTable, codepage, this.Context.IntermediateFolder, true);
265 command.Execute(); 265 command.Execute();
266 266
267 database.Import(command.IdtPath); 267 database.Import(command.IdtPath);
@@ -275,7 +275,7 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
275 // If we did find external cabs but none of them were signed, give a warning 275 // If we did find external cabs but none of them were signed, give a warning
276 if (foundUnsignedExternals) 276 if (foundUnsignedExternals)
277 { 277 {
278 this.Context.Messaging.OnMessage(WixWarnings.ExternalCabsAreNotSigned(this.Context.InputFilePath)); 278 this.Context.Messaging.Write(WarningMessages.ExternalCabsAreNotSigned(this.Context.InputFilePath));
279 } 279 }
280 280
281 if (shouldCommit) 281 if (shouldCommit)
diff --git a/src/WixToolset.Core.WindowsInstaller/MelterCore.cs b/src/WixToolset.Core.WindowsInstaller/MelterCore.cs
index 75d43619..034c9465 100644
--- a/src/WixToolset.Core.WindowsInstaller/MelterCore.cs
+++ b/src/WixToolset.Core.WindowsInstaller/MelterCore.cs
@@ -7,8 +7,9 @@ namespace WixToolset
7 /// <summary> 7 /// <summary>
8 /// Melts a Module Wix document into a ComponentGroup representation. 8 /// Melts a Module Wix document into a ComponentGroup representation.
9 /// </summary> 9 /// </summary>
10 public sealed class MelterCore : IMessageHandler 10 public sealed class MelterCore
11 { 11 {
12#if TODO_MELT
12 /// <summary> 13 /// <summary>
13 /// Gets whether the melter core encountered an error while processing. 14 /// Gets whether the melter core encountered an error while processing.
14 /// </summary> 15 /// </summary>
@@ -26,5 +27,6 @@ namespace WixToolset
26 { 27 {
27 Messaging.Instance.OnMessage(e); 28 Messaging.Instance.OnMessage(e);
28 } 29 }
30#endif
29 } 31 }
30} 32}
diff --git a/src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs b/src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs
index a603d5a7..589da648 100644
--- a/src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs
@@ -16,7 +16,7 @@ namespace WixToolset.Msi
16 /// </summary> 16 /// </summary>
17 /// <param name="idtFile">The invalid idt file.</param> 17 /// <param name="idtFile">The invalid idt file.</param>
18 public WixInvalidIdtException(string idtFile) : 18 public WixInvalidIdtException(string idtFile) :
19 base(WixDataErrors.InvalidIdt(new SourceLineNumber(idtFile), idtFile)) 19 base(ErrorMessages.InvalidIdt(new SourceLineNumber(idtFile), idtFile))
20 { 20 {
21 } 21 }
22 22
@@ -26,7 +26,7 @@ namespace WixToolset.Msi
26 /// <param name="idtFile">The invalid idt file.</param> 26 /// <param name="idtFile">The invalid idt file.</param>
27 /// <param name="tableName">The table name of the invalid idt file.</param> 27 /// <param name="tableName">The table name of the invalid idt file.</param>
28 public WixInvalidIdtException(string idtFile, string tableName) : 28 public WixInvalidIdtException(string idtFile, string tableName) :
29 base(WixDataErrors.InvalidIdt(new SourceLineNumber(idtFile), idtFile, tableName)) 29 base(ErrorMessages.InvalidIdt(new SourceLineNumber(idtFile), idtFile, tableName))
30 { 30 {
31 } 31 }
32 } 32 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Patch.cs b/src/WixToolset.Core.WindowsInstaller/Patch.cs
index 24a54859..c1914aca 100644
--- a/src/WixToolset.Core.WindowsInstaller/Patch.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Patch.cs
@@ -1232,14 +1232,5 @@ namespace WixToolset.Data
1232#endif 1232#endif
1233 throw new NotImplementedException(); 1233 throw new NotImplementedException();
1234 } 1234 }
1235
1236 /// <summary>
1237 /// Sends a message to the message delegate if there is one.
1238 /// </summary>
1239 /// <param name="mea">Message event arguments.</param>
1240 public void OnMessage(MessageEventArgs mea)
1241 {
1242 Messaging.Instance.OnMessage(mea);
1243 }
1244 } 1235 }
1245} 1236}
diff --git a/src/WixToolset.Core.WindowsInstaller/PatchTransform.cs b/src/WixToolset.Core.WindowsInstaller/PatchTransform.cs
index 9ba14843..0dc1e874 100644
--- a/src/WixToolset.Core.WindowsInstaller/PatchTransform.cs
+++ b/src/WixToolset.Core.WindowsInstaller/PatchTransform.cs
@@ -10,7 +10,7 @@ namespace WixToolset
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 12
13 public class PatchTransform : IMessageHandler 13 public class PatchTransform
14 { 14 {
15 private string baseline; 15 private string baseline;
16 private Intermediate transform; 16 private Intermediate transform;
@@ -264,14 +264,5 @@ namespace WixToolset
264#endif 264#endif
265 throw new NotImplementedException(); 265 throw new NotImplementedException();
266 } 266 }
267
268 /// <summary>
269 /// Sends a message to the message delegate if there is one.
270 /// </summary>
271 /// <param name="mea">Message event arguments.</param>
272 public void OnMessage(MessageEventArgs e)
273 {
274 Messaging.Instance.OnMessage(e);
275 }
276 } 267 }
277} 268}
diff --git a/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs
index 1757e06f..ed3161ef 100644
--- a/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs
@@ -136,7 +136,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
136 } 136 }
137 catch (FileNotFoundException) 137 catch (FileNotFoundException)
138 { 138 {
139 throw new WixException(WixErrors.FileNotFound(new SourceLineNumber(this.InputFilePath), cabinetFile)); 139 throw new WixException(ErrorMessages.FileNotFound(new SourceLineNumber(this.InputFilePath), cabinetFile));
140 } 140 }
141 } 141 }
142 } 142 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs
index 72e0c3c8..5d24d08a 100644
--- a/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs
@@ -12,11 +12,12 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.WindowsInstaller; 13 using WixToolset.Data.WindowsInstaller;
14 using WixToolset.Data.WindowsInstaller.Rows; 14 using WixToolset.Data.WindowsInstaller.Rows;
15 using WixToolset.Extensibility.Services;
15 using WixToolset.Msi; 16 using WixToolset.Msi;
16 17
17 internal class UnbindDatabaseCommand 18 internal class UnbindDatabaseCommand
18 { 19 {
19 public UnbindDatabaseCommand(Messaging messaging, Database database, string databasePath, OutputType outputType, string exportBasePath, string intermediateFolder, bool isAdminImage, bool suppressDemodularization, bool skipSummaryInfo) 20 public UnbindDatabaseCommand(IMessaging messaging, Database database, string databasePath, OutputType outputType, string exportBasePath, string intermediateFolder, bool isAdminImage, bool suppressDemodularization, bool skipSummaryInfo)
20 { 21 {
21 this.Messaging = messaging; 22 this.Messaging = messaging;
22 this.Database = database; 23 this.Database = database;
@@ -31,7 +32,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
31 this.TableDefinitions = WindowsInstallerStandardInternal.GetTableDefinitions(); 32 this.TableDefinitions = WindowsInstallerStandardInternal.GetTableDefinitions();
32 } 33 }
33 34
34 public Messaging Messaging { get; } 35 public IMessaging Messaging { get; }
35 36
36 public Database Database { get; } 37 public Database Database { get; }
37 38
@@ -316,7 +317,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
316 317
317 if (!success) 318 if (!success)
318 { 319 {
319 this.Messaging.OnMessage(WixWarnings.BadColumnDataIgnored(row.SourceLineNumbers, Convert.ToString(intValue, CultureInfo.InvariantCulture), tableName, row.Fields[i].Column.Name)); 320 this.Messaging.Write(WarningMessages.BadColumnDataIgnored(row.SourceLineNumbers, Convert.ToString(intValue, CultureInfo.InvariantCulture), tableName, row.Fields[i].Column.Name));
320 } 321 }
321 break; 322 break;
322 case ColumnType.Object: 323 case ColumnType.Object:
@@ -480,7 +481,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
480 481
481 if (!File.Exists(wixFileRow.Source)) 482 if (!File.Exists(wixFileRow.Source))
482 { 483 {
483 throw new WixException(WixErrors.WixFileNotFound(wixFileRow.Source)); 484 throw new WixException(ErrorMessages.WixFileNotFound(wixFileRow.Source));
484 } 485 }
485 486
486 wixFileTable.Rows.Add(wixFileRow); 487 wixFileTable.Rows.Add(wixFileRow);
diff --git a/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs b/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs
index 70f751f5..2b018013 100644
--- a/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs
@@ -13,11 +13,12 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Extensibility; 15 using WixToolset.Extensibility;
16 using WixToolset.Extensibility.Services;
16 using WixToolset.Msi; 17 using WixToolset.Msi;
17 18
18 internal class UnbindTransformCommand 19 internal class UnbindTransformCommand
19 { 20 {
20 public UnbindTransformCommand(Messaging messaging, string transformFile, string exportBasePath, string intermediateFolder) 21 public UnbindTransformCommand(IMessaging messaging, string transformFile, string exportBasePath, string intermediateFolder)
21 { 22 {
22 this.Messaging = messaging; 23 this.Messaging = messaging;
23 this.TransformFile = transformFile; 24 this.TransformFile = transformFile;
@@ -27,7 +28,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
27 this.TableDefinitions = WindowsInstallerStandardInternal.GetTableDefinitions(); 28 this.TableDefinitions = WindowsInstallerStandardInternal.GetTableDefinitions();
28 } 29 }
29 30
30 private Messaging Messaging { get; } 31 private IMessaging Messaging { get; }
31 32
32 private string TransformFile { get; } 33 private string TransformFile { get; }
33 34
@@ -152,7 +153,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
152 // this commonly happens when the transform was built 153 // this commonly happens when the transform was built
153 // against a database schema different from the internal 154 // against a database schema different from the internal
154 // table definitions 155 // table definitions
155 throw new WixException(WixErrors.TransformSchemaMismatch()); 156 throw new WixException(ErrorMessages.TransformSchemaMismatch());
156 } 157 }
157 } 158 }
158 159
diff --git a/src/WixToolset.Core.WindowsInstaller/UnbindContext.cs b/src/WixToolset.Core.WindowsInstaller/UnbindContext.cs
index ed55f312..ff71bea4 100644
--- a/src/WixToolset.Core.WindowsInstaller/UnbindContext.cs
+++ b/src/WixToolset.Core.WindowsInstaller/UnbindContext.cs
@@ -2,12 +2,15 @@
2 2
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using WixToolset.Data; 5 using System;
6 using WixToolset.Extensibility; 6 using WixToolset.Extensibility;
7 using WixToolset.Extensibility.Services;
7 8
8 internal class UnbindContext : IUnbindContext 9 internal class UnbindContext : IUnbindContext
9 { 10 {
10 public Messaging Messaging { get; } = Messaging.Instance; 11 public IServiceProvider ServiceProvider { get; }
12
13 public IMessaging Messaging { get; set; }
11 14
12 public string ExportBasePath { get; set; } 15 public string ExportBasePath { get; set; }
13 16
diff --git a/src/WixToolset.Core.WindowsInstaller/Unbinder.cs b/src/WixToolset.Core.WindowsInstaller/Unbinder.cs
index d2d27d45..db121fc0 100644
--- a/src/WixToolset.Core.WindowsInstaller/Unbinder.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Unbinder.cs
@@ -53,11 +53,11 @@ namespace WixToolset.Core
53 { 53 {
54 if (OutputType.Transform == outputType) 54 if (OutputType.Transform == outputType)
55 { 55 {
56 throw new WixException(WixErrors.FileNotFound(null, file, "Transform")); 56 throw new WixException(ErrorMessages.FileNotFound(null, file, "Transform"));
57 } 57 }
58 else 58 else
59 { 59 {
60 throw new WixException(WixErrors.FileNotFound(null, file, "Database")); 60 throw new WixException(ErrorMessages.FileNotFound(null, file, "Database"));
61 } 61 }
62 } 62 }
63 63
diff --git a/src/WixToolset.Core.WindowsInstaller/Validator.cs b/src/WixToolset.Core.WindowsInstaller/Validator.cs
index eb17d8af..d553cc71 100644
--- a/src/WixToolset.Core.WindowsInstaller/Validator.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Validator.cs
@@ -22,7 +22,7 @@ namespace WixToolset.Core.WindowsInstaller
22 /// <summary> 22 /// <summary>
23 /// Runs internal consistency evaluators (ICEs) from cub files against a database. 23 /// Runs internal consistency evaluators (ICEs) from cub files against a database.
24 /// </summary> 24 /// </summary>
25 public sealed class Validator : IMessageHandler 25 public sealed class Validator
26 { 26 {
27 private string actionName; 27 private string actionName;
28 private StringCollection cubeFiles; 28 private StringCollection cubeFiles;
@@ -30,15 +30,17 @@ namespace WixToolset.Core.WindowsInstaller
30 private Output output; 30 private Output output;
31 private InstallUIHandler validationUIHandler; 31 private InstallUIHandler validationUIHandler;
32 private bool validationSessionComplete; 32 private bool validationSessionComplete;
33 private readonly IMessaging messaging;
33 34
34 /// <summary> 35 /// <summary>
35 /// Instantiate a new Validator. 36 /// Instantiate a new Validator.
36 /// </summary> 37 /// </summary>
37 public Validator() 38 public Validator(IMessaging messaging)
38 { 39 {
39 this.cubeFiles = new StringCollection(); 40 this.cubeFiles = new StringCollection();
40 this.extension = new ValidatorExtension(); 41 this.extension = new ValidatorExtension(messaging);
41 this.validationUIHandler = new InstallUIHandler(this.ValidationUIHandler); 42 this.validationUIHandler = new InstallUIHandler(this.ValidationUIHandler);
43 this.messaging = messaging;
42 } 44 }
43 45
44 /// <summary> 46 /// <summary>
@@ -127,7 +129,7 @@ namespace WixToolset.Core.WindowsInstaller
127 { 129 {
128 if (!mutex.WaitOne(0, false)) 130 if (!mutex.WaitOne(0, false))
129 { 131 {
130 this.OnMessage(WixVerboses.ValidationSerialized()); 132 this.messaging.Write(VerboseMessages.ValidationSerialized());
131 mutex.WaitOne(); 133 mutex.WaitOne();
132 } 134 }
133 135
@@ -176,7 +178,7 @@ namespace WixToolset.Core.WindowsInstaller
176 { 178 {
177 if (0x6E == e.NativeErrorCode) // ERROR_OPEN_FAILED 179 if (0x6E == e.NativeErrorCode) // ERROR_OPEN_FAILED
178 { 180 {
179 throw new WixException(WixErrors.CubeFileNotFound(cubeFile)); 181 throw new WixException(ErrorMessages.CubeFileNotFound(cubeFile));
180 } 182 }
181 183
182 throw; 184 throw;
@@ -248,7 +250,7 @@ namespace WixToolset.Core.WindowsInstaller
248 } 250 }
249 catch (Win32Exception e) 251 catch (Win32Exception e)
250 { 252 {
251 if (!Messaging.Instance.EncounteredError) 253 if (!this.messaging.EncounteredError)
252 { 254 {
253 throw e; 255 throw e;
254 } 256 }
@@ -270,7 +272,7 @@ namespace WixToolset.Core.WindowsInstaller
270 catch (Win32Exception e) 272 catch (Win32Exception e)
271 { 273 {
272 // avoid displaying errors twice since one may have already occurred in the UI handler 274 // avoid displaying errors twice since one may have already occurred in the UI handler
273 if (!Messaging.Instance.EncounteredError) 275 if (!this.messaging.EncounteredError)
274 { 276 {
275 if (0x6E == e.NativeErrorCode) // ERROR_OPEN_FAILED 277 if (0x6E == e.NativeErrorCode) // ERROR_OPEN_FAILED
276 { 278 {
@@ -278,23 +280,23 @@ namespace WixToolset.Core.WindowsInstaller
278 // this would be the temporary copy and there would be 280 // this would be the temporary copy and there would be
279 // no final output since the error occured; during smoke 281 // no final output since the error occured; during smoke
280 // they should know the path passed into smoke 282 // they should know the path passed into smoke
281 this.OnMessage(WixErrors.ValidationFailedToOpenDatabase()); 283 this.messaging.Write(ErrorMessages.ValidationFailedToOpenDatabase());
282 } 284 }
283 else if (0x64D == e.NativeErrorCode) 285 else if (0x64D == e.NativeErrorCode)
284 { 286 {
285 this.OnMessage(WixErrors.ValidationFailedDueToLowMsiEngine()); 287 this.messaging.Write(ErrorMessages.ValidationFailedDueToLowMsiEngine());
286 } 288 }
287 else if (0x654 == e.NativeErrorCode) 289 else if (0x654 == e.NativeErrorCode)
288 { 290 {
289 this.OnMessage(WixErrors.ValidationFailedDueToInvalidPackage()); 291 this.messaging.Write(ErrorMessages.ValidationFailedDueToInvalidPackage());
290 } 292 }
291 else if (0x658 == e.NativeErrorCode) 293 else if (0x658 == e.NativeErrorCode)
292 { 294 {
293 this.OnMessage(WixErrors.ValidationFailedDueToMultilanguageMergeModule()); 295 this.messaging.Write(ErrorMessages.ValidationFailedDueToMultilanguageMergeModule());
294 } 296 }
295 else if (0x659 == e.NativeErrorCode) 297 else if (0x659 == e.NativeErrorCode)
296 { 298 {
297 this.OnMessage(WixWarnings.ValidationFailedDueToSystemPolicy()); 299 this.messaging.Write(WarningMessages.ValidationFailedDueToSystemPolicy());
298 } 300 }
299 else 301 else
300 { 302 {
@@ -305,7 +307,7 @@ namespace WixToolset.Core.WindowsInstaller
305 msgTemp = String.Concat("Action - '", this.actionName, "' ", e.Message); 307 msgTemp = String.Concat("Action - '", this.actionName, "' ", e.Message);
306 } 308 }
307 309
308 this.OnMessage(WixErrors.Win32Exception(e.NativeErrorCode, msgTemp)); 310 this.messaging.Write(ErrorMessages.Win32Exception(e.NativeErrorCode, msgTemp));
309 } 311 }
310 } 312 }
311 } 313 }
@@ -322,16 +324,6 @@ namespace WixToolset.Core.WindowsInstaller
322 } 324 }
323 } 325 }
324 326
325 /// <summary>
326 /// Sends a message to the message delegate if there is one.
327 /// </summary>
328 /// <param name="mea">Message event arguments.</param>
329 public void OnMessage(MessageEventArgs e)
330 {
331 Messaging.Instance.OnMessage(e);
332 this.extension.OnMessage(e);
333 }
334
335 public static Validator CreateFromContext(IBindContext context, string cubeFilename) 327 public static Validator CreateFromContext(IBindContext context, string cubeFilename)
336 { 328 {
337 Validator validator = null; 329 Validator validator = null;
@@ -339,7 +331,7 @@ namespace WixToolset.Core.WindowsInstaller
339 // Tell the binder about the validator if validation isn't suppressed 331 // Tell the binder about the validator if validation isn't suppressed
340 if (!context.SuppressValidation) 332 if (!context.SuppressValidation)
341 { 333 {
342 validator = new Validator(); 334 validator = new Validator(context.Messaging);
343 validator.IntermediateFolder = Path.Combine(context.IntermediateFolder, "validate"); 335 validator.IntermediateFolder = Path.Combine(context.IntermediateFolder, "validate");
344 336
345 // set the default cube file 337 // set the default cube file
@@ -378,7 +370,7 @@ namespace WixToolset.Core.WindowsInstaller
378 } 370 }
379 catch (WixException ex) 371 catch (WixException ex)
380 { 372 {
381 this.OnMessage(ex.Error); 373 this.messaging.Write(ex.Error);
382 } 374 }
383 375
384 return 1; 376 return 1;
diff --git a/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs b/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs
index 67f5962c..48f73bf2 100644
--- a/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs
+++ b/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs
@@ -6,23 +6,26 @@ namespace WixToolset.Extensibility
6 using System.Collections; 6 using System.Collections;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.WindowsInstaller; 8 using WixToolset.Data.WindowsInstaller;
9 using WixToolset.Extensibility.Services;
9 10
10 /// <summary> 11 /// <summary>
11 /// Base class for creating a validator extension. This default implementation 12 /// Base class for creating a validator extension. This default implementation
12 /// will fire and event with the ICE name and description. 13 /// will fire and event with the ICE name and description.
13 /// </summary> 14 /// </summary>
14 public class ValidatorExtension : IMessageHandler 15 public class ValidatorExtension
15 { 16 {
16 private string databaseFile; 17 private string databaseFile;
17 private Hashtable indexedSourceLineNumbers; 18 private Hashtable indexedSourceLineNumbers;
18 private Output output; 19 private Output output;
19 private SourceLineNumber sourceLineNumbers; 20 private SourceLineNumber sourceLineNumbers;
21 private readonly IMessaging messaging;
20 22
21 /// <summary> 23 /// <summary>
22 /// Instantiate a new <see cref="ValidatorExtension"/>. 24 /// Instantiate a new <see cref="ValidatorExtension"/>.
23 /// </summary> 25 /// </summary>
24 public ValidatorExtension() 26 public ValidatorExtension(IMessaging messaging)
25 { 27 {
28 this.messaging = messaging;
26 } 29 }
27 30
28 /// <summary> 31 /// <summary>
@@ -183,11 +186,11 @@ namespace WixToolset.Extensibility
183 { 186 {
184 if (null == action) 187 if (null == action)
185 { 188 {
186 throw new WixException(WixErrors.UnexpectedExternalUIMessage(message)); 189 throw new WixException(ErrorMessages.UnexpectedExternalUIMessage(message));
187 } 190 }
188 else 191 else
189 { 192 {
190 throw new WixException(WixErrors.UnexpectedExternalUIMessage(message, action)); 193 throw new WixException(ErrorMessages.UnexpectedExternalUIMessage(message, action));
191 } 194 }
192 } 195 }
193 196
@@ -209,16 +212,16 @@ namespace WixToolset.Extensibility
209 { 212 {
210 case "0": 213 case "0":
211 case "1": 214 case "1":
212 this.OnMessage(WixErrors.ValidationError(messageSourceLineNumbers, messageParts[0], messageParts[2])); 215 this.messaging.Write(ErrorMessages.ValidationError(messageSourceLineNumbers, messageParts[0], messageParts[2]));
213 break; 216 break;
214 case "2": 217 case "2":
215 this.OnMessage(WixWarnings.ValidationWarning(messageSourceLineNumbers, messageParts[0], messageParts[2])); 218 this.messaging.Write(WarningMessages.ValidationWarning(messageSourceLineNumbers, messageParts[0], messageParts[2]));
216 break; 219 break;
217 case "3": 220 case "3":
218 this.OnMessage(WixVerboses.ValidationInfo(messageParts[0], messageParts[2])); 221 this.messaging.Write(VerboseMessages.ValidationInfo(messageParts[0], messageParts[2]));
219 break; 222 break;
220 default: 223 default:
221 throw new WixException(WixErrors.InvalidValidatorMessageType(messageParts[1])); 224 throw new WixException(ErrorMessages.InvalidValidatorMessageType(messageParts[1]));
222 } 225 }
223 } 226 }
224 227
@@ -264,7 +267,7 @@ namespace WixToolset.Extensibility
264 267
265 if (this.indexedSourceLineNumbers.ContainsKey(key)) 268 if (this.indexedSourceLineNumbers.ContainsKey(key))
266 { 269 {
267 this.OnMessage(WixWarnings.DuplicatePrimaryKey(row.SourceLineNumbers, primaryKey, table.Name)); 270 this.messaging.Write(WarningMessages.DuplicatePrimaryKey(row.SourceLineNumbers, primaryKey, table.Name));
268 } 271 }
269 else 272 else
270 { 273 {
@@ -281,20 +284,5 @@ namespace WixToolset.Extensibility
281 // use the file name as the source line information 284 // use the file name as the source line information
282 return this.sourceLineNumbers; 285 return this.sourceLineNumbers;
283 } 286 }
284
285 /// <summary>
286 /// Sends a message to the <see cref="Message"/> delegate if there is one.
287 /// </summary>
288 /// <param name="e">Message event arguments.</param>
289 /// <remarks>
290 /// <para><b>Notes to Inheritors:</b> When overriding <b>OnMessage</b>
291 /// in a derived class, be sure to call the base class's
292 /// <b>OnMessage</b> method so that registered delegates recieve
293 /// the event.</para>
294 /// </remarks>
295 public virtual void OnMessage(MessageEventArgs e)
296 {
297 Messaging.Instance.OnMessage(e);
298 }
299 } 287 }
300} 288}
diff --git a/src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs b/src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs
index 3b4721a6..759bda14 100644
--- a/src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs
+++ b/src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs
@@ -16,7 +16,9 @@ namespace WixToolset.Core.WindowsInstaller
16 private static readonly object lockObject = new object(); 16 private static readonly object lockObject = new object();
17 17
18 private static TableDefinitionCollection tableDefinitions; 18 private static TableDefinitionCollection tableDefinitions;
19#if REVISIT_FOR_PATCHING
19 private static WixActionRowCollection standardActions; 20 private static WixActionRowCollection standardActions;
21#endif
20 22
21 /// <summary> 23 /// <summary>
22 /// Gets the table definitions stored in this assembly. 24 /// Gets the table definitions stored in this assembly.
@@ -57,7 +59,7 @@ namespace WixToolset.Core.WindowsInstaller
57 } 59 }
58 60
59 return WindowsInstallerStandardInternal.standardActions; 61 return WindowsInstallerStandardInternal.standardActions;
60#endif 62#endif
61 throw new NotImplementedException(); 63 throw new NotImplementedException();
62 } 64 }
63 } 65 }
diff --git a/src/WixToolset.Core/AppCommon.cs b/src/WixToolset.Core/AppCommon.cs
index 7716155a..3ea09f08 100644
--- a/src/WixToolset.Core/AppCommon.cs
+++ b/src/WixToolset.Core/AppCommon.cs
@@ -3,13 +3,7 @@
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using System; 5 using System;
6 using System.Collections.Specialized;
7 using System.Globalization;
8 using System.IO;
9 using System.Reflection; 6 using System.Reflection;
10 using System.Text;
11 using System.Threading;
12 using WixToolset.Data;
13 7
14 /// <summary> 8 /// <summary>
15 /// Common utilities for Wix applications. 9 /// Common utilities for Wix applications.
@@ -17,102 +11,6 @@ namespace WixToolset.Core
17 public static class AppCommon 11 public static class AppCommon
18 { 12 {
19 /// <summary> 13 /// <summary>
20 /// Read the configuration file (*.exe.config).
21 /// </summary>
22 /// <param name="extensions">Extensions to load.</param>
23 public static void ReadConfiguration(StringCollection extensions)
24 {
25 if (null == extensions)
26 {
27 throw new ArgumentNullException("extensions");
28 }
29
30#if REDO_IN_NETCORE
31 // Don't use the default AppSettings reader because
32 // the tool may be called from within another process.
33 // Instead, read the .exe.config file from the tool location.
34 string toolPath = (new System.Uri(Assembly.GetCallingAssembly().CodeBase)).LocalPath;
35 Configuration config = ConfigurationManager.OpenExeConfiguration(toolPath);
36 if (config.HasFile)
37 {
38 KeyValueConfigurationElement configVal = config.AppSettings.Settings["extensions"];
39 if (configVal != null)
40 {
41 string extensionTypes = configVal.Value;
42 foreach (string extensionType in extensionTypes.Split(";".ToCharArray()))
43 {
44 extensions.Add(extensionType);
45 }
46 }
47 }
48#endif
49 }
50
51 /// <summary>
52 /// Gets a unique temporary location or uses the provided temporary location.
53 /// </summary>
54 /// <param name="tempLocation">Optional temporary location to use.</param>
55 /// <returns>Temporary location.</returns>
56 public static string GetTempLocation(string tempLocation = null)
57 {
58 if (String.IsNullOrEmpty(tempLocation))
59 {
60 tempLocation = Environment.GetEnvironmentVariable("WIX_TEMP") ?? Path.GetTempPath();
61
62 do
63 {
64 tempLocation = Path.Combine(tempLocation, DateTime.Now.ToString("wixyyMMddTHHmmssffff"));
65 } while (Directory.Exists(tempLocation));
66 }
67
68 return tempLocation;
69 }
70
71 /// <summary>
72 /// Delete a directory with retries and best-effort cleanup.
73 /// </summary>
74 /// <param name="path">The directory to delete.</param>
75 /// <param name="messageHandler">The message handler.</param>
76 /// <returns>True if all files were deleted, false otherwise.</returns>
77 public static bool DeleteDirectory(string path, IMessageHandler messageHandler)
78 {
79 return Common.DeleteTempFiles(path, messageHandler);
80 }
81
82 /// <summary>
83 /// Prepares the console for localization.
84 /// </summary>
85 public static void PrepareConsoleForLocalization()
86 {
87 Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture();
88 if ((Console.OutputEncoding.CodePage != Encoding.UTF8.CodePage) &&
89 (Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) &&
90 (Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage))
91 {
92 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
93 }
94 }
95
96 /// <summary>
97 /// Handler for display message events.
98 /// </summary>
99 /// <param name="sender">Sender of message.</param>
100 /// <param name="e">Event arguments containing message to display.</param>
101 public static void ConsoleDisplayMessage(object sender, DisplayEventArgs e)
102 {
103 switch (e.Level)
104 {
105 case MessageLevel.Warning:
106 case MessageLevel.Error:
107 Console.Error.WriteLine(e.Message);
108 break;
109 default:
110 Console.WriteLine(e.Message);
111 break;
112 }
113 }
114
115 /// <summary>
116 /// Creates and returns the string for CreatingApplication field (MSI Summary Information Stream). 14 /// Creates and returns the string for CreatingApplication field (MSI Summary Information Stream).
117 /// </summary> 15 /// </summary>
118 /// <remarks>It reads the AssemblyProductAttribute and AssemblyVersionAttribute of executing assembly 16 /// <remarks>It reads the AssemblyProductAttribute and AssemblyVersionAttribute of executing assembly
diff --git a/src/WixToolset.Core/BackendContext.cs b/src/WixToolset.Core/BackendContext.cs
deleted file mode 100644
index 7166a3a3..00000000
--- a/src/WixToolset.Core/BackendContext.cs
+++ /dev/null
@@ -1,16 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Core
4{
5 using WixToolset.Data;
6
7 public class BackendContext
8 {
9 internal BackendContext()
10 {
11 this.Messaging = Messaging.Instance;
12 }
13
14 public Messaging Messaging { get; }
15 }
16}
diff --git a/src/WixToolset.Core/Bind/FileResolver.cs b/src/WixToolset.Core/Bind/FileResolver.cs
index 8d624e6f..2142d261 100644
--- a/src/WixToolset.Core/Bind/FileResolver.cs
+++ b/src/WixToolset.Core/Bind/FileResolver.cs
@@ -221,7 +221,7 @@ namespace WixToolset.Core.Bind
221 } 221 }
222 catch (ArgumentException) 222 catch (ArgumentException)
223 { 223 {
224 throw new WixException(WixErrors.IllegalCharactersInPath(path)); 224 throw new WixException(ErrorMessages.IllegalCharactersInPath(path));
225 } 225 }
226 } 226 }
227 227
diff --git a/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
index 4585b71a..3ded9a87 100644
--- a/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
+++ b/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
@@ -7,6 +7,7 @@ namespace WixToolset.Core.Bind
7 using System.Globalization; 7 using System.Globalization;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
10 using WixToolset.Extensibility.Services;
10 11
11 /// <summary> 12 /// <summary>
12 /// Resolves the fields which had variables that needed to be resolved after the file information 13 /// Resolves the fields which had variables that needed to be resolved after the file information
@@ -19,12 +20,15 @@ namespace WixToolset.Core.Bind
19 /// </summary> 20 /// </summary>
20 /// <param name="delayedFields">The fields which had resolution delayed.</param> 21 /// <param name="delayedFields">The fields which had resolution delayed.</param>
21 /// <param name="variableCache">The file information to use when resolving variables.</param> 22 /// <param name="variableCache">The file information to use when resolving variables.</param>
22 public ResolveDelayedFieldsCommand(IEnumerable<IDelayedField> delayedFields, Dictionary<string, string> variableCache) 23 public ResolveDelayedFieldsCommand(IMessaging messaging, IEnumerable<IDelayedField> delayedFields, Dictionary<string, string> variableCache)
23 { 24 {
25 this.Messaging = messaging;
24 this.DelayedFields = delayedFields; 26 this.DelayedFields = delayedFields;
25 this.VariableCache = variableCache; 27 this.VariableCache = variableCache;
26 } 28 }
27 29
30 private IMessaging Messaging { get; }
31
28 private IEnumerable<IDelayedField> DelayedFields { get;} 32 private IEnumerable<IDelayedField> DelayedFields { get;}
29 33
30 private IDictionary<string, string> VariableCache { get; } 34 private IDictionary<string, string> VariableCache { get; }
@@ -58,7 +62,7 @@ namespace WixToolset.Core.Bind
58 } 62 }
59 catch (WixException we) 63 catch (WixException we)
60 { 64 {
61 Messaging.Instance.OnMessage(we.Error); 65 this.Messaging.Write(we.Error);
62 continue; 66 continue;
63 } 67 }
64 } 68 }
@@ -103,7 +107,7 @@ namespace WixToolset.Core.Bind
103 } 107 }
104 catch (WixException we) 108 catch (WixException we)
105 { 109 {
106 Messaging.Instance.OnMessage(we.Error); 110 this.Messaging.Write(we.Error);
107 } 111 }
108 } 112 }
109 } 113 }
diff --git a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
index 9253f352..e8c90956 100644
--- a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
+++ b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
@@ -7,12 +7,15 @@ namespace WixToolset.Core.Bind
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Bind; 8 using WixToolset.Data.Bind;
9 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
10 using WixToolset.Extensibility.Services;
10 11
11 /// <summary> 12 /// <summary>
12 /// Resolve source fields in the tables included in the output 13 /// Resolve source fields in the tables included in the output
13 /// </summary> 14 /// </summary>
14 internal class ResolveFieldsCommand 15 internal class ResolveFieldsCommand
15 { 16 {
17 public IMessaging Messaging { private get; set; }
18
16 public bool BuildingPatch { private get; set; } 19 public bool BuildingPatch { private get; set; }
17 20
18 public IBindVariableResolver BindVariableResolver { private get; set; } 21 public IBindVariableResolver BindVariableResolver { private get; set; }
@@ -75,7 +78,7 @@ namespace WixToolset.Core.Bind
75 } 78 }
76 79
77 // Move to next row if we've hit an error resolving variables. 80 // Move to next row if we've hit an error resolving variables.
78 if (Messaging.Instance.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field. 81 if (this.Messaging.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field.
79 { 82 {
80 continue; 83 continue;
81 } 84 }
@@ -151,7 +154,7 @@ namespace WixToolset.Core.Bind
151 catch (WixFileNotFoundException) 154 catch (WixFileNotFoundException)
152 { 155 {
153 // display the error with source line information 156 // display the error with source line information
154 Messaging.Instance.OnMessage(WixErrors.FileNotFound(row.SourceLineNumbers, objectField.Path)); 157 this.Messaging.Write(ErrorMessages.FileNotFound(row.SourceLineNumbers, objectField.Path));
155 } 158 }
156 } 159 }
157 160
@@ -208,7 +211,7 @@ namespace WixToolset.Core.Bind
208 catch (WixFileNotFoundException) 211 catch (WixFileNotFoundException)
209 { 212 {
210 // display the error with source line information 213 // display the error with source line information
211 Messaging.Instance.OnMessage(WixErrors.FileNotFound(row.SourceLineNumbers, (string)objectField.PreviousData)); 214 Messaging.Instance.Write(WixErrors.FileNotFound(row.SourceLineNumbers, (string)objectField.PreviousData));
212 } 215 }
213 } 216 }
214 } 217 }
diff --git a/src/WixToolset.Core/Bind/TransferFilesCommand.cs b/src/WixToolset.Core/Bind/TransferFilesCommand.cs
index f116569c..68d8b129 100644
--- a/src/WixToolset.Core/Bind/TransferFilesCommand.cs
+++ b/src/WixToolset.Core/Bind/TransferFilesCommand.cs
@@ -9,18 +9,22 @@ namespace WixToolset.Core.Bind
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Bind; 10 using WixToolset.Data.Bind;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Services;
12 13
13 internal class TransferFilesCommand 14 internal class TransferFilesCommand
14 { 15 {
15 public TransferFilesCommand(IEnumerable<BindPath> bindPaths, IEnumerable<IBinderExtension> extensions, IEnumerable<FileTransfer> fileTransfers, bool suppressAclReset) 16 public TransferFilesCommand(IMessaging messaging, IEnumerable<BindPath> bindPaths, IEnumerable<IBinderExtension> extensions, IEnumerable<FileTransfer> fileTransfers, bool suppressAclReset)
16 { 17 {
17 this.FileResolver = new FileResolver(bindPaths, extensions); 18 this.FileResolver = new FileResolver(bindPaths, extensions);
19 this.Messaging = messaging;
18 this.FileTransfers = fileTransfers; 20 this.FileTransfers = fileTransfers;
19 this.SuppressAclReset = suppressAclReset; 21 this.SuppressAclReset = suppressAclReset;
20 } 22 }
21 23
22 private FileResolver FileResolver { get; } 24 private FileResolver FileResolver { get; }
23 25
26 private IMessaging Messaging { get; }
27
24 private IEnumerable<FileTransfer> FileTransfers { get; } 28 private IEnumerable<FileTransfer> FileTransfers { get; }
25 29
26 private bool SuppressAclReset { get; } 30 private bool SuppressAclReset { get; }
@@ -47,12 +51,12 @@ namespace WixToolset.Core.Bind
47 { 51 {
48 if (fileTransfer.Move) 52 if (fileTransfer.Move)
49 { 53 {
50 Messaging.Instance.OnMessage(WixVerboses.MoveFile(fileSource, fileTransfer.Destination)); 54 this.Messaging.Write(VerboseMessages.MoveFile(fileSource, fileTransfer.Destination));
51 this.TransferFile(true, fileSource, fileTransfer.Destination); 55 this.TransferFile(true, fileSource, fileTransfer.Destination);
52 } 56 }
53 else 57 else
54 { 58 {
55 Messaging.Instance.OnMessage(WixVerboses.CopyFile(fileSource, fileTransfer.Destination)); 59 this.Messaging.Write(VerboseMessages.CopyFile(fileSource, fileTransfer.Destination));
56 this.TransferFile(false, fileSource, fileTransfer.Destination); 60 this.TransferFile(false, fileSource, fileTransfer.Destination);
57 } 61 }
58 62
@@ -61,7 +65,7 @@ namespace WixToolset.Core.Bind
61 } 65 }
62 catch (FileNotFoundException e) 66 catch (FileNotFoundException e)
63 { 67 {
64 throw new WixFileNotFoundException(e.FileName); 68 throw new WixFileNotFoundException(fileTransfer.SourceLineNumbers, e.FileName);
65 } 69 }
66 catch (DirectoryNotFoundException) 70 catch (DirectoryNotFoundException)
67 { 71 {
@@ -72,7 +76,7 @@ namespace WixToolset.Core.Bind
72 } 76 }
73 77
74 string directory = Path.GetDirectoryName(fileTransfer.Destination); 78 string directory = Path.GetDirectoryName(fileTransfer.Destination);
75 Messaging.Instance.OnMessage(WixVerboses.CreateDirectory(directory)); 79 this.Messaging.Write(VerboseMessages.CreateDirectory(directory));
76 Directory.CreateDirectory(directory); 80 Directory.CreateDirectory(directory);
77 retry = true; 81 retry = true;
78 } 82 }
@@ -86,7 +90,7 @@ namespace WixToolset.Core.Bind
86 90
87 if (File.Exists(fileTransfer.Destination)) 91 if (File.Exists(fileTransfer.Destination))
88 { 92 {
89 Messaging.Instance.OnMessage(WixVerboses.RemoveDestinationFile(fileTransfer.Destination)); 93 this.Messaging.Write(VerboseMessages.RemoveDestinationFile(fileTransfer.Destination));
90 94
91 // try to ensure the file is not read-only 95 // try to ensure the file is not read-only
92 FileAttributes attributes = File.GetAttributes(fileTransfer.Destination); 96 FileAttributes attributes = File.GetAttributes(fileTransfer.Destination);
@@ -96,7 +100,7 @@ namespace WixToolset.Core.Bind
96 } 100 }
97 catch (ArgumentException) // thrown for unauthorized access errors 101 catch (ArgumentException) // thrown for unauthorized access errors
98 { 102 {
99 throw new WixException(WixErrors.UnauthorizedAccess(fileTransfer.Destination)); 103 throw new WixException(ErrorMessages.UnauthorizedAccess(fileTransfer.Destination));
100 } 104 }
101 105
102 // try to delete the file 106 // try to delete the file
@@ -106,7 +110,7 @@ namespace WixToolset.Core.Bind
106 } 110 }
107 catch (IOException) 111 catch (IOException)
108 { 112 {
109 throw new WixException(WixErrors.FileInUse(null, fileTransfer.Destination)); 113 throw new WixException(ErrorMessages.FileInUse(null, fileTransfer.Destination));
110 } 114 }
111 115
112 retry = true; 116 retry = true;
@@ -126,7 +130,7 @@ namespace WixToolset.Core.Bind
126 130
127 if (File.Exists(fileTransfer.Destination)) 131 if (File.Exists(fileTransfer.Destination))
128 { 132 {
129 Messaging.Instance.OnMessage(WixVerboses.RemoveDestinationFile(fileTransfer.Destination)); 133 this.Messaging.Write(VerboseMessages.RemoveDestinationFile(fileTransfer.Destination));
130 134
131 // ensure the file is not read-only, then delete it 135 // ensure the file is not read-only, then delete it
132 FileAttributes attributes = File.GetAttributes(fileTransfer.Destination); 136 FileAttributes attributes = File.GetAttributes(fileTransfer.Destination);
@@ -137,7 +141,7 @@ namespace WixToolset.Core.Bind
137 } 141 }
138 catch (IOException) 142 catch (IOException)
139 { 143 {
140 throw new WixException(WixErrors.FileInUse(null, fileTransfer.Destination)); 144 throw new WixException(ErrorMessages.FileInUse(null, fileTransfer.Destination));
141 } 145 }
142 146
143 retry = true; 147 retry = true;
@@ -168,7 +172,7 @@ namespace WixToolset.Core.Bind
168 } 172 }
169 catch 173 catch
170 { 174 {
171 Messaging.Instance.OnMessage(WixWarnings.UnableToResetAcls()); 175 this.Messaging.Write(WarningMessages.UnableToResetAcls());
172 } 176 }
173 } 177 }
174 } 178 }
diff --git a/src/WixToolset.Core/BindContext.cs b/src/WixToolset.Core/BindContext.cs
index 7ef7ddd4..41d0ddf9 100644
--- a/src/WixToolset.Core/BindContext.cs
+++ b/src/WixToolset.Core/BindContext.cs
@@ -17,7 +17,7 @@ namespace WixToolset.Core
17 17
18 public IServiceProvider ServiceProvider { get; } 18 public IServiceProvider ServiceProvider { get; }
19 19
20 public Messaging Messaging { get; set; } 20 public IMessaging Messaging { get; set; }
21 21
22 public IEnumerable<BindPath> BindPaths { get; set; } 22 public IEnumerable<BindPath> BindPaths { get; set; }
23 23
diff --git a/src/WixToolset.Core/Binder.cs b/src/WixToolset.Core/Binder.cs
index e282ead8..2369b600 100644
--- a/src/WixToolset.Core/Binder.cs
+++ b/src/WixToolset.Core/Binder.cs
@@ -215,7 +215,7 @@ namespace WixToolset.Core
215 this.Layout(bindResult); 215 this.Layout(bindResult);
216 } 216 }
217 217
218 return Messaging.Instance.EncounteredError; 218 return this.Context.Messaging.EncounteredError;
219 } 219 }
220 220
221 private ResolveResult Resolve() 221 private ResolveResult Resolve()
@@ -227,6 +227,7 @@ namespace WixToolset.Core
227 IEnumerable<DelayedField> delayedFields; 227 IEnumerable<DelayedField> delayedFields;
228 { 228 {
229 var command = new ResolveFieldsCommand(); 229 var command = new ResolveFieldsCommand();
230 command.Messaging = this.Context.Messaging;
230 command.BuildingPatch = buildingPatch; 231 command.BuildingPatch = buildingPatch;
231 command.BindVariableResolver = this.Context.WixVariableResolver; 232 command.BindVariableResolver = this.Context.WixVariableResolver;
232 command.BindPaths = this.Context.BindPaths; 233 command.BindPaths = this.Context.BindPaths;
@@ -437,12 +438,12 @@ namespace WixToolset.Core
437 { 438 {
438 if (!this.DeleteTempFiles()) 439 if (!this.DeleteTempFiles())
439 { 440 {
440 this.Context.Messaging.OnMessage(WixWarnings.FailedToDeleteTempDir(this.TempFilesLocation)); 441 this.Context.Messaging.Write(WarningMessages.FailedToDeleteTempDir(this.TempFilesLocation));
441 } 442 }
442 } 443 }
443 else 444 else
444 { 445 {
445 this.Context.Messaging.OnMessage(WixVerboses.BinderTempDirLocatedAt(this.TempFilesLocation)); 446 this.Context.Messaging.Write(VerboseMessages.BinderTempDirLocatedAt(this.TempFilesLocation));
446 } 447 }
447 } 448 }
448 449
@@ -594,9 +595,9 @@ namespace WixToolset.Core
594 { 595 {
595 if (null != transfers && transfers.Any()) 596 if (null != transfers && transfers.Any())
596 { 597 {
597 this.Context.Messaging.OnMessage(WixVerboses.LayingOutMedia()); 598 this.Context.Messaging.Write(VerboseMessages.LayingOutMedia());
598 599
599 var command = new TransferFilesCommand(this.Context.BindPaths, this.Context.Extensions, transfers, this.Context.SuppressAclReset); 600 var command = new TransferFilesCommand(this.Context.Messaging, this.Context.BindPaths, this.Context.Extensions, transfers, this.Context.SuppressAclReset);
600 command.Execute(); 601 command.Execute();
601 } 602 }
602 } 603 }
@@ -613,7 +614,7 @@ namespace WixToolset.Core
613 { 614 {
614 if (!directories.ContainsKey(directory)) 615 if (!directories.ContainsKey(directory))
615 { 616 {
616 throw new WixException(WixErrors.ExpectedDirectory(directory)); 617 throw new WixException(ErrorMessages.ExpectedDirectory(directory));
617 } 618 }
618 619
619 ResolvedDirectory resolvedDirectory = (ResolvedDirectory)directories[directory]; 620 ResolvedDirectory resolvedDirectory = (ResolvedDirectory)directories[directory];
diff --git a/src/WixToolset.Core/BinderFileManagerCore.cs b/src/WixToolset.Core/BinderFileManagerCore.cs
index 5780983a..e699f0ce 100644
--- a/src/WixToolset.Core/BinderFileManagerCore.cs
+++ b/src/WixToolset.Core/BinderFileManagerCore.cs
@@ -96,14 +96,5 @@ namespace WixToolset
96 96
97 return Enumerable.Empty<string>(); 97 return Enumerable.Empty<string>();
98 } 98 }
99
100 /// <summary>
101 /// Sends a message to the message delegate if there is one.
102 /// </summary>
103 /// <param name="e">Message event arguments.</param>
104 public void OnMessage(MessageEventArgs e)
105 {
106 Messaging.Instance.OnMessage(e);
107 }
108 } 99 }
109} 100}
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs
index 7a63b869..43b75f33 100644
--- a/src/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -13,9 +13,10 @@ namespace WixToolset.Core
13 13
14 internal class BuildCommand : ICommandLineCommand 14 internal class BuildCommand : ICommandLineCommand
15 { 15 {
16 public BuildCommand(IServiceProvider serviceProvider, IExtensionManager extensions, IEnumerable<SourceFile> sources, IDictionary<string, string> preprocessorVariables, IEnumerable<string> locFiles, IEnumerable<string> libraryFiles, string outputPath, OutputType outputType, string cabCachePath, IEnumerable<string> cultures, bool bindFiles, IEnumerable<BindPath> bindPaths, string intermediateFolder, string contentsFile, string outputsFile, string builtOutputsFile, string wixProjectFile) 16 public BuildCommand(IServiceProvider serviceProvider, IMessaging messaging, IExtensionManager extensions, IEnumerable<SourceFile> sources, IDictionary<string, string> preprocessorVariables, IEnumerable<string> locFiles, IEnumerable<string> libraryFiles, string outputPath, OutputType outputType, string cabCachePath, IEnumerable<string> cultures, bool bindFiles, IEnumerable<BindPath> bindPaths, string intermediateFolder, string contentsFile, string outputsFile, string builtOutputsFile, string wixProjectFile)
17 { 17 {
18 this.ServiceProvider = serviceProvider; 18 this.ServiceProvider = serviceProvider;
19 this.Messaging = messaging;
19 this.ExtensionManager = extensions; 20 this.ExtensionManager = extensions;
20 this.LocFiles = locFiles; 21 this.LocFiles = locFiles;
21 this.LibraryFiles = libraryFiles; 22 this.LibraryFiles = libraryFiles;
@@ -38,6 +39,8 @@ namespace WixToolset.Core
38 39
39 public IServiceProvider ServiceProvider { get; } 40 public IServiceProvider ServiceProvider { get; }
40 41
42 public IMessaging Messaging { get; }
43
41 public IExtensionManager ExtensionManager { get; } 44 public IExtensionManager ExtensionManager { get; }
42 45
43 public IEnumerable<string> IncludeSearchPaths { get; } 46 public IEnumerable<string> IncludeSearchPaths { get; }
@@ -91,13 +94,13 @@ namespace WixToolset.Core
91 { 94 {
92 var output = this.LinkPhase(intermediates); 95 var output = this.LinkPhase(intermediates);
93 96
94 if (!Messaging.Instance.EncounteredError) 97 if (!this.Messaging.EncounteredError)
95 { 98 {
96 this.BindPhase(output); 99 this.BindPhase(output);
97 } 100 }
98 } 101 }
99 102
100 return Messaging.Instance.LastErrorNumber; 103 return this.Messaging.LastErrorNumber;
101 } 104 }
102 105
103 private IEnumerable<Intermediate> CompilePhase() 106 private IEnumerable<Intermediate> CompilePhase()
@@ -107,7 +110,7 @@ namespace WixToolset.Core
107 foreach (var sourceFile in this.SourceFiles) 110 foreach (var sourceFile in this.SourceFiles)
108 { 111 {
109 var preprocessContext = this.ServiceProvider.GetService<IPreprocessContext>(); 112 var preprocessContext = this.ServiceProvider.GetService<IPreprocessContext>();
110 preprocessContext.Messaging = Messaging.Instance; 113 preprocessContext.Messaging = this.Messaging;
111 preprocessContext.Extensions = this.ExtensionManager.Create<IPreprocessorExtension>(); 114 preprocessContext.Extensions = this.ExtensionManager.Create<IPreprocessorExtension>();
112 preprocessContext.Platform = Platform.X86; // TODO: set this correctly 115 preprocessContext.Platform = Platform.X86; // TODO: set this correctly
113 preprocessContext.IncludeSearchPaths = this.IncludeSearchPaths?.ToList() ?? new List<string>(); 116 preprocessContext.IncludeSearchPaths = this.IncludeSearchPaths?.ToList() ?? new List<string>();
@@ -117,18 +120,24 @@ namespace WixToolset.Core
117 var preprocessor = new Preprocessor(); 120 var preprocessor = new Preprocessor();
118 var document = preprocessor.Process(preprocessContext); 121 var document = preprocessor.Process(preprocessContext);
119 122
120 var compileContext = this.ServiceProvider.GetService<ICompileContext>(); 123 if (!this.Messaging.EncounteredError)
121 compileContext.Messaging = Messaging.Instance; 124 {
122 compileContext.CompilationId = Guid.NewGuid().ToString("N"); 125 var compileContext = this.ServiceProvider.GetService<ICompileContext>();
123 compileContext.Extensions = this.ExtensionManager.Create<ICompilerExtension>(); 126 compileContext.Messaging = this.Messaging;
124 compileContext.OutputPath = sourceFile.OutputPath; 127 compileContext.CompilationId = Guid.NewGuid().ToString("N");
125 compileContext.Platform = Platform.X86; // TODO: set this correctly 128 compileContext.Extensions = this.ExtensionManager.Create<ICompilerExtension>();
126 compileContext.Source = document; 129 compileContext.OutputPath = sourceFile.OutputPath;
127 130 compileContext.Platform = Platform.X86; // TODO: set this correctly
128 var compiler = new Compiler(); 131 compileContext.Source = document;
129 var intermediate = compiler.Compile(compileContext); 132
130 133 var compiler = new Compiler();
131 intermediates.Add(intermediate); 134 var intermediate = compiler.Compile(compileContext);
135
136 if (!this.Messaging.EncounteredError)
137 {
138 intermediates.Add(intermediate);
139 }
140 }
132 } 141 }
133 142
134 return intermediates; 143 return intermediates;
@@ -139,7 +148,7 @@ namespace WixToolset.Core
139 var localizations = this.LoadLocalizationFiles().ToList(); 148 var localizations = this.LoadLocalizationFiles().ToList();
140 149
141 // If there was an error adding localization files, then bail. 150 // If there was an error adding localization files, then bail.
142 if (Messaging.Instance.EncounteredError) 151 if (this.Messaging.EncounteredError)
143 { 152 {
144 return null; 153 return null;
145 } 154 }
@@ -166,7 +175,7 @@ namespace WixToolset.Core
166 var libraries = this.LoadLibraries(creator); 175 var libraries = this.LoadLibraries(creator);
167 176
168 var context = this.ServiceProvider.GetService<ILinkContext>(); 177 var context = this.ServiceProvider.GetService<ILinkContext>();
169 context.Messaging = Messaging.Instance; 178 context.Messaging = this.Messaging;
170 context.Extensions = this.ExtensionManager.Create<ILinkerExtension>(); 179 context.Extensions = this.ExtensionManager.Create<ILinkerExtension>();
171 context.ExtensionData = this.ExtensionManager.Create<IExtensionData>(); 180 context.ExtensionData = this.ExtensionManager.Create<IExtensionData>();
172 context.ExpectedOutputType = this.OutputType; 181 context.ExpectedOutputType = this.OutputType;
@@ -182,7 +191,7 @@ namespace WixToolset.Core
182 { 191 {
183 var localizations = this.LoadLocalizationFiles().ToList(); 192 var localizations = this.LoadLocalizationFiles().ToList();
184 193
185 var localizer = new Localizer(localizations); 194 var localizer = new Localizer(this.Messaging, localizations);
186 195
187 var resolver = CreateWixResolverWithVariables(localizer, output); 196 var resolver = CreateWixResolverWithVariables(localizer, output);
188 197
@@ -193,7 +202,7 @@ namespace WixToolset.Core
193 } 202 }
194 203
195 var context = this.ServiceProvider.GetService<IBindContext>(); 204 var context = this.ServiceProvider.GetService<IBindContext>();
196 context.Messaging = Messaging.Instance; 205 context.Messaging = this.Messaging;
197 context.ExtensionManager = this.ExtensionManager; 206 context.ExtensionManager = this.ExtensionManager;
198 context.BindPaths = this.BindPaths ?? Array.Empty<BindPath>(); 207 context.BindPaths = this.BindPaths ?? Array.Empty<BindPath>();
199 //context.CabbingThreadCount = this.CabbingThreadCount; 208 //context.CabbingThreadCount = this.CabbingThreadCount;
@@ -234,11 +243,11 @@ namespace WixToolset.Core
234 } 243 }
235 catch (WixCorruptFileException e) 244 catch (WixCorruptFileException e)
236 { 245 {
237 Messaging.Instance.OnMessage(e.Error); 246 this.Messaging.Write(e.Error);
238 } 247 }
239 catch (WixUnexpectedFileFormatException e) 248 catch (WixUnexpectedFileFormatException e)
240 { 249 {
241 Messaging.Instance.OnMessage(e.Error); 250 this.Messaging.Write(e.Error);
242 } 251 }
243 } 252 }
244 } 253 }
@@ -250,15 +259,15 @@ namespace WixToolset.Core
250 { 259 {
251 foreach (var loc in this.LocFiles) 260 foreach (var loc in this.LocFiles)
252 { 261 {
253 var localization = Localizer.ParseLocalizationFile(loc); 262 var localization = Localizer.ParseLocalizationFile(this.Messaging, loc);
254 263
255 yield return localization; 264 yield return localization;
256 } 265 }
257 } 266 }
258 267
259 private static WixVariableResolver CreateWixResolverWithVariables(Localizer localizer, Intermediate output) 268 private WixVariableResolver CreateWixResolverWithVariables(Localizer localizer, Intermediate output)
260 { 269 {
261 var resolver = new WixVariableResolver(localizer); 270 var resolver = new WixVariableResolver(this.Messaging, localizer);
262 271
263 // Gather all the wix variables. 272 // Gather all the wix variables.
264 var wixVariables = output?.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>(); 273 var wixVariables = output?.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>();
diff --git a/src/WixToolset.Core/CommandLine/CommandLine.cs b/src/WixToolset.Core/CommandLine/CommandLine.cs
index 9bedca9a..9db1b2f9 100644
--- a/src/WixToolset.Core/CommandLine/CommandLine.cs
+++ b/src/WixToolset.Core/CommandLine/CommandLine.cs
@@ -24,12 +24,10 @@ namespace WixToolset.Core
24 24
25 internal class CommandLine : ICommandLine, IParseCommandLine 25 internal class CommandLine : ICommandLine, IParseCommandLine
26 { 26 {
27 public CommandLine()
28 {
29 }
30
31 private IServiceProvider ServiceProvider { get; set; } 27 private IServiceProvider ServiceProvider { get; set; }
32 28
29 private IMessaging Messaging { get; set; }
30
33 public static string ExpectedArgument { get; } = "expected argument"; 31 public static string ExpectedArgument { get; } = "expected argument";
34 32
35 public string ActiveCommand { get; private set; } 33 public string ActiveCommand { get; private set; }
@@ -48,6 +46,8 @@ namespace WixToolset.Core
48 { 46 {
49 this.ServiceProvider = context.ServiceProvider; 47 this.ServiceProvider = context.ServiceProvider;
50 48
49 this.Messaging = context.Messaging ?? this.ServiceProvider.GetService<IMessaging>();
50
51 this.ExtensionManager = context.ExtensionManager ?? this.ServiceProvider.GetService<IExtensionManager>(); 51 this.ExtensionManager = context.ExtensionManager ?? this.ServiceProvider.GetService<IExtensionManager>();
52 52
53 var args = context.ParsedArguments ?? Array.Empty<string>(); 53 var args = context.ParsedArguments ?? Array.Empty<string>();
@@ -186,7 +186,7 @@ namespace WixToolset.Core
186 } 186 }
187 }); 187 });
188 188
189 Messaging.Instance.ShowVerboseMessages = verbose; 189 this.Messaging.ShowVerboseMessages = verbose;
190 190
191 if (showVersion) 191 if (showVersion)
192 { 192 {
@@ -208,17 +208,17 @@ namespace WixToolset.Core
208 case Commands.Build: 208 case Commands.Build:
209 { 209 {
210 var sourceFiles = GatherSourceFiles(files, outputFolder); 210 var sourceFiles = GatherSourceFiles(files, outputFolder);
211 var variables = GatherPreprocessorVariables(defines); 211 var variables = this.GatherPreprocessorVariables(defines);
212 var bindPathList = GatherBindPaths(bindPaths); 212 var bindPathList = this.GatherBindPaths(bindPaths);
213 var type = CalculateOutputType(outputType, outputFile); 213 var type = CalculateOutputType(outputType, outputFile);
214 return new BuildCommand(this.ServiceProvider, this.ExtensionManager, sourceFiles, variables, locFiles, libraryFiles, outputFile, type, cabCachePath, cultures, bindFiles, bindPathList, intermediateFolder, contentsFile, outputsFile, builtOutputsFile, wixProjectFile); 214 return new BuildCommand(this.ServiceProvider, this.Messaging, this.ExtensionManager, sourceFiles, variables, locFiles, libraryFiles, outputFile, type, cabCachePath, cultures, bindFiles, bindPathList, intermediateFolder, contentsFile, outputsFile, builtOutputsFile, wixProjectFile);
215 } 215 }
216 216
217 case Commands.Compile: 217 case Commands.Compile:
218 { 218 {
219 var sourceFiles = GatherSourceFiles(files, outputFolder); 219 var sourceFiles = GatherSourceFiles(files, outputFolder);
220 var variables = GatherPreprocessorVariables(defines); 220 var variables = GatherPreprocessorVariables(defines);
221 return new CompileCommand(this.ServiceProvider, this.ExtensionManager, sourceFiles, variables); 221 return new CompileCommand(this.ServiceProvider, this.Messaging, this.ExtensionManager, sourceFiles, variables);
222 } 222 }
223 } 223 }
224 224
@@ -305,7 +305,7 @@ namespace WixToolset.Core
305 return files; 305 return files;
306 } 306 }
307 307
308 private static IDictionary<string, string> GatherPreprocessorVariables(IEnumerable<string> defineConstants) 308 private IDictionary<string, string> GatherPreprocessorVariables(IEnumerable<string> defineConstants)
309 { 309 {
310 var variables = new Dictionary<string, string>(); 310 var variables = new Dictionary<string, string>();
311 311
@@ -315,7 +315,7 @@ namespace WixToolset.Core
315 315
316 if (variables.ContainsKey(value[0])) 316 if (variables.ContainsKey(value[0]))
317 { 317 {
318 Messaging.Instance.OnMessage(WixErrors.DuplicateVariableDefinition(value[0], (1 == value.Length) ? String.Empty : value[1], variables[value[0]])); 318 this.Messaging.Write(ErrorMessages.DuplicateVariableDefinition(value[0], (1 == value.Length) ? String.Empty : value[1], variables[value[0]]));
319 continue; 319 continue;
320 } 320 }
321 321
@@ -325,7 +325,7 @@ namespace WixToolset.Core
325 return variables; 325 return variables;
326 } 326 }
327 327
328 private static IEnumerable<BindPath> GatherBindPaths(IEnumerable<string> bindPaths) 328 private IEnumerable<BindPath> GatherBindPaths(IEnumerable<string> bindPaths)
329 { 329 {
330 var result = new List<BindPath>(); 330 var result = new List<BindPath>();
331 331
@@ -339,7 +339,7 @@ namespace WixToolset.Core
339 } 339 }
340 else if (File.Exists(bp.Path)) 340 else if (File.Exists(bp.Path))
341 { 341 {
342 Messaging.Instance.OnMessage(WixErrors.ExpectedDirectoryGotFile("-bindpath", bp.Path)); 342 this.Messaging.Write(ErrorMessages.ExpectedDirectoryGotFile("-bindpath", bp.Path));
343 } 343 }
344 } 344 }
345 345
diff --git a/src/WixToolset.Core/CommandLine/CommandLineContext.cs b/src/WixToolset.Core/CommandLine/CommandLineContext.cs
index 96c149be..cbb9af53 100644
--- a/src/WixToolset.Core/CommandLine/CommandLineContext.cs
+++ b/src/WixToolset.Core/CommandLine/CommandLineContext.cs
@@ -3,7 +3,6 @@
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using System; 5 using System;
6 using WixToolset.Data;
7 using WixToolset.Extensibility.Services; 6 using WixToolset.Extensibility.Services;
8 7
9 internal class CommandLineContext : ICommandLineContext 8 internal class CommandLineContext : ICommandLineContext
@@ -15,7 +14,7 @@ namespace WixToolset.Core
15 14
16 public IServiceProvider ServiceProvider { get; } 15 public IServiceProvider ServiceProvider { get; }
17 16
18 public Messaging Messaging { get; set; } 17 public IMessaging Messaging { get; set; }
19 18
20 public IExtensionManager ExtensionManager { get; set; } 19 public IExtensionManager ExtensionManager { get; set; }
21 20
diff --git a/src/WixToolset.Core/CommandLine/CompileCommand.cs b/src/WixToolset.Core/CommandLine/CompileCommand.cs
index e7fcdd4d..856dd29f 100644
--- a/src/WixToolset.Core/CommandLine/CompileCommand.cs
+++ b/src/WixToolset.Core/CommandLine/CompileCommand.cs
@@ -11,16 +11,19 @@ namespace WixToolset.Core
11 11
12 internal class CompileCommand : ICommandLineCommand 12 internal class CompileCommand : ICommandLineCommand
13 { 13 {
14 public CompileCommand(IServiceProvider serviceProvider, IExtensionManager extensions, IEnumerable<SourceFile> sources, IDictionary<string, string> preprocessorVariables) 14 public CompileCommand(IServiceProvider serviceProvider, IMessaging messaging, IExtensionManager extensions, IEnumerable<SourceFile> sources, IDictionary<string, string> preprocessorVariables)
15 { 15 {
16 this.PreprocessorVariables = preprocessorVariables; 16 this.PreprocessorVariables = preprocessorVariables;
17 this.ServiceProvider = serviceProvider; 17 this.ServiceProvider = serviceProvider;
18 this.Messaging = messaging;
18 this.ExtensionManager = extensions; 19 this.ExtensionManager = extensions;
19 this.SourceFiles = sources; 20 this.SourceFiles = sources;
20 } 21 }
21 22
22 private IServiceProvider ServiceProvider { get; } 23 private IServiceProvider ServiceProvider { get; }
23 24
25 private IMessaging Messaging { get; }
26
24 private IExtensionManager ExtensionManager { get; } 27 private IExtensionManager ExtensionManager { get; }
25 28
26 public IEnumerable<string> IncludeSearchPaths { get; } 29 public IEnumerable<string> IncludeSearchPaths { get; }
@@ -34,7 +37,7 @@ namespace WixToolset.Core
34 foreach (var sourceFile in this.SourceFiles) 37 foreach (var sourceFile in this.SourceFiles)
35 { 38 {
36 var preprocessContext = this.ServiceProvider.GetService<IPreprocessContext>(); 39 var preprocessContext = this.ServiceProvider.GetService<IPreprocessContext>();
37 preprocessContext.Messaging = Messaging.Instance; 40 preprocessContext.Messaging = this.Messaging;
38 preprocessContext.Extensions = this.ExtensionManager.Create<IPreprocessorExtension>(); 41 preprocessContext.Extensions = this.ExtensionManager.Create<IPreprocessorExtension>();
39 preprocessContext.Platform = Platform.X86; // TODO: set this correctly 42 preprocessContext.Platform = Platform.X86; // TODO: set this correctly
40 preprocessContext.IncludeSearchPaths = this.IncludeSearchPaths?.ToList() ?? new List<string>(); 43 preprocessContext.IncludeSearchPaths = this.IncludeSearchPaths?.ToList() ?? new List<string>();
@@ -45,7 +48,7 @@ namespace WixToolset.Core
45 var document = preprocessor.Process(preprocessContext); 48 var document = preprocessor.Process(preprocessContext);
46 49
47 var compileContext = this.ServiceProvider.GetService<ICompileContext>(); 50 var compileContext = this.ServiceProvider.GetService<ICompileContext>();
48 compileContext.Messaging = Messaging.Instance; 51 compileContext.Messaging = this.Messaging;
49 compileContext.CompilationId = Guid.NewGuid().ToString("N"); 52 compileContext.CompilationId = Guid.NewGuid().ToString("N");
50 compileContext.Extensions = this.ExtensionManager.Create<ICompilerExtension>(); 53 compileContext.Extensions = this.ExtensionManager.Create<ICompilerExtension>();
51 compileContext.OutputPath = sourceFile.OutputPath; 54 compileContext.OutputPath = sourceFile.OutputPath;
diff --git a/src/WixToolset.Core/Common.cs b/src/WixToolset.Core/Common.cs
index 9a0d3aec..ebcbd36f 100644
--- a/src/WixToolset.Core/Common.cs
+++ b/src/WixToolset.Core/Common.cs
@@ -14,6 +14,7 @@ namespace WixToolset.Core
14 using System.Xml.Linq; 14 using System.Xml.Linq;
15 using WixToolset.Data; 15 using WixToolset.Data;
16 using WixToolset.Extensibility; 16 using WixToolset.Extensibility;
17 using WixToolset.Extensibility.Services;
17 18
18 /// <summary> 19 /// <summary>
19 /// Common Wix utility methods and types. 20 /// Common Wix utility methods and types.
@@ -111,7 +112,7 @@ namespace WixToolset.Core
111 /// <param name="path">The temporary directory to delete.</param> 112 /// <param name="path">The temporary directory to delete.</param>
112 /// <param name="messageHandler">The message handler.</param> 113 /// <param name="messageHandler">The message handler.</param>
113 /// <returns>True if all files were deleted, false otherwise.</returns> 114 /// <returns>True if all files were deleted, false otherwise.</returns>
114 internal static bool DeleteTempFiles(string path, IMessageHandler messageHandler) 115 internal static bool DeleteTempFiles(string path, IMessaging messageHandler)
115 { 116 {
116 // try three times and give up with a warning if the temp files aren't gone by then 117 // try three times and give up with a warning if the temp files aren't gone by then
117 int retryLimit = 3; 118 int retryLimit = 3;
@@ -133,7 +134,7 @@ namespace WixToolset.Core
133 } 134 }
134 else 135 else
135 { 136 {
136 messageHandler.OnMessage(WixWarnings.AccessDeniedForDeletion(null, path)); 137 messageHandler.Write(WarningMessages.AccessDeniedForDeletion(null, path));
137 return false; 138 return false;
138 } 139 }
139 } 140 }
@@ -146,7 +147,7 @@ namespace WixToolset.Core
146 { 147 {
147 if (i == (retryLimit - 1)) // last try failed still, give up 148 if (i == (retryLimit - 1)) // last try failed still, give up
148 { 149 {
149 messageHandler.OnMessage(WixWarnings.DirectoryInUse(null, path)); 150 messageHandler.Write(WarningMessages.DirectoryInUse(null, path));
150 return false; 151 return false;
151 } 152 }
152 153
@@ -203,7 +204,7 @@ namespace WixToolset.Core
203 codePage = encoding.CodePage; 204 codePage = encoding.CodePage;
204 if (0 > codePage || Int16.MaxValue < codePage) 205 if (0 > codePage || Int16.MaxValue < codePage)
205 { 206 {
206 throw new WixException(WixErrors.InvalidSummaryInfoCodePage(sourceLineNumbers, codePage)); 207 throw new WixException(ErrorMessages.InvalidSummaryInfoCodePage(sourceLineNumbers, codePage));
207 } 208 }
208 } 209 }
209 210
@@ -327,7 +328,7 @@ namespace WixToolset.Core
327 case "true": 328 case "true":
328 return true; 329 return true;
329 default: 330 default:
330 throw new WixException(WixErrors.IllegalAttributeValue(sourceLineNumbers, elementName, attributeName, value, "no", "yes")); 331 throw new WixException(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, elementName, attributeName, value, "no", "yes"));
331 } 332 }
332 } 333 }
333 334
@@ -433,7 +434,7 @@ namespace WixToolset.Core
433 /// <param name="fileAttribute">The FileAttribute to change on each file.</param> 434 /// <param name="fileAttribute">The FileAttribute to change on each file.</param>
434 /// <param name="messageHandler">The message handler.</param> 435 /// <param name="messageHandler">The message handler.</param>
435 /// <param name="markAttribute">If true, add the attribute to each file. If false, remove it.</param> 436 /// <param name="markAttribute">If true, add the attribute to each file. If false, remove it.</param>
436 private static void RecursiveFileAttributes(string path, FileAttributes fileAttribute, bool markAttribute, IMessageHandler messageHandler) 437 private static void RecursiveFileAttributes(string path, FileAttributes fileAttribute, bool markAttribute, IMessaging messageHandler)
437 { 438 {
438 foreach (string subDirectory in Directory.GetDirectories(path)) 439 foreach (string subDirectory in Directory.GetDirectories(path))
439 { 440 {
@@ -458,7 +459,7 @@ namespace WixToolset.Core
458 } 459 }
459 catch (UnauthorizedAccessException) 460 catch (UnauthorizedAccessException)
460 { 461 {
461 messageHandler.OnMessage(WixWarnings.AccessDeniedForSettingAttributes(null, filePath)); 462 messageHandler.Write(WarningMessages.AccessDeniedForSettingAttributes(null, filePath));
462 } 463 }
463 } 464 }
464 } 465 }
@@ -624,14 +625,14 @@ namespace WixToolset.Core
624 /// <param name="emptyRule">A rule for the contents of the value. If the contents do not follow the rule, an error is thrown.</param> 625 /// <param name="emptyRule">A rule for the contents of the value. If the contents do not follow the rule, an error is thrown.</param>
625 /// <param name="messageHandler">A delegate that receives error messages.</param> 626 /// <param name="messageHandler">A delegate that receives error messages.</param>
626 /// <returns>The attribute's value.</returns> 627 /// <returns>The attribute's value.</returns>
627 internal static string GetAttributeValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, EmptyRule emptyRule) 628 internal static string GetAttributeValue(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute, EmptyRule emptyRule)
628 { 629 {
629 string value = attribute.Value; 630 string value = attribute.Value;
630 631
631 if ((emptyRule == EmptyRule.MustHaveNonWhitespaceCharacters && String.IsNullOrEmpty(value.Trim())) || 632 if ((emptyRule == EmptyRule.MustHaveNonWhitespaceCharacters && String.IsNullOrEmpty(value.Trim())) ||
632 (emptyRule == EmptyRule.CanBeWhitespaceOnly && String.IsNullOrEmpty(value))) 633 (emptyRule == EmptyRule.CanBeWhitespaceOnly && String.IsNullOrEmpty(value)))
633 { 634 {
634 Messaging.Instance.OnMessage(WixErrors.IllegalEmptyAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName)); 635 messaging.Write(ErrorMessages.IllegalEmptyAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName));
635 return String.Empty; 636 return String.Empty;
636 } 637 }
637 638
@@ -663,15 +664,15 @@ namespace WixToolset.Core
663 /// <param name="attribute">The attribute containing the value to get.</param> 664 /// <param name="attribute">The attribute containing the value to get.</param>
664 /// <param name="messageHandler">A delegate that receives error messages.</param> 665 /// <param name="messageHandler">A delegate that receives error messages.</param>
665 /// <returns>The attribute's identifier value or a special value if an error occurred.</returns> 666 /// <returns>The attribute's identifier value or a special value if an error occurred.</returns>
666 internal static string GetAttributeIdentifierValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) 667 internal static string GetAttributeIdentifierValue(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute)
667 { 668 {
668 string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly); 669 string value = Common.GetAttributeValue(messaging, sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly);
669 670
670 if (Common.IsIdentifier(value)) 671 if (Common.IsIdentifier(value))
671 { 672 {
672 if (72 < value.Length) 673 if (72 < value.Length)
673 { 674 {
674 Messaging.Instance.OnMessage(WixWarnings.IdentifierTooLong(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 675 messaging.Write(WarningMessages.IdentifierTooLong(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
675 } 676 }
676 677
677 return value; 678 return value;
@@ -680,11 +681,11 @@ namespace WixToolset.Core
680 { 681 {
681 if (value.StartsWith("[", StringComparison.Ordinal) && value.EndsWith("]", StringComparison.Ordinal)) 682 if (value.StartsWith("[", StringComparison.Ordinal) && value.EndsWith("]", StringComparison.Ordinal))
682 { 683 {
683 Messaging.Instance.OnMessage(WixErrors.IllegalIdentifierLooksLikeFormatted(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 684 messaging.Write(ErrorMessages.IllegalIdentifierLooksLikeFormatted(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
684 } 685 }
685 else 686 else
686 { 687 {
687 Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 688 messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
688 } 689 }
689 690
690 return String.Empty; 691 return String.Empty;
@@ -700,11 +701,11 @@ namespace WixToolset.Core
700 /// <param name="maximum">The maximum legal value.</param> 701 /// <param name="maximum">The maximum legal value.</param>
701 /// <param name="messageHandler">A delegate that receives error messages.</param> 702 /// <param name="messageHandler">A delegate that receives error messages.</param>
702 /// <returns>The attribute's integer value or a special value if an error occurred during conversion.</returns> 703 /// <returns>The attribute's integer value or a special value if an error occurred during conversion.</returns>
703 public static int GetAttributeIntegerValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, int minimum, int maximum) 704 public static int GetAttributeIntegerValue(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute, int minimum, int maximum)
704 { 705 {
705 Debug.Assert(minimum > CompilerConstants.IntegerNotSet && minimum > CompilerConstants.IllegalInteger, "The legal values for this attribute collide with at least one sentinel used during parsing."); 706 Debug.Assert(minimum > CompilerConstants.IntegerNotSet && minimum > CompilerConstants.IllegalInteger, "The legal values for this attribute collide with at least one sentinel used during parsing.");
706 707
707 string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly); 708 string value = Common.GetAttributeValue(messaging, sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly);
708 int integer = CompilerConstants.IllegalInteger; 709 int integer = CompilerConstants.IllegalInteger;
709 710
710 if (0 < value.Length) 711 if (0 < value.Length)
@@ -713,17 +714,17 @@ namespace WixToolset.Core
713 { 714 {
714 if (CompilerConstants.IntegerNotSet == integer || CompilerConstants.IllegalInteger == integer) 715 if (CompilerConstants.IntegerNotSet == integer || CompilerConstants.IllegalInteger == integer)
715 { 716 {
716 Messaging.Instance.OnMessage(WixErrors.IntegralValueSentinelCollision(sourceLineNumbers, integer)); 717 messaging.Write(ErrorMessages.IntegralValueSentinelCollision(sourceLineNumbers, integer));
717 } 718 }
718 else if (minimum > integer || maximum < integer) 719 else if (minimum > integer || maximum < integer)
719 { 720 {
720 Messaging.Instance.OnMessage(WixErrors.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, integer, minimum, maximum)); 721 messaging.Write(ErrorMessages.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, integer, minimum, maximum));
721 integer = CompilerConstants.IllegalInteger; 722 integer = CompilerConstants.IllegalInteger;
722 } 723 }
723 } 724 }
724 else 725 else
725 { 726 {
726 Messaging.Instance.OnMessage(WixErrors.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 727 messaging.Write(ErrorMessages.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
727 } 728 }
728 } 729 }
729 730
@@ -737,9 +738,9 @@ namespace WixToolset.Core
737 /// <param name="attribute">The attribute containing the value to get.</param> 738 /// <param name="attribute">The attribute containing the value to get.</param>
738 /// <param name="messageHandler">A delegate that receives error messages.</param> 739 /// <param name="messageHandler">A delegate that receives error messages.</param>
739 /// <returns>The attribute's YesNoType value.</returns> 740 /// <returns>The attribute's YesNoType value.</returns>
740 internal static YesNoType GetAttributeYesNoValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) 741 internal static YesNoType GetAttributeYesNoValue(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute)
741 { 742 {
742 string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly); 743 string value = Common.GetAttributeValue(messaging, sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly);
743 YesNoType yesNo = YesNoType.IllegalValue; 744 YesNoType yesNo = YesNoType.IllegalValue;
744 745
745 if ("yes".Equals(value) || "true".Equals(value)) 746 if ("yes".Equals(value) || "true".Equals(value))
@@ -752,7 +753,7 @@ namespace WixToolset.Core
752 } 753 }
753 else 754 else
754 { 755 {
755 Messaging.Instance.OnMessage(WixErrors.IllegalYesNoValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 756 messaging.Write(ErrorMessages.IllegalYesNoValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
756 } 757 }
757 758
758 return yesNo; 759 return yesNo;
@@ -776,13 +777,13 @@ namespace WixToolset.Core
776 /// </summary> 777 /// </summary>
777 /// <param name="sourceLineNumbers">Source line information about the owner element.</param> 778 /// <param name="sourceLineNumbers">Source line information about the owner element.</param>
778 /// <param name="attribute">The attribute.</param> 779 /// <param name="attribute">The attribute.</param>
779 public static void UnexpectedAttribute(SourceLineNumber sourceLineNumbers, XAttribute attribute) 780 public static void UnexpectedAttribute(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute)
780 { 781 {
781 // Ignore elements defined by the W3C because we'll assume they are always right. 782 // Ignore elements defined by the W3C because we'll assume they are always right.
782 if (!((String.IsNullOrEmpty(attribute.Name.NamespaceName) && attribute.Name.LocalName.Equals("xmlns", StringComparison.Ordinal)) || 783 if (!((String.IsNullOrEmpty(attribute.Name.NamespaceName) && attribute.Name.LocalName.Equals("xmlns", StringComparison.Ordinal)) ||
783 attribute.Name.NamespaceName.StartsWith(CompilerCore.W3SchemaPrefix.NamespaceName, StringComparison.Ordinal))) 784 attribute.Name.NamespaceName.StartsWith(CompilerCore.W3SchemaPrefix.NamespaceName, StringComparison.Ordinal)))
784 { 785 {
785 Messaging.Instance.OnMessage(WixErrors.UnexpectedAttribute(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName)); 786 messaging.Write(ErrorMessages.UnexpectedAttribute(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName));
786 } 787 }
787 } 788 }
788 789
@@ -791,13 +792,13 @@ namespace WixToolset.Core
791 /// </summary> 792 /// </summary>
792 /// <param name="sourceLineNumbers">Source line information about the owner element.</param> 793 /// <param name="sourceLineNumbers">Source line information about the owner element.</param>
793 /// <param name="extensionAttribute">The extension attribute.</param> 794 /// <param name="extensionAttribute">The extension attribute.</param>
794 internal static void UnsupportedExtensionAttribute(SourceLineNumber sourceLineNumbers, XAttribute extensionAttribute) 795 internal static void UnsupportedExtensionAttribute(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute extensionAttribute)
795 { 796 {
796 // Ignore elements defined by the W3C because we'll assume they are always right. 797 // Ignore elements defined by the W3C because we'll assume they are always right.
797 if (!((String.IsNullOrEmpty(extensionAttribute.Name.NamespaceName) && extensionAttribute.Name.LocalName.Equals("xmlns", StringComparison.Ordinal)) || 798 if (!((String.IsNullOrEmpty(extensionAttribute.Name.NamespaceName) && extensionAttribute.Name.LocalName.Equals("xmlns", StringComparison.Ordinal)) ||
798 extensionAttribute.Name.NamespaceName.StartsWith(CompilerCore.W3SchemaPrefix.NamespaceName, StringComparison.Ordinal))) 799 extensionAttribute.Name.NamespaceName.StartsWith(CompilerCore.W3SchemaPrefix.NamespaceName, StringComparison.Ordinal)))
799 { 800 {
800 Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, extensionAttribute.Parent.Name.LocalName, extensionAttribute.Name.LocalName)); 801 messaging.Write(ErrorMessages.UnsupportedExtensionAttribute(sourceLineNumbers, extensionAttribute.Parent.Name.LocalName, extensionAttribute.Name.LocalName));
801 } 802 }
802 } 803 }
803 } 804 }
diff --git a/src/WixToolset.Core/CompileContext.cs b/src/WixToolset.Core/CompileContext.cs
index 85759ec9..fcca94d8 100644
--- a/src/WixToolset.Core/CompileContext.cs
+++ b/src/WixToolset.Core/CompileContext.cs
@@ -7,6 +7,7 @@ namespace WixToolset.Core
7 using System.Xml.Linq; 7 using System.Xml.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
10 using WixToolset.Extensibility.Services;
10 11
11 public class CompileContext : ICompileContext 12 public class CompileContext : ICompileContext
12 { 13 {
@@ -17,7 +18,7 @@ namespace WixToolset.Core
17 18
18 public IServiceProvider ServiceProvider { get; } 19 public IServiceProvider ServiceProvider { get; }
19 20
20 public Messaging Messaging { get; set; } 21 public IMessaging Messaging { get; set; }
21 22
22 public string CompilationId { get; set; } 23 public string CompilationId { get; set; }
23 24
diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs
index 78461b44..74ca86ac 100644
--- a/src/WixToolset.Core/Compiler.cs
+++ b/src/WixToolset.Core/Compiler.cs
@@ -112,7 +112,7 @@ namespace WixToolset.Core
112 } 112 }
113 else 113 else
114 { 114 {
115 Messaging.Instance.OnMessage(WixErrors.DuplicateExtensionXmlSchemaNamespace(extension.GetType().ToString(), extension.Namespace.NamespaceName, collidingExtension.GetType().ToString())); 115 this.Context.Messaging.Write(ErrorMessages.DuplicateExtensionXmlSchemaNamespace(extension.GetType().ToString(), extension.Namespace.NamespaceName, collidingExtension.GetType().ToString()));
116 } 116 }
117 117
118 extension.PreCompile(context); 118 extension.PreCompile(context);
@@ -123,9 +123,9 @@ namespace WixToolset.Core
123 { 123 {
124 var parseHelper = context.ServiceProvider.GetService<IParseHelper>(); 124 var parseHelper = context.ServiceProvider.GetService<IParseHelper>();
125 125
126 this.Core = new CompilerCore(target, parseHelper, extensionsByNamespace); 126 this.Core = new CompilerCore(target, this.Context.Messaging, parseHelper, extensionsByNamespace);
127 this.Core.ShowPedanticMessages = this.ShowPedanticMessages; 127 this.Core.ShowPedanticMessages = this.ShowPedanticMessages;
128 this.componentIdPlaceholdersResolver = new WixVariableResolver(); 128 this.componentIdPlaceholdersResolver = new WixVariableResolver(this.Context.Messaging);
129 129
130 // parse the document 130 // parse the document
131 var source = context.Source; 131 var source = context.Source;
@@ -140,17 +140,17 @@ namespace WixToolset.Core
140 { 140 {
141 if (String.IsNullOrEmpty(source.Root.Name.NamespaceName)) 141 if (String.IsNullOrEmpty(source.Root.Name.NamespaceName))
142 { 142 {
143 this.Core.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, "Wix", CompilerCore.WixNamespace.ToString())); 143 this.Core.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, "Wix", CompilerCore.WixNamespace.ToString()));
144 } 144 }
145 else 145 else
146 { 146 {
147 this.Core.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, "Wix", source.Root.Name.NamespaceName, CompilerCore.WixNamespace.ToString())); 147 this.Core.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, "Wix", source.Root.Name.NamespaceName, CompilerCore.WixNamespace.ToString()));
148 } 148 }
149 } 149 }
150 } 150 }
151 else 151 else
152 { 152 {
153 this.Core.OnMessage(WixErrors.InvalidDocumentElement(sourceLineNumbers, source.Root.Name.LocalName, "source", "Wix")); 153 this.Core.Write(ErrorMessages.InvalidDocumentElement(sourceLineNumbers, source.Root.Name.LocalName, "source", "Wix"));
154 } 154 }
155 155
156 // Resolve any Component Id placeholders compiled into the intermediate. 156 // Resolve any Component Id placeholders compiled into the intermediate.
@@ -189,7 +189,7 @@ namespace WixToolset.Core
189 this.Core = null; 189 this.Core = null;
190 } 190 }
191 191
192 return Messaging.Instance.EncounteredError ? null : target; 192 return this.Context.Messaging.EncounteredError ? null : target;
193 } 193 }
194 194
195 /// <summary> 195 /// <summary>
@@ -204,7 +204,7 @@ namespace WixToolset.Core
204 return s; 204 return s;
205 } 205 }
206 206
207 return String.Concat(s.Substring(0, 1).ToUpper(CultureInfo.InvariantCulture), s.Substring(1)); 207 return String.Concat(s.Substring(0, 1).ToUpperInvariant(), s.Substring(1));
208 } 208 }
209 209
210 /// <summary> 210 /// <summary>
@@ -254,7 +254,7 @@ namespace WixToolset.Core
254 { 254 {
255 if (property.Id != property.Id.ToUpperInvariant()) 255 if (property.Id != property.Id.ToUpperInvariant())
256 { 256 {
257 this.Core.OnMessage(WixErrors.SearchPropertyNotUppercase(sourceLineNumbers, "Property", "Id", property.Id)); 257 this.Core.Write(ErrorMessages.SearchPropertyNotUppercase(sourceLineNumbers, "Property", "Id", property.Id));
258 } 258 }
259 259
260 var row = this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.AppSearch, property); 260 var row = this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.AppSearch, property);
@@ -290,7 +290,7 @@ namespace WixToolset.Core
290 Group group = match.Groups["identifier"]; 290 Group group = match.Groups["identifier"];
291 if (group.Success) 291 if (group.Success)
292 { 292 {
293 this.Core.OnMessage(WixWarnings.PropertyValueContainsPropertyReference(sourceLineNumbers, property.Id, group.Value)); 293 this.Core.Write(WarningMessages.PropertyValueContainsPropertyReference(sourceLineNumbers, property.Id, group.Value));
294 } 294 }
295 } 295 }
296 } 296 }
@@ -330,7 +330,7 @@ namespace WixToolset.Core
330 { 330 {
331 if (secure && property.Id != property.Id.ToUpperInvariant()) 331 if (secure && property.Id != property.Id.ToUpperInvariant())
332 { 332 {
333 this.Core.OnMessage(WixErrors.SecurePropertyNotUppercase(sourceLineNumbers, "Property", "Id", property.Id)); 333 this.Core.Write(ErrorMessages.SecurePropertyNotUppercase(sourceLineNumbers, "Property", "Id", property.Id));
334 } 334 }
335 335
336 if (null == section) 336 if (null == section)
@@ -426,12 +426,12 @@ namespace WixToolset.Core
426 426
427 if (null == appId) 427 if (null == appId)
428 { 428 {
429 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 429 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
430 } 430 }
431 431
432 if ((YesNoType.No == advertise && YesNoType.Yes == appIdAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == appIdAdvertise)) 432 if ((YesNoType.No == advertise && YesNoType.Yes == appIdAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == appIdAdvertise))
433 { 433 {
434 this.Core.OnMessage(WixErrors.AppIdIncompatibleAdvertiseState(sourceLineNumbers, node.Name.LocalName, "Advertise", appIdAdvertise.ToString(), advertise.ToString())); 434 this.Core.Write(ErrorMessages.AppIdIncompatibleAdvertiseState(sourceLineNumbers, node.Name.LocalName, "Advertise", appIdAdvertise.ToString(), advertise.ToString()));
435 } 435 }
436 else 436 else
437 { 437 {
@@ -468,7 +468,7 @@ namespace WixToolset.Core
468 { 468 {
469 if (null != description) 469 if (null != description)
470 { 470 {
471 this.Core.OnMessage(WixErrors.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "Description")); 471 this.Core.Write(ErrorMessages.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "Description"));
472 } 472 }
473 473
474 if (!this.Core.EncounteredError) 474 if (!this.Core.EncounteredError)
@@ -569,7 +569,7 @@ namespace WixToolset.Core
569 569
570 if (null == id) 570 if (null == id)
571 { 571 {
572 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 572 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
573 } 573 }
574 574
575 this.Core.ParseForExtensionElements(node); 575 this.Core.ParseForExtensionElements(node);
@@ -609,12 +609,12 @@ namespace WixToolset.Core
609 case "src": 609 case "src":
610 if (null != sourceFile) 610 if (null != sourceFile)
611 { 611 {
612 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile", "src")); 612 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile", "src"));
613 } 613 }
614 614
615 if ("src" == attrib.Name.LocalName) 615 if ("src" == attrib.Name.LocalName)
616 { 616 {
617 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile")); 617 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile"));
618 } 618 }
619 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 619 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
620 break; 620 break;
@@ -634,27 +634,27 @@ namespace WixToolset.Core
634 634
635 if (null == id) 635 if (null == id)
636 { 636 {
637 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 637 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
638 id = Identifier.Invalid; 638 id = Identifier.Invalid;
639 } 639 }
640 else if (!String.IsNullOrEmpty(id.Id)) // only check legal values 640 else if (!String.IsNullOrEmpty(id.Id)) // only check legal values
641 { 641 {
642 if (55 < id.Id.Length) 642 if (55 < id.Id.Length)
643 { 643 {
644 this.Core.OnMessage(WixErrors.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 55)); 644 this.Core.Write(ErrorMessages.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 55));
645 } 645 }
646 else if (!this.compilingProduct) // if we're not doing a product then we can't be sure that a binary identifier will fit when modularized 646 else if (!this.compilingProduct) // if we're not doing a product then we can't be sure that a binary identifier will fit when modularized
647 { 647 {
648 if (18 < id.Id.Length) 648 if (18 < id.Id.Length)
649 { 649 {
650 this.Core.OnMessage(WixWarnings.IdentifierCannotBeModularized(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 18)); 650 this.Core.Write(WarningMessages.IdentifierCannotBeModularized(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 18));
651 } 651 }
652 } 652 }
653 } 653 }
654 654
655 if (null == sourceFile) 655 if (null == sourceFile)
656 { 656 {
657 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 657 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
658 } 658 }
659 659
660 this.Core.ParseForExtensionElements(node); 660 this.Core.ParseForExtensionElements(node);
@@ -710,27 +710,27 @@ namespace WixToolset.Core
710 710
711 if (null == id) 711 if (null == id)
712 { 712 {
713 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 713 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
714 id = Identifier.Invalid; 714 id = Identifier.Invalid;
715 } 715 }
716 else if (!String.IsNullOrEmpty(id.Id)) // only check legal values 716 else if (!String.IsNullOrEmpty(id.Id)) // only check legal values
717 { 717 {
718 if (57 < id.Id.Length) 718 if (57 < id.Id.Length)
719 { 719 {
720 this.Core.OnMessage(WixErrors.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 57)); 720 this.Core.Write(ErrorMessages.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 57));
721 } 721 }
722 else if (!this.compilingProduct) // if we're not doing a product then we can't be sure that a binary identifier will fit when modularized 722 else if (!this.compilingProduct) // if we're not doing a product then we can't be sure that a binary identifier will fit when modularized
723 { 723 {
724 if (20 < id.Id.Length) 724 if (20 < id.Id.Length)
725 { 725 {
726 this.Core.OnMessage(WixWarnings.IdentifierCannotBeModularized(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 20)); 726 this.Core.Write(WarningMessages.IdentifierCannotBeModularized(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 20));
727 } 727 }
728 } 728 }
729 } 729 }
730 730
731 if (null == sourceFile) 731 if (null == sourceFile)
732 { 732 {
733 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 733 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
734 } 734 }
735 735
736 this.Core.ParseForExtensionElements(node); 736 this.Core.ParseForExtensionElements(node);
@@ -776,7 +776,7 @@ namespace WixToolset.Core
776 776
777 if (null == property) 777 if (null == property)
778 { 778 {
779 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property")); 779 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property"));
780 } 780 }
781 781
782 // find unexpected child elements 782 // find unexpected child elements
@@ -845,12 +845,12 @@ namespace WixToolset.Core
845 845
846 if (null == id) 846 if (null == id)
847 { 847 {
848 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 848 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
849 } 849 }
850 850
851 if (null == productCode) 851 if (null == productCode)
852 { 852 {
853 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ProductCode")); 853 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ProductCode"));
854 } 854 }
855 855
856 this.Core.ParseForExtensionElements(node); 856 this.Core.ParseForExtensionElements(node);
@@ -917,12 +917,12 @@ namespace WixToolset.Core
917 917
918 if (null == id) 918 if (null == id)
919 { 919 {
920 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 920 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
921 } 921 }
922 922
923 if (null == qualifier) 923 if (null == qualifier)
924 { 924 {
925 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Qualifier")); 925 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Qualifier"));
926 } 926 }
927 927
928 this.Core.ParseForExtensionElements(node); 928 this.Core.ParseForExtensionElements(node);
@@ -1066,7 +1066,7 @@ namespace WixToolset.Core
1066 1066
1067 if (null == classId) 1067 if (null == classId)
1068 { 1068 {
1069 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 1069 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
1070 } 1070 }
1071 1071
1072 HashSet<string> uniqueContexts = new HashSet<string>(); 1072 HashSet<string> uniqueContexts = new HashSet<string>();
@@ -1074,7 +1074,7 @@ namespace WixToolset.Core
1074 { 1074 {
1075 if (uniqueContexts.Contains(context)) 1075 if (uniqueContexts.Contains(context))
1076 { 1076 {
1077 this.Core.OnMessage(WixErrors.DuplicateContextValue(sourceLineNumbers, context)); 1077 this.Core.Write(ErrorMessages.DuplicateContextValue(sourceLineNumbers, context));
1078 } 1078 }
1079 else 1079 else
1080 { 1080 {
@@ -1093,7 +1093,7 @@ namespace WixToolset.Core
1093 1093
1094 if ((YesNoType.No == advertise && YesNoType.Yes == classAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == classAdvertise)) 1094 if ((YesNoType.No == advertise && YesNoType.Yes == classAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == classAdvertise))
1095 { 1095 {
1096 this.Core.OnMessage(WixErrors.AdvertiseStateMustMatch(sourceLineNumbers, classAdvertise.ToString(), advertise.ToString())); 1096 this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, classAdvertise.ToString(), advertise.ToString()));
1097 } 1097 }
1098 else 1098 else
1099 { 1099 {
@@ -1108,12 +1108,12 @@ namespace WixToolset.Core
1108 1108
1109 if (YesNoType.Yes == advertise && 0 == contexts.Length) 1109 if (YesNoType.Yes == advertise && 0 == contexts.Length)
1110 { 1110 {
1111 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Context", "Advertise", "yes")); 1111 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Context", "Advertise", "yes"));
1112 } 1112 }
1113 1113
1114 if (!String.IsNullOrEmpty(parentAppId) && !String.IsNullOrEmpty(appId)) 1114 if (!String.IsNullOrEmpty(parentAppId) && !String.IsNullOrEmpty(appId))
1115 { 1115 {
1116 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "AppId", node.Parent.Name.LocalName)); 1116 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "AppId", node.Parent.Name.LocalName));
1117 } 1117 }
1118 1118
1119 if (!String.IsNullOrEmpty(localFileServer)) 1119 if (!String.IsNullOrEmpty(localFileServer))
@@ -1173,12 +1173,12 @@ namespace WixToolset.Core
1173 { 1173 {
1174 if (null != fileServer || null != localFileServer) 1174 if (null != fileServer || null != localFileServer)
1175 { 1175 {
1176 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Server", "Advertise", "yes")); 1176 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Server", "Advertise", "yes"));
1177 } 1177 }
1178 1178
1179 if (null != foreignServer) 1179 if (null != foreignServer)
1180 { 1180 {
1181 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Advertise", "yes")); 1181 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Advertise", "yes"));
1182 } 1182 }
1183 1183
1184 if (null == appId && null != parentAppId) 1184 if (null == appId && null != parentAppId)
@@ -1226,16 +1226,16 @@ namespace WixToolset.Core
1226 { 1226 {
1227 if (null == fileServer && null == localFileServer && null == foreignServer) 1227 if (null == fileServer && null == localFileServer && null == foreignServer)
1228 { 1228 {
1229 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Server")); 1229 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Server"));
1230 } 1230 }
1231 1231
1232 if (null != fileServer && null != foreignServer) 1232 if (null != fileServer && null != foreignServer)
1233 { 1233 {
1234 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "File")); 1234 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "File"));
1235 } 1235 }
1236 else if (null != localFileServer && null != foreignServer) 1236 else if (null != localFileServer && null != foreignServer)
1237 { 1237 {
1238 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Server")); 1238 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ForeignServer", "Server"));
1239 } 1239 }
1240 else if (null == fileServer) 1240 else if (null == fileServer)
1241 { 1241 {
@@ -1244,7 +1244,7 @@ namespace WixToolset.Core
1244 1244
1245 if (null != appId) // need to use nesting (not a reference) for the unadvertised Class elements 1245 if (null != appId) // need to use nesting (not a reference) for the unadvertised Class elements
1246 { 1246 {
1247 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "AppId", "Advertise", "no")); 1247 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "AppId", "Advertise", "no"));
1248 } 1248 }
1249 1249
1250 // add the core registry keys for each context in the class 1250 // add the core registry keys for each context in the class
@@ -1254,7 +1254,7 @@ namespace WixToolset.Core
1254 { 1254 {
1255 if (null != argument) 1255 if (null != argument)
1256 { 1256 {
1257 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Arguments", "Context", context)); 1257 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Arguments", "Context", context));
1258 } 1258 }
1259 1259
1260 if (null != fileServer) 1260 if (null != fileServer)
@@ -1291,7 +1291,7 @@ namespace WixToolset.Core
1291 } 1291 }
1292 else 1292 else
1293 { 1293 {
1294 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Context", context, "InprocServer", "InprocServer32", "LocalServer", "LocalServer32")); 1294 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Context", context, "InprocServer", "InprocServer32", "LocalServer", "LocalServer32"));
1295 } 1295 }
1296 1296
1297 this.Core.CreateRegistryRow(sourceLineNumbers, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context), String.Empty, formattedContextString, componentId); // ClassId context 1297 this.Core.CreateRegistryRow(sourceLineNumbers, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context), String.Empty, formattedContextString, componentId); // ClassId context
@@ -1342,7 +1342,7 @@ namespace WixToolset.Core
1342 1342
1343 if (YesNoType.NotSet != relativePath) // ClassId's RelativePath 1343 if (YesNoType.NotSet != relativePath) // ClassId's RelativePath
1344 { 1344 {
1345 this.Core.OnMessage(WixErrors.RelativePathForRegistryElement(sourceLineNumbers)); 1345 this.Core.Write(ErrorMessages.RelativePathForRegistryElement(sourceLineNumbers));
1346 } 1346 }
1347 } 1347 }
1348 1348
@@ -1454,12 +1454,12 @@ namespace WixToolset.Core
1454 1454
1455 if (null == interfaceId) 1455 if (null == interfaceId)
1456 { 1456 {
1457 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 1457 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
1458 } 1458 }
1459 1459
1460 if (null == name) 1460 if (null == name)
1461 { 1461 {
1462 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 1462 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
1463 } 1463 }
1464 1464
1465 this.Core.ParseForExtensionElements(node); 1465 this.Core.ParseForExtensionElements(node);
@@ -1537,17 +1537,17 @@ namespace WixToolset.Core
1537 1537
1538 if (null == mask) 1538 if (null == mask)
1539 { 1539 {
1540 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Mask")); 1540 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Mask"));
1541 } 1541 }
1542 1542
1543 if (CompilerConstants.IntegerNotSet == offset) 1543 if (CompilerConstants.IntegerNotSet == offset)
1544 { 1544 {
1545 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Offset")); 1545 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Offset"));
1546 } 1546 }
1547 1547
1548 if (null == value) 1548 if (null == value)
1549 { 1549 {
1550 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 1550 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
1551 } 1551 }
1552 1552
1553 this.Core.ParseForExtensionElements(node); 1553 this.Core.ParseForExtensionElements(node);
@@ -1556,7 +1556,7 @@ namespace WixToolset.Core
1556 { 1556 {
1557 if (mask.Length != value.Length) 1557 if (mask.Length != value.Length)
1558 { 1558 {
1559 this.Core.OnMessage(WixErrors.ValueAndMaskMustBeSameLength(sourceLineNumbers)); 1559 this.Core.Write(ErrorMessages.ValueAndMaskMustBeSameLength(sourceLineNumbers));
1560 } 1560 }
1561 cb = mask.Length / 2; 1561 cb = mask.Length / 2;
1562 } 1562 }
@@ -1628,7 +1628,7 @@ namespace WixToolset.Core
1628 1628
1629 if (null == minimum && null == maximum) 1629 if (null == minimum && null == maximum)
1630 { 1630 {
1631 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Minimum", "Maximum")); 1631 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Minimum", "Maximum"));
1632 } 1632 }
1633 1633
1634 this.Core.ParseForExtensionElements(node); 1634 this.Core.ParseForExtensionElements(node);
@@ -1697,7 +1697,7 @@ namespace WixToolset.Core
1697 type = 2; 1697 type = 2;
1698 break; 1698 break;
1699 default: 1699 default:
1700 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "raw")); 1700 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "raw"));
1701 break; 1701 break;
1702 } 1702 }
1703 } 1703 }
@@ -1729,17 +1729,17 @@ namespace WixToolset.Core
1729 1729
1730 if (null == key) 1730 if (null == key)
1731 { 1731 {
1732 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 1732 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
1733 } 1733 }
1734 1734
1735 if (CompilerConstants.IntegerNotSet == root) 1735 if (CompilerConstants.IntegerNotSet == root)
1736 { 1736 {
1737 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root")); 1737 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root"));
1738 } 1738 }
1739 1739
1740 if (CompilerConstants.IntegerNotSet == type) 1740 if (CompilerConstants.IntegerNotSet == type)
1741 { 1741 {
1742 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type")); 1742 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type"));
1743 } 1743 }
1744 1744
1745 signature = id.Id; 1745 signature = id.Id;
@@ -1753,7 +1753,7 @@ namespace WixToolset.Core
1753 case "DirectorySearch": 1753 case "DirectorySearch":
1754 if (oneChild) 1754 if (oneChild)
1755 { 1755 {
1756 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 1756 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
1757 } 1757 }
1758 oneChild = true; 1758 oneChild = true;
1759 1759
@@ -1763,7 +1763,7 @@ namespace WixToolset.Core
1763 case "DirectorySearchRef": 1763 case "DirectorySearchRef":
1764 if (oneChild) 1764 if (oneChild)
1765 { 1765 {
1766 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 1766 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
1767 } 1767 }
1768 oneChild = true; 1768 oneChild = true;
1769 signature = this.ParseDirectorySearchRefElement(child, id.Id); 1769 signature = this.ParseDirectorySearchRefElement(child, id.Id);
@@ -1771,7 +1771,7 @@ namespace WixToolset.Core
1771 case "FileSearch": 1771 case "FileSearch":
1772 if (oneChild) 1772 if (oneChild)
1773 { 1773 {
1774 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 1774 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
1775 } 1775 }
1776 oneChild = true; 1776 oneChild = true;
1777 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); 1777 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet);
@@ -1780,7 +1780,7 @@ namespace WixToolset.Core
1780 case "FileSearchRef": 1780 case "FileSearchRef":
1781 if (oneChild) 1781 if (oneChild)
1782 { 1782 {
1783 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 1783 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
1784 } 1784 }
1785 oneChild = true; 1785 oneChild = true;
1786 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures 1786 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures
@@ -1844,7 +1844,7 @@ namespace WixToolset.Core
1844 1844
1845 if (null == id) 1845 if (null == id)
1846 { 1846 {
1847 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 1847 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
1848 } 1848 }
1849 1849
1850 this.Core.ParseForExtensionElements(node); 1850 this.Core.ParseForExtensionElements(node);
@@ -1933,7 +1933,7 @@ namespace WixToolset.Core
1933 case "DirectorySearch": 1933 case "DirectorySearch":
1934 if (oneChild) 1934 if (oneChild)
1935 { 1935 {
1936 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 1936 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
1937 } 1937 }
1938 oneChild = true; 1938 oneChild = true;
1939 signature = this.ParseDirectorySearchElement(child, "CCP_DRIVE"); 1939 signature = this.ParseDirectorySearchElement(child, "CCP_DRIVE");
@@ -1941,7 +1941,7 @@ namespace WixToolset.Core
1941 case "DirectorySearchRef": 1941 case "DirectorySearchRef":
1942 if (oneChild) 1942 if (oneChild)
1943 { 1943 {
1944 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 1944 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
1945 } 1945 }
1946 oneChild = true; 1946 oneChild = true;
1947 signature = this.ParseDirectorySearchRefElement(child, "CCP_DRIVE"); 1947 signature = this.ParseDirectorySearchRefElement(child, "CCP_DRIVE");
@@ -1959,7 +1959,7 @@ namespace WixToolset.Core
1959 1959
1960 if (null == signature) 1960 if (null == signature)
1961 { 1961 {
1962 this.Core.OnMessage(WixErrors.SearchElementRequired(sourceLineNumbers, node.Name.LocalName)); 1962 this.Core.Write(ErrorMessages.SearchElementRequired(sourceLineNumbers, node.Name.LocalName));
1963 } 1963 }
1964 1964
1965 return signature; 1965 return signature;
@@ -2005,13 +2005,13 @@ namespace WixToolset.Core
2005 else if (signature != sig) 2005 else if (signature != sig)
2006 { 2006 {
2007 // all signatures under a ComplianceCheck must be the same 2007 // all signatures under a ComplianceCheck must be the same
2008 this.Core.OnMessage(WixErrors.MultipleIdentifiersFound(sourceLineNumbers, node.Name.LocalName, sig, signature)); 2008 this.Core.Write(ErrorMessages.MultipleIdentifiersFound(sourceLineNumbers, node.Name.LocalName, sig, signature));
2009 } 2009 }
2010 } 2010 }
2011 2011
2012 if (null == signature) 2012 if (null == signature)
2013 { 2013 {
2014 this.Core.OnMessage(WixErrors.SearchElementRequired(sourceLineNumbers, node.Name.LocalName)); 2014 this.Core.Write(ErrorMessages.SearchElementRequired(sourceLineNumbers, node.Name.LocalName));
2015 } 2015 }
2016 2016
2017 if (!this.Core.EncounteredError) 2017 if (!this.Core.EncounteredError)
@@ -2110,7 +2110,7 @@ namespace WixToolset.Core
2110 bits |= MsiInterop.MsidbComponentAttributesSourceOnly; 2110 bits |= MsiInterop.MsidbComponentAttributesSourceOnly;
2111 break; 2111 break;
2112 default: 2112 default:
2113 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "either", "local", "source")); 2113 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "either", "local", "source"));
2114 break; 2114 break;
2115 } 2115 }
2116 } 2116 }
@@ -2181,30 +2181,30 @@ namespace WixToolset.Core
2181 2181
2182 if (null == directoryId) 2182 if (null == directoryId)
2183 { 2183 {
2184 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Directory")); 2184 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Directory"));
2185 } 2185 }
2186 2186
2187 if (String.IsNullOrEmpty(guid) && MsiInterop.MsidbComponentAttributesShared == (bits & MsiInterop.MsidbComponentAttributesShared)) 2187 if (String.IsNullOrEmpty(guid) && MsiInterop.MsidbComponentAttributesShared == (bits & MsiInterop.MsidbComponentAttributesShared))
2188 { 2188 {
2189 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Shared", "yes", "Guid", "")); 2189 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Shared", "yes", "Guid", ""));
2190 } 2190 }
2191 2191
2192 if (String.IsNullOrEmpty(guid) && MsiInterop.MsidbComponentAttributesPermanent == (bits & MsiInterop.MsidbComponentAttributesPermanent)) 2192 if (String.IsNullOrEmpty(guid) && MsiInterop.MsidbComponentAttributesPermanent == (bits & MsiInterop.MsidbComponentAttributesPermanent))
2193 { 2193 {
2194 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Permanent", "yes", "Guid", "")); 2194 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Permanent", "yes", "Guid", ""));
2195 } 2195 }
2196 2196
2197 if (null != feature) 2197 if (null != feature)
2198 { 2198 {
2199 if (this.compilingModule) 2199 if (this.compilingModule)
2200 { 2200 {
2201 this.Core.OnMessage(WixErrors.IllegalAttributeInMergeModule(sourceLineNumbers, node.Name.LocalName, "Feature")); 2201 this.Core.Write(ErrorMessages.IllegalAttributeInMergeModule(sourceLineNumbers, node.Name.LocalName, "Feature"));
2202 } 2202 }
2203 else 2203 else
2204 { 2204 {
2205 if (ComplexReferenceParentType.Feature == parentType || ComplexReferenceParentType.FeatureGroup == parentType) 2205 if (ComplexReferenceParentType.Feature == parentType || ComplexReferenceParentType.FeatureGroup == parentType)
2206 { 2206 {
2207 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Feature", node.Parent.Name.LocalName)); 2207 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Feature", node.Parent.Name.LocalName));
2208 } 2208 }
2209 else 2209 else
2210 { 2210 {
@@ -2236,7 +2236,7 @@ namespace WixToolset.Core
2236 if (null != condition) 2236 if (null != condition)
2237 { 2237 {
2238 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 2238 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
2239 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 2239 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
2240 } 2240 }
2241 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null); 2241 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null);
2242 break; 2242 break;
@@ -2369,7 +2369,7 @@ namespace WixToolset.Core
2369 2369
2370 if (keyFound && YesNoType.Yes == keyPathSet) 2370 if (keyFound && YesNoType.Yes == keyPathSet)
2371 { 2371 {
2372 this.Core.OnMessage(WixErrors.ComponentMultipleKeyPaths(sourceLineNumbers, node.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource")); 2372 this.Core.Write(ErrorMessages.ComponentMultipleKeyPaths(sourceLineNumbers, node.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource"));
2373 } 2373 }
2374 2374
2375 // if a possible KeyPath has been found and that value was explicitly set as 2375 // if a possible KeyPath has been found and that value was explicitly set as
@@ -2398,13 +2398,13 @@ namespace WixToolset.Core
2398 { 2398 {
2399 if (encounteredODBCDataSource) 2399 if (encounteredODBCDataSource)
2400 { 2400 {
2401 this.Core.OnMessage(WixErrors.IllegalComponentWithAutoGeneratedGuid(sourceLineNumbers)); 2401 this.Core.Write(ErrorMessages.IllegalComponentWithAutoGeneratedGuid(sourceLineNumbers));
2402 isGeneratableGuidOk = false; 2402 isGeneratableGuidOk = false;
2403 } 2403 }
2404 2404
2405 if (0 != files && MsiInterop.MsidbComponentAttributesRegistryKeyPath == keyBits) 2405 if (0 != files && MsiInterop.MsidbComponentAttributesRegistryKeyPath == keyBits)
2406 { 2406 {
2407 this.Core.OnMessage(WixErrors.IllegalComponentWithAutoGeneratedGuid(sourceLineNumbers, true)); 2407 this.Core.Write(ErrorMessages.IllegalComponentWithAutoGeneratedGuid(sourceLineNumbers, true));
2408 isGeneratableGuidOk = false; 2408 isGeneratableGuidOk = false;
2409 } 2409 }
2410 } 2410 }
@@ -2412,7 +2412,7 @@ namespace WixToolset.Core
2412 // check for implicit KeyPath which can easily be accidentally changed 2412 // check for implicit KeyPath which can easily be accidentally changed
2413 if (this.ShowPedanticMessages && !keyFound && !isGeneratableGuidOk) 2413 if (this.ShowPedanticMessages && !keyFound && !isGeneratableGuidOk)
2414 { 2414 {
2415 this.Core.OnMessage(WixErrors.ImplicitComponentKeyPath(sourceLineNumbers, id.Id)); 2415 this.Core.Write(ErrorMessages.ImplicitComponentKeyPath(sourceLineNumbers, id.Id));
2416 } 2416 }
2417 2417
2418 // if there isn't an @Id attribute value, replace the placeholder with the id of the keypath. 2418 // if there isn't an @Id attribute value, replace the placeholder with the id of the keypath.
@@ -2428,14 +2428,14 @@ namespace WixToolset.Core
2428 } 2428 }
2429 else 2429 else
2430 { 2430 {
2431 this.Core.OnMessage(WixErrors.CannotDefaultComponentId(sourceLineNumbers)); 2431 this.Core.Write(ErrorMessages.CannotDefaultComponentId(sourceLineNumbers));
2432 } 2432 }
2433 } 2433 }
2434 2434
2435 // If an id was not determined by now, we have to error. 2435 // If an id was not determined by now, we have to error.
2436 if (null == id) 2436 if (null == id)
2437 { 2437 {
2438 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 2438 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
2439 } 2439 }
2440 2440
2441 // finally add the Component table row 2441 // finally add the Component table row
@@ -2524,7 +2524,7 @@ namespace WixToolset.Core
2524 2524
2525 if (null == id) 2525 if (null == id)
2526 { 2526 {
2527 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 2527 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
2528 id = Identifier.Invalid; 2528 id = Identifier.Invalid;
2529 } 2529 }
2530 2530
@@ -2609,7 +2609,7 @@ namespace WixToolset.Core
2609 2609
2610 if (null == id) 2610 if (null == id)
2611 { 2611 {
2612 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 2612 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
2613 } 2613 }
2614 2614
2615 this.Core.ParseForExtensionElements(node); 2615 this.Core.ParseForExtensionElements(node);
@@ -2658,7 +2658,7 @@ namespace WixToolset.Core
2658 2658
2659 if (null == id) 2659 if (null == id)
2660 { 2660 {
2661 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 2661 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
2662 } 2662 }
2663 2663
2664 this.Core.ParseForExtensionElements(node); 2664 this.Core.ParseForExtensionElements(node);
@@ -2705,7 +2705,7 @@ namespace WixToolset.Core
2705 type = MsiInterop.MsidbLocatorTypeFileName; 2705 type = MsiInterop.MsidbLocatorTypeFileName;
2706 break; 2706 break;
2707 default: 2707 default:
2708 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue, "directory", "file")); 2708 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue, "directory", "file"));
2709 break; 2709 break;
2710 } 2710 }
2711 } 2711 }
@@ -2737,7 +2737,7 @@ namespace WixToolset.Core
2737 case "DirectorySearch": 2737 case "DirectorySearch":
2738 if (oneChild) 2738 if (oneChild)
2739 { 2739 {
2740 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 2740 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
2741 } 2741 }
2742 oneChild = true; 2742 oneChild = true;
2743 2743
@@ -2747,7 +2747,7 @@ namespace WixToolset.Core
2747 case "DirectorySearchRef": 2747 case "DirectorySearchRef":
2748 if (oneChild) 2748 if (oneChild)
2749 { 2749 {
2750 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 2750 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
2751 } 2751 }
2752 oneChild = true; 2752 oneChild = true;
2753 signature = this.ParseDirectorySearchRefElement(child, id.Id); 2753 signature = this.ParseDirectorySearchRefElement(child, id.Id);
@@ -2755,7 +2755,7 @@ namespace WixToolset.Core
2755 case "FileSearch": 2755 case "FileSearch":
2756 if (oneChild) 2756 if (oneChild)
2757 { 2757 {
2758 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 2758 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
2759 } 2759 }
2760 oneChild = true; 2760 oneChild = true;
2761 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); 2761 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet);
@@ -2764,7 +2764,7 @@ namespace WixToolset.Core
2764 case "FileSearchRef": 2764 case "FileSearchRef":
2765 if (oneChild) 2765 if (oneChild)
2766 { 2766 {
2767 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 2767 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
2768 } 2768 }
2769 oneChild = true; 2769 oneChild = true;
2770 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures 2770 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures
@@ -2907,7 +2907,7 @@ namespace WixToolset.Core
2907 case "FileId": 2907 case "FileId":
2908 if (null != fileId) 2908 if (null != fileId)
2909 { 2909 {
2910 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2910 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2911 } 2911 }
2912 fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2912 fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2913 this.Core.CreateSimpleReference(sourceLineNumbers, "File", fileId); 2913 this.Core.CreateSimpleReference(sourceLineNumbers, "File", fileId);
@@ -2934,22 +2934,22 @@ namespace WixToolset.Core
2934 2934
2935 if (null != sourceFolder && null != sourceDirectory) // SourceFolder and SourceDirectory cannot coexist 2935 if (null != sourceFolder && null != sourceDirectory) // SourceFolder and SourceDirectory cannot coexist
2936 { 2936 {
2937 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "SourceDirectory")); 2937 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "SourceDirectory"));
2938 } 2938 }
2939 2939
2940 if (null != sourceFolder && null != sourceProperty) // SourceFolder and SourceProperty cannot coexist 2940 if (null != sourceFolder && null != sourceProperty) // SourceFolder and SourceProperty cannot coexist
2941 { 2941 {
2942 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "SourceProperty")); 2942 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "SourceProperty"));
2943 } 2943 }
2944 2944
2945 if (null != sourceDirectory && null != sourceProperty) // SourceDirectory and SourceProperty cannot coexist 2945 if (null != sourceDirectory && null != sourceProperty) // SourceDirectory and SourceProperty cannot coexist
2946 { 2946 {
2947 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceProperty", "SourceDirectory")); 2947 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceProperty", "SourceDirectory"));
2948 } 2948 }
2949 2949
2950 if (null != destinationDirectory && null != destinationProperty) // DestinationDirectory and DestinationProperty cannot coexist 2950 if (null != destinationDirectory && null != destinationProperty) // DestinationDirectory and DestinationProperty cannot coexist
2951 { 2951 {
2952 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DestinationProperty", "DestinationDirectory")); 2952 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DestinationProperty", "DestinationDirectory"));
2953 } 2953 }
2954 2954
2955 // generate a short file name 2955 // generate a short file name
@@ -2970,7 +2970,7 @@ namespace WixToolset.Core
2970 // DestinationDirectory or DestinationProperty must be specified 2970 // DestinationDirectory or DestinationProperty must be specified
2971 if (null == destinationDirectory && null == destinationProperty) 2971 if (null == destinationDirectory && null == destinationProperty)
2972 { 2972 {
2973 this.Core.OnMessage(WixErrors.ExpectedAttributesWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DestinationDirectory", "DestinationProperty", "FileId")); 2973 this.Core.Write(ErrorMessages.ExpectedAttributesWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DestinationDirectory", "DestinationProperty", "FileId"));
2974 } 2974 }
2975 2975
2976 if (!this.Core.EncounteredError) 2976 if (!this.Core.EncounteredError)
@@ -3007,32 +3007,32 @@ namespace WixToolset.Core
3007 { 3007 {
3008 if (null != sourceDirectory) 3008 if (null != sourceDirectory)
3009 { 3009 {
3010 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceDirectory", "FileId")); 3010 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceDirectory", "FileId"));
3011 } 3011 }
3012 3012
3013 if (null != sourceFolder) 3013 if (null != sourceFolder)
3014 { 3014 {
3015 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "FileId")); 3015 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFolder", "FileId"));
3016 } 3016 }
3017 3017
3018 if (null != sourceName) 3018 if (null != sourceName)
3019 { 3019 {
3020 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceName", "FileId")); 3020 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceName", "FileId"));
3021 } 3021 }
3022 3022
3023 if (null != sourceProperty) 3023 if (null != sourceProperty)
3024 { 3024 {
3025 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceProperty", "FileId")); 3025 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "SourceProperty", "FileId"));
3026 } 3026 }
3027 3027
3028 if (delete) 3028 if (delete)
3029 { 3029 {
3030 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Delete", "FileId")); 3030 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Delete", "FileId"));
3031 } 3031 }
3032 3032
3033 if (null == destinationName && null == destinationDirectory && null == destinationProperty) 3033 if (null == destinationName && null == destinationDirectory && null == destinationProperty)
3034 { 3034 {
3035 this.Core.OnMessage(WixWarnings.CopyFileFileIdUseless(sourceLineNumbers)); 3035 this.Core.Write(WarningMessages.CopyFileFileIdUseless(sourceLineNumbers));
3036 } 3036 }
3037 3037
3038 if (!this.Core.EncounteredError) 3038 if (!this.Core.EncounteredError)
@@ -3084,7 +3084,7 @@ namespace WixToolset.Core
3084 case "BinaryKey": 3084 case "BinaryKey":
3085 if (null != source) 3085 if (null != source)
3086 { 3086 {
3087 this.Core.OnMessage(WixErrors.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script")); 3087 this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script"));
3088 } 3088 }
3089 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3089 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3090 sourceBits = MsiInterop.MsidbCustomActionTypeBinaryData; 3090 sourceBits = MsiInterop.MsidbCustomActionTypeBinaryData;
@@ -3093,7 +3093,7 @@ namespace WixToolset.Core
3093 case "Directory": 3093 case "Directory":
3094 if (null != source) 3094 if (null != source)
3095 { 3095 {
3096 this.Core.OnMessage(WixErrors.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script")); 3096 this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script"));
3097 } 3097 }
3098 source = this.Core.CreateDirectoryReferenceFromInlineSyntax(sourceLineNumbers, attrib, null); 3098 source = this.Core.CreateDirectoryReferenceFromInlineSyntax(sourceLineNumbers, attrib, null);
3099 sourceBits = MsiInterop.MsidbCustomActionTypeDirectory; 3099 sourceBits = MsiInterop.MsidbCustomActionTypeDirectory;
@@ -3101,7 +3101,7 @@ namespace WixToolset.Core
3101 case "DllEntry": 3101 case "DllEntry":
3102 if (null != target) 3102 if (null != target)
3103 { 3103 {
3104 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3104 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3105 } 3105 }
3106 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 3106 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
3107 targetBits = MsiInterop.MsidbCustomActionTypeDll; 3107 targetBits = MsiInterop.MsidbCustomActionTypeDll;
@@ -3109,7 +3109,7 @@ namespace WixToolset.Core
3109 case "Error": 3109 case "Error":
3110 if (null != target) 3110 if (null != target)
3111 { 3111 {
3112 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3112 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3113 } 3113 }
3114 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 3114 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
3115 targetBits = MsiInterop.MsidbCustomActionTypeTextData | MsiInterop.MsidbCustomActionTypeSourceFile; 3115 targetBits = MsiInterop.MsidbCustomActionTypeTextData | MsiInterop.MsidbCustomActionTypeSourceFile;
@@ -3140,7 +3140,7 @@ namespace WixToolset.Core
3140 case "ExeCommand": 3140 case "ExeCommand":
3141 if (null != target) 3141 if (null != target)
3142 { 3142 {
3143 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3143 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3144 } 3144 }
3145 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid 3145 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid
3146 targetBits = MsiInterop.MsidbCustomActionTypeExe; 3146 targetBits = MsiInterop.MsidbCustomActionTypeExe;
@@ -3173,7 +3173,7 @@ namespace WixToolset.Core
3173 bits |= MsiInterop.MsidbCustomActionTypeClientRepeat; 3173 bits |= MsiInterop.MsidbCustomActionTypeClientRepeat;
3174 break; 3174 break;
3175 default: 3175 default:
3176 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, execute, "commit", "deferred", "firstSequence", "immediate", "oncePerProcess", "rollback", "secondSequence")); 3176 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, execute, "commit", "deferred", "firstSequence", "immediate", "oncePerProcess", "rollback", "secondSequence"));
3177 break; 3177 break;
3178 } 3178 }
3179 } 3179 }
@@ -3181,7 +3181,7 @@ namespace WixToolset.Core
3181 case "FileKey": 3181 case "FileKey":
3182 if (null != source) 3182 if (null != source)
3183 { 3183 {
3184 this.Core.OnMessage(WixErrors.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script")); 3184 this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script"));
3185 } 3185 }
3186 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3186 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3187 sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile; 3187 sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile;
@@ -3202,7 +3202,7 @@ namespace WixToolset.Core
3202 case "JScriptCall": 3202 case "JScriptCall":
3203 if (null != target) 3203 if (null != target)
3204 { 3204 {
3205 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3205 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3206 } 3206 }
3207 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid 3207 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid
3208 targetBits = MsiInterop.MsidbCustomActionTypeJScript; 3208 targetBits = MsiInterop.MsidbCustomActionTypeJScript;
@@ -3216,7 +3216,7 @@ namespace WixToolset.Core
3216 case "Property": 3216 case "Property":
3217 if (null != source) 3217 if (null != source)
3218 { 3218 {
3219 this.Core.OnMessage(WixErrors.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script")); 3219 this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script"));
3220 } 3220 }
3221 source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 3221 source = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
3222 sourceBits = MsiInterop.MsidbCustomActionTypeProperty; 3222 sourceBits = MsiInterop.MsidbCustomActionTypeProperty;
@@ -3240,7 +3240,7 @@ namespace WixToolset.Core
3240 bits |= MsiInterop.MsidbCustomActionTypeContinue; 3240 bits |= MsiInterop.MsidbCustomActionTypeContinue;
3241 break; 3241 break;
3242 default: 3242 default:
3243 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, returnValue, "asyncNoWait", "asyncWait", "check", "ignore")); 3243 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, returnValue, "asyncNoWait", "asyncWait", "check", "ignore"));
3244 break; 3244 break;
3245 } 3245 }
3246 } 3246 }
@@ -3248,12 +3248,12 @@ namespace WixToolset.Core
3248 case "Script": 3248 case "Script":
3249 if (null != source) 3249 if (null != source)
3250 { 3250 {
3251 this.Core.OnMessage(WixErrors.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script")); 3251 this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileKey", "Property", "Script"));
3252 } 3252 }
3253 3253
3254 if (null != target) 3254 if (null != target)
3255 { 3255 {
3256 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3256 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3257 } 3257 }
3258 3258
3259 // set the source and target to empty string for error messages when the user sets multiple sources or targets 3259 // set the source and target to empty string for error messages when the user sets multiple sources or targets
@@ -3277,7 +3277,7 @@ namespace WixToolset.Core
3277 targetBits = MsiInterop.MsidbCustomActionTypeVBScript; 3277 targetBits = MsiInterop.MsidbCustomActionTypeVBScript;
3278 break; 3278 break;
3279 default: 3279 default:
3280 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, script, "jscript", "vbscript")); 3280 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, script, "jscript", "vbscript"));
3281 break; 3281 break;
3282 } 3282 }
3283 } 3283 }
@@ -3294,7 +3294,7 @@ namespace WixToolset.Core
3294 case "Value": 3294 case "Value":
3295 if (null != target) 3295 if (null != target)
3296 { 3296 {
3297 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3297 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3298 } 3298 }
3299 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid 3299 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid
3300 targetBits = MsiInterop.MsidbCustomActionTypeTextData; 3300 targetBits = MsiInterop.MsidbCustomActionTypeTextData;
@@ -3302,7 +3302,7 @@ namespace WixToolset.Core
3302 case "VBScriptCall": 3302 case "VBScriptCall":
3303 if (null != target) 3303 if (null != target)
3304 { 3304 {
3305 this.Core.OnMessage(WixErrors.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3305 this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3306 } 3306 }
3307 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid 3307 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid
3308 targetBits = MsiInterop.MsidbCustomActionTypeVBScript; 3308 targetBits = MsiInterop.MsidbCustomActionTypeVBScript;
@@ -3327,7 +3327,7 @@ namespace WixToolset.Core
3327 3327
3328 if (null == id) 3328 if (null == id)
3329 { 3329 {
3330 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3330 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3331 id = Identifier.Invalid; 3331 id = Identifier.Invalid;
3332 } 3332 }
3333 3333
@@ -3348,48 +3348,48 @@ namespace WixToolset.Core
3348 { 3348 {
3349 if (null == source) 3349 if (null == source)
3350 { 3350 {
3351 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "VBScriptCall", "BinaryKey", "FileKey", "Property")); 3351 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "VBScriptCall", "BinaryKey", "FileKey", "Property"));
3352 } 3352 }
3353 else if (MsiInterop.MsidbCustomActionTypeDirectory == sourceBits) 3353 else if (MsiInterop.MsidbCustomActionTypeDirectory == sourceBits)
3354 { 3354 {
3355 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "VBScriptCall", "Directory")); 3355 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "VBScriptCall", "Directory"));
3356 } 3356 }
3357 } 3357 }
3358 else if (MsiInterop.MsidbCustomActionTypeJScript == targetBits) // non-inline jscript 3358 else if (MsiInterop.MsidbCustomActionTypeJScript == targetBits) // non-inline jscript
3359 { 3359 {
3360 if (null == source) 3360 if (null == source)
3361 { 3361 {
3362 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "JScriptCall", "BinaryKey", "FileKey", "Property")); 3362 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "JScriptCall", "BinaryKey", "FileKey", "Property"));
3363 } 3363 }
3364 else if (MsiInterop.MsidbCustomActionTypeDirectory == sourceBits) 3364 else if (MsiInterop.MsidbCustomActionTypeDirectory == sourceBits)
3365 { 3365 {
3366 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "JScriptCall", "Directory")); 3366 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "JScriptCall", "Directory"));
3367 } 3367 }
3368 } 3368 }
3369 else if (MsiInterop.MsidbCustomActionTypeExe == targetBits) // exe-command 3369 else if (MsiInterop.MsidbCustomActionTypeExe == targetBits) // exe-command
3370 { 3370 {
3371 if (null == source) 3371 if (null == source)
3372 { 3372 {
3373 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ExeCommand", "BinaryKey", "Directory", "FileKey", "Property")); 3373 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ExeCommand", "BinaryKey", "Directory", "FileKey", "Property"));
3374 } 3374 }
3375 } 3375 }
3376 else if (MsiInterop.MsidbCustomActionTypeTextData == (bits | sourceBits | targetBits)) 3376 else if (MsiInterop.MsidbCustomActionTypeTextData == (bits | sourceBits | targetBits))
3377 { 3377 {
3378 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Value", "Directory", "Property")); 3378 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Value", "Directory", "Property"));
3379 } 3379 }
3380 else if (!String.IsNullOrEmpty(innerText)) // inner text cannot be specified with non-script CAs 3380 else if (!String.IsNullOrEmpty(innerText)) // inner text cannot be specified with non-script CAs
3381 { 3381 {
3382 this.Core.OnMessage(WixErrors.CustomActionIllegalInnerText(sourceLineNumbers, node.Name.LocalName, innerText, "Script")); 3382 this.Core.Write(ErrorMessages.CustomActionIllegalInnerText(sourceLineNumbers, node.Name.LocalName, innerText, "Script"));
3383 } 3383 }
3384 3384
3385 if (MsiInterop.MsidbCustomActionType64BitScript == (bits & MsiInterop.MsidbCustomActionType64BitScript) && MsiInterop.MsidbCustomActionTypeVBScript != targetBits && MsiInterop.MsidbCustomActionTypeJScript != targetBits) 3385 if (MsiInterop.MsidbCustomActionType64BitScript == (bits & MsiInterop.MsidbCustomActionType64BitScript) && MsiInterop.MsidbCustomActionTypeVBScript != targetBits && MsiInterop.MsidbCustomActionTypeJScript != targetBits)
3386 { 3386 {
3387 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Win64", "Script", "VBScriptCall", "JScriptCall")); 3387 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Win64", "Script", "VBScriptCall", "JScriptCall"));
3388 } 3388 }
3389 3389
3390 if ((MsiInterop.MsidbCustomActionTypeAsync | MsiInterop.MsidbCustomActionTypeContinue) == (bits & (MsiInterop.MsidbCustomActionTypeAsync | MsiInterop.MsidbCustomActionTypeContinue)) && MsiInterop.MsidbCustomActionTypeExe != targetBits) 3390 if ((MsiInterop.MsidbCustomActionTypeAsync | MsiInterop.MsidbCustomActionTypeContinue) == (bits & (MsiInterop.MsidbCustomActionTypeAsync | MsiInterop.MsidbCustomActionTypeContinue)) && MsiInterop.MsidbCustomActionTypeExe != targetBits)
3391 { 3391 {
3392 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Return", "asyncNoWait", "ExeCommand")); 3392 this.Core.Write(ErrorMessages.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Return", "asyncNoWait", "ExeCommand"));
3393 } 3393 }
3394 3394
3395 if (MsiInterop.MsidbCustomActionTypeTSAware == (bits & MsiInterop.MsidbCustomActionTypeTSAware)) 3395 if (MsiInterop.MsidbCustomActionTypeTSAware == (bits & MsiInterop.MsidbCustomActionTypeTSAware))
@@ -3397,7 +3397,7 @@ namespace WixToolset.Core
3397 // TS-aware CAs are valid only when deferred so require the in-script Type bit... 3397 // TS-aware CAs are valid only when deferred so require the in-script Type bit...
3398 if (0 == (bits & MsiInterop.MsidbCustomActionTypeInScript)) 3398 if (0 == (bits & MsiInterop.MsidbCustomActionTypeInScript))
3399 { 3399 {
3400 this.Core.OnMessage(WixErrors.IllegalTerminalServerCustomActionAttributes(sourceLineNumbers)); 3400 this.Core.Write(ErrorMessages.IllegalTerminalServerCustomActionAttributes(sourceLineNumbers));
3401 } 3401 }
3402 } 3402 }
3403 3403
@@ -3406,12 +3406,12 @@ namespace WixToolset.Core
3406 MsiInterop.MsidbCustomActionTypeTextData == targetBits && 3406 MsiInterop.MsidbCustomActionTypeTextData == targetBits &&
3407 0 != (bits & MsiInterop.MsidbCustomActionTypeInScript)) 3407 0 != (bits & MsiInterop.MsidbCustomActionTypeInScript))
3408 { 3408 {
3409 this.Core.OnMessage(WixErrors.IllegalPropertyCustomActionAttributes(sourceLineNumbers)); 3409 this.Core.Write(ErrorMessages.IllegalPropertyCustomActionAttributes(sourceLineNumbers));
3410 } 3410 }
3411 3411
3412 if (0 == targetBits) 3412 if (0 == targetBits)
3413 { 3413 {
3414 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); 3414 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall"));
3415 } 3415 }
3416 3416
3417 this.Core.ParseForExtensionElements(node); 3417 this.Core.ParseForExtensionElements(node);
@@ -3475,7 +3475,7 @@ namespace WixToolset.Core
3475 3475
3476 if (null == id) 3476 if (null == id)
3477 { 3477 {
3478 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3478 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3479 } 3479 }
3480 3480
3481 this.Core.ParseForExtensionElements(node); 3481 this.Core.ParseForExtensionElements(node);
@@ -3520,7 +3520,7 @@ namespace WixToolset.Core
3520 3520
3521 if (null == primaryKeys[0]) 3521 if (null == primaryKeys[0])
3522 { 3522 {
3523 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3523 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3524 } 3524 }
3525 3525
3526 this.Core.CreateSimpleReference(sourceLineNumbers, "MsiPatchSequence", primaryKeys); 3526 this.Core.CreateSimpleReference(sourceLineNumbers, "MsiPatchSequence", primaryKeys);
@@ -3565,7 +3565,7 @@ namespace WixToolset.Core
3565 3565
3566 if (null == id) 3566 if (null == id)
3567 { 3567 {
3568 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3568 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3569 id = Identifier.Invalid; 3569 id = Identifier.Invalid;
3570 } 3570 }
3571 3571
@@ -3640,7 +3640,7 @@ namespace WixToolset.Core
3640 3640
3641 if (null == id) 3641 if (null == id)
3642 { 3642 {
3643 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3643 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3644 } 3644 }
3645 3645
3646 this.Core.ParseForExtensionElements(node); 3646 this.Core.ParseForExtensionElements(node);
@@ -3682,11 +3682,11 @@ namespace WixToolset.Core
3682 3682
3683 if (null == id) 3683 if (null == id)
3684 { 3684 {
3685 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3685 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3686 } 3686 }
3687 else if (31 < id.Length) 3687 else if (31 < id.Length)
3688 { 3688 {
3689 this.Core.OnMessage(WixErrors.TableNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id)); 3689 this.Core.Write(ErrorMessages.TableNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id));
3690 } 3690 }
3691 3691
3692 this.Core.ParseForExtensionElements(node); 3692 this.Core.ParseForExtensionElements(node);
@@ -3743,11 +3743,11 @@ namespace WixToolset.Core
3743 3743
3744 if (null == tableId) 3744 if (null == tableId)
3745 { 3745 {
3746 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3746 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3747 } 3747 }
3748 else if (31 < tableId.Length) 3748 else if (31 < tableId.Length)
3749 { 3749 {
3750 this.Core.OnMessage(WixErrors.CustomTableNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", tableId)); 3750 this.Core.Write(ErrorMessages.CustomTableNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", tableId));
3751 } 3751 }
3752 3752
3753 foreach (XElement child in node.Elements()) 3753 foreach (XElement child in node.Elements())
@@ -3833,7 +3833,7 @@ namespace WixToolset.Core
3833 typeName = "CHAR"; 3833 typeName = "CHAR";
3834 break; 3834 break;
3835 default: 3835 default:
3836 this.Core.OnMessage(WixErrors.IllegalAttributeValue(childSourceLineNumbers, child.Name.LocalName, "Type", typeValue, "binary", "int", "string")); 3836 this.Core.Write(ErrorMessages.IllegalAttributeValue(childSourceLineNumbers, child.Name.LocalName, "Type", typeValue, "binary", "int", "string"));
3837 break; 3837 break;
3838 } 3838 }
3839 } 3839 }
@@ -3849,18 +3849,18 @@ namespace WixToolset.Core
3849 3849
3850 if (null == columnName) 3850 if (null == columnName)
3851 { 3851 {
3852 this.Core.OnMessage(WixErrors.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Id")); 3852 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Id"));
3853 } 3853 }
3854 3854
3855 if (null == typeName) 3855 if (null == typeName)
3856 { 3856 {
3857 this.Core.OnMessage(WixErrors.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Type")); 3857 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Type"));
3858 } 3858 }
3859 else if ("SHORT" == typeName) 3859 else if ("SHORT" == typeName)
3860 { 3860 {
3861 if (2 != width && 4 != width) 3861 if (2 != width && 4 != width)
3862 { 3862 {
3863 this.Core.OnMessage(WixErrors.CustomTableIllegalColumnWidth(childSourceLineNumbers, child.Name.LocalName, "Width", width)); 3863 this.Core.Write(ErrorMessages.CustomTableIllegalColumnWidth(childSourceLineNumbers, child.Name.LocalName, "Width", width));
3864 } 3864 }
3865 columnType = String.Concat(nullable ? "I" : "i", width); 3865 columnType = String.Concat(nullable ? "I" : "i", width);
3866 } 3866 }
@@ -3873,7 +3873,7 @@ namespace WixToolset.Core
3873 { 3873 {
3874 if ("Binary" != category) 3874 if ("Binary" != category)
3875 { 3875 {
3876 this.Core.OnMessage(WixErrors.ExpectedBinaryCategory(childSourceLineNumbers)); 3876 this.Core.Write(ErrorMessages.ExpectedBinaryCategory(childSourceLineNumbers));
3877 } 3877 }
3878 columnType = String.Concat(nullable ? "V" : "v", width); 3878 columnType = String.Concat(nullable ? "V" : "v", width);
3879 } 3879 }
@@ -3927,7 +3927,7 @@ namespace WixToolset.Core
3927 3927
3928 if (null == columnName) 3928 if (null == columnName)
3929 { 3929 {
3930 this.Core.OnMessage(WixErrors.ExpectedAttribute(dataSourceLineNumbers, data.Name.LocalName, "Column")); 3930 this.Core.Write(ErrorMessages.ExpectedAttribute(dataSourceLineNumbers, data.Name.LocalName, "Column"));
3931 } 3931 }
3932 3932
3933 dataValue = String.Concat(dataValue, null == dataValue ? String.Empty : Common.CustomRowFieldSeparator.ToString(), columnName, ":", Common.GetInnerText(data)); 3933 dataValue = String.Concat(dataValue, null == dataValue ? String.Empty : Common.CustomRowFieldSeparator.ToString(), columnName, ":", Common.GetInnerText(data));
@@ -3959,7 +3959,7 @@ namespace WixToolset.Core
3959 { 3959 {
3960 if (null == primaryKeys || 0 == primaryKeys.Length) 3960 if (null == primaryKeys || 0 == primaryKeys.Length)
3961 { 3961 {
3962 this.Core.OnMessage(WixErrors.CustomTableMissingPrimaryKey(sourceLineNumbers)); 3962 this.Core.Write(ErrorMessages.CustomTableMissingPrimaryKey(sourceLineNumbers));
3963 } 3963 }
3964 3964
3965 if (!this.Core.EncounteredError) 3965 if (!this.Core.EncounteredError)
@@ -4097,12 +4097,12 @@ namespace WixToolset.Core
4097 { 4097 {
4098 if (!String.IsNullOrEmpty(shortName)) 4098 if (!String.IsNullOrEmpty(shortName))
4099 { 4099 {
4100 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name")); 4100 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name"));
4101 } 4101 }
4102 4102
4103 if (null == parentId) 4103 if (null == parentId)
4104 { 4104 {
4105 this.Core.OnMessage(WixErrors.DirectoryRootWithoutName(sourceLineNumbers, node.Name.LocalName, "Name")); 4105 this.Core.Write(ErrorMessages.DirectoryRootWithoutName(sourceLineNumbers, node.Name.LocalName, "Name"));
4106 } 4106 }
4107 } 4107 }
4108 else if (!String.IsNullOrEmpty(name)) 4108 else if (!String.IsNullOrEmpty(name))
@@ -4116,11 +4116,11 @@ namespace WixToolset.Core
4116 } 4116 }
4117 else if (name.Equals(".")) 4117 else if (name.Equals("."))
4118 { 4118 {
4119 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name", name)); 4119 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name", name));
4120 } 4120 }
4121 else if (name.Equals(shortName)) 4121 else if (name.Equals(shortName))
4122 { 4122 {
4123 this.Core.OnMessage(WixWarnings.DirectoryRedundantNames(sourceLineNumbers, node.Name.LocalName, "Name", "ShortName", name)); 4123 this.Core.Write(WarningMessages.DirectoryRedundantNames(sourceLineNumbers, node.Name.LocalName, "Name", "ShortName", name));
4124 } 4124 }
4125 } 4125 }
4126 4126
@@ -4128,7 +4128,7 @@ namespace WixToolset.Core
4128 { 4128 {
4129 if (!String.IsNullOrEmpty(shortSourceName)) 4129 if (!String.IsNullOrEmpty(shortSourceName))
4130 { 4130 {
4131 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ShortSourceName", "SourceName")); 4131 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "ShortSourceName", "SourceName"));
4132 } 4132 }
4133 } 4133 }
4134 else 4134 else
@@ -4142,11 +4142,11 @@ namespace WixToolset.Core
4142 } 4142 }
4143 else if (sourceName.Equals(".")) 4143 else if (sourceName.Equals("."))
4144 { 4144 {
4145 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ShortSourceName", "SourceName", sourceName)); 4145 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "ShortSourceName", "SourceName", sourceName));
4146 } 4146 }
4147 else if (sourceName.Equals(shortSourceName)) 4147 else if (sourceName.Equals(shortSourceName))
4148 { 4148 {
4149 this.Core.OnMessage(WixWarnings.DirectoryRedundantNames(sourceLineNumbers, node.Name.LocalName, "SourceName", "ShortSourceName", sourceName)); 4149 this.Core.Write(WarningMessages.DirectoryRedundantNames(sourceLineNumbers, node.Name.LocalName, "SourceName", "ShortSourceName", sourceName));
4150 } 4150 }
4151 } 4151 }
4152 4152
@@ -4191,7 +4191,7 @@ namespace WixToolset.Core
4191 4191
4192 if ("TARGETDIR".Equals(id.Id) && !"SourceDir".Equals(defaultDir)) 4192 if ("TARGETDIR".Equals(id.Id) && !"SourceDir".Equals(defaultDir))
4193 { 4193 {
4194 this.Core.OnMessage(WixErrors.IllegalTargetDirDefaultDir(sourceLineNumbers, defaultDir)); 4194 this.Core.Write(ErrorMessages.IllegalTargetDirDefaultDir(sourceLineNumbers, defaultDir));
4195 } 4195 }
4196 4196
4197 foreach (XElement child in node.Elements()) 4197 foreach (XElement child in node.Elements())
@@ -4293,7 +4293,7 @@ namespace WixToolset.Core
4293 4293
4294 if (null == id) 4294 if (null == id)
4295 { 4295 {
4296 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 4296 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
4297 } 4297 }
4298 4298
4299 if (!String.IsNullOrEmpty(fileSource) && !fileSource.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) 4299 if (!String.IsNullOrEmpty(fileSource) && !fileSource.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
@@ -4391,7 +4391,7 @@ namespace WixToolset.Core
4391 case "DirectorySearch": 4391 case "DirectorySearch":
4392 if (oneChild) 4392 if (oneChild)
4393 { 4393 {
4394 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 4394 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
4395 } 4395 }
4396 oneChild = true; 4396 oneChild = true;
4397 signature = this.ParseDirectorySearchElement(child, id.Id); 4397 signature = this.ParseDirectorySearchElement(child, id.Id);
@@ -4399,7 +4399,7 @@ namespace WixToolset.Core
4399 case "DirectorySearchRef": 4399 case "DirectorySearchRef":
4400 if (oneChild) 4400 if (oneChild)
4401 { 4401 {
4402 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 4402 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
4403 } 4403 }
4404 oneChild = true; 4404 oneChild = true;
4405 signature = this.ParseDirectorySearchRefElement(child, id.Id); 4405 signature = this.ParseDirectorySearchRefElement(child, id.Id);
@@ -4407,7 +4407,7 @@ namespace WixToolset.Core
4407 case "FileSearch": 4407 case "FileSearch":
4408 if (oneChild) 4408 if (oneChild)
4409 { 4409 {
4410 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 4410 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
4411 } 4411 }
4412 oneChild = true; 4412 oneChild = true;
4413 hasFileSearch = true; 4413 hasFileSearch = true;
@@ -4416,7 +4416,7 @@ namespace WixToolset.Core
4416 case "FileSearchRef": 4416 case "FileSearchRef":
4417 if (oneChild) 4417 if (oneChild)
4418 { 4418 {
4419 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 4419 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
4420 } 4420 }
4421 oneChild = true; 4421 oneChild = true;
4422 signature = this.ParseSimpleRefElement(child, "Signature"); 4422 signature = this.ParseSimpleRefElement(child, "Signature");
@@ -4432,7 +4432,7 @@ namespace WixToolset.Core
4432 { 4432 {
4433 if (!hasFileSearch) 4433 if (!hasFileSearch)
4434 { 4434 {
4435 this.Core.OnMessage(WixErrors.IllegalParentAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "AssignToProperty", child.Name.LocalName)); 4435 this.Core.Write(ErrorMessages.IllegalParentAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "AssignToProperty", child.Name.LocalName));
4436 } 4436 }
4437 else if (!oneChild) 4437 else if (!oneChild)
4438 { 4438 {
@@ -4518,7 +4518,7 @@ namespace WixToolset.Core
4518 { 4518 {
4519 if (!String.IsNullOrEmpty(parentSignature)) 4519 if (!String.IsNullOrEmpty(parentSignature))
4520 { 4520 {
4521 this.Core.OnMessage(WixErrors.CanNotHaveTwoParents(sourceLineNumbers, id.Id, parent.Id, parentSignature)); 4521 this.Core.Write(ErrorMessages.CanNotHaveTwoParents(sourceLineNumbers, id.Id, parent.Id, parentSignature));
4522 } 4522 }
4523 else 4523 else
4524 { 4524 {
@@ -4544,7 +4544,7 @@ namespace WixToolset.Core
4544 case "DirectorySearch": 4544 case "DirectorySearch":
4545 if (oneChild) 4545 if (oneChild)
4546 { 4546 {
4547 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 4547 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
4548 } 4548 }
4549 oneChild = true; 4549 oneChild = true;
4550 signature = this.ParseDirectorySearchElement(child, id.Id); 4550 signature = this.ParseDirectorySearchElement(child, id.Id);
@@ -4552,7 +4552,7 @@ namespace WixToolset.Core
4552 case "DirectorySearchRef": 4552 case "DirectorySearchRef":
4553 if (oneChild) 4553 if (oneChild)
4554 { 4554 {
4555 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 4555 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
4556 } 4556 }
4557 oneChild = true; 4557 oneChild = true;
4558 signature = this.ParseDirectorySearchRefElement(child, id.Id); 4558 signature = this.ParseDirectorySearchRefElement(child, id.Id);
@@ -4560,7 +4560,7 @@ namespace WixToolset.Core
4560 case "FileSearch": 4560 case "FileSearch":
4561 if (oneChild) 4561 if (oneChild)
4562 { 4562 {
4563 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 4563 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
4564 } 4564 }
4565 oneChild = true; 4565 oneChild = true;
4566 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); 4566 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet);
@@ -4568,7 +4568,7 @@ namespace WixToolset.Core
4568 case "FileSearchRef": 4568 case "FileSearchRef":
4569 if (oneChild) 4569 if (oneChild)
4570 { 4570 {
4571 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 4571 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
4572 } 4572 }
4573 oneChild = true; 4573 oneChild = true;
4574 signature = this.ParseSimpleRefElement(child, "Signature"); 4574 signature = this.ParseSimpleRefElement(child, "Signature");
@@ -4636,7 +4636,7 @@ namespace WixToolset.Core
4636 bits = bits | MsiInterop.MsidbFeatureAttributesUIDisallowAbsent; 4636 bits = bits | MsiInterop.MsidbFeatureAttributesUIDisallowAbsent;
4637 break; 4637 break;
4638 default: 4638 default:
4639 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, absent, "allow", "disallow")); 4639 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, absent, "allow", "disallow"));
4640 break; 4640 break;
4641 } 4641 }
4642 } 4642 }
@@ -4657,7 +4657,7 @@ namespace WixToolset.Core
4657 case Wix.Feature.AllowAdvertiseType.yes: // this is the default 4657 case Wix.Feature.AllowAdvertiseType.yes: // this is the default
4658 break; 4658 break;
4659 default: 4659 default:
4660 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, allowAdvertise, "no", "system", "yes")); 4660 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, allowAdvertise, "no", "system", "yes"));
4661 break; 4661 break;
4662 } 4662 }
4663 } 4663 }
@@ -4681,7 +4681,7 @@ namespace WixToolset.Core
4681 case Wix.Feature.InstallDefaultType.followParent: 4681 case Wix.Feature.InstallDefaultType.followParent:
4682 if (ComplexReferenceParentType.Product == parentType) 4682 if (ComplexReferenceParentType.Product == parentType)
4683 { 4683 {
4684 this.Core.OnMessage(WixErrors.RootFeatureCannotFollowParent(sourceLineNumbers)); 4684 this.Core.Write(ErrorMessages.RootFeatureCannotFollowParent(sourceLineNumbers));
4685 } 4685 }
4686 bits = bits | MsiInterop.MsidbFeatureAttributesFollowParent; 4686 bits = bits | MsiInterop.MsidbFeatureAttributesFollowParent;
4687 break; 4687 break;
@@ -4691,7 +4691,7 @@ namespace WixToolset.Core
4691 bits = bits | MsiInterop.MsidbFeatureAttributesFavorSource; 4691 bits = bits | MsiInterop.MsidbFeatureAttributesFavorSource;
4692 break; 4692 break;
4693 default: 4693 default:
4694 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installDefault, "followParent", "local", "source")); 4694 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installDefault, "followParent", "local", "source"));
4695 break; 4695 break;
4696 } 4696 }
4697 } 4697 }
@@ -4703,7 +4703,7 @@ namespace WixToolset.Core
4703 title = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 4703 title = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
4704 if ("PUT-FEATURE-TITLE-HERE" == title) 4704 if ("PUT-FEATURE-TITLE-HERE" == title)
4705 { 4705 {
4706 this.Core.OnMessage(WixWarnings.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, title)); 4706 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, title));
4707 } 4707 }
4708 break; 4708 break;
4709 case "TypicalDefault": 4709 case "TypicalDefault":
@@ -4719,7 +4719,7 @@ namespace WixToolset.Core
4719 case Wix.Feature.TypicalDefaultType.install: // this is the default 4719 case Wix.Feature.TypicalDefaultType.install: // this is the default
4720 break; 4720 break;
4721 default: 4721 default:
4722 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typicalDefault, "advertise", "install")); 4722 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typicalDefault, "advertise", "install"));
4723 break; 4723 break;
4724 } 4724 }
4725 } 4725 }
@@ -4737,27 +4737,27 @@ namespace WixToolset.Core
4737 4737
4738 if (null == id) 4738 if (null == id)
4739 { 4739 {
4740 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 4740 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
4741 id = Identifier.Invalid; 4741 id = Identifier.Invalid;
4742 } 4742 }
4743 else if (38 < id.Id.Length) 4743 else if (38 < id.Id.Length)
4744 { 4744 {
4745 this.Core.OnMessage(WixErrors.FeatureNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 4745 this.Core.Write(ErrorMessages.FeatureNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
4746 } 4746 }
4747 4747
4748 if (null != configurableDirectory && configurableDirectory.ToUpper(CultureInfo.InvariantCulture) != configurableDirectory) 4748 if (null != configurableDirectory && configurableDirectory.ToUpper(CultureInfo.InvariantCulture) != configurableDirectory)
4749 { 4749 {
4750 this.Core.OnMessage(WixErrors.FeatureConfigurableDirectoryNotUppercase(sourceLineNumbers, node.Name.LocalName, "ConfigurableDirectory", configurableDirectory)); 4750 this.Core.Write(ErrorMessages.FeatureConfigurableDirectoryNotUppercase(sourceLineNumbers, node.Name.LocalName, "ConfigurableDirectory", configurableDirectory));
4751 } 4751 }
4752 4752
4753 if ("advertise" == typicalDefault && "no" == allowAdvertise) 4753 if ("advertise" == typicalDefault && "no" == allowAdvertise)
4754 { 4754 {
4755 this.Core.OnMessage(WixErrors.FeatureCannotFavorAndDisallowAdvertise(sourceLineNumbers, node.Name.LocalName, "TypicalDefault", typicalDefault, "AllowAdvertise", allowAdvertise)); 4755 this.Core.Write(ErrorMessages.FeatureCannotFavorAndDisallowAdvertise(sourceLineNumbers, node.Name.LocalName, "TypicalDefault", typicalDefault, "AllowAdvertise", allowAdvertise));
4756 } 4756 }
4757 4757
4758 if (YesNoType.Yes == followParent && ("local" == installDefault || "source" == installDefault)) 4758 if (YesNoType.Yes == followParent && ("local" == installDefault || "source" == installDefault))
4759 { 4759 {
4760 this.Core.OnMessage(WixErrors.FeatureCannotFollowParentAndFavorLocalOrSource(sourceLineNumbers, node.Name.LocalName, "InstallDefault", "FollowParent", "yes")); 4760 this.Core.Write(ErrorMessages.FeatureCannotFollowParentAndFavorLocalOrSource(sourceLineNumbers, node.Name.LocalName, "InstallDefault", "FollowParent", "yes"));
4761 } 4761 }
4762 4762
4763 int childDisplay = 0; 4763 int childDisplay = 0;
@@ -4827,7 +4827,7 @@ namespace WixToolset.Core
4827 int value; 4827 int value;
4828 if (!Int32.TryParse(display, NumberStyles.Integer, CultureInfo.InvariantCulture, out value)) 4828 if (!Int32.TryParse(display, NumberStyles.Integer, CultureInfo.InvariantCulture, out value))
4829 { 4829 {
4830 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Display", display, "collapse", "expand", "hidden")); 4830 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Display", display, "collapse", "expand", "hidden"));
4831 } 4831 }
4832 else 4832 else
4833 { 4833 {
@@ -4892,7 +4892,7 @@ namespace WixToolset.Core
4892 4892
4893 if (null == id) 4893 if (null == id)
4894 { 4894 {
4895 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 4895 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
4896 } 4896 }
4897 4897
4898 int lastDisplay = 0; 4898 int lastDisplay = 0;
@@ -4978,7 +4978,7 @@ namespace WixToolset.Core
4978 4978
4979 if (null == id) 4979 if (null == id)
4980 { 4980 {
4981 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 4981 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
4982 id = Identifier.Invalid; 4982 id = Identifier.Invalid;
4983 } 4983 }
4984 4984
@@ -5074,7 +5074,7 @@ namespace WixToolset.Core
5074 5074
5075 if (null == id) 5075 if (null == id)
5076 { 5076 {
5077 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 5077 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
5078 } 5078 }
5079 5079
5080 this.Core.ParseForExtensionElements(node); 5080 this.Core.ParseForExtensionElements(node);
@@ -5133,7 +5133,7 @@ namespace WixToolset.Core
5133 action = "!"; 5133 action = "!";
5134 break; 5134 break;
5135 default: 5135 default:
5136 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "create", "set", "remove")); 5136 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "create", "set", "remove"));
5137 break; 5137 break;
5138 } 5138 }
5139 } 5139 }
@@ -5145,7 +5145,7 @@ namespace WixToolset.Core
5145 part = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 5145 part = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
5146 if (!Wix.Environment.TryParsePartType(part, out partType)) 5146 if (!Wix.Environment.TryParsePartType(part, out partType))
5147 { 5147 {
5148 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Part", part, "all", "first", "last")); 5148 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Part", part, "all", "first", "last"));
5149 } 5149 }
5150 break; 5150 break;
5151 case "Permanent": 5151 case "Permanent":
@@ -5178,14 +5178,14 @@ namespace WixToolset.Core
5178 5178
5179 if (null == name) 5179 if (null == name)
5180 { 5180 {
5181 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 5181 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
5182 } 5182 }
5183 5183
5184 if (Wix.Environment.PartType.NotSet != partType) 5184 if (Wix.Environment.PartType.NotSet != partType)
5185 { 5185 {
5186 if ("+" == action) 5186 if ("+" == action)
5187 { 5187 {
5188 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Part", "Action", "create")); 5188 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Part", "Action", "create"));
5189 } 5189 }
5190 5190
5191 switch (partType) 5191 switch (partType)
@@ -5248,7 +5248,7 @@ namespace WixToolset.Core
5248 5248
5249 if (CompilerConstants.IntegerNotSet == id) 5249 if (CompilerConstants.IntegerNotSet == id)
5250 { 5250 {
5251 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 5251 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
5252 id = CompilerConstants.IllegalInteger; 5252 id = CompilerConstants.IllegalInteger;
5253 } 5253 }
5254 5254
@@ -5288,7 +5288,7 @@ namespace WixToolset.Core
5288 YesNoType extensionAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 5288 YesNoType extensionAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
5289 if ((YesNoType.No == advertise && YesNoType.Yes == extensionAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == extensionAdvertise)) 5289 if ((YesNoType.No == advertise && YesNoType.Yes == extensionAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == extensionAdvertise))
5290 { 5290 {
5291 this.Core.OnMessage(WixErrors.AdvertiseStateMustMatch(sourceLineNumbers, extensionAdvertise.ToString(), advertise.ToString())); 5291 this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, extensionAdvertise.ToString(), advertise.ToString()));
5292 } 5292 }
5293 advertise = extensionAdvertise; 5293 advertise = extensionAdvertise;
5294 break; 5294 break;
@@ -5445,7 +5445,7 @@ namespace WixToolset.Core
5445 assemblyType = FileAssemblyType.Win32Assembly; 5445 assemblyType = FileAssemblyType.Win32Assembly;
5446 break; 5446 break;
5447 default: 5447 default:
5448 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "File", "Assembly", assemblyValue, "no", "win32", ".net")); 5448 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "Assembly", assemblyValue, "no", "win32", ".net"));
5449 break; 5449 break;
5450 } 5450 }
5451 } 5451 }
@@ -5545,7 +5545,7 @@ namespace WixToolset.Core
5545 procArch = "ia64"; 5545 procArch = "ia64";
5546 break; 5546 break;
5547 default: 5547 default:
5548 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "File", "ProcessorArchitecture", procArchValue, "msil", "x86", "x64", "ia64")); 5548 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "ProcessorArchitecture", procArchValue, "msil", "x86", "x64", "ia64"));
5549 break; 5549 break;
5550 } 5550 }
5551 } 5551 }
@@ -5609,7 +5609,7 @@ namespace WixToolset.Core
5609 // the companion file cannot be the key path of a component 5609 // the companion file cannot be the key path of a component
5610 if (YesNoType.Yes == keyPath) 5610 if (YesNoType.Yes == keyPath)
5611 { 5611 {
5612 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "CompanionFile", "KeyPath", "yes")); 5612 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "CompanionFile", "KeyPath", "yes"));
5613 } 5613 }
5614 } 5614 }
5615 5615
@@ -5618,7 +5618,7 @@ namespace WixToolset.Core
5618 name = Path.GetFileName(source); 5618 name = Path.GetFileName(source);
5619 if (!this.Core.IsValidLongFilename(name, false)) 5619 if (!this.Core.IsValidLongFilename(name, false))
5620 { 5620 {
5621 this.Core.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name)); 5621 this.Core.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name));
5622 } 5622 }
5623 } 5623 }
5624 5624
@@ -5641,32 +5641,32 @@ namespace WixToolset.Core
5641 5641
5642 if (null != defaultVersion && null != companionFile) 5642 if (null != defaultVersion && null != companionFile)
5643 { 5643 {
5644 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DefaultVersion", "CompanionFile", companionFile)); 5644 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DefaultVersion", "CompanionFile", companionFile));
5645 } 5645 }
5646 5646
5647 if (FileAssemblyType.NotAnAssembly == assemblyType) 5647 if (FileAssemblyType.NotAnAssembly == assemblyType)
5648 { 5648 {
5649 if (null != assemblyManifest) 5649 if (null != assemblyManifest)
5650 { 5650 {
5651 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", "AssemblyManifest")); 5651 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", "AssemblyManifest"));
5652 } 5652 }
5653 5653
5654 if (null != assemblyApplication) 5654 if (null != assemblyApplication)
5655 { 5655 {
5656 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", "AssemblyApplication")); 5656 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", "AssemblyApplication"));
5657 } 5657 }
5658 } 5658 }
5659 else 5659 else
5660 { 5660 {
5661 if (FileAssemblyType.Win32Assembly == assemblyType && null == assemblyManifest) 5661 if (FileAssemblyType.Win32Assembly == assemblyType && null == assemblyManifest)
5662 { 5662 {
5663 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "AssemblyManifest", "Assembly", "win32")); 5663 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "AssemblyManifest", "Assembly", "win32"));
5664 } 5664 }
5665 5665
5666 // allow "*" guid components to omit explicit KeyPath as they can have only one file and therefore this file is the keypath 5666 // allow "*" guid components to omit explicit KeyPath as they can have only one file and therefore this file is the keypath
5667 if (YesNoType.Yes != keyPath && "*" != componentGuid) 5667 if (YesNoType.Yes != keyPath && "*" != componentGuid)
5668 { 5668 {
5669 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", (FileAssemblyType.DotNetAssembly == assemblyType ? ".net" : "win32"), "KeyPath", "yes")); 5669 this.Core.Write(ErrorMessages.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Assembly", (FileAssemblyType.DotNetAssembly == assemblyType ? ".net" : "win32"), "KeyPath", "yes"));
5670 } 5670 }
5671 } 5671 }
5672 5672
@@ -5942,11 +5942,11 @@ namespace WixToolset.Core
5942 // Using both ShortName and Name will not always work due to a Windows Installer bug. 5942 // Using both ShortName and Name will not always work due to a Windows Installer bug.
5943 if (null != shortName && null != name) 5943 if (null != shortName && null != name)
5944 { 5944 {
5945 this.Core.OnMessage(WixWarnings.FileSearchFileNameIssue(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name")); 5945 this.Core.Write(WarningMessages.FileSearchFileNameIssue(sourceLineNumbers, node.Name.LocalName, "ShortName", "Name"));
5946 } 5946 }
5947 else if (null == shortName && null == name) // at least one name must be specified. 5947 else if (null == shortName && null == name) // at least one name must be specified.
5948 { 5948 {
5949 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 5949 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
5950 } 5950 }
5951 5951
5952 if (this.Core.IsValidShortFilename(name, false)) 5952 if (this.Core.IsValidShortFilename(name, false))
@@ -5958,7 +5958,7 @@ namespace WixToolset.Core
5958 } 5958 }
5959 else 5959 else
5960 { 5960 {
5961 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName")); 5961 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName"));
5962 } 5962 }
5963 } 5963 }
5964 5964
@@ -5981,7 +5981,7 @@ namespace WixToolset.Core
5981 // value must be specified and unique. 5981 // value must be specified and unique.
5982 if (isSameId) 5982 if (isSameId)
5983 { 5983 {
5984 this.Core.OnMessage(WixErrors.UniqueFileSearchIdRequired(sourceLineNumbers, parentSignature, node.Name.LocalName)); 5984 this.Core.Write(ErrorMessages.UniqueFileSearchIdRequired(sourceLineNumbers, parentSignature, node.Name.LocalName));
5985 } 5985 }
5986 } 5986 }
5987 else if (parentDepth > 1) 5987 else if (parentDepth > 1)
@@ -5990,7 +5990,7 @@ namespace WixToolset.Core
5990 // as the parent DirectorySearch if AssignToProperty is not set. 5990 // as the parent DirectorySearch if AssignToProperty is not set.
5991 if (!isSameId) 5991 if (!isSameId)
5992 { 5992 {
5993 this.Core.OnMessage(WixErrors.IllegalSearchIdForParentDepth(sourceLineNumbers, id.Id, parentSignature)); 5993 this.Core.Write(ErrorMessages.IllegalSearchIdForParentDepth(sourceLineNumbers, id.Id, parentSignature));
5994 } 5994 }
5995 } 5995 }
5996 5996
@@ -6284,7 +6284,7 @@ namespace WixToolset.Core
6284 } 6284 }
6285 else 6285 else
6286 { 6286 {
6287 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "default", "disable", "enable", "hide", "show")); 6287 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "default", "disable", "enable", "hide", "show"));
6288 } 6288 }
6289 } 6289 }
6290 } 6290 }
@@ -6333,7 +6333,7 @@ namespace WixToolset.Core
6333 if (null == condition || 0 == condition.Length) 6333 if (null == condition || 0 == condition.Length)
6334 { 6334 {
6335 condition = null; 6335 condition = null;
6336 this.Core.OnMessage(WixErrors.ConditionExpected(sourceLineNumbers, node.Name.LocalName)); 6336 this.Core.Write(ErrorMessages.ConditionExpected(sourceLineNumbers, node.Name.LocalName));
6337 } 6337 }
6338 6338
6339 switch (parentElementLocalName) 6339 switch (parentElementLocalName)
@@ -6341,7 +6341,7 @@ namespace WixToolset.Core
6341 case "Control": 6341 case "Control":
6342 if (null == action) 6342 if (null == action)
6343 { 6343 {
6344 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); 6344 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
6345 } 6345 }
6346 6346
6347 if (!this.Core.EncounteredError) 6347 if (!this.Core.EncounteredError)
@@ -6356,7 +6356,7 @@ namespace WixToolset.Core
6356 case "Feature": 6356 case "Feature":
6357 if (CompilerConstants.IntegerNotSet == level) 6357 if (CompilerConstants.IntegerNotSet == level)
6358 { 6358 {
6359 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Level")); 6359 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Level"));
6360 level = CompilerConstants.IllegalInteger; 6360 level = CompilerConstants.IllegalInteger;
6361 } 6361 }
6362 6362
@@ -6372,7 +6372,7 @@ namespace WixToolset.Core
6372 case "Product": 6372 case "Product":
6373 if (null == message) 6373 if (null == message)
6374 { 6374 {
6375 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Message")); 6375 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Message"));
6376 } 6376 }
6377 6377
6378 if (!this.Core.EncounteredError) 6378 if (!this.Core.EncounteredError)
@@ -6437,7 +6437,7 @@ namespace WixToolset.Core
6437 action = MsiInterop.MsidbIniFileActionRemoveTag; 6437 action = MsiInterop.MsidbIniFileActionRemoveTag;
6438 break; 6438 break;
6439 default: 6439 default:
6440 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", actionValue, "addLine", "addTag", "createLine", "removeLine", "removeTag")); 6440 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", actionValue, "addLine", "addTag", "createLine", "removeLine", "removeTag"));
6441 break; 6441 break;
6442 } 6442 }
6443 } 6443 }
@@ -6473,18 +6473,18 @@ namespace WixToolset.Core
6473 6473
6474 if (CompilerConstants.IntegerNotSet == action) 6474 if (CompilerConstants.IntegerNotSet == action)
6475 { 6475 {
6476 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); 6476 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
6477 action = CompilerConstants.IllegalInteger; 6477 action = CompilerConstants.IllegalInteger;
6478 } 6478 }
6479 6479
6480 if (null == key) 6480 if (null == key)
6481 { 6481 {
6482 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 6482 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
6483 } 6483 }
6484 6484
6485 if (null == name) 6485 if (null == name)
6486 { 6486 {
6487 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 6487 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
6488 } 6488 }
6489 else if (0 < name.Length) 6489 else if (0 < name.Length)
6490 { 6490 {
@@ -6497,7 +6497,7 @@ namespace WixToolset.Core
6497 } 6497 }
6498 else 6498 else
6499 { 6499 {
6500 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName")); 6500 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName"));
6501 } 6501 }
6502 } 6502 }
6503 else // generate a short file name. 6503 else // generate a short file name.
@@ -6511,7 +6511,7 @@ namespace WixToolset.Core
6511 6511
6512 if (null == section) 6512 if (null == section)
6513 { 6513 {
6514 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Section")); 6514 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Section"));
6515 } 6515 }
6516 6516
6517 if (null == id) 6517 if (null == id)
@@ -6529,7 +6529,7 @@ namespace WixToolset.Core
6529 { 6529 {
6530 if (null == value) 6530 if (null == value)
6531 { 6531 {
6532 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 6532 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
6533 } 6533 }
6534 6534
6535 tableName = TupleDefinitionType.IniFile; 6535 tableName = TupleDefinitionType.IniFile;
@@ -6606,7 +6606,7 @@ namespace WixToolset.Core
6606 type = 2; 6606 type = 2;
6607 break; 6607 break;
6608 default: 6608 default:
6609 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "registry")); 6609 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "registry"));
6610 break; 6610 break;
6611 } 6611 }
6612 } 6612 }
@@ -6624,12 +6624,12 @@ namespace WixToolset.Core
6624 6624
6625 if (null == key) 6625 if (null == key)
6626 { 6626 {
6627 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 6627 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
6628 } 6628 }
6629 6629
6630 if (null == name) 6630 if (null == name)
6631 { 6631 {
6632 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 6632 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
6633 } 6633 }
6634 else if (0 < name.Length) 6634 else if (0 < name.Length)
6635 { 6635 {
@@ -6642,7 +6642,7 @@ namespace WixToolset.Core
6642 } 6642 }
6643 else 6643 else
6644 { 6644 {
6645 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName")); 6645 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName"));
6646 } 6646 }
6647 } 6647 }
6648 else if (null == shortName) // generate a short file name. 6648 else if (null == shortName) // generate a short file name.
@@ -6653,7 +6653,7 @@ namespace WixToolset.Core
6653 6653
6654 if (null == section) 6654 if (null == section)
6655 { 6655 {
6656 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Section")); 6656 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Section"));
6657 } 6657 }
6658 6658
6659 if (null == id) 6659 if (null == id)
@@ -6674,7 +6674,7 @@ namespace WixToolset.Core
6674 case "DirectorySearch": 6674 case "DirectorySearch":
6675 if (oneChild) 6675 if (oneChild)
6676 { 6676 {
6677 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 6677 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
6678 } 6678 }
6679 oneChild = true; 6679 oneChild = true;
6680 6680
@@ -6684,7 +6684,7 @@ namespace WixToolset.Core
6684 case "DirectorySearchRef": 6684 case "DirectorySearchRef":
6685 if (oneChild) 6685 if (oneChild)
6686 { 6686 {
6687 this.Core.OnMessage(WixErrors.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); 6687 this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName));
6688 } 6688 }
6689 oneChild = true; 6689 oneChild = true;
6690 signature = this.ParseDirectorySearchRefElement(child, id.Id); 6690 signature = this.ParseDirectorySearchRefElement(child, id.Id);
@@ -6692,7 +6692,7 @@ namespace WixToolset.Core
6692 case "FileSearch": 6692 case "FileSearch":
6693 if (oneChild) 6693 if (oneChild)
6694 { 6694 {
6695 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 6695 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
6696 } 6696 }
6697 oneChild = true; 6697 oneChild = true;
6698 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); 6698 signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet);
@@ -6701,7 +6701,7 @@ namespace WixToolset.Core
6701 case "FileSearchRef": 6701 case "FileSearchRef":
6702 if (oneChild) 6702 if (oneChild)
6703 { 6703 {
6704 this.Core.OnMessage(WixErrors.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 6704 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
6705 } 6705 }
6706 oneChild = true; 6706 oneChild = true;
6707 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures 6707 string newId = this.ParseSimpleRefElement(child, "Signature"); // FileSearch signatures override parent signatures
@@ -6768,7 +6768,7 @@ namespace WixToolset.Core
6768 6768
6769 if (null == shared) 6769 if (null == shared)
6770 { 6770 {
6771 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Shared")); 6771 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Shared"));
6772 } 6772 }
6773 6773
6774 this.Core.ParseForExtensionElements(node); 6774 this.Core.ParseForExtensionElements(node);
@@ -6866,12 +6866,12 @@ namespace WixToolset.Core
6866 6866
6867 if (null == id) 6867 if (null == id)
6868 { 6868 {
6869 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 6869 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
6870 id = Identifier.Invalid; 6870 id = Identifier.Invalid;
6871 } 6871 }
6872 else if (40 < id.Id.Length) 6872 else if (40 < id.Id.Length)
6873 { 6873 {
6874 this.Core.OnMessage(WixErrors.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 40)); 6874 this.Core.Write(ErrorMessages.StreamNameTooLong(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, id.Id.Length, 40));
6875 6875
6876 // No need to check for modularization problems since DigitalSignature and thus DigitalCertificate 6876 // No need to check for modularization problems since DigitalSignature and thus DigitalCertificate
6877 // currently have no usage in merge modules. 6877 // currently have no usage in merge modules.
@@ -6879,7 +6879,7 @@ namespace WixToolset.Core
6879 6879
6880 if (null == sourceFile) 6880 if (null == sourceFile)
6881 { 6881 {
6882 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 6882 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
6883 } 6883 }
6884 6884
6885 this.Core.ParseForExtensionElements(node); 6885 this.Core.ParseForExtensionElements(node);
@@ -6952,7 +6952,7 @@ namespace WixToolset.Core
6952 6952
6953 if (null == certificateId) 6953 if (null == certificateId)
6954 { 6954 {
6955 this.Core.OnMessage(WixErrors.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "DigitalCertificate")); 6955 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "DigitalCertificate"));
6956 } 6956 }
6957 6957
6958 if (!this.Core.EncounteredError) 6958 if (!this.Core.EncounteredError)
@@ -6985,13 +6985,13 @@ namespace WixToolset.Core
6985 string upgradeCode = contextValues["UpgradeCode"]; 6985 string upgradeCode = contextValues["UpgradeCode"];
6986 if (String.IsNullOrEmpty(upgradeCode)) 6986 if (String.IsNullOrEmpty(upgradeCode))
6987 { 6987 {
6988 this.Core.OnMessage(WixErrors.ParentElementAttributeRequired(sourceLineNumbers, "Product", "UpgradeCode", node.Name.LocalName)); 6988 this.Core.Write(ErrorMessages.ParentElementAttributeRequired(sourceLineNumbers, "Product", "UpgradeCode", node.Name.LocalName));
6989 } 6989 }
6990 6990
6991 string productVersion = contextValues["ProductVersion"]; 6991 string productVersion = contextValues["ProductVersion"];
6992 if (String.IsNullOrEmpty(productVersion)) 6992 if (String.IsNullOrEmpty(productVersion))
6993 { 6993 {
6994 this.Core.OnMessage(WixErrors.ParentElementAttributeRequired(sourceLineNumbers, "Product", "Version", node.Name.LocalName)); 6994 this.Core.Write(ErrorMessages.ParentElementAttributeRequired(sourceLineNumbers, "Product", "Version", node.Name.LocalName));
6995 } 6995 }
6996 6996
6997 string productLanguage = contextValues["ProductLanguage"]; 6997 string productLanguage = contextValues["ProductLanguage"];
@@ -7056,27 +7056,27 @@ namespace WixToolset.Core
7056 7056
7057 if (!allowDowngrades && String.IsNullOrEmpty(downgradeErrorMessage)) 7057 if (!allowDowngrades && String.IsNullOrEmpty(downgradeErrorMessage))
7058 { 7058 {
7059 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DowngradeErrorMessage", "AllowDowngrades", "yes", true)); 7059 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DowngradeErrorMessage", "AllowDowngrades", "yes", true));
7060 } 7060 }
7061 7061
7062 if (allowDowngrades && !String.IsNullOrEmpty(downgradeErrorMessage)) 7062 if (allowDowngrades && !String.IsNullOrEmpty(downgradeErrorMessage))
7063 { 7063 {
7064 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DowngradeErrorMessage", "AllowDowngrades", "yes")); 7064 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DowngradeErrorMessage", "AllowDowngrades", "yes"));
7065 } 7065 }
7066 7066
7067 if (allowDowngrades && allowSameVersionUpgrades) 7067 if (allowDowngrades && allowSameVersionUpgrades)
7068 { 7068 {
7069 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "AllowSameVersionUpgrades", "AllowDowngrades", "yes")); 7069 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "AllowSameVersionUpgrades", "AllowDowngrades", "yes"));
7070 } 7070 }
7071 7071
7072 if (blockUpgrades && String.IsNullOrEmpty(disallowUpgradeErrorMessage)) 7072 if (blockUpgrades && String.IsNullOrEmpty(disallowUpgradeErrorMessage))
7073 { 7073 {
7074 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisallowUpgradeErrorMessage", "Disallow", "yes", true)); 7074 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisallowUpgradeErrorMessage", "Disallow", "yes", true));
7075 } 7075 }
7076 7076
7077 if (!blockUpgrades && !String.IsNullOrEmpty(disallowUpgradeErrorMessage)) 7077 if (!blockUpgrades && !String.IsNullOrEmpty(disallowUpgradeErrorMessage))
7078 { 7078 {
7079 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DisallowUpgradeErrorMessage", "Disallow", "yes")); 7079 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DisallowUpgradeErrorMessage", "Disallow", "yes"));
7080 } 7080 }
7081 7081
7082 if (!this.Core.EncounteredError) 7082 if (!this.Core.EncounteredError)
@@ -7207,7 +7207,7 @@ namespace WixToolset.Core
7207 Wix.CompressionLevelType compressionLevelType; 7207 Wix.CompressionLevelType compressionLevelType;
7208 if (!Wix.Enums.TryParseCompressionLevelType(compressionLevelString, out compressionLevelType)) 7208 if (!Wix.Enums.TryParseCompressionLevelType(compressionLevelString, out compressionLevelType))
7209 { 7209 {
7210 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, compressionLevelString, "high", "low", "medium", "mszip", "none")); 7210 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, compressionLevelString, "high", "low", "medium", "mszip", "none"));
7211 } 7211 }
7212 else 7212 else
7213 { 7213 {
@@ -7226,12 +7226,12 @@ namespace WixToolset.Core
7226 case "src": 7226 case "src":
7227 if (null != layout) 7227 if (null != layout)
7228 { 7228 {
7229 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Layout", "src")); 7229 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Layout", "src"));
7230 } 7230 }
7231 7231
7232 if ("src" == attrib.Name.LocalName) 7232 if ("src" == attrib.Name.LocalName)
7233 { 7233 {
7234 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Layout")); 7234 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Layout"));
7235 } 7235 }
7236 layout = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7236 layout = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7237 break; 7237 break;
@@ -7254,7 +7254,7 @@ namespace WixToolset.Core
7254 7254
7255 if (CompilerConstants.IntegerNotSet == id) 7255 if (CompilerConstants.IntegerNotSet == id)
7256 { 7256 {
7257 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 7257 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
7258 id = CompilerConstants.IllegalInteger; 7258 id = CompilerConstants.IllegalInteger;
7259 } 7259 }
7260 7260
@@ -7264,13 +7264,13 @@ namespace WixToolset.Core
7264 { 7264 {
7265 if (null == cabinet) 7265 if (null == cabinet)
7266 { 7266 {
7267 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Cabinet", "EmbedCab", "yes")); 7267 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Cabinet", "EmbedCab", "yes"));
7268 } 7268 }
7269 else 7269 else
7270 { 7270 {
7271 if (62 < cabinet.Length) 7271 if (62 < cabinet.Length)
7272 { 7272 {
7273 this.Core.OnMessage(WixErrors.MediaEmbeddedCabinetNameTooLong(sourceLineNumbers, node.Name.LocalName, "Cabinet", cabinet, cabinet.Length)); 7273 this.Core.Write(ErrorMessages.MediaEmbeddedCabinetNameTooLong(sourceLineNumbers, node.Name.LocalName, "Cabinet", cabinet, cabinet.Length));
7274 } 7274 }
7275 7275
7276 cabinet = String.Concat("#", cabinet); 7276 cabinet = String.Concat("#", cabinet);
@@ -7284,7 +7284,7 @@ namespace WixToolset.Core
7284 // WiX variables in the name will trip the "not a valid 8.3 name" switch, so let them through 7284 // WiX variables in the name will trip the "not a valid 8.3 name" switch, so let them through
7285 if (!Common.WixVariableRegex.Match(cabinet).Success) 7285 if (!Common.WixVariableRegex.Match(cabinet).Success)
7286 { 7286 {
7287 this.Core.OnMessage(WixWarnings.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "Cabinet", cabinet)); 7287 this.Core.Write(WarningMessages.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "Cabinet", cabinet));
7288 } 7288 }
7289 } 7289 }
7290 } 7290 }
@@ -7292,7 +7292,7 @@ namespace WixToolset.Core
7292 7292
7293 if (null != compressionLevel && null == cabinet) 7293 if (null != compressionLevel && null == cabinet)
7294 { 7294 {
7295 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Cabinet", "CompressionLevel")); 7295 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Cabinet", "CompressionLevel"));
7296 } 7296 }
7297 7297
7298 if (patch) 7298 if (patch)
@@ -7314,11 +7314,11 @@ namespace WixToolset.Core
7314 case "DigitalSignature": 7314 case "DigitalSignature":
7315 if (YesNoType.Yes == embedCab) 7315 if (YesNoType.Yes == embedCab)
7316 { 7316 {
7317 this.Core.OnMessage(WixErrors.SignedEmbeddedCabinet(childSourceLineNumbers)); 7317 this.Core.Write(ErrorMessages.SignedEmbeddedCabinet(childSourceLineNumbers));
7318 } 7318 }
7319 else if (null == cabinet) 7319 else if (null == cabinet)
7320 { 7320 {
7321 this.Core.OnMessage(WixErrors.ExpectedSignedCabinetName(childSourceLineNumbers)); 7321 this.Core.Write(ErrorMessages.ExpectedSignedCabinetName(childSourceLineNumbers));
7322 } 7322 }
7323 else 7323 else
7324 { 7324 {
@@ -7428,11 +7428,11 @@ namespace WixToolset.Core
7428 // reason for having multiple cabients. External cabinet files must also be valid file names. 7428 // reason for having multiple cabients. External cabinet files must also be valid file names.
7429 if (exampleCabinetName.Equals(authoredCabinetTemplateValue) || !this.Core.IsValidLongFilename(exampleCabinetName, false)) 7429 if (exampleCabinetName.Equals(authoredCabinetTemplateValue) || !this.Core.IsValidLongFilename(exampleCabinetName, false))
7430 { 7430 {
7431 this.Core.OnMessage(WixErrors.InvalidCabinetTemplate(sourceLineNumbers, cabinetTemplate)); 7431 this.Core.Write(ErrorMessages.InvalidCabinetTemplate(sourceLineNumbers, cabinetTemplate));
7432 } 7432 }
7433 else if (!this.Core.IsValidShortFilename(exampleCabinetName, false) && !Common.WixVariableRegex.Match(exampleCabinetName).Success) // ignore short names with wix variables because it rarely works out. 7433 else if (!this.Core.IsValidShortFilename(exampleCabinetName, false) && !Common.WixVariableRegex.Match(exampleCabinetName).Success) // ignore short names with wix variables because it rarely works out.
7434 { 7434 {
7435 this.Core.OnMessage(WixWarnings.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "CabinetTemplate", cabinetTemplate)); 7435 this.Core.Write(WarningMessages.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "CabinetTemplate", cabinetTemplate));
7436 } 7436 }
7437 } 7437 }
7438 break; 7438 break;
@@ -7442,21 +7442,21 @@ namespace WixToolset.Core
7442 { 7442 {
7443 if (!Wix.Enums.TryParseCompressionLevelType(compressionLevel, out compressionLevelType)) 7443 if (!Wix.Enums.TryParseCompressionLevelType(compressionLevel, out compressionLevelType))
7444 { 7444 {
7445 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, compressionLevel, "high", "low", "medium", "mszip", "none")); 7445 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, compressionLevel, "high", "low", "medium", "mszip", "none"));
7446 } 7446 }
7447 } 7447 }
7448 break; 7448 break;
7449 case "DiskPrompt": 7449 case "DiskPrompt":
7450 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7450 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7451 this.Core.CreateSimpleReference(sourceLineNumbers, "Property", "DiskPrompt"); // ensure the output has a DiskPrompt Property defined 7451 this.Core.CreateSimpleReference(sourceLineNumbers, "Property", "DiskPrompt"); // ensure the output has a DiskPrompt Property defined
7452 this.Core.OnMessage(WixWarnings.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 7452 this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
7453 break; 7453 break;
7454 case "EmbedCab": 7454 case "EmbedCab":
7455 embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 7455 embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
7456 break; 7456 break;
7457 case "VolumeLabel": 7457 case "VolumeLabel":
7458 volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7458 volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7459 this.Core.OnMessage(WixWarnings.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 7459 this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
7460 break; 7460 break;
7461 case "MaximumUncompressedMediaSize": 7461 case "MaximumUncompressedMediaSize":
7462 maximumUncompressedMediaSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, int.MaxValue); 7462 maximumUncompressedMediaSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, int.MaxValue);
@@ -7582,22 +7582,22 @@ namespace WixToolset.Core
7582 7582
7583 if (null == id) 7583 if (null == id)
7584 { 7584 {
7585 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 7585 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
7586 } 7586 }
7587 7587
7588 if (null == language) 7588 if (null == language)
7589 { 7589 {
7590 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language")); 7590 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language"));
7591 } 7591 }
7592 7592
7593 if (null == sourceFile) 7593 if (null == sourceFile)
7594 { 7594 {
7595 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 7595 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
7596 } 7596 }
7597 7597
7598 if (CompilerConstants.IntegerNotSet == diskId) 7598 if (CompilerConstants.IntegerNotSet == diskId)
7599 { 7599 {
7600 this.Core.OnMessage(WixErrors.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "DiskId", "Directory")); 7600 this.Core.Write(ErrorMessages.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "DiskId", "Directory"));
7601 diskId = CompilerConstants.IllegalInteger; 7601 diskId = CompilerConstants.IllegalInteger;
7602 } 7602 }
7603 7603
@@ -7688,7 +7688,7 @@ namespace WixToolset.Core
7688 7688
7689 if (null == name) 7689 if (null == name)
7690 { 7690 {
7691 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 7691 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
7692 } 7692 }
7693 else // need to hex encode these characters 7693 else // need to hex encode these characters
7694 { 7694 {
@@ -7699,7 +7699,7 @@ namespace WixToolset.Core
7699 7699
7700 if (null == value) 7700 if (null == value)
7701 { 7701 {
7702 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 7702 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
7703 } 7703 }
7704 else // need to hex encode these characters 7704 else // need to hex encode these characters
7705 { 7705 {
@@ -7751,7 +7751,7 @@ namespace WixToolset.Core
7751 7751
7752 if (null == id) 7752 if (null == id)
7753 { 7753 {
7754 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 7754 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
7755 } 7755 }
7756 7756
7757 this.Core.ParseForExtensionElements(node); 7757 this.Core.ParseForExtensionElements(node);
@@ -7806,7 +7806,7 @@ namespace WixToolset.Core
7806 7806
7807 if (null == contentType) 7807 if (null == contentType)
7808 { 7808 {
7809 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ContentType")); 7809 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ContentType"));
7810 } 7810 }
7811 7811
7812 // if the advertise state has not been set, default to non-advertised 7812 // if the advertise state has not been set, default to non-advertised
@@ -7821,7 +7821,7 @@ namespace WixToolset.Core
7821 { 7821 {
7822 if (YesNoType.Yes != parentAdvertised) 7822 if (YesNoType.Yes != parentAdvertised)
7823 { 7823 {
7824 this.Core.OnMessage(WixErrors.AdvertiseStateMustMatch(sourceLineNumbers, advertise.ToString(), parentAdvertised.ToString())); 7824 this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, advertise.ToString(), parentAdvertised.ToString()));
7825 } 7825 }
7826 7826
7827 if (!this.Core.EncounteredError) 7827 if (!this.Core.EncounteredError)
@@ -7836,7 +7836,7 @@ namespace WixToolset.Core
7836 { 7836 {
7837 if (YesNoType.Yes == returnContentType && YesNoType.Yes == parentAdvertised) 7837 if (YesNoType.Yes == returnContentType && YesNoType.Yes == parentAdvertised)
7838 { 7838 {
7839 this.Core.OnMessage(WixErrors.CannotDefaultMismatchedAdvertiseStates(sourceLineNumbers)); 7839 this.Core.Write(ErrorMessages.CannotDefaultMismatchedAdvertiseStates(sourceLineNumbers));
7840 } 7840 }
7841 7841
7842 this.Core.CreateRegistryRow(sourceLineNumbers, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("MIME\\Database\\Content Type\\", contentType), "Extension", String.Concat(".", extension), componentId); 7842 this.Core.CreateRegistryRow(sourceLineNumbers, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("MIME\\Database\\Content Type\\", contentType), "Extension", String.Concat(".", extension), componentId);
@@ -7873,7 +7873,7 @@ namespace WixToolset.Core
7873 this.activeName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7873 this.activeName = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7874 if ("PUT-MODULE-NAME-HERE" == this.activeName) 7874 if ("PUT-MODULE-NAME-HERE" == this.activeName)
7875 { 7875 {
7876 this.Core.OnMessage(WixWarnings.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName)); 7876 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName));
7877 } 7877 }
7878 else 7878 else
7879 { 7879 {
@@ -7885,7 +7885,7 @@ namespace WixToolset.Core
7885 break; 7885 break;
7886 case "Guid": 7886 case "Guid":
7887 moduleId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); 7887 moduleId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false);
7888 this.Core.OnMessage(WixWarnings.DeprecatedModuleGuidAttribute(sourceLineNumbers)); 7888 this.Core.Write(WarningMessages.DeprecatedModuleGuidAttribute(sourceLineNumbers));
7889 break; 7889 break;
7890 case "Language": 7890 case "Language":
7891 this.activeLanguage = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 7891 this.activeLanguage = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue);
@@ -7906,21 +7906,21 @@ namespace WixToolset.Core
7906 7906
7907 if (null == this.activeName) 7907 if (null == this.activeName)
7908 { 7908 {
7909 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 7909 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
7910 } 7910 }
7911 7911
7912 if (null == this.activeLanguage) 7912 if (null == this.activeLanguage)
7913 { 7913 {
7914 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language")); 7914 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language"));
7915 } 7915 }
7916 7916
7917 if (null == version) 7917 if (null == version)
7918 { 7918 {
7919 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version")); 7919 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version"));
7920 } 7920 }
7921 else if (!CompilerCore.IsValidModuleOrBundleVersion(version)) 7921 else if (!CompilerCore.IsValidModuleOrBundleVersion(version))
7922 { 7922 {
7923 this.Core.OnMessage(WixWarnings.InvalidModuleOrBundleVersion(sourceLineNumbers, "Module", version)); 7923 this.Core.Write(WarningMessages.InvalidModuleOrBundleVersion(sourceLineNumbers, "Module", version));
7924 } 7924 }
7925 7925
7926 try 7926 try
@@ -8119,7 +8119,7 @@ namespace WixToolset.Core
8119 8119
8120 if (null == this.activeName) 8120 if (null == this.activeName)
8121 { 8121 {
8122 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 8122 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
8123 } 8123 }
8124 8124
8125 this.Core.CreateActiveSection(this.activeName, SectionType.PatchCreation, codepage, this.Context.CompilationId); 8125 this.Core.CreateActiveSection(this.activeName, SectionType.PatchCreation, codepage, this.Context.CompilationId);
@@ -8250,13 +8250,13 @@ namespace WixToolset.Core
8250 8250
8251 if (null == name) 8251 if (null == name)
8252 { 8252 {
8253 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 8253 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
8254 } 8254 }
8255 else if (0 < name.Length) 8255 else if (0 < name.Length)
8256 { 8256 {
8257 if (8 < name.Length) // check the length 8257 if (8 < name.Length) // check the length
8258 { 8258 {
8259 this.Core.OnMessage(WixErrors.FamilyNameTooLong(sourceLineNumbers, node.Name.LocalName, "Name", name, name.Length)); 8259 this.Core.Write(ErrorMessages.FamilyNameTooLong(sourceLineNumbers, node.Name.LocalName, "Name", name, name.Length));
8260 } 8260 }
8261 else // check for illegal characters 8261 else // check for illegal characters
8262 { 8262 {
@@ -8264,7 +8264,7 @@ namespace WixToolset.Core
8264 { 8264 {
8265 if (!Char.IsLetterOrDigit(character) && '_' != character) 8265 if (!Char.IsLetterOrDigit(character) && '_' != character)
8266 { 8266 {
8267 this.Core.OnMessage(WixErrors.IllegalFamilyName(sourceLineNumbers, node.Name.LocalName, "Name", name)); 8267 this.Core.Write(ErrorMessages.IllegalFamilyName(sourceLineNumbers, node.Name.LocalName, "Name", name));
8268 } 8268 }
8269 } 8269 }
8270 } 8270 }
@@ -8338,19 +8338,19 @@ namespace WixToolset.Core
8338 upgrade = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8338 upgrade = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8339 if (13 < upgrade.Length) 8339 if (13 < upgrade.Length)
8340 { 8340 {
8341 this.Core.OnMessage(WixErrors.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", upgrade, 13)); 8341 this.Core.Write(ErrorMessages.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", upgrade, 13));
8342 } 8342 }
8343 break; 8343 break;
8344 case "SourceFile": 8344 case "SourceFile":
8345 case "src": 8345 case "src":
8346 if (null != sourceFile) 8346 if (null != sourceFile)
8347 { 8347 {
8348 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "SourceFile")); 8348 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "SourceFile"));
8349 } 8349 }
8350 8350
8351 if ("src" == attrib.Name.LocalName) 8351 if ("src" == attrib.Name.LocalName)
8352 { 8352 {
8353 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile")); 8353 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile"));
8354 } 8354 }
8355 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8355 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8356 break; 8356 break;
@@ -8358,12 +8358,12 @@ namespace WixToolset.Core
8358 case "srcPatch": 8358 case "srcPatch":
8359 if (null != sourcePatch) 8359 if (null != sourcePatch)
8360 { 8360 {
8361 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "srcPatch", "SourcePatch")); 8361 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "srcPatch", "SourcePatch"));
8362 } 8362 }
8363 8363
8364 if ("srcPatch" == attrib.Name.LocalName) 8364 if ("srcPatch" == attrib.Name.LocalName)
8365 { 8365 {
8366 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourcePatch")); 8366 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourcePatch"));
8367 } 8367 }
8368 sourcePatch = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8368 sourcePatch = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8369 break; 8369 break;
@@ -8380,12 +8380,12 @@ namespace WixToolset.Core
8380 8380
8381 if (null == upgrade) 8381 if (null == upgrade)
8382 { 8382 {
8383 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 8383 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
8384 } 8384 }
8385 8385
8386 if (null == sourceFile) 8386 if (null == sourceFile)
8387 { 8387 {
8388 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 8388 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
8389 } 8389 }
8390 8390
8391 foreach (XElement child in node.Elements()) 8391 foreach (XElement child in node.Elements())
@@ -8470,7 +8470,7 @@ namespace WixToolset.Core
8470 8470
8471 if (null == file) 8471 if (null == file)
8472 { 8472 {
8473 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File")); 8473 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File"));
8474 } 8474 }
8475 8475
8476 foreach (XElement child in node.Elements()) 8476 foreach (XElement child in node.Elements())
@@ -8539,7 +8539,7 @@ namespace WixToolset.Core
8539 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8539 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8540 if (target.Length > 13) 8540 if (target.Length > 13)
8541 { 8541 {
8542 this.Core.OnMessage(WixErrors.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", target, 13)); 8542 this.Core.Write(ErrorMessages.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", target, 13));
8543 } 8543 }
8544 break; 8544 break;
8545 case "IgnoreMissingFiles": 8545 case "IgnoreMissingFiles":
@@ -8552,12 +8552,12 @@ namespace WixToolset.Core
8552 case "src": 8552 case "src":
8553 if (null != sourceFile) 8553 if (null != sourceFile)
8554 { 8554 {
8555 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "SourceFile")); 8555 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "SourceFile"));
8556 } 8556 }
8557 8557
8558 if ("src" == attrib.Name.LocalName) 8558 if ("src" == attrib.Name.LocalName)
8559 { 8559 {
8560 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile")); 8560 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "SourceFile"));
8561 } 8561 }
8562 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8562 sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8563 break; 8563 break;
@@ -8577,17 +8577,17 @@ namespace WixToolset.Core
8577 8577
8578 if (null == target) 8578 if (null == target)
8579 { 8579 {
8580 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 8580 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
8581 } 8581 }
8582 8582
8583 if (null == sourceFile) 8583 if (null == sourceFile)
8584 { 8584 {
8585 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 8585 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
8586 } 8586 }
8587 8587
8588 if (CompilerConstants.IntegerNotSet == order) 8588 if (CompilerConstants.IntegerNotSet == order)
8589 { 8589 {
8590 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Order")); 8590 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Order"));
8591 } 8591 }
8592 8592
8593 foreach (XElement child in node.Elements()) 8593 foreach (XElement child in node.Elements())
@@ -8671,7 +8671,7 @@ namespace WixToolset.Core
8671 8671
8672 if (null == file) 8672 if (null == file)
8673 { 8673 {
8674 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 8674 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
8675 } 8675 }
8676 8676
8677 foreach (XElement child in node.Elements()) 8677 foreach (XElement child in node.Elements())
@@ -8755,12 +8755,12 @@ namespace WixToolset.Core
8755 case "src": 8755 case "src":
8756 if (null != source) 8756 if (null != source)
8757 { 8757 {
8758 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "Source")); 8758 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "src", "Source"));
8759 } 8759 }
8760 8760
8761 if ("src" == attrib.Name.LocalName) 8761 if ("src" == attrib.Name.LocalName)
8762 { 8762 {
8763 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Source")); 8763 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Source"));
8764 } 8764 }
8765 source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 8765 source = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
8766 break; 8766 break;
@@ -8777,17 +8777,17 @@ namespace WixToolset.Core
8777 8777
8778 if (null == file) 8778 if (null == file)
8779 { 8779 {
8780 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File")); 8780 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File"));
8781 } 8781 }
8782 8782
8783 if (null == source) 8783 if (null == source)
8784 { 8784 {
8785 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Source")); 8785 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Source"));
8786 } 8786 }
8787 8787
8788 if (CompilerConstants.IntegerNotSet == order) 8788 if (CompilerConstants.IntegerNotSet == order)
8789 { 8789 {
8790 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Order")); 8790 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Order"));
8791 } 8791 }
8792 8792
8793 foreach (XElement child in node.Elements()) 8793 foreach (XElement child in node.Elements())
@@ -8880,7 +8880,7 @@ namespace WixToolset.Core
8880 8880
8881 if (null == file) 8881 if (null == file)
8882 { 8882 {
8883 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File")); 8883 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File"));
8884 } 8884 }
8885 8885
8886 foreach (XElement child in node.Elements()) 8886 foreach (XElement child in node.Elements())
@@ -8905,7 +8905,7 @@ namespace WixToolset.Core
8905 8905
8906 if (null == protectOffsets || null == protectLengths) 8906 if (null == protectOffsets || null == protectLengths)
8907 { 8907 {
8908 this.Core.OnMessage(WixErrors.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "ProtectRange")); 8908 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "ProtectRange"));
8909 } 8909 }
8910 8910
8911 if (!this.Core.EncounteredError) 8911 if (!this.Core.EncounteredError)
@@ -8955,12 +8955,12 @@ namespace WixToolset.Core
8955 8955
8956 if (null == length) 8956 if (null == length)
8957 { 8957 {
8958 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Length")); 8958 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Length"));
8959 } 8959 }
8960 8960
8961 if (null == offset) 8961 if (null == offset)
8962 { 8962 {
8963 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Offset")); 8963 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Offset"));
8964 } 8964 }
8965 8965
8966 this.Core.ParseForExtensionElements(node); 8966 this.Core.ParseForExtensionElements(node);
@@ -9025,12 +9025,12 @@ namespace WixToolset.Core
9025 9025
9026 if (null == name) 9026 if (null == name)
9027 { 9027 {
9028 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 9028 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
9029 } 9029 }
9030 9030
9031 if (null == value) 9031 if (null == value)
9032 { 9032 {
9033 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 9033 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
9034 } 9034 }
9035 9035
9036 this.Core.ParseForExtensionElements(node); 9036 this.Core.ParseForExtensionElements(node);
@@ -9047,7 +9047,7 @@ namespace WixToolset.Core
9047 { 9047 {
9048 if (null != company) 9048 if (null != company)
9049 { 9049 {
9050 this.Core.OnMessage(WixErrors.UnexpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Company")); 9050 this.Core.Write(ErrorMessages.UnexpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Company"));
9051 } 9051 }
9052 this.ProcessProperties(sourceLineNumbers, name, value); 9052 this.ProcessProperties(sourceLineNumbers, name, value);
9053 } 9053 }
@@ -9077,22 +9077,22 @@ namespace WixToolset.Core
9077 case "ProductCode": 9077 case "ProductCode":
9078 if (null != target) 9078 if (null != target)
9079 { 9079 {
9080 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "TargetImage")); 9080 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "TargetImage"));
9081 } 9081 }
9082 target = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); 9082 target = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false);
9083 break; 9083 break;
9084 case "Target": 9084 case "Target":
9085 if (null != target) 9085 if (null != target)
9086 { 9086 {
9087 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "TargetImage", "ProductCode")); 9087 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "TargetImage", "ProductCode"));
9088 } 9088 }
9089 this.Core.OnMessage(WixWarnings.DeprecatedPatchSequenceTargetAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 9089 this.Core.Write(WarningMessages.DeprecatedPatchSequenceTargetAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
9090 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 9090 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
9091 break; 9091 break;
9092 case "TargetImage": 9092 case "TargetImage":
9093 if (null != target) 9093 if (null != target)
9094 { 9094 {
9095 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "ProductCode")); 9095 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "ProductCode"));
9096 } 9096 }
9097 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 9097 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
9098 this.Core.CreateSimpleReference(sourceLineNumbers, "TargetImages", target); 9098 this.Core.CreateSimpleReference(sourceLineNumbers, "TargetImages", target);
@@ -9119,7 +9119,7 @@ namespace WixToolset.Core
9119 9119
9120 if (null == family) 9120 if (null == family)
9121 { 9121 {
9122 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PatchFamily")); 9122 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PatchFamily"));
9123 } 9123 }
9124 9124
9125 this.Core.ParseForExtensionElements(node); 9125 this.Core.ParseForExtensionElements(node);
@@ -9173,7 +9173,7 @@ namespace WixToolset.Core
9173 9173
9174 if (null == id) 9174 if (null == id)
9175 { 9175 {
9176 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9176 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9177 } 9177 }
9178 9178
9179 this.Core.ParseForExtensionElements(node); 9179 this.Core.ParseForExtensionElements(node);
@@ -9221,7 +9221,7 @@ namespace WixToolset.Core
9221 string id = this.ParseTargetProductCodeElement(child); 9221 string id = this.ParseTargetProductCodeElement(child);
9222 if (0 == String.CompareOrdinal("*", id)) 9222 if (0 == String.CompareOrdinal("*", id))
9223 { 9223 {
9224 this.Core.OnMessage(WixErrors.IllegalAttributeValueWhenNested(sourceLineNumbers, child.Name.LocalName, "Id", id, node.Name.LocalName)); 9224 this.Core.Write(ErrorMessages.IllegalAttributeValueWhenNested(sourceLineNumbers, child.Name.LocalName, "Id", id, node.Name.LocalName));
9225 } 9225 }
9226 else 9226 else
9227 { 9227 {
@@ -9288,7 +9288,7 @@ namespace WixToolset.Core
9288 9288
9289 if (null == id) 9289 if (null == id)
9290 { 9290 {
9291 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9291 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9292 } 9292 }
9293 9293
9294 this.Core.ParseForExtensionElements(node); 9294 this.Core.ParseForExtensionElements(node);
@@ -9328,7 +9328,7 @@ namespace WixToolset.Core
9328 9328
9329 if (null == path) 9329 if (null == path)
9330 { 9330 {
9331 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Path")); 9331 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Path"));
9332 } 9332 }
9333 9333
9334 this.Core.ParseForExtensionElements(node); 9334 this.Core.ParseForExtensionElements(node);
@@ -9446,11 +9446,11 @@ namespace WixToolset.Core
9446 9446
9447 if (null == this.activeName) 9447 if (null == this.activeName)
9448 { 9448 {
9449 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9449 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9450 } 9450 }
9451 if (null == classification) 9451 if (null == classification)
9452 { 9452 {
9453 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Classification")); 9453 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Classification"));
9454 } 9454 }
9455 if (null == clientPatchId) 9455 if (null == clientPatchId)
9456 { 9456 {
@@ -9458,15 +9458,15 @@ namespace WixToolset.Core
9458 } 9458 }
9459 if (null == description) 9459 if (null == description)
9460 { 9460 {
9461 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description")); 9461 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description"));
9462 } 9462 }
9463 if (null == displayName) 9463 if (null == displayName)
9464 { 9464 {
9465 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayName")); 9465 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayName"));
9466 } 9466 }
9467 if (null == manufacturer) 9467 if (null == manufacturer)
9468 { 9468 {
9469 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer")); 9469 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer"));
9470 } 9470 }
9471 9471
9472 this.Core.CreateActiveSection(this.activeName, SectionType.Patch, codepage, this.Context.CompilationId); 9472 this.Core.CreateActiveSection(this.activeName, SectionType.Patch, codepage, this.Context.CompilationId);
@@ -9668,17 +9668,17 @@ namespace WixToolset.Core
9668 9668
9669 if (null == id) 9669 if (null == id)
9670 { 9670 {
9671 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9671 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9672 id = Identifier.Invalid; 9672 id = Identifier.Invalid;
9673 } 9673 }
9674 9674
9675 if (String.IsNullOrEmpty(version)) 9675 if (String.IsNullOrEmpty(version))
9676 { 9676 {
9677 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version")); 9677 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version"));
9678 } 9678 }
9679 else if (!CompilerCore.IsValidProductVersion(version)) 9679 else if (!CompilerCore.IsValidProductVersion(version))
9680 { 9680 {
9681 this.Core.OnMessage(WixErrors.InvalidProductVersion(sourceLineNumbers, version)); 9681 this.Core.Write(ErrorMessages.InvalidProductVersion(sourceLineNumbers, version));
9682 } 9682 }
9683 9683
9684 // find unexpected child elements 9684 // find unexpected child elements
@@ -9768,7 +9768,7 @@ namespace WixToolset.Core
9768 this.Core.ParseForExtensionElements(node); 9768 this.Core.ParseForExtensionElements(node);
9769 9769
9770 // Always warn when using the All element. 9770 // Always warn when using the All element.
9771 this.Core.OnMessage(WixWarnings.AllChangesIncludedInPatch(sourceLineNumbers)); 9771 this.Core.Write(WarningMessages.AllChangesIncludedInPatch(sourceLineNumbers));
9772 9772
9773 if (!this.Core.EncounteredError) 9773 if (!this.Core.EncounteredError)
9774 { 9774 {
@@ -9808,7 +9808,7 @@ namespace WixToolset.Core
9808 9808
9809 if (null == id) 9809 if (null == id)
9810 { 9810 {
9811 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9811 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9812 } 9812 }
9813 9813
9814 this.Core.ParseForExtensionElements(node); 9814 this.Core.ParseForExtensionElements(node);
@@ -9853,12 +9853,12 @@ namespace WixToolset.Core
9853 9853
9854 if (null == id) 9854 if (null == id)
9855 { 9855 {
9856 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 9856 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
9857 id = Identifier.Invalid; 9857 id = Identifier.Invalid;
9858 } 9858 }
9859 else if (27 < id.Id.Length) 9859 else if (27 < id.Id.Length)
9860 { 9860 {
9861 this.Core.OnMessage(WixErrors.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, 27)); 9861 this.Core.Write(ErrorMessages.IdentifierTooLongError(sourceLineNumbers, node.Name.LocalName, "Id", id.Id, 27));
9862 } 9862 }
9863 9863
9864 foreach (XElement child in node.Elements()) 9864 foreach (XElement child in node.Elements())
@@ -9871,7 +9871,7 @@ namespace WixToolset.Core
9871 if (parsedValidate) 9871 if (parsedValidate)
9872 { 9872 {
9873 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 9873 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
9874 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 9874 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
9875 } 9875 }
9876 else 9876 else
9877 { 9877 {
@@ -9949,7 +9949,7 @@ namespace WixToolset.Core
9949 validationFlags |= TransformFlags.ValidateUpdateVersion; 9949 validationFlags |= TransformFlags.ValidateUpdateVersion;
9950 break; 9950 break;
9951 default: 9951 default:
9952 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Version", check, "Major", "Minor", "Update")); 9952 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Version", check, "Major", "Minor", "Update"));
9953 break; 9953 break;
9954 } 9954 }
9955 break; 9955 break;
@@ -9975,7 +9975,7 @@ namespace WixToolset.Core
9975 validationFlags |= TransformFlags.ValidateNewGreaterBaseVersion; 9975 validationFlags |= TransformFlags.ValidateNewGreaterBaseVersion;
9976 break; 9976 break;
9977 default: 9977 default:
9978 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Operator", op, "Lesser", "LesserOrEqual", "Equal", "GreaterOrEqual", "Greater")); 9978 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Operator", op, "Lesser", "LesserOrEqual", "Equal", "GreaterOrEqual", "Greater"));
9979 break; 9979 break;
9980 } 9980 }
9981 break; 9981 break;
@@ -10117,13 +10117,13 @@ namespace WixToolset.Core
10117 10117
10118 if (null == requiredId) 10118 if (null == requiredId)
10119 { 10119 {
10120 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RequiredId")); 10120 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RequiredId"));
10121 requiredId = String.Empty; 10121 requiredId = String.Empty;
10122 } 10122 }
10123 10123
10124 if (CompilerConstants.IntegerNotSet == requiredLanguage) 10124 if (CompilerConstants.IntegerNotSet == requiredLanguage)
10125 { 10125 {
10126 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RequiredLanguage")); 10126 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RequiredLanguage"));
10127 requiredLanguage = CompilerConstants.IllegalInteger; 10127 requiredLanguage = CompilerConstants.IllegalInteger;
10128 } 10128 }
10129 10129
@@ -10188,13 +10188,13 @@ namespace WixToolset.Core
10188 10188
10189 if (null == excludedId) 10189 if (null == excludedId)
10190 { 10190 {
10191 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ExcludedId")); 10191 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ExcludedId"));
10192 excludedId = String.Empty; 10192 excludedId = String.Empty;
10193 } 10193 }
10194 10194
10195 if (CompilerConstants.IntegerNotSet != excludeExceptLanguage && CompilerConstants.IntegerNotSet != excludeLanguage) 10195 if (CompilerConstants.IntegerNotSet != excludeExceptLanguage && CompilerConstants.IntegerNotSet != excludeLanguage)
10196 { 10196 {
10197 this.Core.OnMessage(WixErrors.IllegalModuleExclusionLanguageAttributes(sourceLineNumbers)); 10197 this.Core.Write(ErrorMessages.IllegalModuleExclusionLanguageAttributes(sourceLineNumbers));
10198 } 10198 }
10199 else if (CompilerConstants.IntegerNotSet != excludeExceptLanguage) 10199 else if (CompilerConstants.IntegerNotSet != excludeExceptLanguage)
10200 { 10200 {
@@ -10278,7 +10278,7 @@ namespace WixToolset.Core
10278 format = 3; 10278 format = 3;
10279 break; 10279 break;
10280 default: 10280 default:
10281 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Format", formatStr, "Text", "Key", "Integer", "Bitfield")); 10281 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Format", formatStr, "Text", "Key", "Integer", "Bitfield"));
10282 break; 10282 break;
10283 } 10283 }
10284 } 10284 }
@@ -10317,13 +10317,13 @@ namespace WixToolset.Core
10317 10317
10318 if (null == name) 10318 if (null == name)
10319 { 10319 {
10320 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 10320 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
10321 name = String.Empty; 10321 name = String.Empty;
10322 } 10322 }
10323 10323
10324 if (CompilerConstants.IntegerNotSet == format) 10324 if (CompilerConstants.IntegerNotSet == format)
10325 { 10325 {
10326 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Format")); 10326 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Format"));
10327 format = CompilerConstants.IllegalInteger; 10327 format = CompilerConstants.IllegalInteger;
10328 } 10328 }
10329 10329
@@ -10388,19 +10388,19 @@ namespace WixToolset.Core
10388 10388
10389 if (null == column) 10389 if (null == column)
10390 { 10390 {
10391 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Column")); 10391 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Column"));
10392 column = String.Empty; 10392 column = String.Empty;
10393 } 10393 }
10394 10394
10395 if (null == table) 10395 if (null == table)
10396 { 10396 {
10397 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Table")); 10397 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Table"));
10398 table = String.Empty; 10398 table = String.Empty;
10399 } 10399 }
10400 10400
10401 if (null == rowKeys) 10401 if (null == rowKeys)
10402 { 10402 {
10403 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Row")); 10403 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Row"));
10404 } 10404 }
10405 10405
10406 this.Core.ParseForExtensionElements(node); 10406 this.Core.ParseForExtensionElements(node);
@@ -10446,7 +10446,7 @@ namespace WixToolset.Core
10446 10446
10447 if (null == id) 10447 if (null == id)
10448 { 10448 {
10449 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 10449 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
10450 } 10450 }
10451 10451
10452 this.Core.ParseForExtensionElements(node); 10452 this.Core.ParseForExtensionElements(node);
@@ -10506,7 +10506,7 @@ namespace WixToolset.Core
10506 10506
10507 if (null == name) 10507 if (null == name)
10508 { 10508 {
10509 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 10509 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
10510 } 10510 }
10511 10511
10512 if (null == id) 10512 if (null == id)
@@ -10594,7 +10594,7 @@ namespace WixToolset.Core
10594 10594
10595 if (null == id) 10595 if (null == id)
10596 { 10596 {
10597 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 10597 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
10598 } 10598 }
10599 10599
10600 this.Core.ParseForExtensionElements(node); 10600 this.Core.ParseForExtensionElements(node);
@@ -10656,7 +10656,7 @@ namespace WixToolset.Core
10656 registration = 1; 10656 registration = 1;
10657 break; 10657 break;
10658 default: 10658 default:
10659 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Registration", registrationValue, "machine", "user")); 10659 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Registration", registrationValue, "machine", "user"));
10660 break; 10660 break;
10661 } 10661 }
10662 } 10662 }
@@ -10674,7 +10674,7 @@ namespace WixToolset.Core
10674 10674
10675 if (CompilerConstants.IntegerNotSet == registration) 10675 if (CompilerConstants.IntegerNotSet == registration)
10676 { 10676 {
10677 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Registration")); 10677 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Registration"));
10678 registration = CompilerConstants.IllegalInteger; 10678 registration = CompilerConstants.IllegalInteger;
10679 } 10679 }
10680 10680
@@ -10784,7 +10784,7 @@ namespace WixToolset.Core
10784 // merge modules must always be compressed, so this attribute is invalid 10784 // merge modules must always be compressed, so this attribute is invalid
10785 if (this.compilingModule) 10785 if (this.compilingModule)
10786 { 10786 {
10787 this.Core.OnMessage(WixWarnings.DeprecatedPackageCompressedAttribute(sourceLineNumbers)); 10787 this.Core.Write(WarningMessages.DeprecatedPackageCompressedAttribute(sourceLineNumbers));
10788 // this.core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Compressed", "Module")); 10788 // this.core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Compressed", "Module"));
10789 } 10789 }
10790 else if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 10790 else if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
@@ -10810,7 +10810,7 @@ namespace WixToolset.Core
10810 sourceBits = sourceBits | 8; 10810 sourceBits = sourceBits | 8;
10811 break; 10811 break;
10812 default: 10812 default:
10813 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installPrivileges, "elevated", "limited")); 10813 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installPrivileges, "elevated", "limited"));
10814 break; 10814 break;
10815 } 10815 }
10816 } 10816 }
@@ -10833,7 +10833,7 @@ namespace WixToolset.Core
10833 sourceBits = sourceBits | 8; 10833 sourceBits = sourceBits | 8;
10834 break; 10834 break;
10835 default: 10835 default:
10836 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser")); 10836 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser"));
10837 break; 10837 break;
10838 } 10838 }
10839 } 10839 }
@@ -10851,13 +10851,13 @@ namespace WixToolset.Core
10851 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 10851 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
10852 if ("PUT-COMPANY-NAME-HERE" == packageAuthor) 10852 if ("PUT-COMPANY-NAME-HERE" == packageAuthor)
10853 { 10853 {
10854 this.Core.OnMessage(WixWarnings.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, packageAuthor)); 10854 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, packageAuthor));
10855 } 10855 }
10856 break; 10856 break;
10857 case "Platform": 10857 case "Platform":
10858 if (null != platformValue) 10858 if (null != platformValue)
10859 { 10859 {
10860 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platforms")); 10860 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platforms"));
10861 } 10861 }
10862 10862
10863 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 10863 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -10865,7 +10865,7 @@ namespace WixToolset.Core
10865 switch (platformType) 10865 switch (platformType)
10866 { 10866 {
10867 case Wix.Package.PlatformType.intel: 10867 case Wix.Package.PlatformType.intel:
10868 this.Core.OnMessage(WixWarnings.DeprecatedAttributeValue(sourceLineNumbers, platformValue, node.Name.LocalName, attrib.Name.LocalName, "x86")); 10868 this.Core.Write(WarningMessages.DeprecatedAttributeValue(sourceLineNumbers, platformValue, node.Name.LocalName, attrib.Name.LocalName, "x86"));
10869 goto case Wix.Package.PlatformType.x86; 10869 goto case Wix.Package.PlatformType.x86;
10870 case Wix.Package.PlatformType.x86: 10870 case Wix.Package.PlatformType.x86:
10871 platform = "Intel"; 10871 platform = "Intel";
@@ -10874,7 +10874,7 @@ namespace WixToolset.Core
10874 platform = "x64"; 10874 platform = "x64";
10875 break; 10875 break;
10876 case Wix.Package.PlatformType.intel64: 10876 case Wix.Package.PlatformType.intel64:
10877 this.Core.OnMessage(WixWarnings.DeprecatedAttributeValue(sourceLineNumbers, platformValue, node.Name.LocalName, attrib.Name.LocalName, "ia64")); 10877 this.Core.Write(WarningMessages.DeprecatedAttributeValue(sourceLineNumbers, platformValue, node.Name.LocalName, attrib.Name.LocalName, "ia64"));
10878 goto case Wix.Package.PlatformType.ia64; 10878 goto case Wix.Package.PlatformType.ia64;
10879 case Wix.Package.PlatformType.ia64: 10879 case Wix.Package.PlatformType.ia64:
10880 platform = "Intel64"; 10880 platform = "Intel64";
@@ -10883,17 +10883,17 @@ namespace WixToolset.Core
10883 platform = "Arm"; 10883 platform = "Arm";
10884 break; 10884 break;
10885 default: 10885 default:
10886 this.Core.OnMessage(WixErrors.InvalidPlatformValue(sourceLineNumbers, platformValue)); 10886 this.Core.Write(ErrorMessages.InvalidPlatformValue(sourceLineNumbers, platformValue));
10887 break; 10887 break;
10888 } 10888 }
10889 break; 10889 break;
10890 case "Platforms": 10890 case "Platforms":
10891 if (null != platformValue) 10891 if (null != platformValue)
10892 { 10892 {
10893 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform")); 10893 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform"));
10894 } 10894 }
10895 10895
10896 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform")); 10896 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform"));
10897 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 10897 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
10898 platform = platformValue; 10898 platform = platformValue;
10899 break; 10899 break;
@@ -10923,31 +10923,31 @@ namespace WixToolset.Core
10923 10923
10924 if (installPrivilegeSeen && installScopeSeen) 10924 if (installPrivilegeSeen && installScopeSeen)
10925 { 10925 {
10926 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "InstallPrivileges", "InstallScope")); 10926 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "InstallPrivileges", "InstallScope"));
10927 } 10927 }
10928 10928
10929 if ((0 != String.Compare(platform, "Intel", StringComparison.OrdinalIgnoreCase)) && 200 > msiVersion) 10929 if ((0 != String.Compare(platform, "Intel", StringComparison.OrdinalIgnoreCase)) && 200 > msiVersion)
10930 { 10930 {
10931 msiVersion = 200; 10931 msiVersion = 200;
10932 this.Core.OnMessage(WixWarnings.RequiresMsi200for64bitPackage(sourceLineNumbers)); 10932 this.Core.Write(WarningMessages.RequiresMsi200for64bitPackage(sourceLineNumbers));
10933 } 10933 }
10934 10934
10935 if ((0 == String.Compare(platform, "Arm", StringComparison.OrdinalIgnoreCase)) && 500 > msiVersion) 10935 if ((0 == String.Compare(platform, "Arm", StringComparison.OrdinalIgnoreCase)) && 500 > msiVersion)
10936 { 10936 {
10937 msiVersion = 500; 10937 msiVersion = 500;
10938 this.Core.OnMessage(WixWarnings.RequiresMsi500forArmPackage(sourceLineNumbers)); 10938 this.Core.Write(WarningMessages.RequiresMsi500forArmPackage(sourceLineNumbers));
10939 } 10939 }
10940 10940
10941 if (null == packageAuthor) 10941 if (null == packageAuthor)
10942 { 10942 {
10943 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer")); 10943 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer"));
10944 } 10944 }
10945 10945
10946 if (this.compilingModule) 10946 if (this.compilingModule)
10947 { 10947 {
10948 if (null == packageCode) 10948 if (null == packageCode)
10949 { 10949 {
10950 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 10950 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
10951 } 10951 }
10952 10952
10953 // merge modules use the modularization guid as the package code 10953 // merge modules use the modularization guid as the package code
@@ -10968,7 +10968,7 @@ namespace WixToolset.Core
10968 10968
10969 if ("*" != packageCode) 10969 if ("*" != packageCode)
10970 { 10970 {
10971 this.Core.OnMessage(WixWarnings.PackageCodeSet(sourceLineNumbers)); 10971 this.Core.Write(WarningMessages.PackageCodeSet(sourceLineNumbers));
10972 } 10972 }
10973 } 10973 }
10974 10974
@@ -11101,37 +11101,37 @@ namespace WixToolset.Core
11101 11101
11102 if (YesNoType.NotSet == allowRemoval) 11102 if (YesNoType.NotSet == allowRemoval)
11103 { 11103 {
11104 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "AllowRemoval")); 11104 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "AllowRemoval"));
11105 } 11105 }
11106 11106
11107 if (null == classification) 11107 if (null == classification)
11108 { 11108 {
11109 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Classification")); 11109 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Classification"));
11110 } 11110 }
11111 11111
11112 if (null == description) 11112 if (null == description)
11113 { 11113 {
11114 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description")); 11114 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description"));
11115 } 11115 }
11116 11116
11117 if (null == displayName) 11117 if (null == displayName)
11118 { 11118 {
11119 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayName")); 11119 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayName"));
11120 } 11120 }
11121 11121
11122 if (null == manufacturerName) 11122 if (null == manufacturerName)
11123 { 11123 {
11124 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ManufacturerName")); 11124 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ManufacturerName"));
11125 } 11125 }
11126 11126
11127 if (null == moreInfoUrl) 11127 if (null == moreInfoUrl)
11128 { 11128 {
11129 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MoreInfoURL")); 11129 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MoreInfoURL"));
11130 } 11130 }
11131 11131
11132 if (null == targetProductName) 11132 if (null == targetProductName)
11133 { 11133 {
11134 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TargetProductName")); 11134 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TargetProductName"));
11135 } 11135 }
11136 11136
11137 foreach (XElement child in node.Elements()) 11137 foreach (XElement child in node.Elements())
@@ -11288,17 +11288,17 @@ namespace WixToolset.Core
11288 11288
11289 if (null == company) 11289 if (null == company)
11290 { 11290 {
11291 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Company")); 11291 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Company"));
11292 } 11292 }
11293 11293
11294 if (null == property) 11294 if (null == property)
11295 { 11295 {
11296 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property")); 11296 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property"));
11297 } 11297 }
11298 11298
11299 if (null == value) 11299 if (null == value)
11300 { 11300 {
11301 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 11301 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
11302 } 11302 }
11303 11303
11304 this.Core.ParseForExtensionElements(node); 11304 this.Core.ParseForExtensionElements(node);
@@ -11382,13 +11382,13 @@ namespace WixToolset.Core
11382 switch (attrib.Name.LocalName) 11382 switch (attrib.Name.LocalName)
11383 { 11383 {
11384 case "AdminImage": 11384 case "AdminImage":
11385 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 11385 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
11386 break; 11386 break;
11387 case "Comments": 11387 case "Comments":
11388 comments = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 11388 comments = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
11389 break; 11389 break;
11390 case "Compressed": 11390 case "Compressed":
11391 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 11391 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
11392 break; 11392 break;
11393 case "Description": 11393 case "Description":
11394 packageName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 11394 packageName = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -11397,19 +11397,19 @@ namespace WixToolset.Core
11397 keywords = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 11397 keywords = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
11398 break; 11398 break;
11399 case "Languages": 11399 case "Languages":
11400 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 11400 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
11401 break; 11401 break;
11402 case "Manufacturer": 11402 case "Manufacturer":
11403 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 11403 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
11404 break; 11404 break;
11405 case "Platforms": 11405 case "Platforms":
11406 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 11406 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
11407 break; 11407 break;
11408 case "ReadOnly": 11408 case "ReadOnly":
11409 security = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); 11409 security = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib);
11410 break; 11410 break;
11411 case "ShortNames": 11411 case "ShortNames":
11412 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 11412 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
11413 break; 11413 break;
11414 case "SummaryCodepage": 11414 case "SummaryCodepage":
11415 codepage = this.Core.GetAttributeLocalizableCodePageValue(sourceLineNumbers, attrib); 11415 codepage = this.Core.GetAttributeLocalizableCodePageValue(sourceLineNumbers, attrib);
@@ -11508,7 +11508,7 @@ namespace WixToolset.Core
11508 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 11508 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
11509 string name = null; 11509 string name = null;
11510 11510
11511 this.Core.OnMessage(WixWarnings.DeprecatedIgnoreModularizationElement(sourceLineNumbers)); 11511 this.Core.Write(WarningMessages.DeprecatedIgnoreModularizationElement(sourceLineNumbers));
11512 11512
11513 foreach (XAttribute attrib in node.Attributes()) 11513 foreach (XAttribute attrib in node.Attributes())
11514 { 11514 {
@@ -11535,7 +11535,7 @@ namespace WixToolset.Core
11535 11535
11536 if (null == name) 11536 if (null == name)
11537 { 11537 {
11538 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 11538 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
11539 } 11539 }
11540 11540
11541 this.Core.ParseForExtensionElements(node); 11541 this.Core.ParseForExtensionElements(node);
@@ -11624,12 +11624,12 @@ namespace WixToolset.Core
11624 11624
11625 if (null == user) 11625 if (null == user)
11626 { 11626 {
11627 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "User")); 11627 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "User"));
11628 } 11628 }
11629 11629
11630 if (int.MinValue == permission) // just GENERIC_READ, which is MSI_NULL 11630 if (int.MinValue == permission) // just GENERIC_READ, which is MSI_NULL
11631 { 11631 {
11632 this.Core.OnMessage(WixErrors.GenericReadNotAllowed(sourceLineNumbers)); 11632 this.Core.Write(ErrorMessages.GenericReadNotAllowed(sourceLineNumbers));
11633 } 11633 }
11634 11634
11635 this.Core.ParseForExtensionElements(node); 11635 this.Core.ParseForExtensionElements(node);
@@ -11695,7 +11695,7 @@ namespace WixToolset.Core
11695 11695
11696 if (null == sddl) 11696 if (null == sddl)
11697 { 11697 {
11698 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Sddl")); 11698 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Sddl"));
11699 } 11699 }
11700 11700
11701 if (null == id) 11701 if (null == id)
@@ -11713,7 +11713,7 @@ namespace WixToolset.Core
11713 if (null != condition) 11713 if (null != condition)
11714 { 11714 {
11715 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 11715 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
11716 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 11716 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
11717 } 11717 }
11718 11718
11719 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null); 11719 condition = this.ParseConditionElement(child, node.Name.LocalName, null, null);
@@ -11776,14 +11776,14 @@ namespace WixToolset.Core
11776 manufacturer = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.MustHaveNonWhitespaceCharacters); 11776 manufacturer = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.MustHaveNonWhitespaceCharacters);
11777 if ("PUT-COMPANY-NAME-HERE" == manufacturer) 11777 if ("PUT-COMPANY-NAME-HERE" == manufacturer)
11778 { 11778 {
11779 this.Core.OnMessage(WixWarnings.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, manufacturer)); 11779 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, manufacturer));
11780 } 11780 }
11781 break; 11781 break;
11782 case "Name": 11782 case "Name":
11783 this.activeName = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.MustHaveNonWhitespaceCharacters); 11783 this.activeName = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.MustHaveNonWhitespaceCharacters);
11784 if ("PUT-PRODUCT-NAME-HERE" == this.activeName) 11784 if ("PUT-PRODUCT-NAME-HERE" == this.activeName)
11785 { 11785 {
11786 this.Core.OnMessage(WixWarnings.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName)); 11786 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName));
11787 } 11787 }
11788 break; 11788 break;
11789 case "UpgradeCode": 11789 case "UpgradeCode":
@@ -11809,36 +11809,36 @@ namespace WixToolset.Core
11809 11809
11810 if (null == productCode) 11810 if (null == productCode)
11811 { 11811 {
11812 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 11812 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
11813 } 11813 }
11814 11814
11815 if (null == this.activeLanguage) 11815 if (null == this.activeLanguage)
11816 { 11816 {
11817 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language")); 11817 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language"));
11818 } 11818 }
11819 11819
11820 if (null == manufacturer) 11820 if (null == manufacturer)
11821 { 11821 {
11822 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer")); 11822 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer"));
11823 } 11823 }
11824 11824
11825 if (null == this.activeName) 11825 if (null == this.activeName)
11826 { 11826 {
11827 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 11827 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
11828 } 11828 }
11829 11829
11830 if (null == upgradeCode) 11830 if (null == upgradeCode)
11831 { 11831 {
11832 this.Core.OnMessage(WixWarnings.MissingUpgradeCode(sourceLineNumbers)); 11832 this.Core.Write(WarningMessages.MissingUpgradeCode(sourceLineNumbers));
11833 } 11833 }
11834 11834
11835 if (null == version) 11835 if (null == version)
11836 { 11836 {
11837 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version")); 11837 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version"));
11838 } 11838 }
11839 else if (!CompilerCore.IsValidProductVersion(version)) 11839 else if (!CompilerCore.IsValidProductVersion(version))
11840 { 11840 {
11841 this.Core.OnMessage(WixErrors.InvalidProductVersion(sourceLineNumbers, version)); 11841 this.Core.Write(ErrorMessages.InvalidProductVersion(sourceLineNumbers, version));
11842 } 11842 }
11843 11843
11844 if (this.Core.EncounteredError) 11844 if (this.Core.EncounteredError)
@@ -12079,7 +12079,7 @@ namespace WixToolset.Core
12079 12079
12080 if ((YesNoType.No == advertise && YesNoType.Yes == progIdAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == progIdAdvertise)) 12080 if ((YesNoType.No == advertise && YesNoType.Yes == progIdAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == progIdAdvertise))
12081 { 12081 {
12082 this.Core.OnMessage(WixErrors.AdvertiseStateMustMatch(sourceLineNumbers, advertise.ToString(), progIdAdvertise.ToString())); 12082 this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, advertise.ToString(), progIdAdvertise.ToString()));
12083 } 12083 }
12084 else 12084 else
12085 { 12085 {
@@ -12093,7 +12093,7 @@ namespace WixToolset.Core
12093 12093
12094 if (null != parent && (null != icon || CompilerConstants.IntegerNotSet != iconIndex)) 12094 if (null != parent && (null != icon || CompilerConstants.IntegerNotSet != iconIndex))
12095 { 12095 {
12096 this.Core.OnMessage(WixErrors.VersionIndependentProgIdsCannotHaveIcons(sourceLineNumbers)); 12096 this.Core.Write(ErrorMessages.VersionIndependentProgIdsCannotHaveIcons(sourceLineNumbers));
12097 } 12097 }
12098 12098
12099 YesNoType firstProgIdForNestedClass = YesNoType.Yes; 12099 YesNoType firstProgIdForNestedClass = YesNoType.Yes;
@@ -12125,7 +12125,7 @@ namespace WixToolset.Core
12125 else 12125 else
12126 { 12126 {
12127 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 12127 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
12128 this.Core.OnMessage(WixErrors.ProgIdNestedTooDeep(childSourceLineNumbers)); 12128 this.Core.Write(ErrorMessages.ProgIdNestedTooDeep(childSourceLineNumbers));
12129 } 12129 }
12130 break; 12130 break;
12131 default: 12131 default:
@@ -12209,7 +12209,7 @@ namespace WixToolset.Core
12209 // raise an error for an orphaned ProgId 12209 // raise an error for an orphaned ProgId
12210 if (YesNoType.Yes == advertise && !foundExtension && null == parent && null == classId) 12210 if (YesNoType.Yes == advertise && !foundExtension && null == parent && null == classId)
12211 { 12211 {
12212 this.Core.OnMessage(WixWarnings.OrphanedProgId(sourceLineNumbers, progId)); 12212 this.Core.Write(WarningMessages.OrphanedProgId(sourceLineNumbers, progId));
12213 } 12213 }
12214 12214
12215 return progId; 12215 return progId;
@@ -12270,16 +12270,16 @@ namespace WixToolset.Core
12270 12270
12271 if (null == id) 12271 if (null == id)
12272 { 12272 {
12273 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 12273 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
12274 id = Identifier.Invalid; 12274 id = Identifier.Invalid;
12275 } 12275 }
12276 else if ("ProductID" == id.Id) 12276 else if ("ProductID" == id.Id)
12277 { 12277 {
12278 this.Core.OnMessage(WixWarnings.ProductIdAuthored(sourceLineNumbers)); 12278 this.Core.Write(WarningMessages.ProductIdAuthored(sourceLineNumbers));
12279 } 12279 }
12280 else if ("SecureCustomProperties" == id.Id || "AdminProperties" == id.Id || "MsiHiddenProperties" == id.Id) 12280 else if ("SecureCustomProperties" == id.Id || "AdminProperties" == id.Id || "MsiHiddenProperties" == id.Id)
12281 { 12281 {
12282 this.Core.OnMessage(WixErrors.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id)); 12282 this.Core.Write(ErrorMessages.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id));
12283 } 12283 }
12284 12284
12285 string innerText = this.Core.GetTrimmedInnerText(node); 12285 string innerText = this.Core.GetTrimmedInnerText(node);
@@ -12288,7 +12288,7 @@ namespace WixToolset.Core
12288 // cannot specify both the value attribute and inner text 12288 // cannot specify both the value attribute and inner text
12289 if (!String.IsNullOrEmpty(innerText)) 12289 if (!String.IsNullOrEmpty(innerText))
12290 { 12290 {
12291 this.Core.OnMessage(WixErrors.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value")); 12291 this.Core.Write(ErrorMessages.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value"));
12292 } 12292 }
12293 } 12293 }
12294 else // value attribute not specified, use inner text if any. 12294 else // value attribute not specified, use inner text if any.
@@ -12326,7 +12326,7 @@ namespace WixToolset.Core
12326 // If we're doing CCP then there must be a signature. 12326 // If we're doing CCP then there must be a signature.
12327 if (complianceCheck && 0 == signatures.Count) 12327 if (complianceCheck && 0 == signatures.Count)
12328 { 12328 {
12329 this.Core.OnMessage(WixErrors.SearchElementRequiredWithAttribute(sourceLineNumbers, node.Name.LocalName, "ComplianceCheck", "yes")); 12329 this.Core.Write(ErrorMessages.SearchElementRequiredWithAttribute(sourceLineNumbers, node.Name.LocalName, "ComplianceCheck", "yes"));
12330 } 12330 }
12331 12331
12332 foreach (string sig in signatures) 12332 foreach (string sig in signatures)
@@ -12350,7 +12350,7 @@ namespace WixToolset.Core
12350 // the element. 12350 // the element.
12351 if (String.IsNullOrEmpty(value) && !admin && !secure && !hidden) 12351 if (String.IsNullOrEmpty(value) && !admin && !secure && !hidden)
12352 { 12352 {
12353 this.Core.OnMessage(WixWarnings.PropertyUseless(sourceLineNumbers, id.Id)); 12353 this.Core.Write(WarningMessages.PropertyUseless(sourceLineNumbers, id.Id));
12354 } 12354 }
12355 else // there is a value and/or a flag set, do that. 12355 else // there is a value and/or a flag set, do that.
12356 { 12356 {
@@ -12360,7 +12360,7 @@ namespace WixToolset.Core
12360 12360
12361 if (!this.Core.EncounteredError && YesNoType.Yes == suppressModularization) 12361 if (!this.Core.EncounteredError && YesNoType.Yes == suppressModularization)
12362 { 12362 {
12363 this.Core.OnMessage(WixWarnings.PropertyModularizationSuppressed(sourceLineNumbers)); 12363 this.Core.Write(WarningMessages.PropertyModularizationSuppressed(sourceLineNumbers));
12364 12364
12365 this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.WixSuppressModularization, id); 12365 this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.WixSuppressModularization, id);
12366 } 12366 }
@@ -12402,7 +12402,7 @@ namespace WixToolset.Core
12402 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); 12402 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
12403 break; 12403 break;
12404 case "Action": 12404 case "Action":
12405 this.Core.OnMessage(WixWarnings.DeprecatedRegistryKeyActionAttribute(sourceLineNumbers)); 12405 this.Core.Write(WarningMessages.DeprecatedRegistryKeyActionAttribute(sourceLineNumbers));
12406 action = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 12406 action = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
12407 if (0 < action.Length) 12407 if (0 < action.Length)
12408 { 12408 {
@@ -12419,7 +12419,7 @@ namespace WixToolset.Core
12419 case Wix.RegistryKey.ActionType.none: 12419 case Wix.RegistryKey.ActionType.none:
12420 break; 12420 break;
12421 default: 12421 default:
12422 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "create", "createAndRemoveOnUninstall", "none")); 12422 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "create", "createAndRemoveOnUninstall", "none"));
12423 break; 12423 break;
12424 } 12424 }
12425 } 12425 }
@@ -12440,7 +12440,7 @@ namespace WixToolset.Core
12440 case "Root": 12440 case "Root":
12441 if (CompilerConstants.IntegerNotSet != root) 12441 if (CompilerConstants.IntegerNotSet != root)
12442 { 12442 {
12443 this.Core.OnMessage(WixErrors.RegistryRootInvalid(sourceLineNumbers)); 12443 this.Core.Write(ErrorMessages.RegistryRootInvalid(sourceLineNumbers));
12444 } 12444 }
12445 12445
12446 root = this.Core.GetAttributeMsidbRegistryRootValue(sourceLineNumbers, attrib, true); 12446 root = this.Core.GetAttributeMsidbRegistryRootValue(sourceLineNumbers, attrib, true);
@@ -12470,19 +12470,19 @@ namespace WixToolset.Core
12470 { 12470 {
12471 if (null != id) 12471 if (null != id)
12472 { 12472 {
12473 this.Core.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Id", "ForceCreateOnInstall", "ForceDeleteOnUninstall", "yes", true)); 12473 this.Core.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.LocalName, "Id", "ForceCreateOnInstall", "ForceDeleteOnUninstall", "yes", true));
12474 } 12474 }
12475 } 12475 }
12476 12476
12477 if (CompilerConstants.IntegerNotSet == root) 12477 if (CompilerConstants.IntegerNotSet == root)
12478 { 12478 {
12479 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root")); 12479 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root"));
12480 root = CompilerConstants.IllegalInteger; 12480 root = CompilerConstants.IllegalInteger;
12481 } 12481 }
12482 12482
12483 if (null == key) 12483 if (null == key)
12484 { 12484 {
12485 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 12485 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
12486 key = String.Empty; // set the key to something to prevent null reference exceptions 12486 key = String.Empty; // set the key to something to prevent null reference exceptions
12487 } 12487 }
12488 12488
@@ -12499,7 +12499,7 @@ namespace WixToolset.Core
12499 { 12499 {
12500 if (YesNoType.Yes == keyPath) 12500 if (YesNoType.Yes == keyPath)
12501 { 12501 {
12502 this.Core.OnMessage(WixErrors.ComponentMultipleKeyPaths(sourceLineNumbers, child.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource")); 12502 this.Core.Write(ErrorMessages.ComponentMultipleKeyPaths(sourceLineNumbers, child.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource"));
12503 } 12503 }
12504 12504
12505 possibleKeyPath = possibleChildKeyPath; // the child is the key path 12505 possibleKeyPath = possibleChildKeyPath; // the child is the key path
@@ -12515,7 +12515,7 @@ namespace WixToolset.Core
12515 { 12515 {
12516 if (YesNoType.Yes == keyPath) 12516 if (YesNoType.Yes == keyPath)
12517 { 12517 {
12518 this.Core.OnMessage(WixErrors.ComponentMultipleKeyPaths(sourceLineNumbers, child.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource")); 12518 this.Core.Write(ErrorMessages.ComponentMultipleKeyPaths(sourceLineNumbers, child.Name.LocalName, "KeyPath", "yes", "File", "RegistryValue", "ODBCDataSource"));
12519 } 12519 }
12520 12520
12521 possibleKeyPath = possibleChildKeyPath; // the child is the key path 12521 possibleKeyPath = possibleChildKeyPath; // the child is the key path
@@ -12529,14 +12529,14 @@ namespace WixToolset.Core
12529 case "Permission": 12529 case "Permission":
12530 if (!forceCreateOnInstall) 12530 if (!forceCreateOnInstall)
12531 { 12531 {
12532 this.Core.OnMessage(WixErrors.UnexpectedElementWithAttributeValue(sourceLineNumbers, node.Name.LocalName, child.Name.LocalName, "ForceCreateOnInstall", "yes")); 12532 this.Core.Write(ErrorMessages.UnexpectedElementWithAttributeValue(sourceLineNumbers, node.Name.LocalName, child.Name.LocalName, "ForceCreateOnInstall", "yes"));
12533 } 12533 }
12534 this.ParsePermissionElement(child, id.Id, "Registry"); 12534 this.ParsePermissionElement(child, id.Id, "Registry");
12535 break; 12535 break;
12536 case "PermissionEx": 12536 case "PermissionEx":
12537 if (!forceCreateOnInstall) 12537 if (!forceCreateOnInstall)
12538 { 12538 {
12539 this.Core.OnMessage(WixErrors.UnexpectedElementWithAttributeValue(sourceLineNumbers, node.Name.LocalName, child.Name.LocalName, "ForceCreateOnInstall", "yes")); 12539 this.Core.Write(ErrorMessages.UnexpectedElementWithAttributeValue(sourceLineNumbers, node.Name.LocalName, child.Name.LocalName, "ForceCreateOnInstall", "yes"));
12540 } 12540 }
12541 this.ParsePermissionExElement(child, id.Id, "Registry"); 12541 this.ParsePermissionExElement(child, id.Id, "Registry");
12542 break; 12542 break;
@@ -12610,7 +12610,7 @@ namespace WixToolset.Core
12610 { 12610 {
12611 if (!Wix.RegistryValue.TryParseActionType(action, out actionType)) 12611 if (!Wix.RegistryValue.TryParseActionType(action, out actionType))
12612 { 12612 {
12613 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "append", "prepend", "write")); 12613 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "append", "prepend", "write"));
12614 } 12614 }
12615 } 12615 }
12616 break; 12616 break;
@@ -12637,7 +12637,7 @@ namespace WixToolset.Core
12637 case "Root": 12637 case "Root":
12638 if (CompilerConstants.IntegerNotSet != root) 12638 if (CompilerConstants.IntegerNotSet != root)
12639 { 12639 {
12640 this.Core.OnMessage(WixErrors.RegistryRootInvalid(sourceLineNumbers)); 12640 this.Core.Write(ErrorMessages.RegistryRootInvalid(sourceLineNumbers));
12641 } 12641 }
12642 12642
12643 root = this.Core.GetAttributeMsidbRegistryRootValue(sourceLineNumbers, attrib, true); 12643 root = this.Core.GetAttributeMsidbRegistryRootValue(sourceLineNumbers, attrib, true);
@@ -12648,7 +12648,7 @@ namespace WixToolset.Core
12648 { 12648 {
12649 if (!Wix.RegistryValue.TryParseTypeType(type, out typeType)) 12649 if (!Wix.RegistryValue.TryParseTypeType(type, out typeType))
12650 { 12650 {
12651 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, type, "binary", "expandable", "integer", "multiString", "string")); 12651 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, type, "binary", "expandable", "integer", "multiString", "string"));
12652 } 12652 }
12653 } 12653 }
12654 break; 12654 break;
@@ -12675,22 +12675,22 @@ namespace WixToolset.Core
12675 if ((Wix.RegistryValue.ActionType.append == actionType || Wix.RegistryValue.ActionType.prepend == actionType) && 12675 if ((Wix.RegistryValue.ActionType.append == actionType || Wix.RegistryValue.ActionType.prepend == actionType) &&
12676 Wix.RegistryValue.TypeType.multiString != typeType) 12676 Wix.RegistryValue.TypeType.multiString != typeType)
12677 { 12677 {
12678 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Action", action, "Type", "multiString")); 12678 this.Core.Write(ErrorMessages.IllegalAttributeValueWithoutOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Action", action, "Type", "multiString"));
12679 } 12679 }
12680 12680
12681 if (null == key) 12681 if (null == key)
12682 { 12682 {
12683 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 12683 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
12684 } 12684 }
12685 12685
12686 if (CompilerConstants.IntegerNotSet == root) 12686 if (CompilerConstants.IntegerNotSet == root)
12687 { 12687 {
12688 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root")); 12688 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root"));
12689 } 12689 }
12690 12690
12691 if (null == type) 12691 if (null == type)
12692 { 12692 {
12693 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type")); 12693 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type"));
12694 } 12694 }
12695 12695
12696 foreach (XElement child in node.Elements()) 12696 foreach (XElement child in node.Elements())
@@ -12702,7 +12702,7 @@ namespace WixToolset.Core
12702 case "MultiStringValue": 12702 case "MultiStringValue":
12703 if (Wix.RegistryValue.TypeType.multiString != typeType && null != value) 12703 if (Wix.RegistryValue.TypeType.multiString != typeType && null != value)
12704 { 12704 {
12705 this.Core.OnMessage(WixErrors.RegistryMultipleValuesWithoutMultiString(sourceLineNumbers, node.Name.LocalName, "Value", child.Name.LocalName, "Type")); 12705 this.Core.Write(ErrorMessages.RegistryMultipleValuesWithoutMultiString(sourceLineNumbers, node.Name.LocalName, "Value", child.Name.LocalName, "Type"));
12706 } 12706 }
12707 else if (null == value) 12707 else if (null == value)
12708 { 12708 {
@@ -12773,11 +12773,11 @@ namespace WixToolset.Core
12773 // value may be set by child MultiStringValue elements, so it must be checked here 12773 // value may be set by child MultiStringValue elements, so it must be checked here
12774 if (null == value) 12774 if (null == value)
12775 { 12775 {
12776 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 12776 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
12777 } 12777 }
12778 else if (0 == value.Length && ("+" == name || "-" == name || "*" == name)) // prevent accidental authoring of special name values 12778 else if (0 == value.Length && ("+" == name || "-" == name || "*" == name)) // prevent accidental authoring of special name values
12779 { 12779 {
12780 this.Core.OnMessage(WixErrors.RegistryNameValueIncorrect(sourceLineNumbers, node.Name.LocalName, "Name", name)); 12780 this.Core.Write(ErrorMessages.RegistryNameValueIncorrect(sourceLineNumbers, node.Name.LocalName, "Name", name));
12781 } 12781 }
12782 12782
12783 if (!this.Core.EncounteredError) 12783 if (!this.Core.EncounteredError)
@@ -12834,7 +12834,7 @@ namespace WixToolset.Core
12834 { 12834 {
12835 if (!Wix.RemoveRegistryKey.TryParseActionType(action, out actionType)) 12835 if (!Wix.RemoveRegistryKey.TryParseActionType(action, out actionType))
12836 { 12836 {
12837 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "removeOnInstall", "removeOnUninstall")); 12837 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, action, "removeOnInstall", "removeOnUninstall"));
12838 } 12838 }
12839 } 12839 }
12840 break; 12840 break;
@@ -12863,17 +12863,17 @@ namespace WixToolset.Core
12863 12863
12864 if (null == action) 12864 if (null == action)
12865 { 12865 {
12866 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); 12866 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
12867 } 12867 }
12868 12868
12869 if (null == key) 12869 if (null == key)
12870 { 12870 {
12871 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 12871 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
12872 } 12872 }
12873 12873
12874 if (CompilerConstants.IntegerNotSet == root) 12874 if (CompilerConstants.IntegerNotSet == root)
12875 { 12875 {
12876 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root")); 12876 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root"));
12877 } 12877 }
12878 12878
12879 this.Core.ParseForExtensionElements(node); 12879 this.Core.ParseForExtensionElements(node);
@@ -12949,12 +12949,12 @@ namespace WixToolset.Core
12949 12949
12950 if (null == key) 12950 if (null == key)
12951 { 12951 {
12952 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 12952 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
12953 } 12953 }
12954 12954
12955 if (CompilerConstants.IntegerNotSet == root) 12955 if (CompilerConstants.IntegerNotSet == root)
12956 { 12956 {
12957 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root")); 12957 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Root"));
12958 } 12958 }
12959 12959
12960 this.Core.ParseForExtensionElements(node); 12960 this.Core.ParseForExtensionElements(node);
@@ -13037,7 +13037,7 @@ namespace WixToolset.Core
13037 13037
13038 if (null == name) 13038 if (null == name)
13039 { 13039 {
13040 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 13040 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
13041 } 13041 }
13042 else if (0 < name.Length) 13042 else if (0 < name.Length)
13043 { 13043 {
@@ -13050,7 +13050,7 @@ namespace WixToolset.Core
13050 } 13050 }
13051 else 13051 else
13052 { 13052 {
13053 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName")); 13053 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName"));
13054 } 13054 }
13055 } 13055 }
13056 else if (null == shortName) // generate a short file name. 13056 else if (null == shortName) // generate a short file name.
@@ -13061,13 +13061,13 @@ namespace WixToolset.Core
13061 13061
13062 if (CompilerConstants.IntegerNotSet == on) 13062 if (CompilerConstants.IntegerNotSet == on)
13063 { 13063 {
13064 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "On")); 13064 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "On"));
13065 on = CompilerConstants.IllegalInteger; 13065 on = CompilerConstants.IllegalInteger;
13066 } 13066 }
13067 13067
13068 if (null != directory && null != property) 13068 if (null != directory && null != property)
13069 { 13069 {
13070 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "Directory", directory)); 13070 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "Directory", directory));
13071 } 13071 }
13072 13072
13073 if (null == id) 13073 if (null == id)
@@ -13158,13 +13158,13 @@ namespace WixToolset.Core
13158 13158
13159 if (CompilerConstants.IntegerNotSet == on) 13159 if (CompilerConstants.IntegerNotSet == on)
13160 { 13160 {
13161 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "On")); 13161 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "On"));
13162 on = CompilerConstants.IllegalInteger; 13162 on = CompilerConstants.IllegalInteger;
13163 } 13163 }
13164 13164
13165 if (null != directory && null != property) 13165 if (null != directory && null != property)
13166 { 13166 {
13167 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "Directory", directory)); 13167 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "Directory", directory));
13168 } 13168 }
13169 13169
13170 if (null == id) 13170 if (null == id)
@@ -13244,12 +13244,12 @@ namespace WixToolset.Core
13244 13244
13245 if (CompilerConstants.IntegerNotSet == runFromSource) 13245 if (CompilerConstants.IntegerNotSet == runFromSource)
13246 { 13246 {
13247 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RunFromSource")); 13247 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RunFromSource"));
13248 } 13248 }
13249 13249
13250 if (CompilerConstants.IntegerNotSet == runLocal) 13250 if (CompilerConstants.IntegerNotSet == runLocal)
13251 { 13251 {
13252 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RunLocal")); 13252 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "RunLocal"));
13253 } 13253 }
13254 13254
13255 this.Core.ParseForExtensionElements(node); 13255 this.Core.ParseForExtensionElements(node);
@@ -13395,22 +13395,22 @@ namespace WixToolset.Core
13395 13395
13396 if (customAction && "Custom" == actionName) 13396 if (customAction && "Custom" == actionName)
13397 { 13397 {
13398 this.Core.OnMessage(WixErrors.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action")); 13398 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action"));
13399 } 13399 }
13400 else if (showDialog && "Show" == actionName) 13400 else if (showDialog && "Show" == actionName)
13401 { 13401 {
13402 this.Core.OnMessage(WixErrors.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Dialog")); 13402 this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Dialog"));
13403 } 13403 }
13404 13404
13405 if (CompilerConstants.IntegerNotSet != sequence) 13405 if (CompilerConstants.IntegerNotSet != sequence)
13406 { 13406 {
13407 if (CompilerConstants.IntegerNotSet != exitSequence) 13407 if (CompilerConstants.IntegerNotSet != exitSequence)
13408 { 13408 {
13409 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "Sequence", "OnExit")); 13409 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "Sequence", "OnExit"));
13410 } 13410 }
13411 else if (null != beforeAction || null != afterAction) 13411 else if (null != beforeAction || null != afterAction)
13412 { 13412 {
13413 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "Sequence", "Before", "After")); 13413 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "Sequence", "Before", "After"));
13414 } 13414 }
13415 } 13415 }
13416 else // sequence not specified use OnExit (which may also be not set). 13416 else // sequence not specified use OnExit (which may also be not set).
@@ -13420,33 +13420,33 @@ namespace WixToolset.Core
13420 13420
13421 if (null != beforeAction && null != afterAction) 13421 if (null != beforeAction && null != afterAction)
13422 { 13422 {
13423 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "After", "Before")); 13423 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "After", "Before"));
13424 } 13424 }
13425 else if ((customAction || showDialog || specialAction) && !suppress && CompilerConstants.IntegerNotSet == sequence && null == beforeAction && null == afterAction) 13425 else if ((customAction || showDialog || specialAction) && !suppress && CompilerConstants.IntegerNotSet == sequence && null == beforeAction && null == afterAction)
13426 { 13426 {
13427 this.Core.OnMessage(WixErrors.NeedSequenceBeforeOrAfter(childSourceLineNumbers, child.Name.LocalName)); 13427 this.Core.Write(ErrorMessages.NeedSequenceBeforeOrAfter(childSourceLineNumbers, child.Name.LocalName));
13428 } 13428 }
13429 13429
13430 // action that is scheduled to occur before/after itself 13430 // action that is scheduled to occur before/after itself
13431 if (beforeAction == actionName) 13431 if (beforeAction == actionName)
13432 { 13432 {
13433 this.Core.OnMessage(WixErrors.ActionScheduledRelativeToItself(childSourceLineNumbers, child.Name.LocalName, "Before", beforeAction)); 13433 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(childSourceLineNumbers, child.Name.LocalName, "Before", beforeAction));
13434 } 13434 }
13435 else if (afterAction == actionName) 13435 else if (afterAction == actionName)
13436 { 13436 {
13437 this.Core.OnMessage(WixErrors.ActionScheduledRelativeToItself(childSourceLineNumbers, child.Name.LocalName, "After", afterAction)); 13437 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(childSourceLineNumbers, child.Name.LocalName, "After", afterAction));
13438 } 13438 }
13439 13439
13440 // normal standard actions cannot be set overridable by the user (since they are overridable by default) 13440 // normal standard actions cannot be set overridable by the user (since they are overridable by default)
13441 if (overridable && WindowsInstallerStandard.IsStandardAction(actionName) && !specialAction) 13441 if (overridable && WindowsInstallerStandard.IsStandardAction(actionName) && !specialAction)
13442 { 13442 {
13443 this.Core.OnMessage(WixErrors.UnexpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Overridable")); 13443 this.Core.Write(ErrorMessages.UnexpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Overridable"));
13444 } 13444 }
13445 13445
13446 // suppress cannot be specified at the same time as Before, After, or Sequence 13446 // suppress cannot be specified at the same time as Before, After, or Sequence
13447 if (suppress && (null != afterAction || null != beforeAction || CompilerConstants.IntegerNotSet != sequence || overridable)) 13447 if (suppress && (null != afterAction || null != beforeAction || CompilerConstants.IntegerNotSet != sequence || overridable))
13448 { 13448 {
13449 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(childSourceLineNumbers, child.Name.LocalName, "Suppress", "Before", "After", "Sequence", "Overridable")); 13449 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(childSourceLineNumbers, child.Name.LocalName, "Suppress", "Before", "After", "Sequence", "Overridable"));
13450 } 13450 }
13451 13451
13452 this.Core.ParseForExtensionElements(child); 13452 this.Core.ParseForExtensionElements(child);
@@ -13497,7 +13497,7 @@ namespace WixToolset.Core
13497 string requiredPrivileges = null; 13497 string requiredPrivileges = null;
13498 string sid = null; 13498 string sid = null;
13499 13499
13500 this.Core.OnMessage(WixWarnings.ServiceConfigFamilyNotSupported(sourceLineNumbers, node.Name.LocalName)); 13500 this.Core.Write(WarningMessages.ServiceConfigFamilyNotSupported(sourceLineNumbers, node.Name.LocalName));
13501 13501
13502 foreach (XAttribute attrib in node.Attributes()) 13502 foreach (XAttribute attrib in node.Attributes())
13503 { 13503 {
@@ -13574,7 +13574,7 @@ namespace WixToolset.Core
13574 case "ServiceName": 13574 case "ServiceName":
13575 if (!String.IsNullOrEmpty(serviceName)) 13575 if (!String.IsNullOrEmpty(serviceName))
13576 { 13576 {
13577 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ServiceInstall")); 13577 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ServiceInstall"));
13578 } 13578 }
13579 13579
13580 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 13580 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -13752,7 +13752,7 @@ namespace WixToolset.Core
13752 13752
13753 if (String.IsNullOrEmpty(name)) 13753 if (String.IsNullOrEmpty(name))
13754 { 13754 {
13755 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ServiceName")); 13755 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ServiceName"));
13756 } 13756 }
13757 else if (null == id) 13757 else if (null == id)
13758 { 13758 {
@@ -13761,12 +13761,12 @@ namespace WixToolset.Core
13761 13761
13762 if (0 == events) 13762 if (0 == events)
13763 { 13763 {
13764 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "OnInstall", "OnReinstall", "OnUninstall")); 13764 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "OnInstall", "OnReinstall", "OnUninstall"));
13765 } 13765 }
13766 13766
13767 if (String.IsNullOrEmpty(delayedAutoStart) && String.IsNullOrEmpty(failureActionsWhen) && String.IsNullOrEmpty(preShutdownDelay) && String.IsNullOrEmpty(requiredPrivileges) && String.IsNullOrEmpty(sid)) 13767 if (String.IsNullOrEmpty(delayedAutoStart) && String.IsNullOrEmpty(failureActionsWhen) && String.IsNullOrEmpty(preShutdownDelay) && String.IsNullOrEmpty(requiredPrivileges) && String.IsNullOrEmpty(sid))
13768 { 13768 {
13769 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "DelayedAutoStart", "FailureActionsWhen", "PreShutdownDelay", "ServiceSid", "RequiredPrivilege")); 13769 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "DelayedAutoStart", "FailureActionsWhen", "PreShutdownDelay", "ServiceSid", "RequiredPrivilege"));
13770 } 13770 }
13771 13771
13772 if (!this.Core.EncounteredError) 13772 if (!this.Core.EncounteredError)
@@ -13841,7 +13841,7 @@ namespace WixToolset.Core
13841 string actions = null; 13841 string actions = null;
13842 string actionsDelays = null; 13842 string actionsDelays = null;
13843 13843
13844 this.Core.OnMessage(WixWarnings.ServiceConfigFamilyNotSupported(sourceLineNumbers, node.Name.LocalName)); 13844 this.Core.Write(WarningMessages.ServiceConfigFamilyNotSupported(sourceLineNumbers, node.Name.LocalName));
13845 13845
13846 foreach (XAttribute attrib in node.Attributes()) 13846 foreach (XAttribute attrib in node.Attributes())
13847 { 13847 {
@@ -13885,7 +13885,7 @@ namespace WixToolset.Core
13885 case "ServiceName": 13885 case "ServiceName":
13886 if (!String.IsNullOrEmpty(serviceName)) 13886 if (!String.IsNullOrEmpty(serviceName))
13887 { 13887 {
13888 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ServiceInstall")); 13888 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ServiceInstall"));
13889 } 13889 }
13890 13890
13891 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 13891 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -13952,12 +13952,12 @@ namespace WixToolset.Core
13952 13952
13953 if (String.IsNullOrEmpty(action)) 13953 if (String.IsNullOrEmpty(action))
13954 { 13954 {
13955 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, child.Name.LocalName, "Action")); 13955 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, child.Name.LocalName, "Action"));
13956 } 13956 }
13957 13957
13958 if (String.IsNullOrEmpty(delay)) 13958 if (String.IsNullOrEmpty(delay))
13959 { 13959 {
13960 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, child.Name.LocalName, "Delay")); 13960 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, child.Name.LocalName, "Delay"));
13961 } 13961 }
13962 13962
13963 if (!String.IsNullOrEmpty(actions)) 13963 if (!String.IsNullOrEmpty(actions))
@@ -13985,7 +13985,7 @@ namespace WixToolset.Core
13985 13985
13986 if (String.IsNullOrEmpty(name)) 13986 if (String.IsNullOrEmpty(name))
13987 { 13987 {
13988 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ServiceName")); 13988 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ServiceName"));
13989 } 13989 }
13990 else if (null == id) 13990 else if (null == id)
13991 { 13991 {
@@ -13994,7 +13994,7 @@ namespace WixToolset.Core
13994 13994
13995 if (0 == events) 13995 if (0 == events)
13996 { 13996 {
13997 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "OnInstall", "OnReinstall", "OnUninstall")); 13997 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "OnInstall", "OnReinstall", "OnUninstall"));
13998 } 13998 }
13999 13999
14000 if (!this.Core.EncounteredError) 14000 if (!this.Core.EncounteredError)
@@ -14106,7 +14106,7 @@ namespace WixToolset.Core
14106 14106
14107 if (null == name) 14107 if (null == name)
14108 { 14108 {
14109 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 14109 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
14110 } 14110 }
14111 14111
14112 // get the ServiceControl arguments 14112 // get the ServiceControl arguments
@@ -14184,7 +14184,7 @@ namespace WixToolset.Core
14184 14184
14185 if (null == dependency) 14185 if (null == dependency)
14186 { 14186 {
14187 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 14187 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
14188 } 14188 }
14189 14189
14190 this.Core.ParseForExtensionElements(node); 14190 this.Core.ParseForExtensionElements(node);
@@ -14255,7 +14255,7 @@ namespace WixToolset.Core
14255 errorbits |= MsiInterop.MsidbServiceInstallErrorCritical; 14255 errorbits |= MsiInterop.MsidbServiceInstallErrorCritical;
14256 break; 14256 break;
14257 default: 14257 default:
14258 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, errorControlValue, "ignore", "normal", "critical")); 14258 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, errorControlValue, "ignore", "normal", "critical"));
14259 break; 14259 break;
14260 } 14260 }
14261 } 14261 }
@@ -14293,10 +14293,10 @@ namespace WixToolset.Core
14293 break; 14293 break;
14294 case Wix.ServiceInstall.StartType.boot: 14294 case Wix.ServiceInstall.StartType.boot:
14295 case Wix.ServiceInstall.StartType.system: 14295 case Wix.ServiceInstall.StartType.system:
14296 this.Core.OnMessage(WixErrors.ValueNotSupported(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, startValue)); 14296 this.Core.Write(ErrorMessages.ValueNotSupported(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, startValue));
14297 break; 14297 break;
14298 default: 14298 default:
14299 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, startValue, "auto", "demand", "disabled")); 14299 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, startValue, "auto", "demand", "disabled"));
14300 break; 14300 break;
14301 } 14301 }
14302 } 14302 }
@@ -14316,10 +14316,10 @@ namespace WixToolset.Core
14316 break; 14316 break;
14317 case Wix.ServiceInstall.TypeType.kernelDriver: 14317 case Wix.ServiceInstall.TypeType.kernelDriver:
14318 case Wix.ServiceInstall.TypeType.systemDriver: 14318 case Wix.ServiceInstall.TypeType.systemDriver:
14319 this.Core.OnMessage(WixErrors.ValueNotSupported(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue)); 14319 this.Core.Write(ErrorMessages.ValueNotSupported(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue));
14320 break; 14320 break;
14321 default: 14321 default:
14322 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, node.Name.LocalName, typeValue, "ownProcess", "shareProcess")); 14322 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, node.Name.LocalName, typeValue, "ownProcess", "shareProcess"));
14323 break; 14323 break;
14324 } 14324 }
14325 } 14325 }
@@ -14343,7 +14343,7 @@ namespace WixToolset.Core
14343 14343
14344 if (String.IsNullOrEmpty(name)) 14344 if (String.IsNullOrEmpty(name))
14345 { 14345 {
14346 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 14346 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
14347 } 14347 }
14348 else if (null == id) 14348 else if (null == id)
14349 { 14349 {
@@ -14352,7 +14352,7 @@ namespace WixToolset.Core
14352 14352
14353 if (0 == startType) 14353 if (0 == startType)
14354 { 14354 {
14355 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Start")); 14355 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Start"));
14356 } 14356 }
14357 14357
14358 if (eraseDescription) 14358 if (eraseDescription)
@@ -14462,7 +14462,7 @@ namespace WixToolset.Core
14462 // default so no work necessary. 14462 // default so no work necessary.
14463 break; 14463 break;
14464 default: 14464 default:
14465 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both")); 14465 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both"));
14466 break; 14466 break;
14467 } 14467 }
14468 } 14468 }
@@ -14485,7 +14485,7 @@ namespace WixToolset.Core
14485 14485
14486 if (null == id) 14486 if (null == id)
14487 { 14487 {
14488 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 14488 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
14489 } 14489 }
14490 else if (String.IsNullOrEmpty(actionName)) 14490 else if (String.IsNullOrEmpty(actionName))
14491 { 14491 {
@@ -14494,7 +14494,7 @@ namespace WixToolset.Core
14494 14494
14495 if (null == value) 14495 if (null == value)
14496 { 14496 {
14497 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 14497 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
14498 } 14498 }
14499 14499
14500 this.Core.ParseForExtensionElements(node); 14500 this.Core.ParseForExtensionElements(node);
@@ -14577,7 +14577,7 @@ namespace WixToolset.Core
14577 // default so no work necessary. 14577 // default so no work necessary.
14578 break; 14578 break;
14579 default: 14579 default:
14580 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both")); 14580 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, sequenceValue, "execute", "ui", "both"));
14581 break; 14581 break;
14582 } 14582 }
14583 } 14583 }
@@ -14600,7 +14600,7 @@ namespace WixToolset.Core
14600 14600
14601 if (null == id) 14601 if (null == id)
14602 { 14602 {
14603 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 14603 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
14604 } 14604 }
14605 else if (String.IsNullOrEmpty(actionName)) 14605 else if (String.IsNullOrEmpty(actionName))
14606 { 14606 {
@@ -14609,16 +14609,16 @@ namespace WixToolset.Core
14609 14609
14610 if (null == value) 14610 if (null == value)
14611 { 14611 {
14612 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 14612 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
14613 } 14613 }
14614 14614
14615 if (null != beforeAction && null != afterAction) 14615 if (null != beforeAction && null != afterAction)
14616 { 14616 {
14617 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "After", "Before")); 14617 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "After", "Before"));
14618 } 14618 }
14619 else if (null == beforeAction && null == afterAction) 14619 else if (null == beforeAction && null == afterAction)
14620 { 14620 {
14621 this.Core.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "After", "Before", "Id")); 14621 this.Core.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "After", "Before", "Id"));
14622 } 14622 }
14623 14623
14624 this.Core.ParseForExtensionElements(node); 14624 this.Core.ParseForExtensionElements(node);
@@ -14629,11 +14629,11 @@ namespace WixToolset.Core
14629 // action that is scheduled to occur before/after itself 14629 // action that is scheduled to occur before/after itself
14630 if (beforeAction == actionName) 14630 if (beforeAction == actionName)
14631 { 14631 {
14632 this.Core.OnMessage(WixErrors.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "Before", beforeAction)); 14632 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "Before", beforeAction));
14633 } 14633 }
14634 else if (afterAction == actionName) 14634 else if (afterAction == actionName)
14635 { 14635 {
14636 this.Core.OnMessage(WixErrors.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "After", afterAction)); 14636 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "After", afterAction));
14637 } 14637 }
14638 14638
14639 var row = this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.CustomAction); 14639 var row = this.Core.CreateRow(sourceLineNumbers, TupleDefinitionType.CustomAction);
@@ -14712,7 +14712,7 @@ namespace WixToolset.Core
14712 14712
14713 if (null == id) 14713 if (null == id)
14714 { 14714 {
14715 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 14715 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
14716 } 14716 }
14717 14717
14718 this.Core.ParseForExtensionElements(node); 14718 this.Core.ParseForExtensionElements(node);
@@ -14767,12 +14767,12 @@ namespace WixToolset.Core
14767 14767
14768 if (null == name) 14768 if (null == name)
14769 { 14769 {
14770 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 14770 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
14771 } 14771 }
14772 14772
14773 if (null == sourceFile) 14773 if (null == sourceFile)
14774 { 14774 {
14775 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 14775 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
14776 } 14776 }
14777 14777
14778 foreach (XElement child in node.Elements()) 14778 foreach (XElement child in node.Elements())
@@ -14785,7 +14785,7 @@ namespace WixToolset.Core
14785 this.ParseSFPCatalogElement(child, ref parentName); 14785 this.ParseSFPCatalogElement(child, ref parentName);
14786 if (null != dependency && parentName == dependency) 14786 if (null != dependency && parentName == dependency)
14787 { 14787 {
14788 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dependency")); 14788 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dependency"));
14789 } 14789 }
14790 dependency = parentName; 14790 dependency = parentName;
14791 break; 14791 break;
@@ -14805,7 +14805,7 @@ namespace WixToolset.Core
14805 14805
14806 if (null == dependency) 14806 if (null == dependency)
14807 { 14807 {
14808 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dependency")); 14808 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dependency"));
14809 } 14809 }
14810 14810
14811 if (!this.Core.EncounteredError) 14811 if (!this.Core.EncounteredError)
@@ -14916,7 +14916,7 @@ namespace WixToolset.Core
14916 show = 7; 14916 show = 7;
14917 break; 14917 break;
14918 default: 14918 default:
14919 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Show", showValue, "normal", "maximized", "minimized")); 14919 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Show", showValue, "normal", "maximized", "minimized"));
14920 show = CompilerConstants.IllegalInteger; 14920 show = CompilerConstants.IllegalInteger;
14921 break; 14921 break;
14922 } 14922 }
@@ -14941,7 +14941,7 @@ namespace WixToolset.Core
14941 14941
14942 if (advertise && null != target) 14942 if (advertise && null != target)
14943 { 14943 {
14944 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "Advertise", "yes")); 14944 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "Advertise", "yes"));
14945 } 14945 }
14946 14946
14947 if (null == directory) 14947 if (null == directory)
@@ -14952,7 +14952,7 @@ namespace WixToolset.Core
14952 } 14952 }
14953 else 14953 else
14954 { 14954 {
14955 this.Core.OnMessage(WixErrors.ExpectedAttributeWhenElementNotUnderElement(sourceLineNumbers, node.Name.LocalName, "Directory", "Component")); 14955 this.Core.Write(ErrorMessages.ExpectedAttributeWhenElementNotUnderElement(sourceLineNumbers, node.Name.LocalName, "Directory", "Component"));
14956 } 14956 }
14957 } 14957 }
14958 14958
@@ -14960,14 +14960,14 @@ namespace WixToolset.Core
14960 { 14960 {
14961 if (CompilerConstants.IntegerNotSet == descriptionResourceId) 14961 if (CompilerConstants.IntegerNotSet == descriptionResourceId)
14962 { 14962 {
14963 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DescriptionResourceDll", "DescriptionResourceId")); 14963 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DescriptionResourceDll", "DescriptionResourceId"));
14964 } 14964 }
14965 } 14965 }
14966 else 14966 else
14967 { 14967 {
14968 if (CompilerConstants.IntegerNotSet != descriptionResourceId) 14968 if (CompilerConstants.IntegerNotSet != descriptionResourceId)
14969 { 14969 {
14970 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DescriptionResourceId", "DescriptionResourceDll")); 14970 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DescriptionResourceId", "DescriptionResourceDll"));
14971 } 14971 }
14972 } 14972 }
14973 14973
@@ -14975,20 +14975,20 @@ namespace WixToolset.Core
14975 { 14975 {
14976 if (CompilerConstants.IntegerNotSet == displayResourceId) 14976 if (CompilerConstants.IntegerNotSet == displayResourceId)
14977 { 14977 {
14978 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayResourceDll", "DisplayResourceId")); 14978 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayResourceDll", "DisplayResourceId"));
14979 } 14979 }
14980 } 14980 }
14981 else 14981 else
14982 { 14982 {
14983 if (CompilerConstants.IntegerNotSet != displayResourceId) 14983 if (CompilerConstants.IntegerNotSet != displayResourceId)
14984 { 14984 {
14985 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayResourceId", "DisplayResourceDll")); 14985 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "DisplayResourceId", "DisplayResourceDll"));
14986 } 14986 }
14987 } 14987 }
14988 14988
14989 if (null == name) 14989 if (null == name)
14990 { 14990 {
14991 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 14991 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
14992 } 14992 }
14993 else if (0 < name.Length) 14993 else if (0 < name.Length)
14994 { 14994 {
@@ -15001,7 +15001,7 @@ namespace WixToolset.Core
15001 } 15001 }
15002 else 15002 else
15003 { 15003 {
15004 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName")); 15004 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", name, "ShortName"));
15005 } 15005 }
15006 } 15006 }
15007 else if (null == shortName) // generate a short file name. 15007 else if (null == shortName) // generate a short file name.
@@ -15012,7 +15012,7 @@ namespace WixToolset.Core
15012 15012
15013 if ("Component" != parentElementLocalName && null != target) 15013 if ("Component" != parentElementLocalName && null != target)
15014 { 15014 {
15015 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Target", parentElementLocalName)); 15015 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Target", parentElementLocalName));
15016 } 15016 }
15017 15017
15018 if (null == id) 15018 if (null == id)
@@ -15053,7 +15053,7 @@ namespace WixToolset.Core
15053 { 15053 {
15054 if (YesNoType.Yes != parentKeyPath && "Component" != parentElementLocalName) 15054 if (YesNoType.Yes != parentKeyPath && "Component" != parentElementLocalName)
15055 { 15055 {
15056 this.Core.OnMessage(WixWarnings.UnclearShortcut(sourceLineNumbers, id.Id, componentId, defaultTarget)); 15056 this.Core.Write(WarningMessages.UnclearShortcut(sourceLineNumbers, id.Id, componentId, defaultTarget));
15057 } 15057 }
15058 row.Set(4, Guid.Empty.ToString("B")); 15058 row.Set(4, Guid.Empty.ToString("B"));
15059 } 15059 }
@@ -15138,7 +15138,7 @@ namespace WixToolset.Core
15138 15138
15139 if (String.IsNullOrEmpty(key)) 15139 if (String.IsNullOrEmpty(key))
15140 { 15140 {
15141 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 15141 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
15142 } 15142 }
15143 else if (null == id) 15143 else if (null == id)
15144 { 15144 {
@@ -15154,13 +15154,13 @@ namespace WixToolset.Core
15154 } 15154 }
15155 else // cannot specify both the value attribute and inner text 15155 else // cannot specify both the value attribute and inner text
15156 { 15156 {
15157 this.Core.OnMessage(WixErrors.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value")); 15157 this.Core.Write(ErrorMessages.IllegalAttributeWithInnerText(sourceLineNumbers, node.Name.LocalName, "Value"));
15158 } 15158 }
15159 } 15159 }
15160 15160
15161 if (String.IsNullOrEmpty(value)) 15161 if (String.IsNullOrEmpty(value))
15162 { 15162 {
15163 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 15163 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
15164 } 15164 }
15165 15165
15166 this.Core.ParseForExtensionElements(node); 15166 this.Core.ParseForExtensionElements(node);
@@ -15265,12 +15265,12 @@ namespace WixToolset.Core
15265 15265
15266 if (null == id) 15266 if (null == id)
15267 { 15267 {
15268 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 15268 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
15269 } 15269 }
15270 15270
15271 if (CompilerConstants.IntegerNotSet == language) 15271 if (CompilerConstants.IntegerNotSet == language)
15272 { 15272 {
15273 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language")); 15273 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language"));
15274 language = CompilerConstants.IllegalInteger; 15274 language = CompilerConstants.IllegalInteger;
15275 } 15275 }
15276 15276
@@ -15334,29 +15334,29 @@ namespace WixToolset.Core
15334 { 15334 {
15335 if (CompilerConstants.LongNotSet != resourceId) 15335 if (CompilerConstants.LongNotSet != resourceId)
15336 { 15336 {
15337 this.Core.OnMessage(WixErrors.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "ResourceId")); 15337 this.Core.Write(ErrorMessages.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "ResourceId"));
15338 } 15338 }
15339 15339
15340 if (0 != flags) 15340 if (0 != flags)
15341 { 15341 {
15342 if (0x1 == (flags & 0x1)) 15342 if (0x1 == (flags & 0x1))
15343 { 15343 {
15344 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Restricted", "Advertise", "yes")); 15344 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Restricted", "Advertise", "yes"));
15345 } 15345 }
15346 15346
15347 if (0x2 == (flags & 0x2)) 15347 if (0x2 == (flags & 0x2))
15348 { 15348 {
15349 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Control", "Advertise", "yes")); 15349 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Control", "Advertise", "yes"));
15350 } 15350 }
15351 15351
15352 if (0x4 == (flags & 0x4)) 15352 if (0x4 == (flags & 0x4))
15353 { 15353 {
15354 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Hidden", "Advertise", "yes")); 15354 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Hidden", "Advertise", "yes"));
15355 } 15355 }
15356 15356
15357 if (0x8 == (flags & 0x8)) 15357 if (0x8 == (flags & 0x8))
15358 { 15358 {
15359 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "HasDiskImage", "Advertise", "yes")); 15359 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "HasDiskImage", "Advertise", "yes"));
15360 } 15360 }
15361 } 15361 }
15362 15362
@@ -15383,17 +15383,17 @@ namespace WixToolset.Core
15383 { 15383 {
15384 if (CompilerConstants.IntegerNotSet != cost && CompilerConstants.IllegalInteger != cost) 15384 if (CompilerConstants.IntegerNotSet != cost && CompilerConstants.IllegalInteger != cost)
15385 { 15385 {
15386 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Cost", "Advertise", "no")); 15386 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Cost", "Advertise", "no"));
15387 } 15387 }
15388 15388
15389 if (null == fileServer) 15389 if (null == fileServer)
15390 { 15390 {
15391 this.Core.OnMessage(WixErrors.MissingTypeLibFile(sourceLineNumbers, node.Name.LocalName, "File")); 15391 this.Core.Write(ErrorMessages.MissingTypeLibFile(sourceLineNumbers, node.Name.LocalName, "File"));
15392 } 15392 }
15393 15393
15394 if (null == registryVersion) 15394 if (null == registryVersion)
15395 { 15395 {
15396 this.Core.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "MajorVersion", "MinorVersion", "Advertise", "no")); 15396 this.Core.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "MajorVersion", "MinorVersion", "Advertise", "no"));
15397 } 15397 }
15398 15398
15399 // HKCR\TypeLib\[ID]\[MajorVersion].[MinorVersion], (Default) = [Description] 15399 // HKCR\TypeLib\[ID]\[MajorVersion].[MinorVersion], (Default) = [Description]
@@ -15443,7 +15443,7 @@ namespace WixToolset.Core
15443 case "BinarySource": 15443 case "BinarySource":
15444 if (null != source) 15444 if (null != source)
15445 { 15445 {
15446 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "FileSource", "PropertySource")); 15446 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "FileSource", "PropertySource"));
15447 } 15447 }
15448 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 15448 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
15449 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeBinaryData; 15449 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeBinaryData;
@@ -15455,7 +15455,7 @@ namespace WixToolset.Core
15455 case "FileSource": 15455 case "FileSource":
15456 if (null != source) 15456 if (null != source)
15457 { 15457 {
15458 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinarySource", "PropertySource")); 15458 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinarySource", "PropertySource"));
15459 } 15459 }
15460 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 15460 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
15461 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeSourceFile; 15461 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeSourceFile;
@@ -15464,7 +15464,7 @@ namespace WixToolset.Core
15464 case "PropertySource": 15464 case "PropertySource":
15465 if (null != source) 15465 if (null != source)
15466 { 15466 {
15467 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinarySource", "FileSource")); 15467 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinarySource", "FileSource"));
15468 } 15468 }
15469 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 15469 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
15470 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeProperty; 15470 type = MsiInterop.MsidbCustomActionTypeExe + MsiInterop.MsidbCustomActionTypeProperty;
@@ -15491,7 +15491,7 @@ namespace WixToolset.Core
15491 15491
15492 if (null == source) 15492 if (null == source)
15493 { 15493 {
15494 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "BinarySource", "FileSource", "PropertySource")); 15494 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "BinarySource", "FileSource", "PropertySource"));
15495 } 15495 }
15496 15496
15497 if (!this.Core.EncounteredError) 15497 if (!this.Core.EncounteredError)
@@ -15556,7 +15556,7 @@ namespace WixToolset.Core
15556 if (0 < embeddedUICount) // there can be only one embedded UI 15556 if (0 < embeddedUICount) // there can be only one embedded UI
15557 { 15557 {
15558 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 15558 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
15559 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 15559 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
15560 } 15560 }
15561 this.ParseEmbeddedUIElement(child); 15561 this.ParseEmbeddedUIElement(child);
15562 ++embeddedUICount; 15562 ++embeddedUICount;
@@ -15582,7 +15582,7 @@ namespace WixToolset.Core
15582 if (RadioButtonType.Bitmap == radioButtonType || RadioButtonType.Icon == radioButtonType) 15582 if (RadioButtonType.Bitmap == radioButtonType || RadioButtonType.Icon == radioButtonType)
15583 { 15583 {
15584 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 15584 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
15585 this.Core.OnMessage(WixErrors.RadioButtonBitmapAndIconDisallowed(childSourceLineNumbers)); 15585 this.Core.Write(ErrorMessages.RadioButtonBitmapAndIconDisallowed(childSourceLineNumbers));
15586 } 15586 }
15587 break; 15587 break;
15588 case "TextStyle": 15588 case "TextStyle":
@@ -15655,7 +15655,7 @@ namespace WixToolset.Core
15655 } 15655 }
15656 else 15656 else
15657 { 15657 {
15658 this.Core.OnMessage(WixErrors.IllegalAttributeExceptOnElement(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ListView")); 15658 this.Core.Write(ErrorMessages.IllegalAttributeExceptOnElement(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "ListView"));
15659 } 15659 }
15660 break; 15660 break;
15661 case "Text": 15661 case "Text":
@@ -15677,7 +15677,7 @@ namespace WixToolset.Core
15677 15677
15678 if (null == value) 15678 if (null == value)
15679 { 15679 {
15680 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 15680 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
15681 } 15681 }
15682 15682
15683 this.Core.ParseForExtensionElements(node); 15683 this.Core.ParseForExtensionElements(node);
@@ -15725,7 +15725,7 @@ namespace WixToolset.Core
15725 case "Bitmap": 15725 case "Bitmap":
15726 if (RadioButtonType.NotSet != type) 15726 if (RadioButtonType.NotSet != type)
15727 { 15727 {
15728 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Icon", "Text")); 15728 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Icon", "Text"));
15729 } 15729 }
15730 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 15730 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
15731 this.Core.CreateSimpleReference(sourceLineNumbers, "Binary", text); 15731 this.Core.CreateSimpleReference(sourceLineNumbers, "Binary", text);
@@ -15740,7 +15740,7 @@ namespace WixToolset.Core
15740 case "Icon": 15740 case "Icon":
15741 if (RadioButtonType.NotSet != type) 15741 if (RadioButtonType.NotSet != type)
15742 { 15742 {
15743 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Text")); 15743 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Text"));
15744 } 15744 }
15745 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 15745 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
15746 this.Core.CreateSimpleReference(sourceLineNumbers, "Binary", text); 15746 this.Core.CreateSimpleReference(sourceLineNumbers, "Binary", text);
@@ -15749,7 +15749,7 @@ namespace WixToolset.Core
15749 case "Text": 15749 case "Text":
15750 if (RadioButtonType.NotSet != type) 15750 if (RadioButtonType.NotSet != type)
15751 { 15751 {
15752 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Icon")); 15752 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Icon"));
15753 } 15753 }
15754 text = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 15754 text = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
15755 type = RadioButtonType.Text; 15755 type = RadioButtonType.Text;
@@ -15782,27 +15782,27 @@ namespace WixToolset.Core
15782 15782
15783 if (null == value) 15783 if (null == value)
15784 { 15784 {
15785 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 15785 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
15786 } 15786 }
15787 15787
15788 if (null == x) 15788 if (null == x)
15789 { 15789 {
15790 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "X")); 15790 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "X"));
15791 } 15791 }
15792 15792
15793 if (null == y) 15793 if (null == y)
15794 { 15794 {
15795 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Y")); 15795 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Y"));
15796 } 15796 }
15797 15797
15798 if (null == width) 15798 if (null == width)
15799 { 15799 {
15800 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Width")); 15800 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Width"));
15801 } 15801 }
15802 15802
15803 if (null == height) 15803 if (null == height)
15804 { 15804 {
15805 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Height")); 15805 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Height"));
15806 } 15806 }
15807 15807
15808 this.Core.ParseForExtensionElements(node); 15808 this.Core.ParseForExtensionElements(node);
@@ -15860,7 +15860,7 @@ namespace WixToolset.Core
15860 15860
15861 if (null == action) 15861 if (null == action)
15862 { 15862 {
15863 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 15863 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
15864 } 15864 }
15865 15865
15866 foreach (XElement child in node.Elements()) 15866 foreach (XElement child in node.Elements())
@@ -15996,7 +15996,7 @@ namespace WixToolset.Core
15996 15996
15997 if (null == property) 15997 if (null == property)
15998 { 15998 {
15999 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property")); 15999 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property"));
16000 } 16000 }
16001 16001
16002 foreach (XElement child in node.Elements()) 16002 foreach (XElement child in node.Elements())
@@ -16064,7 +16064,7 @@ namespace WixToolset.Core
16064 16064
16065 if (null == property) 16065 if (null == property)
16066 { 16066 {
16067 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property")); 16067 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property"));
16068 } 16068 }
16069 16069
16070 foreach (XElement child in node.Elements()) 16070 foreach (XElement child in node.Elements())
@@ -16082,7 +16082,7 @@ namespace WixToolset.Core
16082 else if (groupType != type) 16082 else if (groupType != type)
16083 { 16083 {
16084 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 16084 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
16085 this.Core.OnMessage(WixErrors.RadioButtonTypeInconsistent(childSourceLineNumbers)); 16085 this.Core.Write(ErrorMessages.RadioButtonTypeInconsistent(childSourceLineNumbers));
16086 } 16086 }
16087 break; 16087 break;
16088 default: 16088 default:
@@ -16135,7 +16135,7 @@ namespace WixToolset.Core
16135 16135
16136 if (null == action) 16136 if (null == action)
16137 { 16137 {
16138 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); 16138 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
16139 } 16139 }
16140 16140
16141 this.Core.ParseForExtensionElements(node); 16141 this.Core.ParseForExtensionElements(node);
@@ -16314,7 +16314,7 @@ namespace WixToolset.Core
16314 16314
16315 if (null == faceName) 16315 if (null == faceName)
16316 { 16316 {
16317 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "FaceName")); 16317 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "FaceName"));
16318 } 16318 }
16319 16319
16320 this.Core.ParseForExtensionElements(node); 16320 this.Core.ParseForExtensionElements(node);
@@ -16458,7 +16458,7 @@ namespace WixToolset.Core
16458 16458
16459 if (null == id) 16459 if (null == id)
16460 { 16460 {
16461 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 16461 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
16462 id = Identifier.Invalid; 16462 id = Identifier.Invalid;
16463 } 16463 }
16464 16464
@@ -16498,7 +16498,7 @@ namespace WixToolset.Core
16498 16498
16499 if (null == firstControl) 16499 if (null == firstControl)
16500 { 16500 {
16501 this.Core.OnMessage(WixErrors.NoFirstControlSpecified(sourceLineNumbers, id.Id)); 16501 this.Core.Write(ErrorMessages.NoFirstControlSpecified(sourceLineNumbers, id.Id));
16502 } 16502 }
16503 16503
16504 if (!this.Core.EncounteredError) 16504 if (!this.Core.EncounteredError)
@@ -16676,14 +16676,14 @@ namespace WixToolset.Core
16676 16676
16677 if (String.IsNullOrEmpty(sourceFile)) 16677 if (String.IsNullOrEmpty(sourceFile))
16678 { 16678 {
16679 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 16679 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
16680 } 16680 }
16681 else if (String.IsNullOrEmpty(name)) 16681 else if (String.IsNullOrEmpty(name))
16682 { 16682 {
16683 name = Path.GetFileName(sourceFile); 16683 name = Path.GetFileName(sourceFile);
16684 if (!this.Core.IsValidLongFilename(name, false)) 16684 if (!this.Core.IsValidLongFilename(name, false))
16685 { 16685 {
16686 this.Core.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name)); 16686 this.Core.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name));
16687 } 16687 }
16688 } 16688 }
16689 16689
@@ -16696,11 +16696,11 @@ namespace WixToolset.Core
16696 16696
16697 if (null == id) 16697 if (null == id)
16698 { 16698 {
16699 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 16699 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
16700 } 16700 }
16701 else if (!Common.IsIdentifier(id.Id)) 16701 else if (!Common.IsIdentifier(id.Id))
16702 { 16702 {
16703 this.Core.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 16703 this.Core.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
16704 } 16704 }
16705 } 16705 }
16706 else if (String.IsNullOrEmpty(name)) 16706 else if (String.IsNullOrEmpty(name))
@@ -16710,7 +16710,7 @@ namespace WixToolset.Core
16710 16710
16711 if (!name.Contains(".")) 16711 if (!name.Contains("."))
16712 { 16712 {
16713 this.Core.OnMessage(WixErrors.InvalidEmbeddedUIFileName(sourceLineNumbers, name)); 16713 this.Core.Write(ErrorMessages.InvalidEmbeddedUIFileName(sourceLineNumbers, name));
16714 } 16714 }
16715 16715
16716 foreach (XElement child in node.Elements()) 16716 foreach (XElement child in node.Elements())
@@ -16783,14 +16783,14 @@ namespace WixToolset.Core
16783 16783
16784 if (String.IsNullOrEmpty(sourceFile)) 16784 if (String.IsNullOrEmpty(sourceFile))
16785 { 16785 {
16786 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 16786 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
16787 } 16787 }
16788 else if (String.IsNullOrEmpty(name)) 16788 else if (String.IsNullOrEmpty(name))
16789 { 16789 {
16790 name = Path.GetFileName(sourceFile); 16790 name = Path.GetFileName(sourceFile);
16791 if (!this.Core.IsValidLongFilename(name, false)) 16791 if (!this.Core.IsValidLongFilename(name, false))
16792 { 16792 {
16793 this.Core.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name)); 16793 this.Core.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Source", name));
16794 } 16794 }
16795 } 16795 }
16796 16796
@@ -16803,11 +16803,11 @@ namespace WixToolset.Core
16803 16803
16804 if (null == id) 16804 if (null == id)
16805 { 16805 {
16806 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 16806 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
16807 } 16807 }
16808 else if (!Common.IsIdentifier(id.Id)) 16808 else if (!Common.IsIdentifier(id.Id))
16809 { 16809 {
16810 this.Core.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 16810 this.Core.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
16811 } 16811 }
16812 } 16812 }
16813 else if (String.IsNullOrEmpty(name)) 16813 else if (String.IsNullOrEmpty(name))
@@ -16868,7 +16868,7 @@ namespace WixToolset.Core
16868 XAttribute typeAttribute = node.Attribute("Type"); 16868 XAttribute typeAttribute = node.Attribute("Type");
16869 if (null == typeAttribute) 16869 if (null == typeAttribute)
16870 { 16870 {
16871 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type")); 16871 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Type"));
16872 } 16872 }
16873 else 16873 else
16874 { 16874 {
@@ -17016,14 +17016,14 @@ namespace WixToolset.Core
17016 this.Core.TrySetBitFromName(specialAttributes, "Icon32", YesNoType.Yes, bits, 16); 17016 this.Core.TrySetBitFromName(specialAttributes, "Icon32", YesNoType.Yes, bits, 16);
17017 break; 17017 break;
17018 default: 17018 default:
17019 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "16", "32", "48")); 17019 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "16", "32", "48"));
17020 break; 17020 break;
17021 } 17021 }
17022 } 17022 }
17023 } 17023 }
17024 else 17024 else
17025 { 17025 {
17026 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "Type")); 17026 this.Core.Write(ErrorMessages.IllegalAttributeValueWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, iconSizeValue, "Type"));
17027 } 17027 }
17028 break; 17028 break;
17029 case "Property": 17029 case "Property":
@@ -17074,22 +17074,22 @@ namespace WixToolset.Core
17074 17074
17075 if (null == height) 17075 if (null == height)
17076 { 17076 {
17077 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Height")); 17077 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Height"));
17078 } 17078 }
17079 17079
17080 if (null == width) 17080 if (null == width)
17081 { 17081 {
17082 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Width")); 17082 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Width"));
17083 } 17083 }
17084 17084
17085 if (null == x) 17085 if (null == x)
17086 { 17086 {
17087 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "X")); 17087 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "X"));
17088 } 17088 }
17089 17089
17090 if (null == y) 17090 if (null == y)
17091 { 17091 {
17092 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Y")); 17092 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Y"));
17093 } 17093 }
17094 17094
17095 if (null == id) 17095 if (null == id)
@@ -17165,7 +17165,7 @@ namespace WixToolset.Core
17165 text = Common.GetInnerText(child); 17165 text = Common.GetInnerText(child);
17166 if (!String.IsNullOrEmpty(text) && null != sourceFile) 17166 if (!String.IsNullOrEmpty(text) && null != sourceFile)
17167 { 17167 {
17168 this.Core.OnMessage(WixErrors.IllegalAttributeWithInnerText(childSourceLineNumbers, child.Name.LocalName, "SourceFile")); 17168 this.Core.Write(ErrorMessages.IllegalAttributeWithInnerText(childSourceLineNumbers, child.Name.LocalName, "SourceFile"));
17169 } 17169 }
17170 break; 17170 break;
17171 default: 17171 default:
@@ -17211,11 +17211,11 @@ namespace WixToolset.Core
17211 { 17211 {
17212 if (String.IsNullOrEmpty(property) && String.IsNullOrEmpty(checkBoxPropertyRef)) 17212 if (String.IsNullOrEmpty(property) && String.IsNullOrEmpty(checkBoxPropertyRef))
17213 { 17213 {
17214 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "CheckBoxPropertyRef", true)); 17214 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "CheckBoxPropertyRef", true));
17215 } 17215 }
17216 else if (!String.IsNullOrEmpty(property) && !String.IsNullOrEmpty(checkBoxPropertyRef)) 17216 else if (!String.IsNullOrEmpty(property) && !String.IsNullOrEmpty(checkBoxPropertyRef))
17217 { 17217 {
17218 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "CheckBoxPropertyRef")); 17218 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Property", "CheckBoxPropertyRef"));
17219 } 17219 }
17220 else if (!String.IsNullOrEmpty(property)) 17220 else if (!String.IsNullOrEmpty(property))
17221 { 17221 {
@@ -17272,7 +17272,7 @@ namespace WixToolset.Core
17272 { 17272 {
17273 if (TupleDefinitionType.BBControl == tableName) 17273 if (TupleDefinitionType.BBControl == tableName)
17274 { 17274 {
17275 this.Core.OnMessage(WixErrors.TabbableControlNotAllowedInBillboard(sourceLineNumbers, node.Name.LocalName, controlType)); 17275 this.Core.Write(ErrorMessages.TabbableControlNotAllowedInBillboard(sourceLineNumbers, node.Name.LocalName, controlType));
17276 } 17276 }
17277 17277
17278 if (null == firstControl) 17278 if (null == firstControl)
@@ -17322,14 +17322,14 @@ namespace WixToolset.Core
17322 case "Control": 17322 case "Control":
17323 if (null != control) 17323 if (null != control)
17324 { 17324 {
17325 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 17325 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
17326 } 17326 }
17327 control = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 17327 control = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
17328 break; 17328 break;
17329 case "Dialog": 17329 case "Dialog":
17330 if (null != dialog) 17330 if (null != dialog)
17331 { 17331 {
17332 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 17332 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
17333 } 17333 }
17334 dialog = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 17334 dialog = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
17335 this.Core.CreateSimpleReference(sourceLineNumbers, "Dialog", dialog); 17335 this.Core.CreateSimpleReference(sourceLineNumbers, "Dialog", dialog);
@@ -17361,28 +17361,28 @@ namespace WixToolset.Core
17361 17361
17362 if (null == control) 17362 if (null == control)
17363 { 17363 {
17364 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control")); 17364 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control"));
17365 } 17365 }
17366 17366
17367 if (null == dialog) 17367 if (null == dialog)
17368 { 17368 {
17369 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dialog")); 17369 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Dialog"));
17370 } 17370 }
17371 17371
17372 if (null == controlEvent && null == property) // need to specify at least one 17372 if (null == controlEvent && null == property) // need to specify at least one
17373 { 17373 {
17374 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Event", "Property")); 17374 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Event", "Property"));
17375 } 17375 }
17376 else if (null != controlEvent && null != property) // cannot specify both 17376 else if (null != controlEvent && null != property) // cannot specify both
17377 { 17377 {
17378 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Event", "Property")); 17378 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Event", "Property"));
17379 } 17379 }
17380 17380
17381 if (null == argument) 17381 if (null == argument)
17382 { 17382 {
17383 if (null != controlEvent) 17383 if (null != controlEvent)
17384 { 17384 {
17385 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value", "Event")); 17385 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value", "Event"));
17386 } 17386 }
17387 else if (null != property) 17387 else if (null != property)
17388 { 17388 {
@@ -17499,7 +17499,7 @@ namespace WixToolset.Core
17499 17499
17500 if (null == id) 17500 if (null == id)
17501 { 17501 {
17502 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 17502 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
17503 } 17503 }
17504 17504
17505 // process the UpgradeVersion children here 17505 // process the UpgradeVersion children here
@@ -17513,7 +17513,7 @@ namespace WixToolset.Core
17513 { 17513 {
17514 case "Property": 17514 case "Property":
17515 this.ParsePropertyElement(child); 17515 this.ParsePropertyElement(child);
17516 this.Core.OnMessage(WixWarnings.DeprecatedUpgradeProperty(childSourceLineNumbers)); 17516 this.Core.Write(WarningMessages.DeprecatedUpgradeProperty(childSourceLineNumbers));
17517 break; 17517 break;
17518 case "UpgradeVersion": 17518 case "UpgradeVersion":
17519 this.ParseUpgradeVersionElement(child, id); 17519 this.ParseUpgradeVersionElement(child, id);
@@ -17618,16 +17618,16 @@ namespace WixToolset.Core
17618 17618
17619 if (null == actionProperty) 17619 if (null == actionProperty)
17620 { 17620 {
17621 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property")); 17621 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Property"));
17622 } 17622 }
17623 else if (actionProperty.ToUpper(CultureInfo.InvariantCulture) != actionProperty) 17623 else if (actionProperty.ToUpper(CultureInfo.InvariantCulture) != actionProperty)
17624 { 17624 {
17625 this.Core.OnMessage(WixErrors.SecurePropertyNotUppercase(sourceLineNumbers, node.Name.LocalName, "Property", actionProperty)); 17625 this.Core.Write(ErrorMessages.SecurePropertyNotUppercase(sourceLineNumbers, node.Name.LocalName, "Property", actionProperty));
17626 } 17626 }
17627 17627
17628 if (null == minimum && null == maximum) 17628 if (null == minimum && null == maximum)
17629 { 17629 {
17630 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Minimum", "Maximum")); 17630 this.Core.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "Minimum", "Maximum"));
17631 } 17631 }
17632 17632
17633 this.Core.ParseForExtensionElements(node); 17633 this.Core.ParseForExtensionElements(node);
@@ -17694,7 +17694,7 @@ namespace WixToolset.Core
17694 break; 17694 break;
17695 case "Target": 17695 case "Target":
17696 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 17696 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
17697 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "TargetFile", "TargetProperty")); 17697 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "TargetFile", "TargetProperty"));
17698 break; 17698 break;
17699 case "TargetFile": 17699 case "TargetFile":
17700 targetFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 17700 targetFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -17716,22 +17716,22 @@ namespace WixToolset.Core
17716 17716
17717 if (null == id) 17717 if (null == id)
17718 { 17718 {
17719 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 17719 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
17720 } 17720 }
17721 17721
17722 if (null != target && null != targetFile) 17722 if (null != target && null != targetFile)
17723 { 17723 {
17724 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "TargetFile")); 17724 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "TargetFile"));
17725 } 17725 }
17726 17726
17727 if (null != target && null != targetProperty) 17727 if (null != target && null != targetProperty)
17728 { 17728 {
17729 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "TargetProperty")); 17729 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "TargetProperty"));
17730 } 17730 }
17731 17731
17732 if (null != targetFile && null != targetProperty) 17732 if (null != targetFile && null != targetProperty)
17733 { 17733 {
17734 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "TargetFile", "TargetProperty")); 17734 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "TargetFile", "TargetProperty"));
17735 } 17735 }
17736 17736
17737 this.Core.ParseForExtensionElements(node); 17737 this.Core.ParseForExtensionElements(node);
@@ -17740,17 +17740,17 @@ namespace WixToolset.Core
17740 { 17740 {
17741 if (null != target) 17741 if (null != target)
17742 { 17742 {
17743 this.Core.OnMessage(WixErrors.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "Target")); 17743 this.Core.Write(ErrorMessages.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "Target"));
17744 } 17744 }
17745 17745
17746 if (null != targetFile) 17746 if (null != targetFile)
17747 { 17747 {
17748 this.Core.OnMessage(WixErrors.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "TargetFile")); 17748 this.Core.Write(ErrorMessages.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "TargetFile"));
17749 } 17749 }
17750 17750
17751 if (null != targetProperty) 17751 if (null != targetProperty)
17752 { 17752 {
17753 this.Core.OnMessage(WixErrors.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "TargetProperty")); 17753 this.Core.Write(ErrorMessages.IllegalAttributeWhenAdvertised(sourceLineNumbers, node.Name.LocalName, "TargetProperty"));
17754 } 17754 }
17755 17755
17756 if (!this.Core.EncounteredError) 17756 if (!this.Core.EncounteredError)
@@ -17770,12 +17770,12 @@ namespace WixToolset.Core
17770 { 17770 {
17771 if (CompilerConstants.IntegerNotSet != sequence) 17771 if (CompilerConstants.IntegerNotSet != sequence)
17772 { 17772 {
17773 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Sequence", "Advertise", "no")); 17773 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Sequence", "Advertise", "no"));
17774 } 17774 }
17775 17775
17776 if (null == target && null == targetFile && null == targetProperty) 17776 if (null == target && null == targetFile && null == targetProperty)
17777 { 17777 {
17778 this.Core.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "TargetFile", "TargetProperty", "Advertise", "no")); 17778 this.Core.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "TargetFile", "TargetProperty", "Advertise", "no"));
17779 } 17779 }
17780 17780
17781 if (null == target) 17781 if (null == target)
@@ -17851,12 +17851,12 @@ namespace WixToolset.Core
17851 17851
17852 if (null == id) 17852 if (null == id)
17853 { 17853 {
17854 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 17854 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
17855 } 17855 }
17856 17856
17857 if (null == key) 17857 if (null == key)
17858 { 17858 {
17859 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); 17859 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
17860 } 17860 }
17861 17861
17862 BundleApprovedExeForElevationAttributes attributes = BundleApprovedExeForElevationAttributes.None; 17862 BundleApprovedExeForElevationAttributes attributes = BundleApprovedExeForElevationAttributes.None;
@@ -17938,7 +17938,7 @@ namespace WixToolset.Core
17938 disableModify = 0; 17938 disableModify = 0;
17939 break; 17939 break;
17940 default: 17940 default:
17941 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "button", "yes", "no")); 17941 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "button", "yes", "no"));
17942 break; 17942 break;
17943 } 17943 }
17944 break; 17944 break;
@@ -17946,7 +17946,7 @@ namespace WixToolset.Core
17946 disableRemove = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 17946 disableRemove = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
17947 break; 17947 break;
17948 case "DisableRepair": 17948 case "DisableRepair":
17949 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 17949 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
17950 break; 17950 break;
17951 case "HelpTelephone": 17951 case "HelpTelephone":
17952 helpTelephone = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 17952 helpTelephone = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -17990,16 +17990,16 @@ namespace WixToolset.Core
17990 17990
17991 if (String.IsNullOrEmpty(version)) 17991 if (String.IsNullOrEmpty(version))
17992 { 17992 {
17993 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version")); 17993 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version"));
17994 } 17994 }
17995 else if (!CompilerCore.IsValidModuleOrBundleVersion(version)) 17995 else if (!CompilerCore.IsValidModuleOrBundleVersion(version))
17996 { 17996 {
17997 this.Core.OnMessage(WixWarnings.InvalidModuleOrBundleVersion(sourceLineNumbers, "Bundle", version)); 17997 this.Core.Write(WarningMessages.InvalidModuleOrBundleVersion(sourceLineNumbers, "Bundle", version));
17998 } 17998 }
17999 17999
18000 if (String.IsNullOrEmpty(upgradeCode)) 18000 if (String.IsNullOrEmpty(upgradeCode))
18001 { 18001 {
18002 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "UpgradeCode")); 18002 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "UpgradeCode"));
18003 } 18003 }
18004 18004
18005 if (String.IsNullOrEmpty(copyright)) 18005 if (String.IsNullOrEmpty(copyright))
@@ -18054,7 +18054,7 @@ namespace WixToolset.Core
18054 if (baSeen) 18054 if (baSeen)
18055 { 18055 {
18056 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 18056 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
18057 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "BootstrapperApplication")); 18057 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "BootstrapperApplication"));
18058 } 18058 }
18059 this.ParseBootstrapperApplicationElement(child); 18059 this.ParseBootstrapperApplicationElement(child);
18060 baSeen = true; 18060 baSeen = true;
@@ -18072,7 +18072,7 @@ namespace WixToolset.Core
18072 if (chainSeen) 18072 if (chainSeen)
18073 { 18073 {
18074 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 18074 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
18075 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Chain")); 18075 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Chain"));
18076 } 18076 }
18077 this.ParseChainElement(child); 18077 this.ParseChainElement(child);
18078 chainSeen = true; 18078 chainSeen = true;
@@ -18087,7 +18087,7 @@ namespace WixToolset.Core
18087 if (logSeen) 18087 if (logSeen)
18088 { 18088 {
18089 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); 18089 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
18090 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Log")); 18090 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, "Log"));
18091 } 18091 }
18092 logVariablePrefixAndExtension = this.ParseLogElement(child, fileSystemSafeBundleName); 18092 logVariablePrefixAndExtension = this.ParseLogElement(child, fileSystemSafeBundleName);
18093 logSeen = true; 18093 logSeen = true;
@@ -18124,7 +18124,7 @@ namespace WixToolset.Core
18124 18124
18125 if (!chainSeen) 18125 if (!chainSeen)
18126 { 18126 {
18127 this.Core.OnMessage(WixErrors.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Chain")); 18127 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Chain"));
18128 } 18128 }
18129 18129
18130 if (!this.Core.EncounteredError) 18130 if (!this.Core.EncounteredError)
@@ -18278,12 +18278,12 @@ namespace WixToolset.Core
18278 18278
18279 if (null == id) 18279 if (null == id)
18280 { 18280 {
18281 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 18281 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
18282 } 18282 }
18283 18283
18284 if (null == sourceFile) 18284 if (null == sourceFile)
18285 { 18285 {
18286 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile")); 18286 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SourceFile"));
18287 } 18287 }
18288 18288
18289 this.Core.ParseForExtensionElements(node); 18289 this.Core.ParseForExtensionElements(node);
@@ -18329,7 +18329,7 @@ namespace WixToolset.Core
18329 string typeString = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 18329 string typeString = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
18330 if (!Enum.TryParse<ContainerType>(typeString, out type)) 18330 if (!Enum.TryParse<ContainerType>(typeString, out type))
18331 { 18331 {
18332 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Type", typeString, "attached, detached")); 18332 this.Core.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Type", typeString, "attached, detached"));
18333 } 18333 }
18334 break; 18334 break;
18335 default: 18335 default:
@@ -18352,12 +18352,12 @@ namespace WixToolset.Core
18352 18352
18353 if (null == id) 18353 if (null == id)
18354 { 18354 {
18355 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 18355 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
18356 id = Identifier.Invalid; 18356 id = Identifier.Invalid;
18357 } 18357 }
18358 else if (!Common.IsIdentifier(id.Id)) 18358 else if (!Common.IsIdentifier(id.Id))
18359 { 18359 {
18360 this.Core.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 18360 this.Core.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
18361 } 18361 }
18362 } 18362 }
18363 else if (null == name) 18363 else if (null == name)
@@ -18367,7 +18367,7 @@ namespace WixToolset.Core
18367 18367
18368 if (!String.IsNullOrEmpty(downloadUrl) && ContainerType.Detached != type) 18368 if (!String.IsNullOrEmpty(downloadUrl) && ContainerType.Detached != type)
18369 { 18369 {
18370 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "Type", "attached")); 18370 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "Type", "attached"));
18371 } 18371 }
18372 18372
18373 foreach (XElement child in node.Elements()) 18373 foreach (XElement child in node.Elements())
@@ -18449,7 +18449,7 @@ namespace WixToolset.Core
18449 // We need *either* <Payload> or <PayloadGroupRef> or even just @SourceFile on the BA... 18449 // We need *either* <Payload> or <PayloadGroupRef> or even just @SourceFile on the BA...
18450 // but we just say there's a missing <Payload>. 18450 // but we just say there's a missing <Payload>.
18451 // TODO: Is there a better message for this? 18451 // TODO: Is there a better message for this?
18452 this.Core.OnMessage(WixErrors.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Payload")); 18452 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Payload"));
18453 } 18453 }
18454 18454
18455 // Add the application as an attached container and if an Id was provided add that too. 18455 // Add the application as an attached container and if an Id was provided add that too.
@@ -18527,7 +18527,7 @@ namespace WixToolset.Core
18527 18527
18528 if (String.IsNullOrEmpty(id)) 18528 if (String.IsNullOrEmpty(id))
18529 { 18529 {
18530 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 18530 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
18531 } 18531 }
18532 else 18532 else
18533 { 18533 {
@@ -18593,7 +18593,7 @@ namespace WixToolset.Core
18593 } 18593 }
18594 else 18594 else
18595 { 18595 {
18596 this.Core.OnMessage(WixErrors.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "Manufacturer", node.Parent.Name.LocalName)); 18596 this.Core.Write(ErrorMessages.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "Manufacturer", node.Parent.Name.LocalName));
18597 } 18597 }
18598 } 18598 }
18599 18599
@@ -18613,13 +18613,13 @@ namespace WixToolset.Core
18613 } 18613 }
18614 else 18614 else
18615 { 18615 {
18616 this.Core.OnMessage(WixErrors.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "Name", node.Parent.Name.LocalName)); 18616 this.Core.Write(ErrorMessages.ExpectedAttributeInElementOrParent(sourceLineNumbers, node.Name.LocalName, "Name", node.Parent.Name.LocalName));
18617 } 18617 }
18618 } 18618 }
18619 18619
18620 if (String.IsNullOrEmpty(classification)) 18620 if (String.IsNullOrEmpty(classification))
18621 { 18621 {
18622 this.Core.OnMessage(WixErrors.IllegalEmptyAttributeValue(sourceLineNumbers, node.Name.LocalName, "Classification", defaultClassification)); 18622 this.Core.Write(ErrorMessages.IllegalEmptyAttributeValue(sourceLineNumbers, node.Name.LocalName, "Classification", defaultClassification));
18623 } 18623 }
18624 18624
18625 this.Core.ParseForExtensionElements(node); 18625 this.Core.ParseForExtensionElements(node);
@@ -18755,13 +18755,13 @@ namespace WixToolset.Core
18755 18755
18756 if (CompilerCore.WixNamespace == node.Name.Namespace && node.Name.LocalName != "ExePackage") 18756 if (CompilerCore.WixNamespace == node.Name.Namespace && node.Name.LocalName != "ExePackage")
18757 { 18757 {
18758 this.Core.OnMessage(WixErrors.RemotePayloadUnsupported(childSourceLineNumbers)); 18758 this.Core.Write(ErrorMessages.RemotePayloadUnsupported(childSourceLineNumbers));
18759 continue; 18759 continue;
18760 } 18760 }
18761 18761
18762 if (null != remotePayload) 18762 if (null != remotePayload)
18763 { 18763 {
18764 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 18764 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
18765 } 18765 }
18766 18766
18767 remotePayload = this.ParseRemotePayloadElement(child); 18767 remotePayload = this.ParseRemotePayloadElement(child);
@@ -18769,11 +18769,11 @@ namespace WixToolset.Core
18769 18769
18770 if (null != sourceFile && null != remotePayload) 18770 if (null != sourceFile && null != remotePayload)
18771 { 18771 {
18772 this.Core.OnMessage(WixErrors.UnexpectedElementWithAttribute(sourceLineNumbers, node.Name.LocalName, "RemotePayload", "SourceFile")); 18772 this.Core.Write(ErrorMessages.UnexpectedElementWithAttribute(sourceLineNumbers, node.Name.LocalName, "RemotePayload", "SourceFile"));
18773 } 18773 }
18774 else if (null == sourceFile && null == remotePayload) 18774 else if (null == sourceFile && null == remotePayload)
18775 { 18775 {
18776 this.Core.OnMessage(WixErrors.ExpectedAttributeOrElement(sourceLineNumbers, node.Name.LocalName, "SourceFile", "RemotePayload")); 18776 this.Core.Write(ErrorMessages.ExpectedAttributeOrElement(sourceLineNumbers, node.Name.LocalName, "SourceFile", "RemotePayload"));
18777 } 18777 }
18778 else if (null == sourceFile) 18778 else if (null == sourceFile)
18779 { 18779 {
@@ -18782,14 +18782,14 @@ namespace WixToolset.Core
18782 18782
18783 if (null == downloadUrl && null != remotePayload) 18783 if (null == downloadUrl && null != remotePayload)
18784 { 18784 {
18785 this.Core.OnMessage(WixErrors.ExpectedAttributeWithElement(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "RemotePayload")); 18785 this.Core.Write(ErrorMessages.ExpectedAttributeWithElement(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "RemotePayload"));
18786 } 18786 }
18787 18787
18788 if (Compiler.BurnUXContainerId == parentId) 18788 if (Compiler.BurnUXContainerId == parentId)
18789 { 18789 {
18790 if (compressed == YesNoDefaultType.No) 18790 if (compressed == YesNoDefaultType.No)
18791 { 18791 {
18792 Core.OnMessage(WixWarnings.UxPayloadsOnlySupportEmbedding(sourceLineNumbers, sourceFile)); 18792 Core.Write(WarningMessages.UxPayloadsOnlySupportEmbedding(sourceLineNumbers, sourceFile));
18793 } 18793 }
18794 18794
18795 compressed = YesNoDefaultType.Yes; 18795 compressed = YesNoDefaultType.Yes;
@@ -18845,27 +18845,27 @@ namespace WixToolset.Core
18845 18845
18846 if (String.IsNullOrEmpty(remotePayload.ProductName)) 18846 if (String.IsNullOrEmpty(remotePayload.ProductName))
18847 { 18847 {
18848 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ProductName")); 18848 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ProductName"));
18849 } 18849 }
18850 18850
18851 if (String.IsNullOrEmpty(remotePayload.Description)) 18851 if (String.IsNullOrEmpty(remotePayload.Description))
18852 { 18852 {
18853 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description")); 18853 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description"));
18854 } 18854 }
18855 18855
18856 if (String.IsNullOrEmpty(remotePayload.Hash)) 18856 if (String.IsNullOrEmpty(remotePayload.Hash))
18857 { 18857 {
18858 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Hash")); 18858 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Hash"));
18859 } 18859 }
18860 18860
18861 if (0 == remotePayload.Size) 18861 if (0 == remotePayload.Size)
18862 { 18862 {
18863 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Size")); 18863 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Size"));
18864 } 18864 }
18865 18865
18866 if (String.IsNullOrEmpty(remotePayload.Version)) 18866 if (String.IsNullOrEmpty(remotePayload.Version))
18867 { 18867 {
18868 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version")); 18868 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Version"));
18869 } 18869 }
18870 18870
18871 return remotePayload; 18871 return remotePayload;
@@ -18947,7 +18947,7 @@ namespace WixToolset.Core
18947 18947
18948 if (null == id) 18948 if (null == id)
18949 { 18949 {
18950 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 18950 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
18951 id = Identifier.Invalid; 18951 id = Identifier.Invalid;
18952 } 18952 }
18953 18953
@@ -19024,7 +19024,7 @@ namespace WixToolset.Core
19024 19024
19025 if (null == id) 19025 if (null == id)
19026 { 19026 {
19027 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 19027 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
19028 } 19028 }
19029 19029
19030 this.Core.ParseForExtensionElements(node); 19030 this.Core.ParseForExtensionElements(node);
@@ -19084,7 +19084,7 @@ namespace WixToolset.Core
19084 string behaviorString = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 19084 string behaviorString = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
19085 if (!Enum.TryParse<ExitCodeBehaviorType>(behaviorString, true, out behavior)) 19085 if (!Enum.TryParse<ExitCodeBehaviorType>(behaviorString, true, out behavior))
19086 { 19086 {
19087 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Behavior", behaviorString, "success, error, scheduleReboot, forceReboot")); 19087 this.Core.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Behavior", behaviorString, "success, error, scheduleReboot, forceReboot"));
19088 } 19088 }
19089 break; 19089 break;
19090 default: 19090 default:
@@ -19100,7 +19100,7 @@ namespace WixToolset.Core
19100 19100
19101 if (ExitCodeBehaviorType.NotSet == behavior) 19101 if (ExitCodeBehaviorType.NotSet == behavior)
19102 { 19102 {
19103 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Behavior")); 19103 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Behavior"));
19104 } 19104 }
19105 19105
19106 this.Core.ParseForExtensionElements(node); 19106 this.Core.ParseForExtensionElements(node);
@@ -19208,7 +19208,7 @@ namespace WixToolset.Core
19208 19208
19209 if (null == previousId) 19209 if (null == previousId)
19210 { 19210 {
19211 this.Core.OnMessage(WixErrors.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "MsiPackage", "ExePackage", "PackageGroupRef")); 19211 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "MsiPackage", "ExePackage", "PackageGroupRef"));
19212 } 19212 }
19213 19213
19214 if (!this.Core.EncounteredError) 19214 if (!this.Core.EncounteredError)
@@ -19339,12 +19339,12 @@ namespace WixToolset.Core
19339 19339
19340 if (null == id) 19340 if (null == id)
19341 { 19341 {
19342 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 19342 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
19343 id = Identifier.Invalid; 19343 id = Identifier.Invalid;
19344 } 19344 }
19345 else if (!Common.IsIdentifier(id.Id)) 19345 else if (!Common.IsIdentifier(id.Id))
19346 { 19346 {
19347 this.Core.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 19347 this.Core.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
19348 } 19348 }
19349 } 19349 }
19350 19350
@@ -19437,7 +19437,7 @@ namespace WixToolset.Core
19437 name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false, true); 19437 name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false, true);
19438 if (!this.Core.IsValidLongFilename(name, false, true)) 19438 if (!this.Core.IsValidLongFilename(name, false, true))
19439 { 19439 {
19440 this.Core.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Name", name)); 19440 this.Core.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, node.Name.LocalName, "Name", name));
19441 } 19441 }
19442 break; 19442 break;
19443 case "SourceFile": 19443 case "SourceFile":
@@ -19528,7 +19528,7 @@ namespace WixToolset.Core
19528 compressed = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); 19528 compressed = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib);
19529 break; 19529 break;
19530 case "SuppressLooseFilePayloadGeneration": 19530 case "SuppressLooseFilePayloadGeneration":
19531 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 19531 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
19532 suppressLooseFilePayloadGeneration = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 19532 suppressLooseFilePayloadGeneration = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
19533 allowed = (packageType == WixBundlePackageType.Msi); 19533 allowed = (packageType == WixBundlePackageType.Msi);
19534 break; 19534 break;
@@ -19563,13 +19563,13 @@ namespace WixToolset.Core
19563 19563
19564 if (CompilerCore.WixNamespace == node.Name.Namespace && node.Name.LocalName != "ExePackage" && node.Name.LocalName != "MsuPackage") 19564 if (CompilerCore.WixNamespace == node.Name.Namespace && node.Name.LocalName != "ExePackage" && node.Name.LocalName != "MsuPackage")
19565 { 19565 {
19566 this.Core.OnMessage(WixErrors.RemotePayloadUnsupported(childSourceLineNumbers)); 19566 this.Core.Write(ErrorMessages.RemotePayloadUnsupported(childSourceLineNumbers));
19567 continue; 19567 continue;
19568 } 19568 }
19569 19569
19570 if (null != remotePayload) 19570 if (null != remotePayload)
19571 { 19571 {
19572 this.Core.OnMessage(WixErrors.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); 19572 this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName));
19573 } 19573 }
19574 19574
19575 remotePayload = this.ParseRemotePayloadElement(child); 19575 remotePayload = this.ParseRemotePayloadElement(child);
@@ -19579,7 +19579,7 @@ namespace WixToolset.Core
19579 { 19579 {
19580 if (String.IsNullOrEmpty(name)) 19580 if (String.IsNullOrEmpty(name))
19581 { 19581 {
19582 this.Core.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", "SourceFile")); 19582 this.Core.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Name", "SourceFile"));
19583 } 19583 }
19584 else if (null == remotePayload) 19584 else if (null == remotePayload)
19585 { 19585 {
@@ -19592,13 +19592,13 @@ namespace WixToolset.Core
19592 } 19592 }
19593 else if (null != remotePayload) 19593 else if (null != remotePayload)
19594 { 19594 {
19595 this.Core.OnMessage(WixErrors.UnexpectedElementWithAttribute(sourceLineNumbers, node.Name.LocalName, "RemotePayload", "SourceFile")); 19595 this.Core.Write(ErrorMessages.UnexpectedElementWithAttribute(sourceLineNumbers, node.Name.LocalName, "RemotePayload", "SourceFile"));
19596 } 19596 }
19597 else if (sourceFile.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) 19597 else if (sourceFile.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
19598 { 19598 {
19599 if (String.IsNullOrEmpty(name)) 19599 if (String.IsNullOrEmpty(name))
19600 { 19600 {
19601 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name", "SourceFile", sourceFile)); 19601 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name", "SourceFile", sourceFile));
19602 } 19602 }
19603 else 19603 else
19604 { 19604 {
@@ -19608,13 +19608,13 @@ namespace WixToolset.Core
19608 19608
19609 if (null == downloadUrl && null != remotePayload) 19609 if (null == downloadUrl && null != remotePayload)
19610 { 19610 {
19611 this.Core.OnMessage(WixErrors.ExpectedAttributeWithElement(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "RemotePayload")); 19611 this.Core.Write(ErrorMessages.ExpectedAttributeWithElement(sourceLineNumbers, node.Name.LocalName, "DownloadUrl", "RemotePayload"));
19612 } 19612 }
19613 19613
19614 if (YesNoDefaultType.No != compressed && null != remotePayload) 19614 if (YesNoDefaultType.No != compressed && null != remotePayload)
19615 { 19615 {
19616 compressed = YesNoDefaultType.No; 19616 compressed = YesNoDefaultType.No;
19617 this.Core.OnMessage(WixWarnings.RemotePayloadsMustNotAlsoBeCompressed(sourceLineNumbers, node.Name.LocalName)); 19617 this.Core.Write(WarningMessages.RemotePayloadsMustNotAlsoBeCompressed(sourceLineNumbers, node.Name.LocalName));
19618 } 19618 }
19619 19619
19620 if (null == id) 19620 if (null == id)
@@ -19630,12 +19630,12 @@ namespace WixToolset.Core
19630 19630
19631 if (null == id) 19631 if (null == id)
19632 { 19632 {
19633 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 19633 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
19634 id = Identifier.Invalid; 19634 id = Identifier.Invalid;
19635 } 19635 }
19636 else if (!Common.IsIdentifier(id.Id)) 19636 else if (!Common.IsIdentifier(id.Id))
19637 { 19637 {
19638 this.Core.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); 19638 this.Core.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, node.Name.LocalName, "Id", id.Id));
19639 } 19639 }
19640 } 19640 }
19641 19641
@@ -19651,7 +19651,7 @@ namespace WixToolset.Core
19651 19651
19652 if (!String.IsNullOrEmpty(protocol) && !protocol.Equals("burn", StringComparison.Ordinal) && !protocol.Equals("netfx4", StringComparison.Ordinal) && !protocol.Equals("none", StringComparison.Ordinal)) 19652 if (!String.IsNullOrEmpty(protocol) && !protocol.Equals("burn", StringComparison.Ordinal) && !protocol.Equals("netfx4", StringComparison.Ordinal) && !protocol.Equals("none", StringComparison.Ordinal))
19653 { 19653 {
19654 this.Core.OnMessage(WixErrors.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Protocol", protocol, "none, burn, netfx4")); 19654 this.Core.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Protocol", protocol, "none, burn, netfx4"));
19655 } 19655 }
19656 19656
19657 if (!String.IsNullOrEmpty(protocol) && protocol.Equals("netfx4", StringComparison.Ordinal)) 19657 if (!String.IsNullOrEmpty(protocol) && protocol.Equals("netfx4", StringComparison.Ordinal))
@@ -19660,17 +19660,17 @@ namespace WixToolset.Core
19660 { 19660 {
19661 if (null == installCommand || -1 == installCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase)) 19661 if (null == installCommand || -1 == installCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase))
19662 { 19662 {
19663 this.Core.OnMessage(WixWarnings.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "InstallCommand", installCommand, expectedArgument, "Protocol", "netfx4")); 19663 this.Core.Write(WarningMessages.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "InstallCommand", installCommand, expectedArgument, "Protocol", "netfx4"));
19664 } 19664 }
19665 19665
19666 if (null == repairCommand || -1 == repairCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase)) 19666 if (null == repairCommand || -1 == repairCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase))
19667 { 19667 {
19668 this.Core.OnMessage(WixWarnings.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "RepairCommand", repairCommand, expectedArgument, "Protocol", "netfx4")); 19668 this.Core.Write(WarningMessages.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "RepairCommand", repairCommand, expectedArgument, "Protocol", "netfx4"));
19669 } 19669 }
19670 19670
19671 if (null == uninstallCommand || -1 == uninstallCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase)) 19671 if (null == uninstallCommand || -1 == uninstallCommand.IndexOf(expectedArgument, StringComparison.OrdinalIgnoreCase))
19672 { 19672 {
19673 this.Core.OnMessage(WixWarnings.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "UninstallCommand", uninstallCommand, expectedArgument, "Protocol", "netfx4")); 19673 this.Core.Write(WarningMessages.AttributeShouldContain(sourceLineNumbers, node.Name.LocalName, "UninstallCommand", uninstallCommand, expectedArgument, "Protocol", "netfx4"));
19674 } 19674 }
19675 } 19675 }
19676 } 19676 }
@@ -19884,7 +19884,7 @@ namespace WixToolset.Core
19884 19884
19885 if (String.IsNullOrEmpty(condition)) 19885 if (String.IsNullOrEmpty(condition))
19886 { 19886 {
19887 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Condition")); 19887 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Condition"));
19888 } 19888 }
19889 19889
19890 this.Core.ParseForExtensionElements(node); 19890 this.Core.ParseForExtensionElements(node);
@@ -19931,7 +19931,7 @@ namespace WixToolset.Core
19931 19931
19932 if (null == id) 19932 if (null == id)
19933 { 19933 {
19934 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 19934 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
19935 id = Identifier.Invalid; 19935 id = Identifier.Invalid;
19936 } 19936 }
19937 19937
@@ -20042,12 +20042,12 @@ namespace WixToolset.Core
20042 20042
20043 if (null == id) 20043 if (null == id)
20044 { 20044 {
20045 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 20045 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
20046 } 20046 }
20047 20047
20048 if (null != after && ComplexReferenceParentType.Container == parentType) 20048 if (null != after && ComplexReferenceParentType.Container == parentType)
20049 { 20049 {
20050 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "After", parentId)); 20050 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "After", parentId));
20051 } 20051 }
20052 20052
20053 this.Core.ParseForExtensionElements(node); 20053 this.Core.ParseForExtensionElements(node);
@@ -20175,12 +20175,12 @@ namespace WixToolset.Core
20175 20175
20176 if (null == name) 20176 if (null == name)
20177 { 20177 {
20178 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 20178 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
20179 } 20179 }
20180 20180
20181 if (null == value) 20181 if (null == value)
20182 { 20182 {
20183 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 20183 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
20184 } 20184 }
20185 20185
20186 this.Core.ParseForExtensionElements(node); 20186 this.Core.ParseForExtensionElements(node);
@@ -20232,7 +20232,7 @@ namespace WixToolset.Core
20232 20232
20233 if (null == id) 20233 if (null == id)
20234 { 20234 {
20235 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 20235 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
20236 } 20236 }
20237 20237
20238 this.Core.ParseForExtensionElements(node); 20238 this.Core.ParseForExtensionElements(node);
@@ -20281,7 +20281,7 @@ namespace WixToolset.Core
20281 20281
20282 if (null == id) 20282 if (null == id)
20283 { 20283 {
20284 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 20284 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
20285 } 20285 }
20286 20286
20287 if (!String.IsNullOrEmpty(action)) 20287 if (!String.IsNullOrEmpty(action))
@@ -20298,7 +20298,7 @@ namespace WixToolset.Core
20298 case Wix.RelatedBundle.ActionType.Patch: 20298 case Wix.RelatedBundle.ActionType.Patch:
20299 break; 20299 break;
20300 default: 20300 default:
20301 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", action, "Detect", "Upgrade", "Addon", "Patch")); 20301 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", action, "Detect", "Upgrade", "Addon", "Patch"));
20302 break; 20302 break;
20303 } 20303 }
20304 } 20304 }
@@ -20344,7 +20344,7 @@ namespace WixToolset.Core
20344 20344
20345 if (null == location) 20345 if (null == location)
20346 { 20346 {
20347 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Location")); 20347 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Location"));
20348 } 20348 }
20349 20349
20350 this.Core.ParseForExtensionElements(node); 20350 this.Core.ParseForExtensionElements(node);
@@ -20409,11 +20409,11 @@ namespace WixToolset.Core
20409 20409
20410 if (null == name) 20410 if (null == name)
20411 { 20411 {
20412 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); 20412 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
20413 } 20413 }
20414 else if (name.StartsWith("Wix", StringComparison.OrdinalIgnoreCase)) 20414 else if (name.StartsWith("Wix", StringComparison.OrdinalIgnoreCase))
20415 { 20415 {
20416 this.Core.OnMessage(WixErrors.ReservedNamespaceViolation(sourceLineNumbers, node.Name.LocalName, "Name", "Wix")); 20416 this.Core.Write(ErrorMessages.ReservedNamespaceViolation(sourceLineNumbers, node.Name.LocalName, "Name", "Wix"));
20417 } 20417 }
20418 20418
20419 if (null == type && null != value) 20419 if (null == type && null != value)
@@ -20459,7 +20459,7 @@ namespace WixToolset.Core
20459 20459
20460 if (null == value && null != type) 20460 if (null == value && null != type)
20461 { 20461 {
20462 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, "Variable", "Value", "Type")); 20462 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, "Variable", "Value", "Type"));
20463 } 20463 }
20464 20464
20465 this.Core.ParseForExtensionElements(node); 20465 this.Core.ParseForExtensionElements(node);
@@ -20586,12 +20586,12 @@ namespace WixToolset.Core
20586 20586
20587 if (null == id) 20587 if (null == id)
20588 { 20588 {
20589 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 20589 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
20590 } 20590 }
20591 20591
20592 if (null == value) 20592 if (null == value)
20593 { 20593 {
20594 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); 20594 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
20595 } 20595 }
20596 20596
20597 this.Core.ParseForExtensionElements(node); 20597 this.Core.ParseForExtensionElements(node);
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs
index 26c19acc..7cb7b703 100644
--- a/src/WixToolset.Core/CompilerCore.cs
+++ b/src/WixToolset.Core/CompilerCore.cs
@@ -8,14 +8,11 @@ namespace WixToolset.Core
8 using System.Diagnostics; 8 using System.Diagnostics;
9 using System.Diagnostics.CodeAnalysis; 9 using System.Diagnostics.CodeAnalysis;
10 using System.Globalization; 10 using System.Globalization;
11 using System.IO;
12 using System.Reflection; 11 using System.Reflection;
13 using System.Security.Cryptography;
14 using System.Text; 12 using System.Text;
15 using System.Text.RegularExpressions; 13 using System.Text.RegularExpressions;
16 using System.Xml.Linq; 14 using System.Xml.Linq;
17 using WixToolset.Data; 15 using WixToolset.Data;
18 using WixToolset.Data.Tuples;
19 using WixToolset.Extensibility; 16 using WixToolset.Extensibility;
20 using WixToolset.Extensibility.Services; 17 using WixToolset.Extensibility.Services;
21 using Wix = WixToolset.Data.Serialize; 18 using Wix = WixToolset.Data.Serialize;
@@ -128,10 +125,10 @@ namespace WixToolset.Core
128 "REMOVE" 125 "REMOVE"
129 }); 126 });
130 127
131 private Dictionary<XNamespace, ICompilerExtension> extensions; 128 private readonly Dictionary<XNamespace, ICompilerExtension> extensions;
132 private IParseHelper parseHelper; 129 private readonly IParseHelper parseHelper;
133 private Intermediate intermediate; 130 private readonly Intermediate intermediate;
134 131 private readonly IMessaging messaging;
135 private HashSet<string> activeSectionInlinedDirectoryIds; 132 private HashSet<string> activeSectionInlinedDirectoryIds;
136 private HashSet<string> activeSectionSimpleReferences; 133 private HashSet<string> activeSectionSimpleReferences;
137 134
@@ -140,11 +137,12 @@ namespace WixToolset.Core
140 /// </summary> 137 /// </summary>
141 /// <param name="intermediate">The Intermediate object representing compiled source document.</param> 138 /// <param name="intermediate">The Intermediate object representing compiled source document.</param>
142 /// <param name="extensions">The WiX extensions collection.</param> 139 /// <param name="extensions">The WiX extensions collection.</param>
143 internal CompilerCore(Intermediate intermediate, IParseHelper parseHelper, Dictionary<XNamespace, ICompilerExtension> extensions) 140 internal CompilerCore(Intermediate intermediate, IMessaging messaging, IParseHelper parseHelper, Dictionary<XNamespace, ICompilerExtension> extensions)
144 { 141 {
145 this.extensions = extensions; 142 this.extensions = extensions;
146 this.parseHelper = parseHelper; 143 this.parseHelper = parseHelper;
147 this.intermediate = intermediate; 144 this.intermediate = intermediate;
145 this.messaging = messaging;
148 } 146 }
149 147
150 /// <summary> 148 /// <summary>
@@ -157,7 +155,7 @@ namespace WixToolset.Core
157 /// Gets whether the compiler core encountered an error while processing. 155 /// Gets whether the compiler core encountered an error while processing.
158 /// </summary> 156 /// </summary>
159 /// <value>Flag if core encountered an error during processing.</value> 157 /// <value>Flag if core encountered an error during processing.</value>
160 public bool EncounteredError => Messaging.Instance.EncounteredError; 158 public bool EncounteredError => this.messaging.EncounteredError;
161 159
162 /// <summary> 160 /// <summary>
163 /// Gets or sets the option to show pedantic messages. 161 /// Gets or sets the option to show pedantic messages.
@@ -511,7 +509,7 @@ namespace WixToolset.Core
511 } 509 }
512 catch (NotSupportedException) 510 catch (NotSupportedException)
513 { 511 {
514 this.OnMessage(WixErrors.IllegalCodepageAttribute(sourceLineNumbers, value, attribute.Parent.Name.LocalName, attribute.Name.LocalName)); 512 this.Write(ErrorMessages.IllegalCodepageAttribute(sourceLineNumbers, value, attribute.Parent.Name.LocalName, attribute.Name.LocalName));
515 } 513 }
516 514
517 return CompilerConstants.IllegalInteger; 515 return CompilerConstants.IllegalInteger;
@@ -548,11 +546,11 @@ namespace WixToolset.Core
548 catch (NotSupportedException) 546 catch (NotSupportedException)
549 { 547 {
550 // not a valid windows code page 548 // not a valid windows code page
551 this.OnMessage(WixErrors.IllegalCodepageAttribute(sourceLineNumbers, value, attribute.Parent.Name.LocalName, attribute.Name.LocalName)); 549 this.Write(ErrorMessages.IllegalCodepageAttribute(sourceLineNumbers, value, attribute.Parent.Name.LocalName, attribute.Name.LocalName));
552 } 550 }
553 catch (WixException e) 551 catch (WixException e)
554 { 552 {
555 this.OnMessage(e.Error); 553 this.messaging.Write(e.Error);
556 } 554 }
557 555
558 return null; 556 return null;
@@ -612,15 +610,15 @@ namespace WixToolset.Core
612 } 610 }
613 catch (ArgumentOutOfRangeException) 611 catch (ArgumentOutOfRangeException)
614 { 612 {
615 this.OnMessage(WixErrors.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 613 this.Write(ErrorMessages.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
616 } 614 }
617 catch (FormatException) 615 catch (FormatException)
618 { 616 {
619 this.OnMessage(WixErrors.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 617 this.Write(ErrorMessages.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
620 } 618 }
621 catch (OverflowException) 619 catch (OverflowException)
622 { 620 {
623 this.OnMessage(WixErrors.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 621 this.Write(ErrorMessages.InvalidDateTimeFormat(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
624 } 622 }
625 } 623 }
626 624
@@ -661,11 +659,11 @@ namespace WixToolset.Core
661 659
662 if (CompilerConstants.IntegerNotSet == integer || CompilerConstants.IllegalInteger == integer) 660 if (CompilerConstants.IntegerNotSet == integer || CompilerConstants.IllegalInteger == integer)
663 { 661 {
664 this.OnMessage(WixErrors.IntegralValueSentinelCollision(sourceLineNumbers, integer)); 662 this.Write(ErrorMessages.IntegralValueSentinelCollision(sourceLineNumbers, integer));
665 } 663 }
666 else if (minimum > integer || maximum < integer) 664 else if (minimum > integer || maximum < integer)
667 { 665 {
668 this.OnMessage(WixErrors.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, integer, minimum, maximum)); 666 this.Write(ErrorMessages.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, integer, minimum, maximum));
669 integer = CompilerConstants.IllegalInteger; 667 integer = CompilerConstants.IllegalInteger;
670 } 668 }
671 669
@@ -673,11 +671,11 @@ namespace WixToolset.Core
673 } 671 }
674 catch (FormatException) 672 catch (FormatException)
675 { 673 {
676 this.OnMessage(WixErrors.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 674 this.Write(ErrorMessages.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
677 } 675 }
678 catch (OverflowException) 676 catch (OverflowException)
679 { 677 {
680 this.OnMessage(WixErrors.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 678 this.Write(ErrorMessages.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
681 } 679 }
682 } 680 }
683 } 681 }
@@ -768,7 +766,7 @@ namespace WixToolset.Core
768 // Previous code never returned 'NotSet'! 766 // Previous code never returned 'NotSet'!
769 break; 767 break;
770 default: 768 default:
771 this.OnMessage(WixErrors.IllegalYesNoAlwaysValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 769 this.Write(ErrorMessages.IllegalYesNoAlwaysValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
772 break; 770 break;
773 } 771 }
774 } 772 }
@@ -796,11 +794,11 @@ namespace WixToolset.Core
796 { 794 {
797 if (!this.IsValidShortFilename(value, allowWildcards) && !this.IsValidLocIdentifier(value)) 795 if (!this.IsValidShortFilename(value, allowWildcards) && !this.IsValidLocIdentifier(value))
798 { 796 {
799 this.OnMessage(WixErrors.IllegalShortFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 797 this.Write(ErrorMessages.IllegalShortFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
800 } 798 }
801 else if (CompilerCore.IsAmbiguousFilename(value)) 799 else if (CompilerCore.IsAmbiguousFilename(value))
802 { 800 {
803 this.OnMessage(WixWarnings.AmbiguousFileOrDirectoryName(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 801 this.Write(WarningMessages.AmbiguousFileOrDirectoryName(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
804 } 802 }
805 } 803 }
806 804
@@ -854,12 +852,12 @@ namespace WixToolset.Core
854 // TODO: Find a way to expose the valid values programatically! 852 // TODO: Find a way to expose the valid values programatically!
855 if (allowHkmu) 853 if (allowHkmu)
856 { 854 {
857 this.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, 855 this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value,
858 "HKMU", "HKCR", "HKCU", "HKLM", "HKU")); 856 "HKMU", "HKCR", "HKCU", "HKLM", "HKU"));
859 } 857 }
860 else 858 else
861 { 859 {
862 this.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, 860 this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value,
863 "HKCR", "HKCU", "HKLM", "HKU")); 861 "HKCR", "HKCU", "HKLM", "HKU"));
864 } 862 }
865 } 863 }
@@ -926,7 +924,7 @@ namespace WixToolset.Core
926 if (Wix.InstallUninstallType.IllegalValue == installUninstall) 924 if (Wix.InstallUninstallType.IllegalValue == installUninstall)
927 { 925 {
928 // TODO: Find a way to expose the valid values programatically! 926 // TODO: Find a way to expose the valid values programatically!
929 this.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, 927 this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value,
930 "install", "uninstall", "both")); 928 "install", "uninstall", "both"));
931 } 929 }
932 } 930 }
@@ -951,7 +949,7 @@ namespace WixToolset.Core
951 result = Wix.ExitType.IllegalValue; 949 result = Wix.ExitType.IllegalValue;
952 950
953 // TODO: Find a way to expose the valid values programatically! 951 // TODO: Find a way to expose the valid values programatically!
954 this.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, 952 this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value,
955 "success", "cancel", "error", "suspend")); 953 "success", "cancel", "error", "suspend"));
956 } 954 }
957 955
@@ -974,7 +972,7 @@ namespace WixToolset.Core
974 if (CompilerCore.BuiltinBundleVariables.Contains(value)) 972 if (CompilerCore.BuiltinBundleVariables.Contains(value))
975 { 973 {
976 string illegalValues = CompilerCore.CreateValueList(ValueListKind.Or, CompilerCore.BuiltinBundleVariables); 974 string illegalValues = CompilerCore.CreateValueList(ValueListKind.Or, CompilerCore.BuiltinBundleVariables);
977 this.OnMessage(WixErrors.IllegalAttributeValueWithIllegalList(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, illegalValues)); 975 this.Write(ErrorMessages.IllegalAttributeValueWithIllegalList(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, illegalValues));
978 } 976 }
979 } 977 }
980 978
@@ -997,7 +995,7 @@ namespace WixToolset.Core
997 if (CompilerCore.DisallowedMsiProperties.Contains(value)) 995 if (CompilerCore.DisallowedMsiProperties.Contains(value))
998 { 996 {
999 string illegalValues = CompilerCore.CreateValueList(ValueListKind.Or, CompilerCore.DisallowedMsiProperties); 997 string illegalValues = CompilerCore.CreateValueList(ValueListKind.Or, CompilerCore.DisallowedMsiProperties);
1000 this.OnMessage(WixErrors.DisallowedMsiProperty(sourceLineNumbers, value, illegalValues)); 998 this.Write(ErrorMessages.DisallowedMsiProperty(sourceLineNumbers, value, illegalValues));
1001 } 999 }
1002 } 1000 }
1003 1001
@@ -1099,12 +1097,12 @@ namespace WixToolset.Core
1099 } 1097 }
1100 1098
1101 /// <summary> 1099 /// <summary>
1102 /// Sends a message to the message delegate if there is one. 1100 /// Sends a message.
1103 /// </summary> 1101 /// </summary>
1104 /// <param name="mea">Message event arguments.</param> 1102 /// <param name="message">Message to write.</param>
1105 public void OnMessage(MessageEventArgs e) 1103 public void Write(Message message)
1106 { 1104 {
1107 Messaging.Instance.OnMessage(e); 1105 this.messaging.Write(message);
1108 } 1106 }
1109 1107
1110 /// <summary> 1108 /// <summary>
@@ -1128,11 +1126,11 @@ namespace WixToolset.Core
1128 { 1126 {
1129 if (this.GetType().Assembly.Equals(caller)) 1127 if (this.GetType().Assembly.Equals(caller))
1130 { 1128 {
1131 this.OnMessage(WixErrors.InsufficientVersion(sourceLineNumbers, versionCurrent, versionRequired)); 1129 this.Write(ErrorMessages.InsufficientVersion(sourceLineNumbers, versionCurrent, versionRequired));
1132 } 1130 }
1133 else 1131 else
1134 { 1132 {
1135 this.OnMessage(WixErrors.InsufficientVersion(sourceLineNumbers, versionCurrent, versionRequired, name.Name)); 1133 this.Write(ErrorMessages.InsufficientVersion(sourceLineNumbers, versionCurrent, versionRequired, name.Name));
1136 } 1134 }
1137 } 1135 }
1138 } 1136 }
diff --git a/src/WixToolset.Core/Converter.cs b/src/WixToolset.Core/Converter.cs
index c0297758..fd925f7a 100644
--- a/src/WixToolset.Core/Converter.cs
+++ b/src/WixToolset.Core/Converter.cs
@@ -10,6 +10,7 @@ namespace WixToolset.Core
10 using System.Xml; 10 using System.Xml;
11 using System.Xml.Linq; 11 using System.Xml.Linq;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Extensibility.Services;
13 14
14 /// <summary> 15 /// <summary>
15 /// WiX source code converter. 16 /// WiX source code converter.
@@ -64,7 +65,7 @@ namespace WixToolset.Core
64 /// <param name="indentationAmount">Indentation value to use when validating leading whitespace.</param> 65 /// <param name="indentationAmount">Indentation value to use when validating leading whitespace.</param>
65 /// <param name="errorsAsWarnings">Test errors to display as warnings.</param> 66 /// <param name="errorsAsWarnings">Test errors to display as warnings.</param>
66 /// <param name="ignoreErrors">Test errors to ignore.</param> 67 /// <param name="ignoreErrors">Test errors to ignore.</param>
67 public Converter(int indentationAmount, IEnumerable<string> errorsAsWarnings = null, IEnumerable<string> ignoreErrors = null) 68 public Converter(IMessaging messaging, int indentationAmount, IEnumerable<string> errorsAsWarnings = null, IEnumerable<string> ignoreErrors = null)
68 { 69 {
69 this.ConvertElementMapping = new Dictionary<XName, Action<XElement>>() 70 this.ConvertElementMapping = new Dictionary<XName, Action<XElement>>()
70 { 71 {
@@ -77,6 +78,8 @@ namespace WixToolset.Core
77 { WixElementWithoutNamespaceName, this.ConvertWixElementWithoutNamespace }, 78 { WixElementWithoutNamespaceName, this.ConvertWixElementWithoutNamespace },
78 }; 79 };
79 80
81 this.Messaging = messaging;
82
80 this.IndentationAmount = indentationAmount; 83 this.IndentationAmount = indentationAmount;
81 84
82 this.ErrorsAsWarnings = new HashSet<ConverterTestType>(this.YieldConverterTypes(errorsAsWarnings)); 85 this.ErrorsAsWarnings = new HashSet<ConverterTestType>(this.YieldConverterTypes(errorsAsWarnings));
@@ -90,6 +93,8 @@ namespace WixToolset.Core
90 93
91 private HashSet<ConverterTestType> IgnoreErrors { get; set; } 94 private HashSet<ConverterTestType> IgnoreErrors { get; set; }
92 95
96 private IMessaging Messaging { get; }
97
93 private int IndentationAmount { get; set; } 98 private int IndentationAmount { get; set; }
94 99
95 private string SourceFile { get; set; } 100 private string SourceFile { get; set; }
@@ -528,9 +533,9 @@ namespace WixToolset.Core
528 bool warning = this.ErrorsAsWarnings.Contains(converterTestType); 533 bool warning = this.ErrorsAsWarnings.Contains(converterTestType);
529 string display = String.Format(CultureInfo.CurrentCulture, message, args); 534 string display = String.Format(CultureInfo.CurrentCulture, message, args);
530 535
531 WixGenericMessageEventArgs ea = new WixGenericMessageEventArgs(sourceLine, (int)converterTestType, warning ? MessageLevel.Warning : MessageLevel.Error, "{0} ({1})", display, converterTestType.ToString()); 536 var msg = new Message(sourceLine, warning ? MessageLevel.Warning : MessageLevel.Error, (int)converterTestType, "{0} ({1})", display, converterTestType.ToString());
532 537
533 Messaging.Instance.OnMessage(ea); 538 this.Messaging.Write(msg);
534 539
535 return true; 540 return true;
536 } 541 }
diff --git a/src/WixToolset.Core/Data/WixToolset.Core.Data.messages.resources b/src/WixToolset.Core/Data/WixToolset.Core.Data.messages.resources
deleted file mode 100644
index 92c07940..00000000
--- a/src/WixToolset.Core/Data/WixToolset.Core.Data.messages.resources
+++ /dev/null
Binary files differ
diff --git a/src/WixToolset.Core/Data/WixToolset.Core.WixStrings.resources b/src/WixToolset.Core/Data/WixToolset.Core.WixStrings.resources
deleted file mode 100644
index 8f5a010a..00000000
--- a/src/WixToolset.Core/Data/WixToolset.Core.WixStrings.resources
+++ /dev/null
Binary files differ
diff --git a/src/WixToolset.Core/Data/messages.cs b/src/WixToolset.Core/Data/messages.cs
deleted file mode 100644
index 045565fc..00000000
--- a/src/WixToolset.Core/Data/messages.cs
+++ /dev/null
@@ -1,3106 +0,0 @@
1//------------------------------------------------------------------------------
2// <auto-generated>
3// This code was generated by a tool.
4// Runtime Version:4.0.30319.42000
5//
6// Changes to this file may cause incorrect behavior and will be lost if
7// the code is regenerated.
8// </auto-generated>
9//------------------------------------------------------------------------------
10
11namespace WixToolset
12{
13 using System;
14 using System.Reflection;
15 using System.Resources;
16 using WixToolset.Data;
17
18
19 public class WixErrorEventArgs : MessageEventArgs
20 {
21
22 private static ResourceManager resourceManager = new ResourceManager("WixToolset.Core.Data.Messages", Assembly.GetExecutingAssembly());
23
24 public WixErrorEventArgs(SourceLineNumber sourceLineNumbers, int id, string resourceName, params object[] messageArgs) :
25 base(sourceLineNumbers, id, resourceName, messageArgs)
26 {
27 base.Level = MessageLevel.Error;
28 base.ResourceManager = resourceManager;
29 }
30 }
31
32 public sealed class WixErrors
33 {
34
35 private WixErrors()
36 {
37 }
38
39 public static MessageEventArgs UnexpectedException(string message, string type, string stackTrace)
40 {
41 return new WixErrorEventArgs(null, 1, "WixErrors_UnexpectedException_1", message, type, stackTrace);
42 }
43
44 public static MessageEventArgs UnexpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
45 {
46 return new WixErrorEventArgs(sourceLineNumbers, 4, "WixErrors_UnexpectedAttribute_1", elementName, attributeName);
47 }
48
49 public static MessageEventArgs UnexpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childElementName)
50 {
51 return new WixErrorEventArgs(sourceLineNumbers, 5, "WixErrors_UnexpectedElement_1", elementName, childElementName);
52 }
53
54 public static MessageEventArgs IllegalEmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
55 {
56 return new WixErrorEventArgs(sourceLineNumbers, 6, "WixErrors_IllegalEmptyAttributeValue_1", elementName, attributeName);
57 }
58
59 public static MessageEventArgs IllegalEmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string defaultValue)
60 {
61 return new WixErrorEventArgs(sourceLineNumbers, 6, "WixErrors_IllegalEmptyAttributeValue_2", elementName, attributeName, defaultValue);
62 }
63
64 public static MessageEventArgs InsufficientVersion(SourceLineNumber sourceLineNumbers, System.Version currentVersion, System.Version requiredVersion)
65 {
66 return new WixErrorEventArgs(sourceLineNumbers, 7, "WixErrors_InsufficientVersion_1", currentVersion, requiredVersion);
67 }
68
69 public static MessageEventArgs InsufficientVersion(SourceLineNumber sourceLineNumbers, System.Version currentVersion, System.Version requiredVersion, string extension)
70 {
71 return new WixErrorEventArgs(sourceLineNumbers, 7, "WixErrors_InsufficientVersion_2", currentVersion, requiredVersion, extension);
72 }
73
74 public static MessageEventArgs IllegalIntegerValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
75 {
76 return new WixErrorEventArgs(sourceLineNumbers, 8, "WixErrors_IllegalIntegerValue_1", elementName, attributeName, value);
77 }
78
79 public static MessageEventArgs IllegalGuidValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
80 {
81 return new WixErrorEventArgs(sourceLineNumbers, 9, "WixErrors_IllegalGuidValue_1", elementName, attributeName, value);
82 }
83
84 public static MessageEventArgs ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
85 {
86 return new WixErrorEventArgs(sourceLineNumbers, 10, "WixErrors_ExpectedAttribute_1", elementName, attributeName);
87 }
88
89 public static MessageEventArgs ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attribute1Name, string attribute2Name, bool eitherOr)
90 {
91 return new WixErrorEventArgs(sourceLineNumbers, 10, "WixErrors_ExpectedAttribute_2", elementName, attribute1Name, attribute2Name, eitherOr);
92 }
93
94 public static MessageEventArgs ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
95 {
96 return new WixErrorEventArgs(sourceLineNumbers, 10, "WixErrors_ExpectedAttribute_3", elementName, attributeName, otherAttributeName);
97 }
98
99 public static MessageEventArgs ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue)
100 {
101 return new WixErrorEventArgs(sourceLineNumbers, 10, "WixErrors_ExpectedAttribute_4", elementName, attributeName, otherAttributeName, otherAttributeValue);
102 }
103
104 public static MessageEventArgs ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue, bool otherAttributeValueUnless)
105 {
106 return new WixErrorEventArgs(sourceLineNumbers, 10, "WixErrors_ExpectedAttribute_5", elementName, attributeName, otherAttributeName, otherAttributeValue, otherAttributeValueUnless);
107 }
108
109 public static MessageEventArgs SecurePropertyNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string propertyId)
110 {
111 return new WixErrorEventArgs(sourceLineNumbers, 11, "WixErrors_SecurePropertyNotUppercase_1", elementName, attributeName, propertyId);
112 }
113
114 public static MessageEventArgs SearchPropertyNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
115 {
116 return new WixErrorEventArgs(sourceLineNumbers, 12, "WixErrors_SearchPropertyNotUppercase_1", elementName, attributeName, value);
117 }
118
119 public static MessageEventArgs StreamNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length, int maximumLength)
120 {
121 return new WixErrorEventArgs(sourceLineNumbers, 13, "WixErrors_StreamNameTooLong_1", elementName, attributeName, value, length, maximumLength);
122 }
123
124 public static MessageEventArgs StreamNameTooLong(SourceLineNumber sourceLineNumbers, string tableName, string streamName, int streamLength)
125 {
126 return new WixErrorEventArgs(sourceLineNumbers, 13, "WixErrors_StreamNameTooLong_2", tableName, streamName, streamLength);
127 }
128
129 public static MessageEventArgs IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string value)
130 {
131 return new WixErrorEventArgs(sourceLineNumbers, 14, "WixErrors_IllegalIdentifier_1", elementName, value);
132 }
133
134 public static MessageEventArgs IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int disambiguator)
135 {
136 return new WixErrorEventArgs(sourceLineNumbers, 14, "WixErrors_IllegalIdentifier_2", elementName, attributeName, disambiguator);
137 }
138
139 public static MessageEventArgs IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
140 {
141 return new WixErrorEventArgs(sourceLineNumbers, 14, "WixErrors_IllegalIdentifier_3", elementName, attributeName, value);
142 }
143
144 public static MessageEventArgs IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string identifier)
145 {
146 return new WixErrorEventArgs(sourceLineNumbers, 14, "WixErrors_IllegalIdentifier_4", elementName, attributeName, value, identifier);
147 }
148
149 public static MessageEventArgs IllegalYesNoValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
150 {
151 return new WixErrorEventArgs(sourceLineNumbers, 15, "WixErrors_IllegalYesNoValue_1", elementName, attributeName, value);
152 }
153
154 public static MessageEventArgs CabCreationFailed(string cabName, string fileName, int error)
155 {
156 return new WixErrorEventArgs(null, 16, "WixErrors_CabCreationFailed_1", cabName, fileName, error);
157 }
158
159 public static MessageEventArgs CabCreationFailed(string cabName, int error)
160 {
161 return new WixErrorEventArgs(null, 16, "WixErrors_CabCreationFailed_2", cabName, error);
162 }
163
164 public static MessageEventArgs CabExtractionFailed(string cabName, string directoryName)
165 {
166 return new WixErrorEventArgs(null, 17, "WixErrors_CabExtractionFailed_1", cabName, directoryName);
167 }
168
169 public static MessageEventArgs CabExtractionFailed(string cabName, string mergeModulePath, string directoryName)
170 {
171 return new WixErrorEventArgs(null, 17, "WixErrors_CabExtractionFailed_2", cabName, mergeModulePath, directoryName);
172 }
173
174 public static MessageEventArgs AppIdIncompatibleAdvertiseState(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string parentValue)
175 {
176 return new WixErrorEventArgs(sourceLineNumbers, 18, "WixErrors_AppIdIncompatibleAdvertiseState_1", elementName, attributeName, value, parentValue);
177 }
178
179 public static MessageEventArgs IllegalAttributeWhenAdvertised(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
180 {
181 return new WixErrorEventArgs(sourceLineNumbers, 19, "WixErrors_IllegalAttributeWhenAdvertised_1", elementName, attributeName);
182 }
183
184 public static MessageEventArgs ConditionExpected(SourceLineNumber sourceLineNumbers, string elementName)
185 {
186 return new WixErrorEventArgs(sourceLineNumbers, 20, "WixErrors_ConditionExpected_1", elementName);
187 }
188
189 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1)
190 {
191 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_1", elementName, attributeName, value, legalValue1);
192 }
193
194 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2)
195 {
196 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_2", elementName, attributeName, value, legalValue1, legalValue2);
197 }
198
199 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3)
200 {
201 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_3", elementName, attributeName, value, legalValue1, legalValue2, legalValue3);
202 }
203
204 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4)
205 {
206 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_4", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4);
207 }
208
209 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5)
210 {
211 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_5", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5);
212 }
213
214 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6)
215 {
216 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_6", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6);
217 }
218
219 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6, string legalValue7)
220 {
221 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_7", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7);
222 }
223
224 public static MessageEventArgs IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6, string legalValue7, string legalValue8)
225 {
226 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_8", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7, legalValue8);
227 }
228
229 public static MessageEventArgs IllegalAttributeValue(
230 SourceLineNumber sourceLineNumbers,
231 string elementName,
232 string attributeName,
233 string value,
234 string legalValue1,
235 string legalValue2,
236 string legalValue3,
237 string legalValue4,
238 string legalValue5,
239 string legalValue6,
240 string legalValue7,
241 string legalValue8,
242 string legalValue9,
243 string legalValue10,
244 string legalValue11,
245 string legalValue12,
246 string legalValue13,
247 string legalValue14,
248 string legalValue15,
249 string legalValue16,
250 string legalValue17,
251 string legalValue18,
252 string legalValue19,
253 string legalValue20,
254 string legalValue21,
255 string legalValue22,
256 string legalValue23,
257 string legalValue24,
258 string legalValue25,
259 string legalValue26)
260 {
261 return new WixErrorEventArgs(sourceLineNumbers, 21, "WixErrors_IllegalAttributeValue_9", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7, legalValue8, legalValue9, legalValue10, legalValue11, legalValue12, legalValue13, legalValue14, legalValue15, legalValue16, legalValue17, legalValue18, legalValue19, legalValue20, legalValue21, legalValue22, legalValue23, legalValue24, legalValue25, legalValue26);
262 }
263
264 public static MessageEventArgs CustomActionMultipleSources(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5)
265 {
266 return new WixErrorEventArgs(sourceLineNumbers, 22, "WixErrors_CustomActionMultipleSources_1", elementName, attributeName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5);
267 }
268
269 public static MessageEventArgs CustomActionMultipleTargets(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6, string attributeName7)
270 {
271 return new WixErrorEventArgs(sourceLineNumbers, 23, "WixErrors_CustomActionMultipleTargets_1", elementName, attributeName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6, attributeName7);
272 }
273
274 public static MessageEventArgs CustomActionIllegalInnerText(SourceLineNumber sourceLineNumbers, string elementName, string innerText, string attributeName)
275 {
276 return new WixErrorEventArgs(sourceLineNumbers, 24, "WixErrors_CustomActionIllegalInnerText_1", elementName, innerText, attributeName);
277 }
278
279 public static MessageEventArgs DirectoryRootWithoutName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
280 {
281 return new WixErrorEventArgs(sourceLineNumbers, 25, "WixErrors_DirectoryRootWithoutName_1", elementName, attributeName);
282 }
283
284 public static MessageEventArgs IllegalShortFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
285 {
286 return new WixErrorEventArgs(sourceLineNumbers, 26, "WixErrors_IllegalShortFilename_1", elementName, attributeName, value);
287 }
288
289 public static MessageEventArgs IllegalLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
290 {
291 return new WixErrorEventArgs(sourceLineNumbers, 27, "WixErrors_IllegalLongFilename_1", elementName, attributeName, value);
292 }
293
294 public static MessageEventArgs IllegalLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string filename)
295 {
296 return new WixErrorEventArgs(sourceLineNumbers, 27, "WixErrors_IllegalLongFilename_2", elementName, attributeName, value, filename);
297 }
298
299 public static MessageEventArgs TableNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
300 {
301 return new WixErrorEventArgs(sourceLineNumbers, 28, "WixErrors_TableNameTooLong_1", elementName, attributeName, value);
302 }
303
304 public static MessageEventArgs FeatureConfigurableDirectoryNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
305 {
306 return new WixErrorEventArgs(sourceLineNumbers, 29, "WixErrors_FeatureConfigurableDirectoryNotUppercase_1", elementName, attributeName, value);
307 }
308
309 public static MessageEventArgs FeatureCannotFavorAndDisallowAdvertise(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string otherAttributeName, string otherValue)
310 {
311 return new WixErrorEventArgs(sourceLineNumbers, 30, "WixErrors_FeatureCannotFavorAndDisallowAdvertise_1", elementName, attributeName, value, otherAttributeName, otherValue);
312 }
313
314 public static MessageEventArgs FeatureCannotFollowParentAndFavorLocalOrSource(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
315 {
316 return new WixErrorEventArgs(sourceLineNumbers, 31, "WixErrors_FeatureCannotFollowParentAndFavorLocalOrSource_1", elementName, attributeName, otherAttributeName, otherValue);
317 }
318
319 public static MessageEventArgs MediaEmbeddedCabinetNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length)
320 {
321 return new WixErrorEventArgs(sourceLineNumbers, 32, "WixErrors_MediaEmbeddedCabinetNameTooLong_1", elementName, attributeName, value, length);
322 }
323
324 public static MessageEventArgs RegistrySubElementCannotBeRemoved(SourceLineNumber sourceLineNumbers, string registryElementName, string registryValueElementName, string actionAttributeName, string removeValue, string removeKeyOnInstallValue)
325 {
326 return new WixErrorEventArgs(sourceLineNumbers, 33, "WixErrors_RegistrySubElementCannotBeRemoved_1", registryElementName, registryValueElementName, actionAttributeName, removeValue, removeKeyOnInstallValue);
327 }
328
329 public static MessageEventArgs RegistryMultipleValuesWithoutMultiString(SourceLineNumber sourceLineNumbers, string registryElementName, string valueAttributeName, string registryValueElementName, string typeAttributeName)
330 {
331 return new WixErrorEventArgs(sourceLineNumbers, 34, "WixErrors_RegistryMultipleValuesWithoutMultiString_1", registryElementName, valueAttributeName, registryValueElementName, typeAttributeName);
332 }
333
334 public static MessageEventArgs IllegalAttributeWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
335 {
336 return new WixErrorEventArgs(sourceLineNumbers, 35, "WixErrors_IllegalAttributeWithOtherAttribute_1", elementName, attributeName, otherAttributeName);
337 }
338
339 public static MessageEventArgs IllegalAttributeWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue)
340 {
341 return new WixErrorEventArgs(sourceLineNumbers, 35, "WixErrors_IllegalAttributeWithOtherAttribute_2", elementName, attributeName, otherAttributeName, otherAttributeValue);
342 }
343
344 public static MessageEventArgs IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2)
345 {
346 return new WixErrorEventArgs(sourceLineNumbers, 36, "WixErrors_IllegalAttributeWithOtherAttributes_1", elementName, attributeName, otherAttributeName1, otherAttributeName2);
347 }
348
349 public static MessageEventArgs IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3)
350 {
351 return new WixErrorEventArgs(sourceLineNumbers, 36, "WixErrors_IllegalAttributeWithOtherAttributes_2", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3);
352 }
353
354 public static MessageEventArgs IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3, string otherAttributeName4)
355 {
356 return new WixErrorEventArgs(sourceLineNumbers, 36, "WixErrors_IllegalAttributeWithOtherAttributes_3", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3, otherAttributeName4);
357 }
358
359 public static MessageEventArgs IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
360 {
361 return new WixErrorEventArgs(sourceLineNumbers, 37, "WixErrors_IllegalAttributeWithoutOtherAttributes_1", elementName, attributeName, otherAttributeName);
362 }
363
364 public static MessageEventArgs IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2)
365 {
366 return new WixErrorEventArgs(sourceLineNumbers, 37, "WixErrors_IllegalAttributeWithoutOtherAttributes_2", elementName, attributeName, otherAttributeName1, otherAttributeName2);
367 }
368
369 public static MessageEventArgs IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeValue, bool uniquifier)
370 {
371 return new WixErrorEventArgs(sourceLineNumbers, 37, "WixErrors_IllegalAttributeWithoutOtherAttributes_3", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeValue, uniquifier);
372 }
373
374 public static MessageEventArgs IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3)
375 {
376 return new WixErrorEventArgs(sourceLineNumbers, 37, "WixErrors_IllegalAttributeWithoutOtherAttributes_4", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3);
377 }
378
379 public static MessageEventArgs IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3, string otherAttributeName4)
380 {
381 return new WixErrorEventArgs(sourceLineNumbers, 37, "WixErrors_IllegalAttributeWithoutOtherAttributes_5", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3, otherAttributeName4);
382 }
383
384 public static MessageEventArgs IllegalAttributeValueWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName, string otherAttributeValue)
385 {
386 return new WixErrorEventArgs(sourceLineNumbers, 38, "WixErrors_IllegalAttributeValueWithoutOtherAttribute_1", elementName, attributeName, attributeValue, otherAttributeName, otherAttributeValue);
387 }
388
389 public static MessageEventArgs IllegalAttributeValueWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName)
390 {
391 return new WixErrorEventArgs(sourceLineNumbers, 38, "WixErrors_IllegalAttributeValueWithoutOtherAttribute_2", elementName, attributeName, attributeValue, otherAttributeName);
392 }
393
394 public static MessageEventArgs IntegralValueSentinelCollision(SourceLineNumber sourceLineNumbers, int value)
395 {
396 return new WixErrorEventArgs(sourceLineNumbers, 39, "WixErrors_IntegralValueSentinelCollision_1", value);
397 }
398
399 public static MessageEventArgs IntegralValueSentinelCollision(SourceLineNumber sourceLineNumbers, long value)
400 {
401 return new WixErrorEventArgs(sourceLineNumbers, 39, "WixErrors_IntegralValueSentinelCollision_2", value);
402 }
403
404 public static MessageEventArgs ExampleGuid(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
405 {
406 return new WixErrorEventArgs(sourceLineNumbers, 40, "WixErrors_ExampleGuid_1", elementName, attributeName, value);
407 }
408
409 public static MessageEventArgs TooManyChildren(SourceLineNumber sourceLineNumbers, string elementName, string childElementName)
410 {
411 return new WixErrorEventArgs(sourceLineNumbers, 41, "WixErrors_TooManyChildren_1", elementName, childElementName);
412 }
413
414 public static MessageEventArgs ComponentMultipleKeyPaths(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string fileElementName, string registryElementName, string odbcDataSourceElementName)
415 {
416 return new WixErrorEventArgs(sourceLineNumbers, 42, "WixErrors_ComponentMultipleKeyPaths_1", elementName, attributeName, value, fileElementName, registryElementName, odbcDataSourceElementName);
417 }
418
419 public static MessageEventArgs CabClosureFailed(string cabinet)
420 {
421 return new WixErrorEventArgs(null, 43, "WixErrors_CabClosureFailed_1", cabinet);
422 }
423
424 public static MessageEventArgs CabClosureFailed(string cabinet, int error)
425 {
426 return new WixErrorEventArgs(null, 43, "WixErrors_CabClosureFailed_2", cabinet, error);
427 }
428
429 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
430 {
431 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_1", elementName, attributeName1, attributeName2);
432 }
433
434 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3)
435 {
436 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_2", elementName, attributeName1, attributeName2, attributeName3);
437 }
438
439 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4)
440 {
441 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_3", elementName, attributeName1, attributeName2, attributeName3, attributeName4);
442 }
443
444 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5)
445 {
446 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_4", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5);
447 }
448
449 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6)
450 {
451 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_5", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6);
452 }
453
454 public static MessageEventArgs ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6, string attributeName7)
455 {
456 return new WixErrorEventArgs(sourceLineNumbers, 44, "WixErrors_ExpectedAttributes_6", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6, attributeName7);
457 }
458
459 public static MessageEventArgs ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
460 {
461 return new WixErrorEventArgs(sourceLineNumbers, 45, "WixErrors_ExpectedAttributesWithOtherAttribute_1", elementName, attributeName1, attributeName2);
462 }
463
464 public static MessageEventArgs ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName)
465 {
466 return new WixErrorEventArgs(sourceLineNumbers, 45, "WixErrors_ExpectedAttributesWithOtherAttribute_2", elementName, attributeName1, attributeName2, otherAttributeName);
467 }
468
469 public static MessageEventArgs ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName, string otherAttributeValue)
470 {
471 return new WixErrorEventArgs(sourceLineNumbers, 45, "WixErrors_ExpectedAttributesWithOtherAttribute_3", elementName, attributeName1, attributeName2, otherAttributeName, otherAttributeValue);
472 }
473
474 public static MessageEventArgs ExpectedAttributesWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName)
475 {
476 return new WixErrorEventArgs(sourceLineNumbers, 46, "WixErrors_ExpectedAttributesWithoutOtherAttribute_1", elementName, attributeName1, attributeName2, otherAttributeName);
477 }
478
479 public static MessageEventArgs MissingTypeLibFile(SourceLineNumber sourceLineNumbers, string elementName, string fileElementName)
480 {
481 return new WixErrorEventArgs(sourceLineNumbers, 47, "WixErrors_MissingTypeLibFile_1", elementName, fileElementName);
482 }
483
484 public static MessageEventArgs InvalidDocumentElement(SourceLineNumber sourceLineNumbers, string elementName, string fileType, string expectedElementName)
485 {
486 return new WixErrorEventArgs(sourceLineNumbers, 48, "WixErrors_InvalidDocumentElement_1", elementName, fileType, expectedElementName);
487 }
488
489 public static MessageEventArgs ExpectedAttributeInElementOrParent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName)
490 {
491 return new WixErrorEventArgs(sourceLineNumbers, 49, "WixErrors_ExpectedAttributeInElementOrParent_1", elementName, attributeName, parentElementName);
492 }
493
494 public static MessageEventArgs ExpectedAttributeInElementOrParent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName, string parentAttributeName)
495 {
496 return new WixErrorEventArgs(sourceLineNumbers, 49, "WixErrors_ExpectedAttributeInElementOrParent_2", elementName, attributeName, parentElementName, parentAttributeName);
497 }
498
499 public static MessageEventArgs UnauthorizedAccess(string filePath)
500 {
501 return new WixErrorEventArgs(null, 50, "WixErrors_UnauthorizedAccess_1", filePath);
502 }
503
504 public static MessageEventArgs IllegalModuleExclusionLanguageAttributes(SourceLineNumber sourceLineNumbers)
505 {
506 return new WixErrorEventArgs(sourceLineNumbers, 51, "WixErrors_IllegalModuleExclusionLanguageAttributes_1");
507 }
508
509 public static MessageEventArgs NoFirstControlSpecified(SourceLineNumber sourceLineNumbers, string dialogName)
510 {
511 return new WixErrorEventArgs(sourceLineNumbers, 52, "WixErrors_NoFirstControlSpecified_1", dialogName);
512 }
513
514 public static MessageEventArgs NoDataForColumn(SourceLineNumber sourceLineNumbers, string columnName, string tableName)
515 {
516 return new WixErrorEventArgs(sourceLineNumbers, 53, "WixErrors_NoDataForColumn_1", columnName, tableName);
517 }
518
519 public static MessageEventArgs ValueAndMaskMustBeSameLength(SourceLineNumber sourceLineNumbers)
520 {
521 return new WixErrorEventArgs(sourceLineNumbers, 54, "WixErrors_ValueAndMaskMustBeSameLength_1");
522 }
523
524 public static MessageEventArgs TooManySearchElements(SourceLineNumber sourceLineNumbers, string elementName)
525 {
526 return new WixErrorEventArgs(sourceLineNumbers, 55, "WixErrors_TooManySearchElements_1", elementName);
527 }
528
529 public static MessageEventArgs IllegalAttributeExceptOnElement(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string expectedElementName)
530 {
531 return new WixErrorEventArgs(sourceLineNumbers, 56, "WixErrors_IllegalAttributeExceptOnElement_1", elementName, attributeName, expectedElementName);
532 }
533
534 public static MessageEventArgs SearchElementRequired(SourceLineNumber sourceLineNumbers, string elementName)
535 {
536 return new WixErrorEventArgs(sourceLineNumbers, 57, "WixErrors_SearchElementRequired_1", elementName);
537 }
538
539 public static MessageEventArgs MultipleIdentifiersFound(SourceLineNumber sourceLineNumbers, string elementName, string identifier, string mismatchIdentifier)
540 {
541 return new WixErrorEventArgs(sourceLineNumbers, 58, "WixErrors_MultipleIdentifiersFound_1", elementName, identifier, mismatchIdentifier);
542 }
543
544 public static MessageEventArgs AdvertiseStateMustMatch(SourceLineNumber sourceLineNumbers, string advertiseState, string parentAdvertiseState)
545 {
546 return new WixErrorEventArgs(sourceLineNumbers, 59, "WixErrors_AdvertiseStateMustMatch_1", advertiseState, parentAdvertiseState);
547 }
548
549 public static MessageEventArgs DuplicateContextValue(SourceLineNumber sourceLineNumbers, string contextValue)
550 {
551 return new WixErrorEventArgs(sourceLineNumbers, 60, "WixErrors_DuplicateContextValue_1", contextValue);
552 }
553
554 public static MessageEventArgs RelativePathForRegistryElement(SourceLineNumber sourceLineNumbers)
555 {
556 return new WixErrorEventArgs(sourceLineNumbers, 61, "WixErrors_RelativePathForRegistryElement_1");
557 }
558
559 public static MessageEventArgs IllegalAttributeWhenNested(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElement)
560 {
561 return new WixErrorEventArgs(sourceLineNumbers, 62, "WixErrors_IllegalAttributeWhenNested_1", elementName, attributeName, parentElement);
562 }
563
564 public static MessageEventArgs ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName)
565 {
566 return new WixErrorEventArgs(sourceLineNumbers, 63, "WixErrors_ExpectedElement_1", elementName, childName);
567 }
568
569 public static MessageEventArgs ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2)
570 {
571 return new WixErrorEventArgs(sourceLineNumbers, 63, "WixErrors_ExpectedElement_2", elementName, childName1, childName2);
572 }
573
574 public static MessageEventArgs ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2, string childName3)
575 {
576 return new WixErrorEventArgs(sourceLineNumbers, 63, "WixErrors_ExpectedElement_3", elementName, childName1, childName2, childName3);
577 }
578
579 public static MessageEventArgs ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2, string childName3, string childName4)
580 {
581 return new WixErrorEventArgs(sourceLineNumbers, 63, "WixErrors_ExpectedElement_4", elementName, childName1, childName2, childName3, childName4);
582 }
583
584 public static MessageEventArgs RegistryRootInvalid(SourceLineNumber sourceLineNumbers)
585 {
586 return new WixErrorEventArgs(sourceLineNumbers, 64, "WixErrors_RegistryRootInvalid_1");
587 }
588
589 public static MessageEventArgs IllegalYesNoDefaultValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
590 {
591 return new WixErrorEventArgs(sourceLineNumbers, 65, "WixErrors_IllegalYesNoDefaultValue_1", elementName, attributeName, value);
592 }
593
594 public static MessageEventArgs IllegalAttributeInMergeModule(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
595 {
596 return new WixErrorEventArgs(sourceLineNumbers, 66, "WixErrors_IllegalAttributeInMergeModule_1", elementName, attributeName);
597 }
598
599 public static MessageEventArgs GenericReadNotAllowed(SourceLineNumber sourceLineNumbers)
600 {
601 return new WixErrorEventArgs(sourceLineNumbers, 67, "WixErrors_GenericReadNotAllowed_1");
602 }
603
604 public static MessageEventArgs IllegalAttributeWithInnerText(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
605 {
606 return new WixErrorEventArgs(sourceLineNumbers, 68, "WixErrors_IllegalAttributeWithInnerText_1", elementName, attributeName);
607 }
608
609 public static MessageEventArgs SearchElementRequiredWithAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
610 {
611 return new WixErrorEventArgs(sourceLineNumbers, 69, "WixErrors_SearchElementRequiredWithAttribute_1", elementName, attributeName, attributeValue);
612 }
613
614 public static MessageEventArgs CannotAuthorSpecialProperties(SourceLineNumber sourceLineNumbers, string propertyName)
615 {
616 return new WixErrorEventArgs(sourceLineNumbers, 70, "WixErrors_CannotAuthorSpecialProperties_1", propertyName);
617 }
618
619 public static MessageEventArgs NeedSequenceBeforeOrAfter(SourceLineNumber sourceLineNumbers, string elementName)
620 {
621 return new WixErrorEventArgs(sourceLineNumbers, 72, "WixErrors_NeedSequenceBeforeOrAfter_1", elementName);
622 }
623
624 public static MessageEventArgs ValueNotSupported(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
625 {
626 return new WixErrorEventArgs(sourceLineNumbers, 73, "WixErrors_ValueNotSupported_1", elementName, attributeName, attributeValue);
627 }
628
629 public static MessageEventArgs TabbableControlNotAllowedInBillboard(SourceLineNumber sourceLineNumbers, string elementName, string controlType)
630 {
631 return new WixErrorEventArgs(sourceLineNumbers, 74, "WixErrors_TabbableControlNotAllowedInBillboard_1", elementName, controlType);
632 }
633
634 public static MessageEventArgs CheckBoxValueOnlyValidWithCheckBox(SourceLineNumber sourceLineNumbers, string elementName, string controlType)
635 {
636 return new WixErrorEventArgs(sourceLineNumbers, 75, "WixErrors_CheckBoxValueOnlyValidWithCheckBox_1", elementName, controlType);
637 }
638
639 public static MessageEventArgs CabFileDoesNotExist(string cabName, string mergeModulePath, string directoryName)
640 {
641 return new WixErrorEventArgs(null, 76, "WixErrors_CabFileDoesNotExist_1", cabName, mergeModulePath, directoryName);
642 }
643
644 public static MessageEventArgs RadioButtonTypeInconsistent(SourceLineNumber sourceLineNumbers)
645 {
646 return new WixErrorEventArgs(sourceLineNumbers, 77, "WixErrors_RadioButtonTypeInconsistent_1");
647 }
648
649 public static MessageEventArgs RadioButtonBitmapAndIconDisallowed(SourceLineNumber sourceLineNumbers)
650 {
651 return new WixErrorEventArgs(sourceLineNumbers, 78, "WixErrors_RadioButtonBitmapAndIconDisallowed_1");
652 }
653
654 public static MessageEventArgs IllegalSuppressWarningId(string suppressedId)
655 {
656 return new WixErrorEventArgs(null, 79, "WixErrors_IllegalSuppressWarningId_1", suppressedId);
657 }
658
659 public static MessageEventArgs PreprocessorIllegalForeachVariable(SourceLineNumber sourceLineNumbers, string variableName)
660 {
661 return new WixErrorEventArgs(sourceLineNumbers, 80, "WixErrors_PreprocessorIllegalForeachVariable_1", variableName);
662 }
663
664 public static MessageEventArgs PreprocessorMissingParameterPrefix(SourceLineNumber sourceLineNumbers, string parameterName)
665 {
666 return new WixErrorEventArgs(sourceLineNumbers, 81, "WixErrors_PreprocessorMissingParameterPrefix_1", parameterName);
667 }
668
669 public static MessageEventArgs PreprocessorExtensionForParameterMissing(SourceLineNumber sourceLineNumbers, string parameterName, string parameterPrefix)
670 {
671 return new WixErrorEventArgs(sourceLineNumbers, 82, "WixErrors_PreprocessorExtensionForParameterMissing_1", parameterName, parameterPrefix);
672 }
673
674 public static MessageEventArgs CannotFindFile(SourceLineNumber sourceLineNumbers, string fileId, string fileName, string filePath)
675 {
676 return new WixErrorEventArgs(sourceLineNumbers, 83, "WixErrors_CannotFindFile_1", fileId, fileName, filePath);
677 }
678
679 public static MessageEventArgs BinderFileManagerMissingFile(SourceLineNumber sourceLineNumbers, string exceptionMessage)
680 {
681 return new WixErrorEventArgs(sourceLineNumbers, 84, "WixErrors_BinderFileManagerMissingFile_1", exceptionMessage);
682 }
683
684 public static MessageEventArgs ReferenceLoopDetected(SourceLineNumber sourceLineNumbers, string loopList)
685 {
686 return new WixErrorEventArgs(sourceLineNumbers, 86, "WixErrors_ReferenceLoopDetected_1", loopList);
687 }
688
689 public static MessageEventArgs GuidContainsLowercaseLetters(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
690 {
691 return new WixErrorEventArgs(sourceLineNumbers, 87, "WixErrors_GuidContainsLowercaseLetters_1", elementName, attributeName, value);
692 }
693
694 public static MessageEventArgs InvalidDateTimeFormat(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
695 {
696 return new WixErrorEventArgs(sourceLineNumbers, 88, "WixErrors_InvalidDateTimeFormat_1", elementName, attributeName, value);
697 }
698
699 public static MessageEventArgs MultipleEntrySections(SourceLineNumber sourceLineNumbers, string sectionName1, string sectionName2)
700 {
701 return new WixErrorEventArgs(sourceLineNumbers, 89, "WixErrors_MultipleEntrySections_1", sectionName1, sectionName2);
702 }
703
704 public static MessageEventArgs MultipleEntrySections2(SourceLineNumber sourceLineNumbers)
705 {
706 return new WixErrorEventArgs(sourceLineNumbers, 90, "WixErrors_MultipleEntrySections2_1");
707 }
708
709 public static MessageEventArgs DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName)
710 {
711 return new WixErrorEventArgs(sourceLineNumbers, 91, "WixErrors_DuplicateSymbol_1", symbolName);
712 }
713
714 public static MessageEventArgs DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName, string referencingSourceLineNumber)
715 {
716 return new WixErrorEventArgs(sourceLineNumbers, 91, "WixErrors_DuplicateSymbol_2", symbolName, referencingSourceLineNumber);
717 }
718
719 public static MessageEventArgs DuplicateSymbol2(SourceLineNumber sourceLineNumbers)
720 {
721 return new WixErrorEventArgs(sourceLineNumbers, 92, "WixErrors_DuplicateSymbol2_1");
722 }
723
724 public static MessageEventArgs MissingEntrySection(string sectionType)
725 {
726 return new WixErrorEventArgs(null, 93, "WixErrors_MissingEntrySection_1", sectionType);
727 }
728
729 public static MessageEventArgs UnresolvedReference(SourceLineNumber sourceLineNumbers, string symbolName)
730 {
731 return new WixErrorEventArgs(sourceLineNumbers, 94, "WixErrors_UnresolvedReference_1", symbolName);
732 }
733
734 public static MessageEventArgs UnresolvedReference(SourceLineNumber sourceLineNumbers, string symbolName, WixToolset.Data.AccessModifier accessModifier)
735 {
736 return new WixErrorEventArgs(sourceLineNumbers, 94, "WixErrors_UnresolvedReference_2", symbolName, accessModifier);
737 }
738
739 public static MessageEventArgs MultiplePrimaryReferences(SourceLineNumber sourceLineNumbers, string crefChildType, string crefChildId, string crefParentType, string crefParentId, string conflictParentType, string conflictParentId)
740 {
741 return new WixErrorEventArgs(sourceLineNumbers, 95, "WixErrors_MultiplePrimaryReferences_1", crefChildType, crefChildId, crefParentType, crefParentId, conflictParentType, conflictParentId);
742 }
743
744 public static MessageEventArgs ComponentReferencedTwice(SourceLineNumber sourceLineNumbers, string crefChildId)
745 {
746 return new WixErrorEventArgs(sourceLineNumbers, 96, "WixErrors_ComponentReferencedTwice_1", crefChildId);
747 }
748
749 public static MessageEventArgs DuplicateModuleFileIdentifier(SourceLineNumber sourceLineNumbers, string moduleId, string fileId)
750 {
751 return new WixErrorEventArgs(sourceLineNumbers, 97, "WixErrors_DuplicateModuleFileIdentifier_1", moduleId, fileId);
752 }
753
754 public static MessageEventArgs DuplicateModuleCaseInsensitiveFileIdentifier(SourceLineNumber sourceLineNumbers, string moduleId, string fileId1, string fileId2)
755 {
756 return new WixErrorEventArgs(sourceLineNumbers, 98, "WixErrors_DuplicateModuleCaseInsensitiveFileIdentifier_1", moduleId, fileId1, fileId2);
757 }
758
759 public static MessageEventArgs ImplicitComponentKeyPath(SourceLineNumber sourceLineNumbers, string componentId)
760 {
761 return new WixErrorEventArgs(sourceLineNumbers, 99, "WixErrors_ImplicitComponentKeyPath_1", componentId);
762 }
763
764 public static MessageEventArgs DuplicateLocalizationIdentifier(SourceLineNumber sourceLineNumbers, string localizationId)
765 {
766 return new WixErrorEventArgs(sourceLineNumbers, 100, "WixErrors_DuplicateLocalizationIdentifier_1", localizationId);
767 }
768
769 public static MessageEventArgs LocalizationVariableUnknown(SourceLineNumber sourceLineNumbers, string variableId)
770 {
771 return new WixErrorEventArgs(sourceLineNumbers, 102, "WixErrors_LocalizationVariableUnknown_1", variableId);
772 }
773
774 public static MessageEventArgs FileNotFound(SourceLineNumber sourceLineNumbers, string file)
775 {
776 return new WixErrorEventArgs(sourceLineNumbers, 103, "WixErrors_FileNotFound_1", file);
777 }
778
779 public static MessageEventArgs FileNotFound(SourceLineNumber sourceLineNumbers, string file, string fileType)
780 {
781 return new WixErrorEventArgs(sourceLineNumbers, 103, "WixErrors_FileNotFound_2", file, fileType);
782 }
783
784 public static MessageEventArgs InvalidXml(SourceLineNumber sourceLineNumbers, string fileType, string detail)
785 {
786 return new WixErrorEventArgs(sourceLineNumbers, 104, "WixErrors_InvalidXml_1", fileType, detail);
787 }
788
789 public static MessageEventArgs ProgIdNestedTooDeep(SourceLineNumber sourceLineNumbers)
790 {
791 return new WixErrorEventArgs(sourceLineNumbers, 105, "WixErrors_ProgIdNestedTooDeep_1");
792 }
793
794 public static MessageEventArgs CanNotHaveTwoParents(SourceLineNumber sourceLineNumbers, string directorySearch, string parentAttribute, string parentElement)
795 {
796 return new WixErrorEventArgs(sourceLineNumbers, 106, "WixErrors_CanNotHaveTwoParents_1", directorySearch, parentAttribute, parentElement);
797 }
798
799 public static MessageEventArgs SchemaValidationFailed(SourceLineNumber sourceLineNumbers, string validationError, int lineNumber, int linePosition)
800 {
801 return new WixErrorEventArgs(sourceLineNumbers, 107, "WixErrors_SchemaValidationFailed_1", validationError, lineNumber, linePosition);
802 }
803
804 public static MessageEventArgs IllegalVersionValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
805 {
806 return new WixErrorEventArgs(sourceLineNumbers, 108, "WixErrors_IllegalVersionValue_1", elementName, attributeName, value);
807 }
808
809 public static MessageEventArgs CustomTableNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
810 {
811 return new WixErrorEventArgs(sourceLineNumbers, 109, "WixErrors_CustomTableNameTooLong_1", elementName, attributeName, value);
812 }
813
814 public static MessageEventArgs CustomTableIllegalColumnWidth(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int value)
815 {
816 return new WixErrorEventArgs(sourceLineNumbers, 110, "WixErrors_CustomTableIllegalColumnWidth_1", elementName, attributeName, value);
817 }
818
819 public static MessageEventArgs CustomTableMissingPrimaryKey(SourceLineNumber sourceLineNumbers)
820 {
821 return new WixErrorEventArgs(sourceLineNumbers, 111, "WixErrors_CustomTableMissingPrimaryKey_1");
822 }
823
824 public static MessageEventArgs TypeSpecificationForExtensionRequired(string parameter)
825 {
826 return new WixErrorEventArgs(null, 113, "WixErrors_TypeSpecificationForExtensionRequired_1", parameter);
827 }
828
829 public static MessageEventArgs FilePathRequired(string parameter)
830 {
831 return new WixErrorEventArgs(null, 114, "WixErrors_FilePathRequired_1", parameter);
832 }
833
834 public static MessageEventArgs DirectoryPathRequired(string parameter)
835 {
836 return new WixErrorEventArgs(null, 115, "WixErrors_DirectoryPathRequired_1", parameter);
837 }
838
839 public static MessageEventArgs FileOrDirectoryPathRequired(string parameter)
840 {
841 return new WixErrorEventArgs(null, 116, "WixErrors_FileOrDirectoryPathRequired_1", parameter);
842 }
843
844 public static MessageEventArgs PathCannotContainQuote(string fileName)
845 {
846 return new WixErrorEventArgs(null, 117, "WixErrors_PathCannotContainQuote_1", fileName);
847 }
848
849 public static MessageEventArgs AdditionalArgumentUnexpected(string argument)
850 {
851 return new WixErrorEventArgs(null, 118, "WixErrors_AdditionalArgumentUnexpected_1", argument);
852 }
853
854 public static MessageEventArgs RegistryNameValueIncorrect(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
855 {
856 return new WixErrorEventArgs(sourceLineNumbers, 119, "WixErrors_RegistryNameValueIncorrect_1", elementName, attributeName, value);
857 }
858
859 public static MessageEventArgs FamilyNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length)
860 {
861 return new WixErrorEventArgs(sourceLineNumbers, 120, "WixErrors_FamilyNameTooLong_1", elementName, attributeName, value, length);
862 }
863
864 public static MessageEventArgs IllegalFamilyName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
865 {
866 return new WixErrorEventArgs(sourceLineNumbers, 121, "WixErrors_IllegalFamilyName_1", elementName, attributeName, value);
867 }
868
869 public static MessageEventArgs IllegalLongValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
870 {
871 return new WixErrorEventArgs(sourceLineNumbers, 122, "WixErrors_IllegalLongValue_1", elementName, attributeName, value);
872 }
873
874 public static MessageEventArgs IntegralValueOutOfRange(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int value, int minimum, int maximum)
875 {
876 return new WixErrorEventArgs(sourceLineNumbers, 123, "WixErrors_IntegralValueOutOfRange_1", elementName, attributeName, value, minimum, maximum);
877 }
878
879 public static MessageEventArgs IntegralValueOutOfRange(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, long value, long minimum, long maximum)
880 {
881 return new WixErrorEventArgs(sourceLineNumbers, 123, "WixErrors_IntegralValueOutOfRange_2", elementName, attributeName, value, minimum, maximum);
882 }
883
884 public static MessageEventArgs DuplicateExtensionXmlSchemaNamespace(string extension, string extensionXmlSchemaNamespace, string collidingExtension)
885 {
886 return new WixErrorEventArgs(null, 125, "WixErrors_DuplicateExtensionXmlSchemaNamespace_1", extension, extensionXmlSchemaNamespace, collidingExtension);
887 }
888
889 public static MessageEventArgs DuplicateExtensionTable(string extension, string tableName)
890 {
891 return new WixErrorEventArgs(null, 126, "WixErrors_DuplicateExtensionTable_1", extension, tableName);
892 }
893
894 public static MessageEventArgs DuplicateExtensionPreprocessorType(string extension, string variablePrefix, string collidingExtension)
895 {
896 return new WixErrorEventArgs(null, 127, "WixErrors_DuplicateExtensionPreprocessorType_1", extension, variablePrefix, collidingExtension);
897 }
898
899 public static MessageEventArgs FileInUse(SourceLineNumber sourceLineNumbers, string file)
900 {
901 return new WixErrorEventArgs(sourceLineNumbers, 128, "WixErrors_FileInUse_1", file);
902 }
903
904 public static MessageEventArgs CannotOpenMergeModule(SourceLineNumber sourceLineNumbers, string mergeModuleIdentifier, string mergeModuleFile)
905 {
906 return new WixErrorEventArgs(sourceLineNumbers, 129, "WixErrors_CannotOpenMergeModule_1", mergeModuleIdentifier, mergeModuleFile);
907 }
908
909 public static MessageEventArgs DuplicatePrimaryKey(SourceLineNumber sourceLineNumbers, string primaryKey, string tableName)
910 {
911 return new WixErrorEventArgs(sourceLineNumbers, 130, "WixErrors_DuplicatePrimaryKey_1", primaryKey, tableName);
912 }
913
914 public static MessageEventArgs FileIdentifierNotFound(SourceLineNumber sourceLineNumbers, string fileIdentifier)
915 {
916 return new WixErrorEventArgs(sourceLineNumbers, 131, "WixErrors_FileIdentifierNotFound_1", fileIdentifier);
917 }
918
919 public static MessageEventArgs InvalidAssemblyFile(SourceLineNumber sourceLineNumbers, string assemblyFile, string moreInformation)
920 {
921 return new WixErrorEventArgs(sourceLineNumbers, 132, "WixErrors_InvalidAssemblyFile_1", assemblyFile, moreInformation);
922 }
923
924 public static MessageEventArgs ExpectedEndElement(SourceLineNumber sourceLineNumbers, string elementName)
925 {
926 return new WixErrorEventArgs(sourceLineNumbers, 133, "WixErrors_ExpectedEndElement_1", elementName);
927 }
928
929 public static MessageEventArgs IllegalCodepage(int codepage)
930 {
931 return new WixErrorEventArgs(null, 134, "WixErrors_IllegalCodepage_1", codepage);
932 }
933
934 public static MessageEventArgs ExpectedMediaCabinet(SourceLineNumber sourceLineNumbers, string fileId, int diskId)
935 {
936 return new WixErrorEventArgs(sourceLineNumbers, 135, "WixErrors_ExpectedMediaCabinet_1", fileId, diskId);
937 }
938
939 public static MessageEventArgs InvalidIdt(SourceLineNumber sourceLineNumbers, string idtFile)
940 {
941 return new WixErrorEventArgs(sourceLineNumbers, 136, "WixErrors_InvalidIdt_1", idtFile);
942 }
943
944 public static MessageEventArgs InvalidIdt(SourceLineNumber sourceLineNumbers, string idtFile, string tableName)
945 {
946 return new WixErrorEventArgs(sourceLineNumbers, 136, "WixErrors_InvalidIdt_2", idtFile, tableName);
947 }
948
949 public static MessageEventArgs InvalidSequenceTable(string sequenceTableName)
950 {
951 return new WixErrorEventArgs(null, 137, "WixErrors_InvalidSequenceTable_1", sequenceTableName);
952 }
953
954 public static MessageEventArgs ExpectedDirectory(string directory)
955 {
956 return new WixErrorEventArgs(null, 138, "WixErrors_ExpectedDirectory_1", directory);
957 }
958
959 public static MessageEventArgs ComponentExpectedFeature(SourceLineNumber sourceLineNumbers, string component, string type, string target)
960 {
961 return new WixErrorEventArgs(sourceLineNumbers, 139, "WixErrors_ComponentExpectedFeature_1", component, type, target);
962 }
963
964 public static MessageEventArgs RecursiveAction(string action, string tableName)
965 {
966 return new WixErrorEventArgs(null, 140, "WixErrors_RecursiveAction_1", action, tableName);
967 }
968
969 public static MessageEventArgs VersionMismatch(SourceLineNumber sourceLineNumbers, string fileType, string version, string expectedVersion)
970 {
971 return new WixErrorEventArgs(sourceLineNumbers, 141, "WixErrors_VersionMismatch_1", fileType, version, expectedVersion);
972 }
973
974 public static MessageEventArgs UnexpectedContentNode(SourceLineNumber sourceLineNumbers, string elementName, string unexpectedNodeType)
975 {
976 return new WixErrorEventArgs(sourceLineNumbers, 142, "WixErrors_UnexpectedContentNode_1", elementName, unexpectedNodeType);
977 }
978
979 public static MessageEventArgs UnexpectedColumnCount(SourceLineNumber sourceLineNumbers, string tableName)
980 {
981 return new WixErrorEventArgs(sourceLineNumbers, 143, "WixErrors_UnexpectedColumnCount_1", tableName);
982 }
983
984 public static MessageEventArgs InvalidExtension(string extension)
985 {
986 return new WixErrorEventArgs(null, 144, "WixErrors_InvalidExtension_1", extension);
987 }
988
989 public static MessageEventArgs InvalidExtension(string extension, string invalidReason)
990 {
991 return new WixErrorEventArgs(null, 144, "WixErrors_InvalidExtension_2", extension, invalidReason);
992 }
993
994 public static MessageEventArgs InvalidExtension(string extension, string extensionType, string expectedType)
995 {
996 return new WixErrorEventArgs(null, 144, "WixErrors_InvalidExtension_3", extension, extensionType, expectedType);
997 }
998
999 public static MessageEventArgs InvalidExtension(string extension, string extensionType, string expectedType1, string expectedType2)
1000 {
1001 return new WixErrorEventArgs(null, 144, "WixErrors_InvalidExtension_4", extension, extensionType, expectedType1, expectedType2);
1002 }
1003
1004 public static MessageEventArgs InvalidSubExpression(SourceLineNumber sourceLineNumbers, string subExpression, string expression)
1005 {
1006 return new WixErrorEventArgs(sourceLineNumbers, 145, "WixErrors_InvalidSubExpression_1", subExpression, expression);
1007 }
1008
1009 public static MessageEventArgs UnmatchedPreprocessorInstruction(SourceLineNumber sourceLineNumbers, string beginInstruction, string endInstruction)
1010 {
1011 return new WixErrorEventArgs(sourceLineNumbers, 146, "WixErrors_UnmatchedPreprocessorInstruction_1", beginInstruction, endInstruction);
1012 }
1013
1014 public static MessageEventArgs NonterminatedPreprocessorInstruction(SourceLineNumber sourceLineNumbers, string beginInstruction, string endInstruction)
1015 {
1016 return new WixErrorEventArgs(sourceLineNumbers, 147, "WixErrors_NonterminatedPreprocessorInstruction_1", beginInstruction, endInstruction);
1017 }
1018
1019 public static MessageEventArgs ExpectedExpressionAfterNot(SourceLineNumber sourceLineNumbers, string expression)
1020 {
1021 return new WixErrorEventArgs(sourceLineNumbers, 148, "WixErrors_ExpectedExpressionAfterNot_1", expression);
1022 }
1023
1024 public static MessageEventArgs InvalidPreprocessorVariable(SourceLineNumber sourceLineNumbers, string variable)
1025 {
1026 return new WixErrorEventArgs(sourceLineNumbers, 149, "WixErrors_InvalidPreprocessorVariable_1", variable);
1027 }
1028
1029 public static MessageEventArgs UndefinedPreprocessorVariable(SourceLineNumber sourceLineNumbers, string variableName)
1030 {
1031 return new WixErrorEventArgs(sourceLineNumbers, 150, "WixErrors_UndefinedPreprocessorVariable_1", variableName);
1032 }
1033
1034 public static MessageEventArgs IllegalDefineStatement(SourceLineNumber sourceLineNumbers, string defineStatement)
1035 {
1036 return new WixErrorEventArgs(sourceLineNumbers, 151, "WixErrors_IllegalDefineStatement_1", defineStatement);
1037 }
1038
1039 public static MessageEventArgs VariableDeclarationCollision(SourceLineNumber sourceLineNumbers, string variableName, string variableValue, string variableCollidingValue)
1040 {
1041 return new WixErrorEventArgs(sourceLineNumbers, 152, "WixErrors_VariableDeclarationCollision_1", variableName, variableValue, variableCollidingValue);
1042 }
1043
1044 public static MessageEventArgs CannotReundefineVariable(SourceLineNumber sourceLineNumbers, string variableName)
1045 {
1046 return new WixErrorEventArgs(sourceLineNumbers, 153, "WixErrors_CannotReundefineVariable_1", variableName);
1047 }
1048
1049 public static MessageEventArgs IllegalForeach(SourceLineNumber sourceLineNumbers, string foreachStatement)
1050 {
1051 return new WixErrorEventArgs(sourceLineNumbers, 154, "WixErrors_IllegalForeach_1", foreachStatement);
1052 }
1053
1054 public static MessageEventArgs IllegalParentAttributeWhenNested(SourceLineNumber sourceLineNumbers, string parentElementName, string parentAttributeName, string childElement)
1055 {
1056 return new WixErrorEventArgs(sourceLineNumbers, 155, "WixErrors_IllegalParentAttributeWhenNested_1", parentElementName, parentAttributeName, childElement);
1057 }
1058
1059 public static MessageEventArgs ExpectedEndforeach(SourceLineNumber sourceLineNumbers)
1060 {
1061 return new WixErrorEventArgs(sourceLineNumbers, 156, "WixErrors_ExpectedEndforeach_1");
1062 }
1063
1064 public static MessageEventArgs UnmatchedQuotesInExpression(SourceLineNumber sourceLineNumbers, string expression)
1065 {
1066 return new WixErrorEventArgs(sourceLineNumbers, 158, "WixErrors_UnmatchedQuotesInExpression_1", expression);
1067 }
1068
1069 public static MessageEventArgs UnmatchedParenthesisInExpression(SourceLineNumber sourceLineNumbers, string expression)
1070 {
1071 return new WixErrorEventArgs(sourceLineNumbers, 159, "WixErrors_UnmatchedParenthesisInExpression_1", expression);
1072 }
1073
1074 public static MessageEventArgs ExpectedVariable(SourceLineNumber sourceLineNumbers, string expression)
1075 {
1076 return new WixErrorEventArgs(sourceLineNumbers, 160, "WixErrors_ExpectedVariable_1", expression);
1077 }
1078
1079 public static MessageEventArgs UnexpectedLiteral(SourceLineNumber sourceLineNumbers, string expression)
1080 {
1081 return new WixErrorEventArgs(sourceLineNumbers, 161, "WixErrors_UnexpectedLiteral_1", expression);
1082 }
1083
1084 public static MessageEventArgs IllegalIntegerInExpression(SourceLineNumber sourceLineNumbers, string expression)
1085 {
1086 return new WixErrorEventArgs(sourceLineNumbers, 162, "WixErrors_IllegalIntegerInExpression_1", expression);
1087 }
1088
1089 public static MessageEventArgs UnexpectedPreprocessorOperator(SourceLineNumber sourceLineNumbers, string @operator)
1090 {
1091 return new WixErrorEventArgs(sourceLineNumbers, 163, "WixErrors_UnexpectedPreprocessorOperator_1", @operator);
1092 }
1093
1094 public static MessageEventArgs UnexpectedEmptySubexpression(SourceLineNumber sourceLineNumbers, string expression)
1095 {
1096 return new WixErrorEventArgs(sourceLineNumbers, 164, "WixErrors_UnexpectedEmptySubexpression_1", expression);
1097 }
1098
1099 public static MessageEventArgs UnexpectedCustomTableColumn(SourceLineNumber sourceLineNumbers, string column)
1100 {
1101 return new WixErrorEventArgs(sourceLineNumbers, 165, "WixErrors_UnexpectedCustomTableColumn_1", column);
1102 }
1103
1104 public static MessageEventArgs UnknownCustomTableColumnType(SourceLineNumber sourceLineNumbers, string columnType)
1105 {
1106 return new WixErrorEventArgs(sourceLineNumbers, 166, "WixErrors_UnknownCustomTableColumnType_1", columnType);
1107 }
1108
1109 public static MessageEventArgs IllegalFileCompressionAttributes(SourceLineNumber sourceLineNumbers)
1110 {
1111 return new WixErrorEventArgs(sourceLineNumbers, 167, "WixErrors_IllegalFileCompressionAttributes_1");
1112 }
1113
1114 public static MessageEventArgs OverridableActionCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1115 {
1116 return new WixErrorEventArgs(sourceLineNumbers, 168, "WixErrors_OverridableActionCollision_1", sequenceTableName, actionName);
1117 }
1118
1119 public static MessageEventArgs OverridableActionCollision2(SourceLineNumber sourceLineNumbers)
1120 {
1121 return new WixErrorEventArgs(sourceLineNumbers, 169, "WixErrors_OverridableActionCollision2_1");
1122 }
1123
1124 public static MessageEventArgs ActionCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1125 {
1126 return new WixErrorEventArgs(sourceLineNumbers, 170, "WixErrors_ActionCollision_1", sequenceTableName, actionName);
1127 }
1128
1129 public static MessageEventArgs ActionCollision2(SourceLineNumber sourceLineNumbers)
1130 {
1131 return new WixErrorEventArgs(sourceLineNumbers, 171, "WixErrors_ActionCollision2_1");
1132 }
1133
1134 public static MessageEventArgs SuppressNonoverridableAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1135 {
1136 return new WixErrorEventArgs(sourceLineNumbers, 172, "WixErrors_SuppressNonoverridableAction_1", sequenceTableName, actionName);
1137 }
1138
1139 public static MessageEventArgs SuppressNonoverridableAction2(SourceLineNumber sourceLineNumbers)
1140 {
1141 return new WixErrorEventArgs(sourceLineNumbers, 173, "WixErrors_SuppressNonoverridableAction2_1");
1142 }
1143
1144 public static MessageEventArgs CustomActionSequencedInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1145 {
1146 return new WixErrorEventArgs(sourceLineNumbers, 174, "WixErrors_CustomActionSequencedInModule_1", sequenceTableName, actionName);
1147 }
1148
1149 public static MessageEventArgs StandardActionRelativelyScheduledInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1150 {
1151 return new WixErrorEventArgs(sourceLineNumbers, 175, "WixErrors_StandardActionRelativelyScheduledInModule_1", sequenceTableName, actionName);
1152 }
1153
1154 public static MessageEventArgs ActionCircularDependency(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
1155 {
1156 return new WixErrorEventArgs(sourceLineNumbers, 176, "WixErrors_ActionCircularDependency_1", sequenceTableName, actionName1, actionName2);
1157 }
1158
1159 public static MessageEventArgs ActionScheduledRelativeToTerminationAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
1160 {
1161 return new WixErrorEventArgs(sourceLineNumbers, 177, "WixErrors_ActionScheduledRelativeToTerminationAction_1", sequenceTableName, actionName1, actionName2);
1162 }
1163
1164 public static MessageEventArgs ActionScheduledRelativeToTerminationAction2(SourceLineNumber sourceLineNumbers)
1165 {
1166 return new WixErrorEventArgs(sourceLineNumbers, 178, "WixErrors_ActionScheduledRelativeToTerminationAction2_1");
1167 }
1168
1169 public static MessageEventArgs NoUniqueActionSequenceNumber(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
1170 {
1171 return new WixErrorEventArgs(sourceLineNumbers, 179, "WixErrors_NoUniqueActionSequenceNumber_1", sequenceTableName, actionName1, actionName2);
1172 }
1173
1174 public static MessageEventArgs NoUniqueActionSequenceNumber2(SourceLineNumber sourceLineNumbers)
1175 {
1176 return new WixErrorEventArgs(sourceLineNumbers, 180, "WixErrors_NoUniqueActionSequenceNumber2_1");
1177 }
1178
1179 public static MessageEventArgs ActionScheduledRelativeToItself(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
1180 {
1181 return new WixErrorEventArgs(sourceLineNumbers, 181, "WixErrors_ActionScheduledRelativeToItself_1", elementName, attributeName, attributeValue);
1182 }
1183
1184 public static MessageEventArgs MissingTableDefinition(string tableName)
1185 {
1186 return new WixErrorEventArgs(null, 182, "WixErrors_MissingTableDefinition_1", tableName);
1187 }
1188
1189 public static MessageEventArgs ExpectedRowInPatchCreationPackage(string tableName)
1190 {
1191 return new WixErrorEventArgs(null, 183, "WixErrors_ExpectedRowInPatchCreationPackage_1", tableName);
1192 }
1193
1194 public static MessageEventArgs UnexpectedTableInMergeModule(SourceLineNumber sourceLineNumbers, string tableName)
1195 {
1196 return new WixErrorEventArgs(sourceLineNumbers, 184, "WixErrors_UnexpectedTableInMergeModule_1", tableName);
1197 }
1198
1199 public static MessageEventArgs UnexpectedTableInPatchCreationPackage(SourceLineNumber sourceLineNumbers, string tableName)
1200 {
1201 return new WixErrorEventArgs(sourceLineNumbers, 185, "WixErrors_UnexpectedTableInPatchCreationPackage_1", tableName);
1202 }
1203
1204 public static MessageEventArgs MergeExcludedModule(SourceLineNumber sourceLineNumbers, string mergeId, string otherMergeId)
1205 {
1206 return new WixErrorEventArgs(sourceLineNumbers, 186, "WixErrors_MergeExcludedModule_1", mergeId, otherMergeId);
1207 }
1208
1209 public static MessageEventArgs MergeFeatureRequired(SourceLineNumber sourceLineNumbers, string tableName, string primaryKeys, string mergeModuleFile, string mergeId)
1210 {
1211 return new WixErrorEventArgs(sourceLineNumbers, 187, "WixErrors_MergeFeatureRequired_1", tableName, primaryKeys, mergeModuleFile, mergeId);
1212 }
1213
1214 public static MessageEventArgs MergeLanguageFailed(SourceLineNumber sourceLineNumbers, short language, string mergeModuleFile)
1215 {
1216 return new WixErrorEventArgs(sourceLineNumbers, 188, "WixErrors_MergeLanguageFailed_1", language, mergeModuleFile);
1217 }
1218
1219 public static MessageEventArgs MergeLanguageUnsupported(SourceLineNumber sourceLineNumbers, short language, string mergeModuleFile)
1220 {
1221 return new WixErrorEventArgs(sourceLineNumbers, 189, "WixErrors_MergeLanguageUnsupported_1", language, mergeModuleFile);
1222 }
1223
1224 public static MessageEventArgs TableDecompilationUnimplemented(string tableName)
1225 {
1226 return new WixErrorEventArgs(null, 190, "WixErrors_TableDecompilationUnimplemented_1", tableName);
1227 }
1228
1229 public static MessageEventArgs CannotDefaultMismatchedAdvertiseStates(SourceLineNumber sourceLineNumbers)
1230 {
1231 return new WixErrorEventArgs(sourceLineNumbers, 191, "WixErrors_CannotDefaultMismatchedAdvertiseStates_1");
1232 }
1233
1234 public static MessageEventArgs VersionIndependentProgIdsCannotHaveIcons(SourceLineNumber sourceLineNumbers)
1235 {
1236 return new WixErrorEventArgs(sourceLineNumbers, 192, "WixErrors_VersionIndependentProgIdsCannotHaveIcons_1");
1237 }
1238
1239 public static MessageEventArgs IllegalAttributeValueWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName)
1240 {
1241 return new WixErrorEventArgs(sourceLineNumbers, 193, "WixErrors_IllegalAttributeValueWithOtherAttribute_1", elementName, attributeName, attributeValue, otherAttributeName);
1242 }
1243
1244 public static MessageEventArgs IllegalAttributeValueWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName, string otherAttributeValue)
1245 {
1246 return new WixErrorEventArgs(sourceLineNumbers, 193, "WixErrors_IllegalAttributeValueWithOtherAttribute_2", elementName, attributeName, attributeValue, otherAttributeName, otherAttributeValue);
1247 }
1248
1249 public static MessageEventArgs InvalidMergeLanguage(SourceLineNumber sourceLineNumbers, string mergeId, string mergeLanguage)
1250 {
1251 return new WixErrorEventArgs(sourceLineNumbers, 194, "WixErrors_InvalidMergeLanguage_1", mergeId, mergeLanguage);
1252 }
1253
1254 public static MessageEventArgs WixVariableCollision(SourceLineNumber sourceLineNumbers, string variableId)
1255 {
1256 return new WixErrorEventArgs(sourceLineNumbers, 195, "WixErrors_WixVariableCollision_1", variableId);
1257 }
1258
1259 public static MessageEventArgs ExpectedWixVariableValue(string variableId)
1260 {
1261 return new WixErrorEventArgs(null, 196, "WixErrors_ExpectedWixVariableValue_1", variableId);
1262 }
1263
1264 public static MessageEventArgs WixVariableUnknown(SourceLineNumber sourceLineNumbers, string variableId)
1265 {
1266 return new WixErrorEventArgs(sourceLineNumbers, 197, "WixErrors_WixVariableUnknown_1", variableId);
1267 }
1268
1269 public static MessageEventArgs IllegalWixVariablePrefix(SourceLineNumber sourceLineNumbers, string variableId)
1270 {
1271 return new WixErrorEventArgs(sourceLineNumbers, 198, "WixErrors_IllegalWixVariablePrefix_1", variableId);
1272 }
1273
1274 public static MessageEventArgs InvalidWixXmlNamespace(SourceLineNumber sourceLineNumbers, string wixElementName, string wixNamespace)
1275 {
1276 return new WixErrorEventArgs(sourceLineNumbers, 199, "WixErrors_InvalidWixXmlNamespace_1", wixElementName, wixNamespace);
1277 }
1278
1279 public static MessageEventArgs InvalidWixXmlNamespace(SourceLineNumber sourceLineNumbers, string wixElementName, string elementNamespace, string wixNamespace)
1280 {
1281 return new WixErrorEventArgs(sourceLineNumbers, 199, "WixErrors_InvalidWixXmlNamespace_2", wixElementName, elementNamespace, wixNamespace);
1282 }
1283
1284 public static MessageEventArgs UnhandledExtensionElement(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName, string extensionNamespace)
1285 {
1286 return new WixErrorEventArgs(sourceLineNumbers, 200, "WixErrors_UnhandledExtensionElement_1", elementName, extensionElementName, extensionNamespace);
1287 }
1288
1289 public static MessageEventArgs UnhandledExtensionAttribute(SourceLineNumber sourceLineNumbers, string elementName, string extensionAttributeName, string extensionNamespace)
1290 {
1291 return new WixErrorEventArgs(sourceLineNumbers, 201, "WixErrors_UnhandledExtensionAttribute_1", elementName, extensionAttributeName, extensionNamespace);
1292 }
1293
1294 public static MessageEventArgs UnsupportedExtensionAttribute(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName)
1295 {
1296 return new WixErrorEventArgs(sourceLineNumbers, 202, "WixErrors_UnsupportedExtensionAttribute_1", elementName, extensionElementName);
1297 }
1298
1299 public static MessageEventArgs UnsupportedExtensionElement(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName)
1300 {
1301 return new WixErrorEventArgs(sourceLineNumbers, 203, "WixErrors_UnsupportedExtensionElement_1", elementName, extensionElementName);
1302 }
1303
1304 public static MessageEventArgs ValidationError(SourceLineNumber sourceLineNumbers, string ice, string message)
1305 {
1306 return new WixErrorEventArgs(sourceLineNumbers, 204, "WixErrors_ValidationError_1", ice, message);
1307 }
1308
1309 public static MessageEventArgs IllegalRootDirectory(SourceLineNumber sourceLineNumbers, string directoryId)
1310 {
1311 return new WixErrorEventArgs(sourceLineNumbers, 205, "WixErrors_IllegalRootDirectory_1", directoryId);
1312 }
1313
1314 public static MessageEventArgs IllegalTargetDirDefaultDir(SourceLineNumber sourceLineNumbers, string defaultDir)
1315 {
1316 return new WixErrorEventArgs(sourceLineNumbers, 206, "WixErrors_IllegalTargetDirDefaultDir_1", defaultDir);
1317 }
1318
1319 public static MessageEventArgs TooManyElements(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, int expectedInstances)
1320 {
1321 return new WixErrorEventArgs(sourceLineNumbers, 207, "WixErrors_TooManyElements_1", elementName, childElementName, expectedInstances);
1322 }
1323
1324 public static MessageEventArgs ExpectedBinaryCategory(SourceLineNumber sourceLineNumbers)
1325 {
1326 return new WixErrorEventArgs(sourceLineNumbers, 208, "WixErrors_ExpectedBinaryCategory_1");
1327 }
1328
1329 public static MessageEventArgs RootFeatureCannotFollowParent(SourceLineNumber sourceLineNumbers)
1330 {
1331 return new WixErrorEventArgs(sourceLineNumbers, 209, "WixErrors_RootFeatureCannotFollowParent_1");
1332 }
1333
1334 public static MessageEventArgs FeatureNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
1335 {
1336 return new WixErrorEventArgs(sourceLineNumbers, 210, "WixErrors_FeatureNameTooLong_1", elementName, attributeName, attributeValue);
1337 }
1338
1339 public static MessageEventArgs SignedEmbeddedCabinet(SourceLineNumber sourceLineNumbers)
1340 {
1341 return new WixErrorEventArgs(sourceLineNumbers, 211, "WixErrors_SignedEmbeddedCabinet_1");
1342 }
1343
1344 public static MessageEventArgs ExpectedSignedCabinetName(SourceLineNumber sourceLineNumbers)
1345 {
1346 return new WixErrorEventArgs(sourceLineNumbers, 212, "WixErrors_ExpectedSignedCabinetName_1");
1347 }
1348
1349 public static MessageEventArgs IllegalInlineLocVariable(SourceLineNumber sourceLineNumbers, string variableName, string variableValue)
1350 {
1351 return new WixErrorEventArgs(sourceLineNumbers, 213, "WixErrors_IllegalInlineLocVariable_1", variableName, variableValue);
1352 }
1353
1354 public static MessageEventArgs MergeModuleExpectedFeature(SourceLineNumber sourceLineNumbers, string mergeId)
1355 {
1356 return new WixErrorEventArgs(sourceLineNumbers, 215, "WixErrors_MergeModuleExpectedFeature_1", mergeId);
1357 }
1358
1359 public static MessageEventArgs Win32Exception(int nativeErrorCode, string message)
1360 {
1361 return new WixErrorEventArgs(null, 216, "WixErrors_Win32Exception_1", nativeErrorCode, message);
1362 }
1363
1364 public static MessageEventArgs Win32Exception(int nativeErrorCode, string file, string message)
1365 {
1366 return new WixErrorEventArgs(null, 216, "WixErrors_Win32Exception_2", nativeErrorCode, file, message);
1367 }
1368
1369 public static MessageEventArgs UnexpectedExternalUIMessage(string message)
1370 {
1371 return new WixErrorEventArgs(null, 217, "WixErrors_UnexpectedExternalUIMessage_1", message);
1372 }
1373
1374 public static MessageEventArgs UnexpectedExternalUIMessage(string message, string action)
1375 {
1376 return new WixErrorEventArgs(null, 217, "WixErrors_UnexpectedExternalUIMessage_2", message, action);
1377 }
1378
1379 public static MessageEventArgs IllegalCabbingThreadCount(string numThreads)
1380 {
1381 return new WixErrorEventArgs(null, 218, "WixErrors_IllegalCabbingThreadCount_1", numThreads);
1382 }
1383
1384 public static MessageEventArgs IllegalEnvironmentVariable(string environmentVariable, string value)
1385 {
1386 return new WixErrorEventArgs(null, 219, "WixErrors_IllegalEnvironmentVariable_1", environmentVariable, value);
1387 }
1388
1389 public static MessageEventArgs InvalidKeyColumn(string tableName, string columnName, string foreignTableName, int foreignColumnNumber)
1390 {
1391 return new WixErrorEventArgs(null, 220, "WixErrors_InvalidKeyColumn_1", tableName, columnName, foreignTableName, foreignColumnNumber);
1392 }
1393
1394 public static MessageEventArgs CollidingModularizationTypes(string tableName, string columnName, string foreignTableName, int foreignColumnNumber, string modularizationType, string foreignModularizationType)
1395 {
1396 return new WixErrorEventArgs(null, 221, "WixErrors_CollidingModularizationTypes_1", tableName, columnName, foreignTableName, foreignColumnNumber, modularizationType, foreignModularizationType);
1397 }
1398
1399 public static MessageEventArgs CubeFileNotFound(string cubeFile)
1400 {
1401 return new WixErrorEventArgs(null, 222, "WixErrors_CubeFileNotFound_1", cubeFile);
1402 }
1403
1404 public static MessageEventArgs OpenDatabaseFailed(string databaseFile)
1405 {
1406 return new WixErrorEventArgs(null, 223, "WixErrors_OpenDatabaseFailed_1", databaseFile);
1407 }
1408
1409 public static MessageEventArgs OutputTypeMismatch(SourceLineNumber sourceLineNumbers, string beforeOutputType, string afterOutputType)
1410 {
1411 return new WixErrorEventArgs(sourceLineNumbers, 224, "WixErrors_OutputTypeMismatch_1", beforeOutputType, afterOutputType);
1412 }
1413
1414 public static MessageEventArgs RealTableMissingPrimaryKeyColumn(SourceLineNumber sourceLineNumbers, string tableName)
1415 {
1416 return new WixErrorEventArgs(sourceLineNumbers, 225, "WixErrors_RealTableMissingPrimaryKeyColumn_1", tableName);
1417 }
1418
1419 public static MessageEventArgs IllegalColumnName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1420 {
1421 return new WixErrorEventArgs(sourceLineNumbers, 226, "WixErrors_IllegalColumnName_1", elementName, attributeName, value);
1422 }
1423
1424 public static MessageEventArgs NoDifferencesInTransform(SourceLineNumber sourceLineNumbers)
1425 {
1426 return new WixErrorEventArgs(sourceLineNumbers, 227, "WixErrors_NoDifferencesInTransform_1");
1427 }
1428
1429 public static MessageEventArgs OutputCodepageMismatch(SourceLineNumber sourceLineNumbers, int beforeCodepage, int afterCodepage)
1430 {
1431 return new WixErrorEventArgs(sourceLineNumbers, 228, "WixErrors_OutputCodepageMismatch_1", beforeCodepage, afterCodepage);
1432 }
1433
1434 public static MessageEventArgs OutputCodepageMismatch2(SourceLineNumber sourceLineNumbers)
1435 {
1436 return new WixErrorEventArgs(sourceLineNumbers, 229, "WixErrors_OutputCodepageMismatch2_1");
1437 }
1438
1439 public static MessageEventArgs IllegalComponentWithAutoGeneratedGuid(SourceLineNumber sourceLineNumbers)
1440 {
1441 return new WixErrorEventArgs(sourceLineNumbers, 230, "WixErrors_IllegalComponentWithAutoGeneratedGuid_1");
1442 }
1443
1444 public static MessageEventArgs IllegalComponentWithAutoGeneratedGuid(SourceLineNumber sourceLineNumbers, bool registryKeyPath)
1445 {
1446 return new WixErrorEventArgs(sourceLineNumbers, 230, "WixErrors_IllegalComponentWithAutoGeneratedGuid_2", registryKeyPath);
1447 }
1448
1449 public static MessageEventArgs IllegalPathForGeneratedComponentGuid(SourceLineNumber sourceLineNumbers, string componentName, string keyFilePath)
1450 {
1451 return new WixErrorEventArgs(sourceLineNumbers, 231, "WixErrors_IllegalPathForGeneratedComponentGuid_1", componentName, keyFilePath);
1452 }
1453
1454 public static MessageEventArgs IllegalTerminalServerCustomActionAttributes(SourceLineNumber sourceLineNumbers)
1455 {
1456 return new WixErrorEventArgs(sourceLineNumbers, 232, "WixErrors_IllegalTerminalServerCustomActionAttributes_1");
1457 }
1458
1459 public static MessageEventArgs IllegalPropertyCustomActionAttributes(SourceLineNumber sourceLineNumbers)
1460 {
1461 return new WixErrorEventArgs(sourceLineNumbers, 233, "WixErrors_IllegalPropertyCustomActionAttributes_1");
1462 }
1463
1464 public static MessageEventArgs InvalidPreprocessorFunction(SourceLineNumber sourceLineNumbers, string variable)
1465 {
1466 return new WixErrorEventArgs(sourceLineNumbers, 234, "WixErrors_InvalidPreprocessorFunction_1", variable);
1467 }
1468
1469 public static MessageEventArgs UndefinedPreprocessorFunction(SourceLineNumber sourceLineNumbers, string variableName)
1470 {
1471 return new WixErrorEventArgs(sourceLineNumbers, 235, "WixErrors_UndefinedPreprocessorFunction_1", variableName);
1472 }
1473
1474 public static MessageEventArgs PreprocessorExtensionEvaluateFunctionFailed(SourceLineNumber sourceLineNumbers, string prefix, string function, string args, string message)
1475 {
1476 return new WixErrorEventArgs(sourceLineNumbers, 236, "WixErrors_PreprocessorExtensionEvaluateFunctionFailed_1", prefix, function, args, message);
1477 }
1478
1479 public static MessageEventArgs PreprocessorExtensionGetVariableValueFailed(SourceLineNumber sourceLineNumbers, string prefix, string variable, string message)
1480 {
1481 return new WixErrorEventArgs(sourceLineNumbers, 237, "WixErrors_PreprocessorExtensionGetVariableValueFailed_1", prefix, variable, message);
1482 }
1483
1484 public static MessageEventArgs InvalidManifestContent(SourceLineNumber sourceLineNumbers, string fileName)
1485 {
1486 return new WixErrorEventArgs(sourceLineNumbers, 238, "WixErrors_InvalidManifestContent_1", fileName);
1487 }
1488
1489 public static MessageEventArgs InvalidWixTransform(string fileName)
1490 {
1491 return new WixErrorEventArgs(null, 239, "WixErrors_InvalidWixTransform_1", fileName);
1492 }
1493
1494 public static MessageEventArgs UnexpectedFileExtension(string fileName, string expectedExtensions)
1495 {
1496 return new WixErrorEventArgs(null, 240, "WixErrors_UnexpectedFileExtension_1", fileName, expectedExtensions);
1497 }
1498
1499 public static MessageEventArgs UnexpectedTableInPatch(SourceLineNumber sourceLineNumbers, string tableName)
1500 {
1501 return new WixErrorEventArgs(sourceLineNumbers, 241, "WixErrors_UnexpectedTableInPatch_1", tableName);
1502 }
1503
1504 public static MessageEventArgs InvalidProductVersion(SourceLineNumber sourceLineNumbers, string version)
1505 {
1506 return new WixErrorEventArgs(sourceLineNumbers, 242, "WixErrors_InvalidProductVersion_1", version);
1507 }
1508
1509 public static MessageEventArgs InvalidProductVersion(SourceLineNumber sourceLineNumbers, string version, string packagePath)
1510 {
1511 return new WixErrorEventArgs(sourceLineNumbers, 242, "WixErrors_InvalidProductVersion_2", version, packagePath);
1512 }
1513
1514 public static MessageEventArgs InvalidKeypathChange(SourceLineNumber sourceLineNumbers, string component, string transformPath)
1515 {
1516 return new WixErrorEventArgs(sourceLineNumbers, 243, "WixErrors_InvalidKeypathChange_1", component, transformPath);
1517 }
1518
1519 public static MessageEventArgs MissingValidatorExtension()
1520 {
1521 return new WixErrorEventArgs(null, 244, "WixErrors_MissingValidatorExtension_1");
1522 }
1523
1524 public static MessageEventArgs InvalidValidatorMessageType(string type)
1525 {
1526 return new WixErrorEventArgs(null, 245, "WixErrors_InvalidValidatorMessageType_1", type);
1527 }
1528
1529 public static MessageEventArgs PatchWithoutTransforms()
1530 {
1531 return new WixErrorEventArgs(null, 246, "WixErrors_PatchWithoutTransforms_1");
1532 }
1533
1534 public static MessageEventArgs SingleExtensionSupported()
1535 {
1536 return new WixErrorEventArgs(null, 247, "WixErrors_SingleExtensionSupported_1");
1537 }
1538
1539 public static MessageEventArgs DuplicateTransform(string transform)
1540 {
1541 return new WixErrorEventArgs(null, 248, "WixErrors_DuplicateTransform_1", transform);
1542 }
1543
1544 public static MessageEventArgs BaselineRequired()
1545 {
1546 return new WixErrorEventArgs(null, 249, "WixErrors_BaselineRequired_1");
1547 }
1548
1549 public static MessageEventArgs PreprocessorError(SourceLineNumber sourceLineNumbers, string message)
1550 {
1551 return new WixErrorEventArgs(sourceLineNumbers, 250, "WixErrors_PreprocessorError_1", message);
1552 }
1553
1554 public static MessageEventArgs ExpectedArgument(string argument)
1555 {
1556 return new WixErrorEventArgs(null, 251, "WixErrors_ExpectedArgument_1", argument);
1557 }
1558
1559 public static MessageEventArgs PatchWithoutValidTransforms()
1560 {
1561 return new WixErrorEventArgs(null, 252, "WixErrors_PatchWithoutValidTransforms_1");
1562 }
1563
1564 public static MessageEventArgs ExpectedDecompiler(string identifier)
1565 {
1566 return new WixErrorEventArgs(null, 253, "WixErrors_ExpectedDecompiler_1", identifier);
1567 }
1568
1569 public static MessageEventArgs ExpectedTableInMergeModule(string identifier)
1570 {
1571 return new WixErrorEventArgs(null, 254, "WixErrors_ExpectedTableInMergeModule_1", identifier);
1572 }
1573
1574 public static MessageEventArgs UnexpectedElementWithAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute, string attributeValue)
1575 {
1576 return new WixErrorEventArgs(sourceLineNumbers, 255, "WixErrors_UnexpectedElementWithAttributeValue_1", elementName, childElementName, attribute, attributeValue);
1577 }
1578
1579 public static MessageEventArgs UnexpectedElementWithAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute, string attributeValue1, string attributeValue2)
1580 {
1581 return new WixErrorEventArgs(sourceLineNumbers, 255, "WixErrors_UnexpectedElementWithAttributeValue_2", elementName, childElementName, attribute, attributeValue1, attributeValue2);
1582 }
1583
1584 public static MessageEventArgs ExpectedPatchIdInWixMsp()
1585 {
1586 return new WixErrorEventArgs(null, 256, "WixErrors_ExpectedPatchIdInWixMsp_1");
1587 }
1588
1589 public static MessageEventArgs ExpectedMediaRowsInWixMsp()
1590 {
1591 return new WixErrorEventArgs(null, 257, "WixErrors_ExpectedMediaRowsInWixMsp_1");
1592 }
1593
1594 public static MessageEventArgs WixFileNotFound(string file)
1595 {
1596 return new WixErrorEventArgs(null, 258, "WixErrors_WixFileNotFound_1", file);
1597 }
1598
1599 public static MessageEventArgs ExpectedClientPatchIdInWixMsp()
1600 {
1601 return new WixErrorEventArgs(null, 259, "WixErrors_ExpectedClientPatchIdInWixMsp_1");
1602 }
1603
1604 public static MessageEventArgs NewRowAddedInTable(SourceLineNumber sourceLineNumbers, string productCode, string tableName, string rowId)
1605 {
1606 return new WixErrorEventArgs(sourceLineNumbers, 260, "WixErrors_NewRowAddedInTable_1", productCode, tableName, rowId);
1607 }
1608
1609 public static MessageEventArgs PatchNotRemovable()
1610 {
1611 return new WixErrorEventArgs(null, 261, "WixErrors_PatchNotRemovable_1");
1612 }
1613
1614 public static MessageEventArgs FileTooLarge(SourceLineNumber sourceLineNumbers, string fileName)
1615 {
1616 return new WixErrorEventArgs(sourceLineNumbers, 263, "WixErrors_FileTooLarge_1", fileName);
1617 }
1618
1619 public static MessageEventArgs InvalidPlatformParameter(string name, string value)
1620 {
1621 return new WixErrorEventArgs(null, 264, "WixErrors_InvalidPlatformParameter_1", name, value);
1622 }
1623
1624 public static MessageEventArgs InvalidPlatformValue(SourceLineNumber sourceLineNumbers, string value)
1625 {
1626 return new WixErrorEventArgs(sourceLineNumbers, 265, "WixErrors_InvalidPlatformValue_1", value);
1627 }
1628
1629 public static MessageEventArgs IllegalValidationArguments()
1630 {
1631 return new WixErrorEventArgs(null, 266, "WixErrors_IllegalValidationArguments_1");
1632 }
1633
1634 public static MessageEventArgs OrphanedComponent(SourceLineNumber sourceLineNumbers, string componentName)
1635 {
1636 return new WixErrorEventArgs(sourceLineNumbers, 267, "WixErrors_OrphanedComponent_1", componentName);
1637 }
1638
1639 public static MessageEventArgs IllegalCommandlineArgumentCombination(string arg1, string arg2)
1640 {
1641 return new WixErrorEventArgs(null, 268, "WixErrors_IllegalCommandlineArgumentCombination_1", arg1, arg2);
1642 }
1643
1644 public static MessageEventArgs ProductCodeInvalidForTransform(SourceLineNumber sourceLineNumbers)
1645 {
1646 return new WixErrorEventArgs(sourceLineNumbers, 269, "WixErrors_ProductCodeInvalidForTransform_1");
1647 }
1648
1649 public static MessageEventArgs InsertInvalidSequenceActionOrder(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionNameBefore, string actionNameAfter, string actionNameNew)
1650 {
1651 return new WixErrorEventArgs(sourceLineNumbers, 270, "WixErrors_InsertInvalidSequenceActionOrder_1", sequenceTableName, actionNameBefore, actionNameAfter, actionNameNew);
1652 }
1653
1654 public static MessageEventArgs InsertSequenceNoSpace(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionNameBefore, string actionNameAfter, string actionNameNew)
1655 {
1656 return new WixErrorEventArgs(sourceLineNumbers, 271, "WixErrors_InsertSequenceNoSpace_1", sequenceTableName, actionNameBefore, actionNameAfter, actionNameNew);
1657 }
1658
1659 public static MessageEventArgs MissingManifestForWin32Assembly(SourceLineNumber sourceLineNumbers, string file, string manifest)
1660 {
1661 return new WixErrorEventArgs(sourceLineNumbers, 272, "WixErrors_MissingManifestForWin32Assembly_1", file, manifest);
1662 }
1663
1664 public static MessageEventArgs UnableToOpenModule(SourceLineNumber sourceLineNumbers, string modulePath, string message)
1665 {
1666 return new WixErrorEventArgs(sourceLineNumbers, 273, "WixErrors_UnableToOpenModule_1", modulePath, message);
1667 }
1668
1669 public static MessageEventArgs ExpectedAttributeWhenElementNotUnderElement(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName)
1670 {
1671 return new WixErrorEventArgs(sourceLineNumbers, 274, "WixErrors_ExpectedAttributeWhenElementNotUnderElement_1", elementName, attributeName, parentElementName);
1672 }
1673
1674 public static MessageEventArgs IllegalIdentifierLooksLikeFormatted(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1675 {
1676 return new WixErrorEventArgs(sourceLineNumbers, 275, "WixErrors_IllegalIdentifierLooksLikeFormatted_1", elementName, attributeName, value);
1677 }
1678
1679 public static MessageEventArgs IllegalCodepageAttribute(SourceLineNumber sourceLineNumbers, string codepage, string elementName, string attributeName)
1680 {
1681 return new WixErrorEventArgs(sourceLineNumbers, 276, "WixErrors_IllegalCodepageAttribute_1", codepage, elementName, attributeName);
1682 }
1683
1684 public static MessageEventArgs IllegalCompressionLevel(string compressionLevel)
1685 {
1686 return new WixErrorEventArgs(null, 277, "WixErrors_IllegalCompressionLevel_1", compressionLevel);
1687 }
1688
1689 public static MessageEventArgs TransformSchemaMismatch()
1690 {
1691 return new WixErrorEventArgs(null, 278, "WixErrors_TransformSchemaMismatch_1");
1692 }
1693
1694 public static MessageEventArgs DatabaseSchemaMismatch(SourceLineNumber sourceLineNumbers, string tableName)
1695 {
1696 return new WixErrorEventArgs(sourceLineNumbers, 279, "WixErrors_DatabaseSchemaMismatch_1", tableName);
1697 }
1698
1699 public static MessageEventArgs ExpectedDirectoryGotFile(string option, string path)
1700 {
1701 return new WixErrorEventArgs(null, 280, "WixErrors_ExpectedDirectoryGotFile_1", option, path);
1702 }
1703
1704 public static MessageEventArgs ExpectedFileGotDirectory(string option, string path)
1705 {
1706 return new WixErrorEventArgs(null, 281, "WixErrors_ExpectedFileGotDirectory_1", option, path);
1707 }
1708
1709 public static MessageEventArgs GacAssemblyNoStrongName(SourceLineNumber sourceLineNumbers, string assemblyName, string componentName)
1710 {
1711 return new WixErrorEventArgs(sourceLineNumbers, 282, "WixErrors_GacAssemblyNoStrongName_1", assemblyName, componentName);
1712 }
1713
1714 public static MessageEventArgs FileWriteError(string path, string error)
1715 {
1716 return new WixErrorEventArgs(null, 283, "WixErrors_FileWriteError_1", path, error);
1717 }
1718
1719 public static MessageEventArgs InvalidCommandLineFileName(string fileName, string error)
1720 {
1721 return new WixErrorEventArgs(null, 284, "WixErrors_InvalidCommandLineFileName_1", fileName, error);
1722 }
1723
1724 public static MessageEventArgs ExpectedParentWithAttribute(SourceLineNumber sourceLineNumbers, string parentElement, string attribute, string grandparentElement)
1725 {
1726 return new WixErrorEventArgs(sourceLineNumbers, 285, "WixErrors_ExpectedParentWithAttribute_1", parentElement, attribute, grandparentElement);
1727 }
1728
1729 public static MessageEventArgs IllegalWarningIdAsError(string warningId)
1730 {
1731 return new WixErrorEventArgs(null, 286, "WixErrors_IllegalWarningIdAsError_1", warningId);
1732 }
1733
1734 public static MessageEventArgs ExpectedAttributeOrElement(SourceLineNumber sourceLineNumbers, string parentElement, string attribute, string childElement)
1735 {
1736 return new WixErrorEventArgs(sourceLineNumbers, 287, "WixErrors_ExpectedAttributeOrElement_1", parentElement, attribute, childElement);
1737 }
1738
1739 public static MessageEventArgs DuplicateVariableDefinition(string variableName, string variableValue, string variableCollidingValue)
1740 {
1741 return new WixErrorEventArgs(null, 288, "WixErrors_DuplicateVariableDefinition_1", variableName, variableValue, variableCollidingValue);
1742 }
1743
1744 public static MessageEventArgs InvalidVariableDefinition(string variableDefinition)
1745 {
1746 return new WixErrorEventArgs(null, 289, "WixErrors_InvalidVariableDefinition_1", variableDefinition);
1747 }
1748
1749 public static MessageEventArgs DuplicateCabinetName(SourceLineNumber sourceLineNumbers, string cabinetName)
1750 {
1751 return new WixErrorEventArgs(sourceLineNumbers, 290, "WixErrors_DuplicateCabinetName_1", cabinetName);
1752 }
1753
1754 public static MessageEventArgs DuplicateCabinetName2(SourceLineNumber sourceLineNumbers, string cabinetName)
1755 {
1756 return new WixErrorEventArgs(sourceLineNumbers, 291, "WixErrors_DuplicateCabinetName2_1", cabinetName);
1757 }
1758
1759 public static MessageEventArgs InvalidAddedFileRowWithoutSequence(SourceLineNumber sourceLineNumbers, string fileRowId)
1760 {
1761 return new WixErrorEventArgs(sourceLineNumbers, 292, "WixErrors_InvalidAddedFileRowWithoutSequence_1", fileRowId);
1762 }
1763
1764 public static MessageEventArgs DuplicateFileId(string fileId)
1765 {
1766 return new WixErrorEventArgs(null, 293, "WixErrors_DuplicateFileId_1", fileId);
1767 }
1768
1769 public static MessageEventArgs FullTempDirectory(string prefix, string directory)
1770 {
1771 return new WixErrorEventArgs(null, 294, "WixErrors_FullTempDirectory_1", prefix, directory);
1772 }
1773
1774 public static MessageEventArgs CreateCabAddFileFailed()
1775 {
1776 return new WixErrorEventArgs(null, 296, "WixErrors_CreateCabAddFileFailed_1");
1777 }
1778
1779 public static MessageEventArgs CreateCabInsufficientDiskSpace()
1780 {
1781 return new WixErrorEventArgs(null, 297, "WixErrors_CreateCabInsufficientDiskSpace_1");
1782 }
1783
1784 public static MessageEventArgs UnresolvedBindReference(SourceLineNumber sourceLineNumbers, string BindRef)
1785 {
1786 return new WixErrorEventArgs(sourceLineNumbers, 298, "WixErrors_UnresolvedBindReference_1", BindRef);
1787 }
1788
1789 public static MessageEventArgs GACAssemblyIdentityWarning(SourceLineNumber sourceLineNumbers, string fileName, string assemblyName)
1790 {
1791 return new WixErrorEventArgs(sourceLineNumbers, 299, "WixErrors_GACAssemblyIdentityWarning_1", fileName, assemblyName);
1792 }
1793
1794 public static MessageEventArgs IllegalCharactersInPath(string pathName)
1795 {
1796 return new WixErrorEventArgs(null, 300, "WixErrors_IllegalCharactersInPath_1", pathName);
1797 }
1798
1799 public static MessageEventArgs ValidationFailedToOpenDatabase()
1800 {
1801 return new WixErrorEventArgs(null, 301, "WixErrors_ValidationFailedToOpenDatabase_1");
1802 }
1803
1804 public static MessageEventArgs MustSpecifyOutputWithMoreThanOneInput()
1805 {
1806 return new WixErrorEventArgs(null, 302, "WixErrors_MustSpecifyOutputWithMoreThanOneInput_1");
1807 }
1808
1809 public static MessageEventArgs IllegalSearchIdForParentDepth(SourceLineNumber sourceLineNumbers, string id, string parentId)
1810 {
1811 return new WixErrorEventArgs(sourceLineNumbers, 303, "WixErrors_IllegalSearchIdForParentDepth_1", id, parentId);
1812 }
1813
1814 public static MessageEventArgs IdentifierTooLongError(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int maxLength)
1815 {
1816 return new WixErrorEventArgs(sourceLineNumbers, 304, "WixErrors_IdentifierTooLongError_1", elementName, attributeName, value, maxLength);
1817 }
1818
1819 public static MessageEventArgs InvalidRemoveComponent(SourceLineNumber sourceLineNumbers, string component, string feature, string transformPath)
1820 {
1821 return new WixErrorEventArgs(sourceLineNumbers, 305, "WixErrors_InvalidRemoveComponent_1", component, feature, transformPath);
1822 }
1823
1824 public static MessageEventArgs FinishCabFailed()
1825 {
1826 return new WixErrorEventArgs(null, 306, "WixErrors_FinishCabFailed_1");
1827 }
1828
1829 public static MessageEventArgs InvalidExtensionType(string extension, string attributeType)
1830 {
1831 return new WixErrorEventArgs(null, 307, "WixErrors_InvalidExtensionType_1", extension, attributeType);
1832 }
1833
1834 public static MessageEventArgs InvalidExtensionType(string extension, string className, string expectedType)
1835 {
1836 return new WixErrorEventArgs(null, 307, "WixErrors_InvalidExtensionType_2", extension, className, expectedType);
1837 }
1838
1839 public static MessageEventArgs InvalidExtensionType(string extension, string className, string exceptionType, string exceptionMessage)
1840 {
1841 return new WixErrorEventArgs(null, 307, "WixErrors_InvalidExtensionType_3", extension, className, exceptionType, exceptionMessage);
1842 }
1843
1844 public static MessageEventArgs ValidationFailedDueToMultilanguageMergeModule()
1845 {
1846 return new WixErrorEventArgs(null, 309, "WixErrors_ValidationFailedDueToMultilanguageMergeModule_1");
1847 }
1848
1849 public static MessageEventArgs ValidationFailedDueToInvalidPackage()
1850 {
1851 return new WixErrorEventArgs(null, 310, "WixErrors_ValidationFailedDueToInvalidPackage_1");
1852 }
1853
1854 public static MessageEventArgs InvalidStringForCodepage(SourceLineNumber sourceLineNumbers, string codepage)
1855 {
1856 return new WixErrorEventArgs(sourceLineNumbers, 311, "WixErrors_InvalidStringForCodepage_1", codepage);
1857 }
1858
1859 public static MessageEventArgs InvalidEmbeddedUIFileName(SourceLineNumber sourceLineNumbers, string codepage)
1860 {
1861 return new WixErrorEventArgs(sourceLineNumbers, 312, "WixErrors_InvalidEmbeddedUIFileName_1", codepage);
1862 }
1863
1864 public static MessageEventArgs UniqueFileSearchIdRequired(SourceLineNumber sourceLineNumbers, string id, string elementName)
1865 {
1866 return new WixErrorEventArgs(sourceLineNumbers, 313, "WixErrors_UniqueFileSearchIdRequired_1", id, elementName);
1867 }
1868
1869 public static MessageEventArgs IllegalAttributeValueWhenNested(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attrivuteValue, string parentElementName)
1870 {
1871 return new WixErrorEventArgs(sourceLineNumbers, 314, "WixErrors_IllegalAttributeValueWhenNested_1", elementName, attributeName, attrivuteValue, parentElementName);
1872 }
1873
1874 public static MessageEventArgs AdminImageRequired(string productCode)
1875 {
1876 return new WixErrorEventArgs(null, 315, "WixErrors_AdminImageRequired_1", productCode);
1877 }
1878
1879 public static MessageEventArgs SamePatchBaselineId(SourceLineNumber sourceLineNumbers, string id)
1880 {
1881 return new WixErrorEventArgs(sourceLineNumbers, 316, "WixErrors_SamePatchBaselineId_1", id);
1882 }
1883
1884 public static MessageEventArgs SameFileIdDifferentSource(SourceLineNumber sourceLineNumbers, string fileId, string sourcePath1, string sourcePath2)
1885 {
1886 return new WixErrorEventArgs(sourceLineNumbers, 317, "WixErrors_SameFileIdDifferentSource_1", fileId, sourcePath1, sourcePath2);
1887 }
1888
1889 public static MessageEventArgs HarvestSourceNotSpecified()
1890 {
1891 return new WixErrorEventArgs(null, 318, "WixErrors_HarvestSourceNotSpecified_1");
1892 }
1893
1894 public static MessageEventArgs OutputTargetNotSpecified()
1895 {
1896 return new WixErrorEventArgs(null, 319, "WixErrors_OutputTargetNotSpecified_1");
1897 }
1898
1899 public static MessageEventArgs DuplicateCommandLineOptionInExtension(string @switch)
1900 {
1901 return new WixErrorEventArgs(null, 320, "WixErrors_DuplicateCommandLineOptionInExtension_1", @switch);
1902 }
1903
1904 public static MessageEventArgs HarvestTypeNotFound()
1905 {
1906 return new WixErrorEventArgs(null, 321, "WixErrors_HarvestTypeNotFound_1");
1907 }
1908
1909 public static MessageEventArgs HarvestTypeNotFound(string harvestType)
1910 {
1911 return new WixErrorEventArgs(null, 321, "WixErrors_HarvestTypeNotFound_2", harvestType);
1912 }
1913
1914 public static MessageEventArgs BothUpgradeCodesRequired()
1915 {
1916 return new WixErrorEventArgs(null, 322, "WixErrors_BothUpgradeCodesRequired_1");
1917 }
1918
1919 public static MessageEventArgs IllegalBinderClassName()
1920 {
1921 return new WixErrorEventArgs(null, 323, "WixErrors_IllegalBinderClassName_1");
1922 }
1923
1924 public static MessageEventArgs SpecifiedBinderNotFound(string binderClass)
1925 {
1926 return new WixErrorEventArgs(null, 324, "WixErrors_SpecifiedBinderNotFound_1", binderClass);
1927 }
1928
1929 public static MessageEventArgs CannotLoadBinderFileManager(string binderFileManager, string currentBinderFileManager)
1930 {
1931 return new WixErrorEventArgs(null, 325, "WixErrors_CannotLoadBinderFileManager_1", binderFileManager, currentBinderFileManager);
1932 }
1933
1934 public static MessageEventArgs CannotLoadLinkerExtension(string linkerExtension, string currentLinkerExtension)
1935 {
1936 return new WixErrorEventArgs(null, 326, "WixErrors_CannotLoadLinkerExtension_1", linkerExtension, currentLinkerExtension);
1937 }
1938
1939 public static MessageEventArgs UnableToGetAuthenticodeCertOfFile(string filePath, string moreInformation)
1940 {
1941 return new WixErrorEventArgs(null, 327, "WixErrors_UnableToGetAuthenticodeCertOfFile_1", filePath, moreInformation);
1942 }
1943
1944 public static MessageEventArgs UnableToGetAuthenticodeCertOfFileDownlevelOS(string filePath, string moreInformation)
1945 {
1946 return new WixErrorEventArgs(null, 328, "WixErrors_UnableToGetAuthenticodeCertOfFileDownlevelOS_1", filePath, moreInformation);
1947 }
1948
1949 public static MessageEventArgs ReadOnlyOutputFile(string filePath)
1950 {
1951 return new WixErrorEventArgs(null, 329, "WixErrors_ReadOnlyOutputFile_1", filePath);
1952 }
1953
1954 public static MessageEventArgs CannotDefaultComponentId(SourceLineNumber sourceLineNumbers)
1955 {
1956 return new WixErrorEventArgs(sourceLineNumbers, 330, "WixErrors_CannotDefaultComponentId_1");
1957 }
1958
1959 public static MessageEventArgs ParentElementAttributeRequired(SourceLineNumber sourceLineNumbers, string parentElement, string parentAttribute, string childElement)
1960 {
1961 return new WixErrorEventArgs(sourceLineNumbers, 331, "WixErrors_ParentElementAttributeRequired_1", parentElement, parentAttribute, childElement);
1962 }
1963
1964 public static MessageEventArgs PreprocessorExtensionPragmaFailed(SourceLineNumber sourceLineNumbers, string pragma, string message)
1965 {
1966 return new WixErrorEventArgs(sourceLineNumbers, 333, "WixErrors_PreprocessorExtensionPragmaFailed_1", pragma, message);
1967 }
1968
1969 public static MessageEventArgs InvalidPreprocessorPragma(SourceLineNumber sourceLineNumbers, string variable)
1970 {
1971 return new WixErrorEventArgs(sourceLineNumbers, 334, "WixErrors_InvalidPreprocessorPragma_1", variable);
1972 }
1973
1974 public static MessageEventArgs SmokeUnknownFileExtension()
1975 {
1976 return new WixErrorEventArgs(null, 335, "WixErrors_SmokeUnknownFileExtension_1");
1977 }
1978
1979 public static MessageEventArgs SmokeUnsupportedFileExtension()
1980 {
1981 return new WixErrorEventArgs(null, 336, "WixErrors_SmokeUnsupportedFileExtension_1");
1982 }
1983
1984 public static MessageEventArgs SmokeMalformedPath()
1985 {
1986 return new WixErrorEventArgs(null, 337, "WixErrors_SmokeMalformedPath_1");
1987 }
1988
1989 public static MessageEventArgs InvalidStubExe(string filename)
1990 {
1991 return new WixErrorEventArgs(null, 338, "WixErrors_InvalidStubExe_1", filename);
1992 }
1993
1994 public static MessageEventArgs StubMissingWixburnSection(string filename)
1995 {
1996 return new WixErrorEventArgs(null, 339, "WixErrors_StubMissingWixburnSection_1", filename);
1997 }
1998
1999 public static MessageEventArgs StubWixburnSectionTooSmall(string filename)
2000 {
2001 return new WixErrorEventArgs(null, 340, "WixErrors_StubWixburnSectionTooSmall_1", filename);
2002 }
2003
2004 public static MessageEventArgs MissingBundleInformation(string data)
2005 {
2006 return new WixErrorEventArgs(null, 341, "WixErrors_MissingBundleInformation_1", data);
2007 }
2008
2009 public static MessageEventArgs UnexpectedGroupChild(string parentType, string parentId, string childType, string childId)
2010 {
2011 return new WixErrorEventArgs(null, 342, "WixErrors_UnexpectedGroupChild_1", parentType, parentId, childType, childId);
2012 }
2013
2014 public static MessageEventArgs OrderingReferenceLoopDetected(SourceLineNumber sourceLineNumbers, string loopList)
2015 {
2016 return new WixErrorEventArgs(sourceLineNumbers, 343, "WixErrors_OrderingReferenceLoopDetected_1", loopList);
2017 }
2018
2019 public static MessageEventArgs IdentifierNotFound(string type, string identifier)
2020 {
2021 return new WixErrorEventArgs(null, 344, "WixErrors_IdentifierNotFound_1", type, identifier);
2022 }
2023
2024 public static MessageEventArgs MergePlatformMismatch(SourceLineNumber sourceLineNumbers, string mergeModuleFile)
2025 {
2026 return new WixErrorEventArgs(sourceLineNumbers, 345, "WixErrors_MergePlatformMismatch_1", mergeModuleFile);
2027 }
2028
2029 public static MessageEventArgs IllegalRelativeLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2030 {
2031 return new WixErrorEventArgs(sourceLineNumbers, 346, "WixErrors_IllegalRelativeLongFilename_1", elementName, attributeName, value);
2032 }
2033
2034 public static MessageEventArgs IllegalAttributeValueWithLegalList(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValueList)
2035 {
2036 return new WixErrorEventArgs(sourceLineNumbers, 347, "WixErrors_IllegalAttributeValueWithLegalList_1", elementName, attributeName, value, legalValueList);
2037 }
2038
2039 public static MessageEventArgs IllegalAttributeValueWithIllegalList(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string illegalValueList)
2040 {
2041 return new WixErrorEventArgs(sourceLineNumbers, 348, "WixErrors_IllegalAttributeValueWithIllegalList_1", elementName, attributeName, value, illegalValueList);
2042 }
2043
2044 public static MessageEventArgs InvalidSummaryInfoCodePage(SourceLineNumber sourceLineNumbers, int codePage)
2045 {
2046 return new WixErrorEventArgs(sourceLineNumbers, 349, "WixErrors_InvalidSummaryInfoCodePage_1", codePage);
2047 }
2048
2049 public static MessageEventArgs ValidationFailedDueToLowMsiEngine()
2050 {
2051 return new WixErrorEventArgs(null, 350, "WixErrors_ValidationFailedDueToLowMsiEngine_1");
2052 }
2053
2054 public static MessageEventArgs DuplicateSourcesForOutput(string sourceList, string outputFile)
2055 {
2056 return new WixErrorEventArgs(null, 351, "WixErrors_DuplicateSourcesForOutput_1", sourceList, outputFile);
2057 }
2058
2059 public static MessageEventArgs UnableToReadPackageInformation(SourceLineNumber sourceLineNumbers, string packagePath, string detailedErrorMessage)
2060 {
2061 return new WixErrorEventArgs(sourceLineNumbers, 352, "WixErrors_UnableToReadPackageInformation_1", packagePath, detailedErrorMessage);
2062 }
2063
2064 public static MessageEventArgs MultipleFilesMatchedWithOutputSpecification(string sourceSpecification, string sourceList)
2065 {
2066 return new WixErrorEventArgs(null, 353, "WixErrors_MultipleFilesMatchedWithOutputSpecification_1", sourceSpecification, sourceList);
2067 }
2068
2069 public static MessageEventArgs InvalidBundle(string bundleExecutable)
2070 {
2071 return new WixErrorEventArgs(null, 354, "WixErrors_InvalidBundle_1", bundleExecutable);
2072 }
2073
2074 public static MessageEventArgs BundleTooNew(string bundleExecutable, long bundleVersion)
2075 {
2076 return new WixErrorEventArgs(null, 355, "WixErrors_BundleTooNew_1", bundleExecutable, bundleVersion);
2077 }
2078
2079 public static MessageEventArgs WrongFileExtensionForNumberOfInputs(string inputExtension, string input)
2080 {
2081 return new WixErrorEventArgs(null, 356, "WixErrors_WrongFileExtensionForNumberOfInputs_1", inputExtension, input);
2082 }
2083
2084 public static MessageEventArgs MediaTableCollision(SourceLineNumber sourceLineNumbers)
2085 {
2086 return new WixErrorEventArgs(sourceLineNumbers, 357, "WixErrors_MediaTableCollision_1");
2087 }
2088
2089 public static MessageEventArgs InvalidCabinetTemplate(SourceLineNumber sourceLineNumbers, string cabinetTemplate)
2090 {
2091 return new WixErrorEventArgs(sourceLineNumbers, 358, "WixErrors_InvalidCabinetTemplate_1", cabinetTemplate);
2092 }
2093
2094 public static MessageEventArgs MaximumUncompressedMediaSizeTooLarge(SourceLineNumber sourceLineNumbers, int maximumUncompressedMediaSize)
2095 {
2096 return new WixErrorEventArgs(sourceLineNumbers, 359, "WixErrors_MaximumUncompressedMediaSizeTooLarge_1", maximumUncompressedMediaSize);
2097 }
2098
2099 public static MessageEventArgs CatalogVerificationFailed(string fileName)
2100 {
2101 return new WixErrorEventArgs(null, 360, "WixErrors_CatalogVerificationFailed_1", fileName);
2102 }
2103
2104 public static MessageEventArgs CatalogFileHashFailed(string fileName, int errorCode)
2105 {
2106 return new WixErrorEventArgs(null, 361, "WixErrors_CatalogFileHashFailed_1", fileName, errorCode);
2107 }
2108
2109 public static MessageEventArgs ReservedNamespaceViolation(SourceLineNumber sourceLineNumbers, string element, string attribute, string prefix)
2110 {
2111 return new WixErrorEventArgs(sourceLineNumbers, 362, "WixErrors_ReservedNamespaceViolation_1", element, attribute, prefix);
2112 }
2113
2114 public static MessageEventArgs PerUserButAllUsersEquals1(SourceLineNumber sourceLineNumbers, string path)
2115 {
2116 return new WixErrorEventArgs(sourceLineNumbers, 363, "WixErrors_PerUserButAllUsersEquals1_1", path);
2117 }
2118
2119 public static MessageEventArgs UnsupportedAllUsersValue(SourceLineNumber sourceLineNumbers, string path, string value)
2120 {
2121 return new WixErrorEventArgs(sourceLineNumbers, 364, "WixErrors_UnsupportedAllUsersValue_1", path, value);
2122 }
2123
2124 public static MessageEventArgs DisallowedMsiProperty(SourceLineNumber sourceLineNumbers, string property, string illegalValueList)
2125 {
2126 return new WixErrorEventArgs(sourceLineNumbers, 365, "WixErrors_DisallowedMsiProperty_1", property, illegalValueList);
2127 }
2128
2129 public static MessageEventArgs MissingOrInvalidModuleInstallerVersion(SourceLineNumber sourceLineNumbers, string moduleId, string mergeModuleFile, string productInstallerVersion)
2130 {
2131 return new WixErrorEventArgs(sourceLineNumbers, 366, "WixErrors_MissingOrInvalidModuleInstallerVersion_1", moduleId, mergeModuleFile, productInstallerVersion);
2132 }
2133
2134 public static MessageEventArgs IllegalGeneratedGuidComponentUnversionedKeypath(SourceLineNumber sourceLineNumbers)
2135 {
2136 return new WixErrorEventArgs(sourceLineNumbers, 367, "WixErrors_IllegalGeneratedGuidComponentUnversionedKeypath_1");
2137 }
2138
2139 public static MessageEventArgs IllegalGeneratedGuidComponentVersionedNonkeypath(SourceLineNumber sourceLineNumbers)
2140 {
2141 return new WixErrorEventArgs(sourceLineNumbers, 368, "WixErrors_IllegalGeneratedGuidComponentVersionedNonkeypath_1");
2142 }
2143
2144 public static MessageEventArgs DuplicateComponentGuids(SourceLineNumber sourceLineNumbers, string componentId, string guid)
2145 {
2146 return new WixErrorEventArgs(sourceLineNumbers, 369, "WixErrors_DuplicateComponentGuids_1", componentId, guid);
2147 }
2148
2149 public static MessageEventArgs DuplicateProviderDependencyKey(string providerKey, string packageId)
2150 {
2151 return new WixErrorEventArgs(null, 370, "WixErrors_DuplicateProviderDependencyKey_1", providerKey, packageId);
2152 }
2153
2154 public static MessageEventArgs MissingDependencyVersion(string packageId)
2155 {
2156 return new WixErrorEventArgs(null, 371, "WixErrors_MissingDependencyVersion_1", packageId);
2157 }
2158
2159 public static MessageEventArgs UnexpectedElementWithAttribute(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute)
2160 {
2161 return new WixErrorEventArgs(sourceLineNumbers, 372, "WixErrors_UnexpectedElementWithAttribute_1", elementName, childElementName, attribute);
2162 }
2163
2164 public static MessageEventArgs ExpectedAttributeWithElement(SourceLineNumber sourceLineNumbers, string elementName, string attribute, string childElementName)
2165 {
2166 return new WixErrorEventArgs(sourceLineNumbers, 373, "WixErrors_ExpectedAttributeWithElement_1", elementName, attribute, childElementName);
2167 }
2168
2169 public static MessageEventArgs DuplicatedUiLocalization(SourceLineNumber sourceLineNumbers, string controlName, string dialogName)
2170 {
2171 return new WixErrorEventArgs(sourceLineNumbers, 374, "WixErrors_DuplicatedUiLocalization_1", controlName, dialogName);
2172 }
2173
2174 public static MessageEventArgs DuplicatedUiLocalization(SourceLineNumber sourceLineNumbers, string dialogName)
2175 {
2176 return new WixErrorEventArgs(sourceLineNumbers, 374, "WixErrors_DuplicatedUiLocalization_2", dialogName);
2177 }
2178
2179 public static MessageEventArgs MaximumCabinetSizeForLargeFileSplittingTooLarge(SourceLineNumber sourceLineNumbers, int maximumCabinetSizeForLargeFileSplitting, int maxValueOfMaxCabSizeForLargeFileSplitting)
2180 {
2181 return new WixErrorEventArgs(sourceLineNumbers, 375, "WixErrors_MaximumCabinetSizeForLargeFileSplittingTooLarge_1", maximumCabinetSizeForLargeFileSplitting, maxValueOfMaxCabSizeForLargeFileSplitting);
2182 }
2183
2184 public static MessageEventArgs SplitCabinetCopyRegistrationFailed(string newCabName, string firstCabName)
2185 {
2186 return new WixErrorEventArgs(null, 376, "WixErrors_SplitCabinetCopyRegistrationFailed_1", newCabName, firstCabName);
2187 }
2188
2189 public static MessageEventArgs SplitCabinetNameCollision(string newCabName, string firstCabName)
2190 {
2191 return new WixErrorEventArgs(null, 377, "WixErrors_SplitCabinetNameCollision_1", newCabName, firstCabName);
2192 }
2193
2194 public static MessageEventArgs SplitCabinetInsertionFailed(string newCabName, string firstCabName, string lastCabinetOfThisSequence)
2195 {
2196 return new WixErrorEventArgs(null, 378, "WixErrors_SplitCabinetInsertionFailed_1", newCabName, firstCabName, lastCabinetOfThisSequence);
2197 }
2198
2199 public static MessageEventArgs InvalidPreprocessorFunctionAutoVersion(SourceLineNumber sourceLineNumbers)
2200 {
2201 return new WixErrorEventArgs(sourceLineNumbers, 379, "WixErrors_InvalidPreprocessorFunctionAutoVersion_1");
2202 }
2203
2204 public static MessageEventArgs InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version)
2205 {
2206 return new WixErrorEventArgs(sourceLineNumbers, 380, "WixErrors_InvalidModuleOrBundleVersion_1", moduleOrBundle, version);
2207 }
2208
2209 public static MessageEventArgs UnsupportedPlatformForElement(SourceLineNumber sourceLineNumbers, string platform, string elementName)
2210 {
2211 return new WixErrorEventArgs(sourceLineNumbers, 381, "WixErrors_UnsupportedPlatformForElement_1", platform, elementName);
2212 }
2213
2214 public static MessageEventArgs MissingMedia(SourceLineNumber sourceLineNumbers, int diskId)
2215 {
2216 return new WixErrorEventArgs(sourceLineNumbers, 382, "WixErrors_MissingMedia_1", diskId);
2217 }
2218
2219 public static MessageEventArgs RemotePayloadUnsupported(SourceLineNumber sourceLineNumbers)
2220 {
2221 return new WixErrorEventArgs(sourceLineNumbers, 383, "WixErrors_RemotePayloadUnsupported_1");
2222 }
2223
2224 public static MessageEventArgs IllegalYesNoAlwaysValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2225 {
2226 return new WixErrorEventArgs(sourceLineNumbers, 384, "WixErrors_IllegalYesNoAlwaysValue_1", elementName, attributeName, value);
2227 }
2228
2229 public static MessageEventArgs TooDeeplyIncluded(SourceLineNumber sourceLineNumbers, int depth)
2230 {
2231 return new WixErrorEventArgs(sourceLineNumbers, 385, "WixErrors_TooDeeplyIncluded_1", depth);
2232 }
2233
2234 public static MessageEventArgs InlineDirectorySyntaxRequiresPath(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string identifier)
2235 {
2236 return new WixErrorEventArgs(sourceLineNumbers, 387, "WixErrors_InlineDirectorySyntaxRequiresPath_1", elementName, attributeName, value, identifier);
2237 }
2238
2239 public static MessageEventArgs InsecureBundleFilename(string filename)
2240 {
2241 return new WixErrorEventArgs(null, 388, "WixErrors_InsecureBundleFilename_1", filename);
2242 }
2243
2244 public static MessageEventArgs PayloadMustBeRelativeToCache(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
2245 {
2246 return new WixErrorEventArgs(sourceLineNumbers, 389, "WixErrors_PayloadMustBeRelativeToCache_1", elementName, attributeName, attributeValue);
2247 }
2248
2249 public static MessageEventArgs MsiTransactionX86BeforeX64(SourceLineNumber sourceLineNumbers)
2250 {
2251 return new WixErrorEventArgs(sourceLineNumbers, 390, "WixErrors_MsiTransactionX86BeforeX64_1");
2252 }
2253 }
2254
2255 public class WixWarningEventArgs : MessageEventArgs
2256 {
2257
2258 private static ResourceManager resourceManager = new ResourceManager("WixToolset.Core.Data.Messages", Assembly.GetExecutingAssembly());
2259
2260 public WixWarningEventArgs(SourceLineNumber sourceLineNumbers, int id, string resourceName, params object[] messageArgs) :
2261 base(sourceLineNumbers, id, resourceName, messageArgs)
2262 {
2263 base.Level = MessageLevel.Warning;
2264 base.ResourceManager = resourceManager;
2265 }
2266 }
2267
2268 public sealed class WixWarnings
2269 {
2270
2271 private WixWarnings()
2272 {
2273 }
2274
2275 public static MessageEventArgs IdentifierCannotBeModularized(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string identifier, int length, int maximumLength)
2276 {
2277 return new WixWarningEventArgs(sourceLineNumbers, 1000, "WixWarnings_IdentifierCannotBeModularized_1", elementName, attributeName, identifier, length, maximumLength);
2278 }
2279
2280 public static MessageEventArgs EmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2281 {
2282 return new WixWarningEventArgs(sourceLineNumbers, 1001, "WixWarnings_EmptyAttributeValue_1", elementName, attributeName);
2283 }
2284
2285 public static MessageEventArgs UnableToFindFileFromCabOrImage(SourceLineNumber sourceLineNumbers, string existingFileSpec, string srcFileSpec)
2286 {
2287 return new WixWarningEventArgs(sourceLineNumbers, 1002, "WixWarnings_UnableToFindFileFromCabOrImage_1", existingFileSpec, srcFileSpec);
2288 }
2289
2290 public static MessageEventArgs CopyFileFileIdUseless(SourceLineNumber sourceLineNumbers)
2291 {
2292 return new WixWarningEventArgs(sourceLineNumbers, 1003, "WixWarnings_CopyFileFileIdUseless_1");
2293 }
2294
2295 public static MessageEventArgs NestedInstall(SourceLineNumber sourceLineNumbers, string tableName, string columnName, object value)
2296 {
2297 return new WixWarningEventArgs(sourceLineNumbers, 1004, "WixWarnings_NestedInstall_1", tableName, columnName, value);
2298 }
2299
2300 public static MessageEventArgs OrphanedProgId(SourceLineNumber sourceLineNumbers, string progId)
2301 {
2302 return new WixWarningEventArgs(sourceLineNumbers, 1005, "WixWarnings_OrphanedProgId_1", progId);
2303 }
2304
2305 public static MessageEventArgs PropertyUseless(SourceLineNumber sourceLineNumbers, string id)
2306 {
2307 return new WixWarningEventArgs(sourceLineNumbers, 1006, "WixWarnings_PropertyUseless_1", id);
2308 }
2309
2310 public static MessageEventArgs RemoveFileNameRequired(SourceLineNumber sourceLineNumbers)
2311 {
2312 return new WixWarningEventArgs(sourceLineNumbers, 1007, "WixWarnings_RemoveFileNameRequired_1");
2313 }
2314
2315 public static MessageEventArgs SuppressAction(SourceLineNumber sourceLineNumbers, string action, string sequenceName)
2316 {
2317 return new WixWarningEventArgs(sourceLineNumbers, 1008, "WixWarnings_SuppressAction_1", action, sequenceName);
2318 }
2319
2320 public static MessageEventArgs SuppressMergedAction(string action, string sequenceName)
2321 {
2322 return new WixWarningEventArgs(null, 1009, "WixWarnings_SuppressMergedAction_1", action, sequenceName);
2323 }
2324
2325 public static MessageEventArgs TargetDirCorrectedDefaultDir()
2326 {
2327 return new WixWarningEventArgs(null, 1010, "WixWarnings_TargetDirCorrectedDefaultDir_1");
2328 }
2329
2330 public static MessageEventArgs AccessDeniedForDeletion(SourceLineNumber sourceLineNumbers, string tempFilesBasePath)
2331 {
2332 return new WixWarningEventArgs(sourceLineNumbers, 1011, "WixWarnings_AccessDeniedForDeletion_1", tempFilesBasePath);
2333 }
2334
2335 public static MessageEventArgs DirectoryInUse(SourceLineNumber sourceLineNumbers, string filePath)
2336 {
2337 return new WixWarningEventArgs(sourceLineNumbers, 1012, "WixWarnings_DirectoryInUse_1", filePath);
2338 }
2339
2340 public static MessageEventArgs AccessDeniedForSettingAttributes(SourceLineNumber sourceLineNumbers, string filePath)
2341 {
2342 return new WixWarningEventArgs(sourceLineNumbers, 1013, "WixWarnings_AccessDeniedForSettingAttributes_1", filePath);
2343 }
2344
2345 public static MessageEventArgs UnknownAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
2346 {
2347 return new WixWarningEventArgs(sourceLineNumbers, 1024, "WixWarnings_UnknownAction_1", sequenceTableName, actionName);
2348 }
2349
2350 public static MessageEventArgs IdentifierTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2351 {
2352 return new WixWarningEventArgs(sourceLineNumbers, 1026, "WixWarnings_IdentifierTooLong_1", elementName, attributeName, value);
2353 }
2354
2355 public static MessageEventArgs UnknownPermission(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, int bitPosition)
2356 {
2357 return new WixWarningEventArgs(sourceLineNumbers, 1030, "WixWarnings_UnknownPermission_1", tableName, primaryKey, bitPosition);
2358 }
2359
2360 public static MessageEventArgs DirectoryRedundantNames(SourceLineNumber sourceLineNumbers, string elementName, string shortNameAttributeName, string longNameAttributeName, string attributeValue)
2361 {
2362 return new WixWarningEventArgs(sourceLineNumbers, 1031, "WixWarnings_DirectoryRedundantNames_1", elementName, shortNameAttributeName, longNameAttributeName, attributeValue);
2363 }
2364
2365 public static MessageEventArgs DirectoryRedundantNames(SourceLineNumber sourceLineNumbers, string elementName, string sourceNameAttributeName, string longSourceAttributeName)
2366 {
2367 return new WixWarningEventArgs(sourceLineNumbers, 1031, "WixWarnings_DirectoryRedundantNames_2", elementName, sourceNameAttributeName, longSourceAttributeName);
2368 }
2369
2370 public static MessageEventArgs UnableToResetAcls()
2371 {
2372 return new WixWarningEventArgs(null, 1032, "WixWarnings_UnableToResetAcls_1");
2373 }
2374
2375 public static MessageEventArgs MediaExternalCabinetFilenameIllegal(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2376 {
2377 return new WixWarningEventArgs(sourceLineNumbers, 1033, "WixWarnings_MediaExternalCabinetFilenameIllegal_1", elementName, attributeName, value);
2378 }
2379
2380 public static MessageEventArgs DeprecatedPreProcVariable(SourceLineNumber sourceLineNumbers, string oldName, string newName)
2381 {
2382 return new WixWarningEventArgs(sourceLineNumbers, 1034, "WixWarnings_DeprecatedPreProcVariable_1", oldName, newName);
2383 }
2384
2385 public static MessageEventArgs FileSearchFileNameIssue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
2386 {
2387 return new WixWarningEventArgs(sourceLineNumbers, 1043, "WixWarnings_FileSearchFileNameIssue_1", elementName, attributeName1, attributeName2);
2388 }
2389
2390 public static MessageEventArgs AmbiguousFileOrDirectoryName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2391 {
2392 return new WixWarningEventArgs(sourceLineNumbers, 1044, "WixWarnings_AmbiguousFileOrDirectoryName_1", elementName, attributeName, value);
2393 }
2394
2395 public static MessageEventArgs PossiblyIncorrectTypelibVersion(SourceLineNumber sourceLineNumbers, string id)
2396 {
2397 return new WixWarningEventArgs(sourceLineNumbers, 1048, "WixWarnings_PossiblyIncorrectTypelibVersion_1", id);
2398 }
2399
2400 public static MessageEventArgs ImplicitComponentPrimaryFeature(string componentId)
2401 {
2402 return new WixWarningEventArgs(null, 1049, "WixWarnings_ImplicitComponentPrimaryFeature_1", componentId);
2403 }
2404
2405 public static MessageEventArgs ActionSequenceCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2, int sequenceNumber)
2406 {
2407 return new WixWarningEventArgs(sourceLineNumbers, 1050, "WixWarnings_ActionSequenceCollision_1", sequenceTableName, actionName1, actionName2, sequenceNumber);
2408 }
2409
2410 public static MessageEventArgs ActionSequenceCollision2(SourceLineNumber sourceLineNumbers)
2411 {
2412 return new WixWarningEventArgs(sourceLineNumbers, 1051, "WixWarnings_ActionSequenceCollision2_1");
2413 }
2414
2415 public static MessageEventArgs SuppressAction2(SourceLineNumber sourceLineNumbers)
2416 {
2417 return new WixWarningEventArgs(sourceLineNumbers, 1052, "WixWarnings_SuppressAction2_1");
2418 }
2419
2420 public static MessageEventArgs UnexpectedTableInProduct(SourceLineNumber sourceLineNumbers, string tableName)
2421 {
2422 return new WixWarningEventArgs(sourceLineNumbers, 1053, "WixWarnings_UnexpectedTableInProduct_1", tableName);
2423 }
2424
2425 public static MessageEventArgs DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2426 {
2427 return new WixWarningEventArgs(sourceLineNumbers, 1054, "WixWarnings_DeprecatedAttribute_1", elementName, attributeName);
2428 }
2429
2430 public static MessageEventArgs DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string newAttributeName)
2431 {
2432 return new WixWarningEventArgs(sourceLineNumbers, 1054, "WixWarnings_DeprecatedAttribute_2", elementName, attributeName, newAttributeName);
2433 }
2434
2435 public static MessageEventArgs DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string newAttributeName1, string newAttributeName2)
2436 {
2437 return new WixWarningEventArgs(sourceLineNumbers, 1054, "WixWarnings_DeprecatedAttribute_3", elementName, attributeName, newAttributeName1, newAttributeName2);
2438 }
2439
2440 public static MessageEventArgs MergeRescheduledAction(SourceLineNumber sourceLineNumbers, string tableName, string actionName, string mergeModuleFile)
2441 {
2442 return new WixWarningEventArgs(sourceLineNumbers, 1055, "WixWarnings_MergeRescheduledAction_1", tableName, actionName, mergeModuleFile);
2443 }
2444
2445 public static MessageEventArgs MergeTableFailed(SourceLineNumber sourceLineNumbers, string tableName, string primaryKeys, string mergeModuleFile)
2446 {
2447 return new WixWarningEventArgs(sourceLineNumbers, 1056, "WixWarnings_MergeTableFailed_1", tableName, primaryKeys, mergeModuleFile);
2448 }
2449
2450 public static MessageEventArgs DecompiledStandardActionRelativelyScheduledInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
2451 {
2452 return new WixWarningEventArgs(sourceLineNumbers, 1057, "WixWarnings_DecompiledStandardActionRelativelyScheduledInModule_1", sequenceTableName, actionName);
2453 }
2454
2455 public static MessageEventArgs IllegalActionInSequence(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
2456 {
2457 return new WixWarningEventArgs(sourceLineNumbers, 1058, "WixWarnings_IllegalActionInSequence_1", sequenceTableName, actionName);
2458 }
2459
2460 public static MessageEventArgs ExpectedForeignRow(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, string columnName, string columnValue, string foreignTableName)
2461 {
2462 return new WixWarningEventArgs(sourceLineNumbers, 1059, "WixWarnings_ExpectedForeignRow_1", tableName, primaryKey, columnName, columnValue, foreignTableName);
2463 }
2464
2465 public static MessageEventArgs ExpectedForeignRow(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, string columnName1, string columnValue1, string columnName2, string columnValue2, string foreignTableName)
2466 {
2467 return new WixWarningEventArgs(sourceLineNumbers, 1059, "WixWarnings_ExpectedForeignRow_2", tableName, primaryKey, columnName1, columnValue1, columnName2, columnValue2, foreignTableName);
2468 }
2469
2470 public static MessageEventArgs DecompilingAsCustomTable(SourceLineNumber sourceLineNumbers, string tableName)
2471 {
2472 return new WixWarningEventArgs(sourceLineNumbers, 1060, "WixWarnings_DecompilingAsCustomTable_1", tableName);
2473 }
2474
2475 public static MessageEventArgs IllegalPatchCreationTable(SourceLineNumber sourceLineNumbers, string tableName)
2476 {
2477 return new WixWarningEventArgs(sourceLineNumbers, 1061, "WixWarnings_IllegalPatchCreationTable_1", tableName);
2478 }
2479
2480 public static MessageEventArgs SkippingMergeModuleTable(SourceLineNumber sourceLineNumbers, string tableName)
2481 {
2482 return new WixWarningEventArgs(sourceLineNumbers, 1062, "WixWarnings_SkippingMergeModuleTable_1", tableName);
2483 }
2484
2485 public static MessageEventArgs SkippingPatchCreationTable(SourceLineNumber sourceLineNumbers, string tableName)
2486 {
2487 return new WixWarningEventArgs(sourceLineNumbers, 1063, "WixWarnings_SkippingPatchCreationTable_1", tableName);
2488 }
2489
2490 public static MessageEventArgs UnrepresentableColumnValue(SourceLineNumber sourceLineNumbers, string tableName, string columnName, object value)
2491 {
2492 return new WixWarningEventArgs(sourceLineNumbers, 1064, "WixWarnings_UnrepresentableColumnValue_1", tableName, columnName, value);
2493 }
2494
2495 public static MessageEventArgs DeprecatedTable(string tableName)
2496 {
2497 return new WixWarningEventArgs(null, 1065, "WixWarnings_DeprecatedTable_1", tableName);
2498 }
2499
2500 public static MessageEventArgs PatchTable(SourceLineNumber sourceLineNumbers, string tableName)
2501 {
2502 return new WixWarningEventArgs(sourceLineNumbers, 1066, "WixWarnings_PatchTable_1", tableName);
2503 }
2504
2505 public static MessageEventArgs IllegalColumnValue(SourceLineNumber sourceLineNumbers, string tableName, string columnName, object value)
2506 {
2507 return new WixWarningEventArgs(sourceLineNumbers, 1067, "WixWarnings_IllegalColumnValue_1", tableName, columnName, value);
2508 }
2509
2510 public static MessageEventArgs DeprecatedLongNameAttribute(SourceLineNumber sourceLineNumbers, string elementName, string longNameAttributeName, string nameAttributeName, string shortNameAttributeName)
2511 {
2512 return new WixWarningEventArgs(sourceLineNumbers, 1069, "WixWarnings_DeprecatedLongNameAttribute_1", elementName, longNameAttributeName, nameAttributeName, shortNameAttributeName);
2513 }
2514
2515 public static MessageEventArgs GeneratedShortFileNameConflict(SourceLineNumber sourceLineNumbers, string shortFileName)
2516 {
2517 return new WixWarningEventArgs(sourceLineNumbers, 1070, "WixWarnings_GeneratedShortFileNameConflict_1", shortFileName);
2518 }
2519
2520 public static MessageEventArgs GeneratedShortFileNameConflict2(SourceLineNumber sourceLineNumbers)
2521 {
2522 return new WixWarningEventArgs(sourceLineNumbers, 1071, "WixWarnings_GeneratedShortFileNameConflict2_1");
2523 }
2524
2525 public static MessageEventArgs DangerousTableInMergeModule(SourceLineNumber sourceLineNumbers, string tableName)
2526 {
2527 return new WixWarningEventArgs(sourceLineNumbers, 1072, "WixWarnings_DangerousTableInMergeModule_1", tableName);
2528 }
2529
2530 public static MessageEventArgs DeprecatedLocalizationVariablePrefix(SourceLineNumber sourceLineNumbers, string variableId)
2531 {
2532 return new WixWarningEventArgs(sourceLineNumbers, 1073, "WixWarnings_DeprecatedLocalizationVariablePrefix_1", variableId);
2533 }
2534
2535 public static MessageEventArgs PlaceholderValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2536 {
2537 return new WixWarningEventArgs(sourceLineNumbers, 1074, "WixWarnings_PlaceholderValue_1", elementName, attributeName, value);
2538 }
2539
2540 public static MessageEventArgs MissingUpgradeCode(SourceLineNumber sourceLineNumbers)
2541 {
2542 return new WixWarningEventArgs(sourceLineNumbers, 1075, "WixWarnings_MissingUpgradeCode_1");
2543 }
2544
2545 public static MessageEventArgs ValidationWarning(SourceLineNumber sourceLineNumbers, string ice, string message)
2546 {
2547 return new WixWarningEventArgs(sourceLineNumbers, 1076, "WixWarnings_ValidationWarning_1", ice, message);
2548 }
2549
2550 public static MessageEventArgs PropertyValueContainsPropertyReference(SourceLineNumber sourceLineNumbers, string propertyId, string otherProperty)
2551 {
2552 return new WixWarningEventArgs(sourceLineNumbers, 1077, "WixWarnings_PropertyValueContainsPropertyReference_1", propertyId, otherProperty);
2553 }
2554
2555 public static MessageEventArgs DeprecatedUpgradeProperty(SourceLineNumber sourceLineNumbers)
2556 {
2557 return new WixWarningEventArgs(sourceLineNumbers, 1078, "WixWarnings_DeprecatedUpgradeProperty_1");
2558 }
2559
2560 public static MessageEventArgs EmptyCabinet(SourceLineNumber sourceLineNumbers, string cabinetName)
2561 {
2562 return new WixWarningEventArgs(sourceLineNumbers, 1079, "WixWarnings_EmptyCabinet_1", cabinetName);
2563 }
2564
2565 public static MessageEventArgs EmptyCabinet(SourceLineNumber sourceLineNumbers, string cabinetName, bool isPatch)
2566 {
2567 return new WixWarningEventArgs(sourceLineNumbers, 1079, "WixWarnings_EmptyCabinet_2", cabinetName, isPatch);
2568 }
2569
2570 public static MessageEventArgs DeprecatedRegistryElement(SourceLineNumber sourceLineNumbers)
2571 {
2572 return new WixWarningEventArgs(sourceLineNumbers, 1080, "WixWarnings_DeprecatedRegistryElement_1");
2573 }
2574
2575 public static MessageEventArgs IllegalRegistryKeyPath(SourceLineNumber sourceLineNumbers, string componentName, string registryId)
2576 {
2577 return new WixWarningEventArgs(sourceLineNumbers, 1081, "WixWarnings_IllegalRegistryKeyPath_1", componentName, registryId);
2578 }
2579
2580 public static MessageEventArgs DeprecatedPatchSequenceTargetAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2581 {
2582 return new WixWarningEventArgs(sourceLineNumbers, 1082, "WixWarnings_DeprecatedPatchSequenceTargetAttribute_1", elementName, attributeName);
2583 }
2584
2585 public static MessageEventArgs ProductIdAuthored(SourceLineNumber sourceLineNumbers)
2586 {
2587 return new WixWarningEventArgs(sourceLineNumbers, 1083, "WixWarnings_ProductIdAuthored_1");
2588 }
2589
2590 public static MessageEventArgs ImplicitMergeModulePrimaryFeature(string componentId)
2591 {
2592 return new WixWarningEventArgs(null, 1084, "WixWarnings_ImplicitMergeModulePrimaryFeature_1", componentId);
2593 }
2594
2595 public static MessageEventArgs DeprecatedIgnoreModularizationElement(SourceLineNumber sourceLineNumbers)
2596 {
2597 return new WixWarningEventArgs(sourceLineNumbers, 1085, "WixWarnings_DeprecatedIgnoreModularizationElement_1");
2598 }
2599
2600 public static MessageEventArgs PropertyModularizationSuppressed(SourceLineNumber sourceLineNumbers)
2601 {
2602 return new WixWarningEventArgs(sourceLineNumbers, 1086, "WixWarnings_PropertyModularizationSuppressed_1");
2603 }
2604
2605 public static MessageEventArgs DeprecatedPackageCompressedAttribute(SourceLineNumber sourceLineNumbers)
2606 {
2607 return new WixWarningEventArgs(sourceLineNumbers, 1087, "WixWarnings_DeprecatedPackageCompressedAttribute_1");
2608 }
2609
2610 public static MessageEventArgs DeprecatedModuleGuidAttribute(SourceLineNumber sourceLineNumbers)
2611 {
2612 return new WixWarningEventArgs(sourceLineNumbers, 1088, "WixWarnings_DeprecatedModuleGuidAttribute_1");
2613 }
2614
2615 public static MessageEventArgs DeprecatedQuestionMarksGuid(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2616 {
2617 return new WixWarningEventArgs(sourceLineNumbers, 1090, "WixWarnings_DeprecatedQuestionMarksGuid_1", elementName, attributeName);
2618 }
2619
2620 public static MessageEventArgs PackageCodeSet(SourceLineNumber sourceLineNumbers)
2621 {
2622 return new WixWarningEventArgs(sourceLineNumbers, 1091, "WixWarnings_PackageCodeSet_1");
2623 }
2624
2625 public static MessageEventArgs InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version)
2626 {
2627 return new WixWarningEventArgs(sourceLineNumbers, 1093, "WixWarnings_InvalidModuleOrBundleVersion_1", moduleOrBundle, version);
2628 }
2629
2630 public static MessageEventArgs InvalidRemoveFile(SourceLineNumber sourceLineNumbers, string file, string component)
2631 {
2632 return new WixWarningEventArgs(sourceLineNumbers, 1095, "WixWarnings_InvalidRemoveFile_1", file, component);
2633 }
2634
2635 public static MessageEventArgs PreprocessorWarning(SourceLineNumber sourceLineNumbers, string message)
2636 {
2637 return new WixWarningEventArgs(sourceLineNumbers, 1096, "WixWarnings_PreprocessorWarning_1", message);
2638 }
2639
2640 public static MessageEventArgs UpdateOfNonKeyPathFile(string nonKeyPathFileId, string componentId, string keyPathFileId)
2641 {
2642 return new WixWarningEventArgs(null, 1097, "WixWarnings_UpdateOfNonKeyPathFile_1", nonKeyPathFileId, componentId, keyPathFileId);
2643 }
2644
2645 public static MessageEventArgs UnsupportedCommandLineArgument(string arg)
2646 {
2647 return new WixWarningEventArgs(null, 1098, "WixWarnings_UnsupportedCommandLineArgument_1", arg);
2648 }
2649
2650 public static MessageEventArgs MajorUpgradePatchNotRecommended()
2651 {
2652 return new WixWarningEventArgs(null, 1099, "WixWarnings_MajorUpgradePatchNotRecommended_1");
2653 }
2654
2655 public static MessageEventArgs RetainRangeMismatch(SourceLineNumber sourceLineNumbers, string fileId)
2656 {
2657 return new WixWarningEventArgs(sourceLineNumbers, 1100, "WixWarnings_RetainRangeMismatch_1", fileId);
2658 }
2659
2660 public static MessageEventArgs DefaultLanguageUsedForVersionedFile(SourceLineNumber sourceLineNumbers, string language, string fileId)
2661 {
2662 return new WixWarningEventArgs(sourceLineNumbers, 1101, "WixWarnings_DefaultLanguageUsedForVersionedFile_1", language, fileId);
2663 }
2664
2665 public static MessageEventArgs DefaultLanguageUsedForUnversionedFile(SourceLineNumber sourceLineNumbers, string language, string fileId)
2666 {
2667 return new WixWarningEventArgs(sourceLineNumbers, 1102, "WixWarnings_DefaultLanguageUsedForUnversionedFile_1", language, fileId);
2668 }
2669
2670 public static MessageEventArgs DefaultVersionUsedForUnversionedFile(SourceLineNumber sourceLineNumbers, string version, string fileId)
2671 {
2672 return new WixWarningEventArgs(sourceLineNumbers, 1103, "WixWarnings_DefaultVersionUsedForUnversionedFile_1", version, fileId);
2673 }
2674
2675 public static MessageEventArgs InvalidHigherInstallerVersionInModule(SourceLineNumber sourceLineNumbers, string moduleId, int moduleInstallerVersion, int productInstallerVersion)
2676 {
2677 return new WixWarningEventArgs(sourceLineNumbers, 1104, "WixWarnings_InvalidHigherInstallerVersionInModule_1", moduleId, moduleInstallerVersion, productInstallerVersion);
2678 }
2679
2680 public static MessageEventArgs ValidationFailedDueToSystemPolicy()
2681 {
2682 return new WixWarningEventArgs(null, 1105, "WixWarnings_ValidationFailedDueToSystemPolicy_1");
2683 }
2684
2685 public static MessageEventArgs ColumnsIncompatibleWithInstallerVersion(SourceLineNumber sourceLineNumbers, string tableName, int productInstallerVersion)
2686 {
2687 return new WixWarningEventArgs(sourceLineNumbers, 1106, "WixWarnings_ColumnsIncompatibleWithInstallerVersion_1", tableName, productInstallerVersion);
2688 }
2689
2690 public static MessageEventArgs TableIncompatibleWithInstallerVersion(SourceLineNumber sourceLineNumbers, string tableName, int productInstallerVersion)
2691 {
2692 return new WixWarningEventArgs(sourceLineNumbers, 1107, "WixWarnings_TableIncompatibleWithInstallerVersion_1", tableName, productInstallerVersion);
2693 }
2694
2695 public static MessageEventArgs DeprecatedCommandLineSwitch(string oldSwitch)
2696 {
2697 return new WixWarningEventArgs(null, 1108, "WixWarnings_DeprecatedCommandLineSwitch_1", oldSwitch);
2698 }
2699
2700 public static MessageEventArgs DeprecatedCommandLineSwitch(string oldSwitch, string newSwitch)
2701 {
2702 return new WixWarningEventArgs(null, 1108, "WixWarnings_DeprecatedCommandLineSwitch_2", oldSwitch, newSwitch);
2703 }
2704
2705 public static MessageEventArgs UnexpectedEntrySection(SourceLineNumber sourceLineNumbers, string sectionType, string expectedType, string outputExtension)
2706 {
2707 return new WixWarningEventArgs(sourceLineNumbers, 1109, "WixWarnings_UnexpectedEntrySection_1", sectionType, expectedType, outputExtension);
2708 }
2709
2710 public static MessageEventArgs NewComponentAddedToExistingFeature(SourceLineNumber sourceLineNumbers, string component, string feature, string transformPath)
2711 {
2712 return new WixWarningEventArgs(sourceLineNumbers, 1110, "WixWarnings_NewComponentAddedToExistingFeature_1", component, feature, transformPath);
2713 }
2714
2715 public static MessageEventArgs DeprecatedAttributeValue(SourceLineNumber sourceLineNumbers, string attributeValue, string elementName, string attributeName, string newAttributeValue)
2716 {
2717 return new WixWarningEventArgs(sourceLineNumbers, 1111, "WixWarnings_DeprecatedAttributeValue_1", attributeValue, elementName, attributeName, newAttributeValue);
2718 }
2719
2720 public static MessageEventArgs InsufficientPermissionHarvestTypeLib()
2721 {
2722 return new WixWarningEventArgs(null, 1112, "WixWarnings_InsufficientPermissionHarvestTypeLib_1");
2723 }
2724
2725 public static MessageEventArgs UnclearShortcut(SourceLineNumber sourceLineNumbers, string shortcutId, string fileId, string componentId)
2726 {
2727 return new WixWarningEventArgs(sourceLineNumbers, 1113, "WixWarnings_UnclearShortcut_1", shortcutId, fileId, componentId);
2728 }
2729
2730 public static MessageEventArgs TooManyProgIds(SourceLineNumber sourceLineNumbers, string clsId, string progId, string otherClsId)
2731 {
2732 return new WixWarningEventArgs(sourceLineNumbers, 1114, "WixWarnings_TooManyProgIds_1", clsId, progId, otherClsId);
2733 }
2734
2735 public static MessageEventArgs BadColumnDataIgnored(SourceLineNumber sourceLineNumbers, string value, string tableName, string columnName)
2736 {
2737 return new WixWarningEventArgs(sourceLineNumbers, 1115, "WixWarnings_BadColumnDataIgnored_1", value, tableName, columnName);
2738 }
2739
2740 public static MessageEventArgs NullMsiAssemblyNameValue(SourceLineNumber sourceLineNumbers, string componentName, string name)
2741 {
2742 return new WixWarningEventArgs(sourceLineNumbers, 1116, "WixWarnings_NullMsiAssemblyNameValue_1", componentName, name);
2743 }
2744
2745 public static MessageEventArgs InvalidAttributeCombination(SourceLineNumber sourceLineNumbers, string attrib1, string attrib2, string name, string value)
2746 {
2747 return new WixWarningEventArgs(sourceLineNumbers, 1117, "WixWarnings_InvalidAttributeCombination_1", attrib1, attrib2, name, value);
2748 }
2749
2750 public static MessageEventArgs VariableDeclarationCollision(SourceLineNumber sourceLineNumbers, string variableName, string variableValue, string variableCollidingValue)
2751 {
2752 return new WixWarningEventArgs(sourceLineNumbers, 1118, "WixWarnings_VariableDeclarationCollision_1", variableName, variableValue, variableCollidingValue);
2753 }
2754
2755 public static MessageEventArgs DuplicatePrimaryKey(SourceLineNumber sourceLineNumbers, string primaryKey, string tableName)
2756 {
2757 return new WixWarningEventArgs(sourceLineNumbers, 1119, "WixWarnings_DuplicatePrimaryKey_1", primaryKey, tableName);
2758 }
2759
2760 public static MessageEventArgs RequiresMsi200for64bitPackage(SourceLineNumber sourceLineNumbers)
2761 {
2762 return new WixWarningEventArgs(sourceLineNumbers, 1121, "WixWarnings_RequiresMsi200for64bitPackage_1");
2763 }
2764
2765 public static MessageEventArgs ExternalCabsAreNotSigned(string databaseFile)
2766 {
2767 return new WixWarningEventArgs(null, 1122, "WixWarnings_ExternalCabsAreNotSigned_1", databaseFile);
2768 }
2769
2770 public static MessageEventArgs FailedToDeleteTempDir(string directory)
2771 {
2772 return new WixWarningEventArgs(null, 1123, "WixWarnings_FailedToDeleteTempDir_1", directory);
2773 }
2774
2775 public static MessageEventArgs StandardDirectoryConflictInMergeModule(SourceLineNumber sourceLineNumbers, string directory, string standardDirectory)
2776 {
2777 return new WixWarningEventArgs(sourceLineNumbers, 1124, "WixWarnings_StandardDirectoryConflictInMergeModule_1", directory, standardDirectory);
2778 }
2779
2780 public static MessageEventArgs PreprocessorUnknownPragma(SourceLineNumber sourceLineNumbers, string pragmaName)
2781 {
2782 return new WixWarningEventArgs(sourceLineNumbers, 1125, "WixWarnings_PreprocessorUnknownPragma_1", pragmaName);
2783 }
2784
2785 public static MessageEventArgs DeprecatedComponentGroupId(SourceLineNumber sourceLineNumbers, string elementName)
2786 {
2787 return new WixWarningEventArgs(sourceLineNumbers, 1126, "WixWarnings_DeprecatedComponentGroupId_1", elementName);
2788 }
2789
2790 public static MessageEventArgs UxPayloadsOnlySupportEmbedding(SourceLineNumber sourceLineNumbers, string sourceFile)
2791 {
2792 return new WixWarningEventArgs(sourceLineNumbers, 1127, "WixWarnings_UxPayloadsOnlySupportEmbedding_1", sourceFile);
2793 }
2794
2795 public static MessageEventArgs DiscardedRollbackBoundary(SourceLineNumber sourceLineNumbers, string rollbackBoundaryId)
2796 {
2797 return new WixWarningEventArgs(sourceLineNumbers, 1129, "WixWarnings_DiscardedRollbackBoundary_1", rollbackBoundaryId);
2798 }
2799
2800 public static MessageEventArgs DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName)
2801 {
2802 return new WixWarningEventArgs(sourceLineNumbers, 1130, "WixWarnings_DeprecatedElement_1", elementName);
2803 }
2804
2805 public static MessageEventArgs DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName, string newElementName)
2806 {
2807 return new WixWarningEventArgs(sourceLineNumbers, 1130, "WixWarnings_DeprecatedElement_2", elementName, newElementName);
2808 }
2809
2810 public static MessageEventArgs DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName, string newElementName1, string newElementName2)
2811 {
2812 return new WixWarningEventArgs(sourceLineNumbers, 1130, "WixWarnings_DeprecatedElement_3", elementName, newElementName1, newElementName2);
2813 }
2814
2815 public static MessageEventArgs CannotUpdateCabCache(SourceLineNumber sourceLineNumbers, string cabinetPath, string detail)
2816 {
2817 return new WixWarningEventArgs(sourceLineNumbers, 1131, "WixWarnings_CannotUpdateCabCache_1", cabinetPath, detail);
2818 }
2819
2820 public static MessageEventArgs DownloadUrlNotSupportedForEmbeddedPayloads(SourceLineNumber sourceLineNumbers, string payloadId)
2821 {
2822 return new WixWarningEventArgs(sourceLineNumbers, 1132, "WixWarnings_DownloadUrlNotSupportedForEmbeddedPayloads_1", payloadId);
2823 }
2824
2825 public static MessageEventArgs DiscouragedAllUsersValue(SourceLineNumber sourceLineNumbers, string path, string machineOrUser)
2826 {
2827 return new WixWarningEventArgs(sourceLineNumbers, 1133, "WixWarnings_DiscouragedAllUsersValue_1", path, machineOrUser);
2828 }
2829
2830 public static MessageEventArgs ImplicitlyPerUser(SourceLineNumber sourceLineNumbers, string path)
2831 {
2832 return new WixWarningEventArgs(sourceLineNumbers, 1134, "WixWarnings_ImplicitlyPerUser_1", path);
2833 }
2834
2835 public static MessageEventArgs PerUserButForcingPerMachine(SourceLineNumber sourceLineNumbers, string path)
2836 {
2837 return new WixWarningEventArgs(sourceLineNumbers, 1135, "WixWarnings_PerUserButForcingPerMachine_1", path);
2838 }
2839
2840 public static MessageEventArgs AttributeShouldContain(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string expectedContains, string otherAttributeName, string otherAttributeValue)
2841 {
2842 return new WixWarningEventArgs(sourceLineNumbers, 1136, "WixWarnings_AttributeShouldContain_1", elementName, attributeName, attributeValue, expectedContains, otherAttributeName, otherAttributeValue);
2843 }
2844
2845 public static MessageEventArgs DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(SourceLineNumber sourceLineNumbers, string componentId, string guid)
2846 {
2847 return new WixWarningEventArgs(sourceLineNumbers, 1137, "WixWarnings_DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions_1", componentId, guid);
2848 }
2849
2850 public static MessageEventArgs DeprecatedRegistryKeyActionAttribute(SourceLineNumber sourceLineNumbers)
2851 {
2852 return new WixWarningEventArgs(sourceLineNumbers, 1138, "WixWarnings_DeprecatedRegistryKeyActionAttribute_1");
2853 }
2854
2855 public static MessageEventArgs NotABinaryWixlib(string wixlib)
2856 {
2857 return new WixWarningEventArgs(null, 1139, "WixWarnings_NotABinaryWixlib_1", wixlib);
2858 }
2859
2860 public static MessageEventArgs NoPerMachineDependencies(SourceLineNumber sourceLineNumbers, string packageId)
2861 {
2862 return new WixWarningEventArgs(sourceLineNumbers, 1140, "WixWarnings_NoPerMachineDependencies_1", packageId);
2863 }
2864
2865 public static MessageEventArgs DownloadUrlNotSupportedForAttachedContainers(SourceLineNumber sourceLineNumbers, string containerId)
2866 {
2867 return new WixWarningEventArgs(sourceLineNumbers, 1141, "WixWarnings_DownloadUrlNotSupportedForAttachedContainers_1", containerId);
2868 }
2869
2870 public static MessageEventArgs ReservedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2871 {
2872 return new WixWarningEventArgs(sourceLineNumbers, 1142, "WixWarnings_ReservedAttribute_1", elementName, attributeName);
2873 }
2874
2875 public static MessageEventArgs RequiresMsi500forArmPackage(SourceLineNumber sourceLineNumbers)
2876 {
2877 return new WixWarningEventArgs(sourceLineNumbers, 1143, "WixWarnings_RequiresMsi500forArmPackage_1");
2878 }
2879
2880 public static MessageEventArgs RemotePayloadsMustNotAlsoBeCompressed(SourceLineNumber sourceLineNumbers, string elementName)
2881 {
2882 return new WixWarningEventArgs(sourceLineNumbers, 1144, "WixWarnings_RemotePayloadsMustNotAlsoBeCompressed_1", elementName);
2883 }
2884
2885 public static MessageEventArgs AllChangesIncludedInPatch(SourceLineNumber sourceLineNumbers)
2886 {
2887 return new WixWarningEventArgs(sourceLineNumbers, 1145, "WixWarnings_AllChangesIncludedInPatch_1");
2888 }
2889
2890 public static MessageEventArgs RelatedAttributeConditionallyIgnored(SourceLineNumber sourceLineNumbers, string recessiveAttribute, string dominantAttribute, string dominantValue)
2891 {
2892 return new WixWarningEventArgs(sourceLineNumbers, 1146, "WixWarnings_RelatedAttributeConditionallyIgnored_1", recessiveAttribute, dominantAttribute, dominantValue);
2893 }
2894
2895 public static MessageEventArgs BackslashTerminateInlineDirectorySyntax(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
2896 {
2897 return new WixWarningEventArgs(sourceLineNumbers, 1147, "WixWarnings_BackslashTerminateInlineDirectorySyntax_1", elementName, attributeName, value);
2898 }
2899
2900 public static MessageEventArgs VersionTruncated(SourceLineNumber sourceLineNumbers, string originalVersion, string package, string truncatedVersion)
2901 {
2902 return new WixWarningEventArgs(sourceLineNumbers, 1148, "WixWarnings_VersionTruncated_1", originalVersion, package, truncatedVersion);
2903 }
2904
2905 public static MessageEventArgs ServiceConfigFamilyNotSupported(SourceLineNumber sourceLineNumbers, string elementName)
2906 {
2907 return new WixWarningEventArgs(sourceLineNumbers, 1149, "WixWarnings_ServiceConfigFamilyNotSupported_1", elementName);
2908 }
2909 }
2910
2911 public class WixVerboseEventArgs : MessageEventArgs
2912 {
2913
2914 private static ResourceManager resourceManager = new ResourceManager("WixToolset.Core.Data.Messages", Assembly.GetExecutingAssembly());
2915
2916 public WixVerboseEventArgs(SourceLineNumber sourceLineNumbers, int id, string resourceName, params object[] messageArgs) :
2917 base(sourceLineNumbers, id, resourceName, messageArgs)
2918 {
2919 base.Level = MessageLevel.Verbose;
2920 base.ResourceManager = resourceManager;
2921 }
2922 }
2923
2924 public sealed class WixVerboses
2925 {
2926
2927 private WixVerboses()
2928 {
2929 }
2930
2931 public static MessageEventArgs ImportBinaryStream(string streamSource)
2932 {
2933 return new WixVerboseEventArgs(null, 9000, "WixVerboses_ImportBinaryStream_1", streamSource);
2934 }
2935
2936 public static MessageEventArgs ImportIconStream(string streamSource)
2937 {
2938 return new WixVerboseEventArgs(null, 9001, "WixVerboses_ImportIconStream_1", streamSource);
2939 }
2940
2941 public static MessageEventArgs CopyFile(string sourceFile, string destinationFile)
2942 {
2943 return new WixVerboseEventArgs(null, 9002, "WixVerboses_CopyFile_1", sourceFile, destinationFile);
2944 }
2945
2946 public static MessageEventArgs MoveFile(string sourceFile, string destinationFile)
2947 {
2948 return new WixVerboseEventArgs(null, 9003, "WixVerboses_MoveFile_1", sourceFile, destinationFile);
2949 }
2950
2951 public static MessageEventArgs CreateDirectory(string directory)
2952 {
2953 return new WixVerboseEventArgs(null, 9004, "WixVerboses_CreateDirectory_1", directory);
2954 }
2955
2956 public static MessageEventArgs RemoveDestinationFile(string destinationFile)
2957 {
2958 return new WixVerboseEventArgs(null, 9005, "WixVerboses_RemoveDestinationFile_1", destinationFile);
2959 }
2960
2961 public static MessageEventArgs CabFile(string fileId, string filePath)
2962 {
2963 return new WixVerboseEventArgs(null, 9006, "WixVerboses_CabFile_1", fileId, filePath);
2964 }
2965
2966 public static MessageEventArgs UpdatingFileInformation()
2967 {
2968 return new WixVerboseEventArgs(null, 9007, "WixVerboses_UpdatingFileInformation_1");
2969 }
2970
2971 public static MessageEventArgs GeneratingDatabase()
2972 {
2973 return new WixVerboseEventArgs(null, 9008, "WixVerboses_GeneratingDatabase_1");
2974 }
2975
2976 public static MessageEventArgs MergingModules()
2977 {
2978 return new WixVerboseEventArgs(null, 9009, "WixVerboses_MergingModules_1");
2979 }
2980
2981 public static MessageEventArgs CreatingCabinetFiles()
2982 {
2983 return new WixVerboseEventArgs(null, 9010, "WixVerboses_CreatingCabinetFiles_1");
2984 }
2985
2986 public static MessageEventArgs ImportingStreams()
2987 {
2988 return new WixVerboseEventArgs(null, 9011, "WixVerboses_ImportingStreams_1");
2989 }
2990
2991 public static MessageEventArgs LayingOutMedia()
2992 {
2993 return new WixVerboseEventArgs(null, 9012, "WixVerboses_LayingOutMedia_1");
2994 }
2995
2996 public static MessageEventArgs DecompilingTable(string tableName)
2997 {
2998 return new WixVerboseEventArgs(null, 9013, "WixVerboses_DecompilingTable_1", tableName);
2999 }
3000
3001 public static MessageEventArgs ValidationInfo(string ice, string message)
3002 {
3003 return new WixVerboseEventArgs(null, 9014, "WixVerboses_ValidationInfo_1", ice, message);
3004 }
3005
3006 public static MessageEventArgs CreateCabinet(string cabinet)
3007 {
3008 return new WixVerboseEventArgs(null, 9015, "WixVerboses_CreateCabinet_1", cabinet);
3009 }
3010
3011 public static MessageEventArgs ValidatingDatabase()
3012 {
3013 return new WixVerboseEventArgs(null, 9016, "WixVerboses_ValidatingDatabase_1");
3014 }
3015
3016 public static MessageEventArgs OpeningMergeModule(string modulePath, short language)
3017 {
3018 return new WixVerboseEventArgs(null, 9017, "WixVerboses_OpeningMergeModule_1", modulePath, language);
3019 }
3020
3021 public static MessageEventArgs MergingMergeModule(string modulePath)
3022 {
3023 return new WixVerboseEventArgs(null, 9018, "WixVerboses_MergingMergeModule_1", modulePath);
3024 }
3025
3026 public static MessageEventArgs ConnectingMergeModule(string modulePath, string feature)
3027 {
3028 return new WixVerboseEventArgs(null, 9019, "WixVerboses_ConnectingMergeModule_1", modulePath, feature);
3029 }
3030
3031 public static MessageEventArgs ResequencingMergeModuleFiles()
3032 {
3033 return new WixVerboseEventArgs(null, 9020, "WixVerboses_ResequencingMergeModuleFiles_1");
3034 }
3035
3036 public static MessageEventArgs BinderTempDirLocatedAt(string directory)
3037 {
3038 return new WixVerboseEventArgs(null, 9021, "WixVerboses_BinderTempDirLocatedAt_1", directory);
3039 }
3040
3041 public static MessageEventArgs ValidatorTempDirLocatedAt(string directory)
3042 {
3043 return new WixVerboseEventArgs(null, 9022, "WixVerboses_ValidatorTempDirLocatedAt_1", directory);
3044 }
3045
3046 public static MessageEventArgs GeneratingBundle(string bundleFile, string stubFile)
3047 {
3048 return new WixVerboseEventArgs(null, 9023, "WixVerboses_GeneratingBundle_1", bundleFile, stubFile);
3049 }
3050
3051 public static MessageEventArgs ResolvingManifest(string manifestFile)
3052 {
3053 return new WixVerboseEventArgs(null, 9024, "WixVerboses_ResolvingManifest_1", manifestFile);
3054 }
3055
3056 public static MessageEventArgs LoadingPayload(string payload)
3057 {
3058 return new WixVerboseEventArgs(null, 9025, "WixVerboses_LoadingPayload_1", payload);
3059 }
3060
3061 public static MessageEventArgs BundleGuid(string bundleGuid)
3062 {
3063 return new WixVerboseEventArgs(null, 9026, "WixVerboses_BundleGuid_1", bundleGuid);
3064 }
3065
3066 public static MessageEventArgs CopyingExternalPayload(string payload, string outputDirectory)
3067 {
3068 return new WixVerboseEventArgs(null, 9027, "WixVerboses_CopyingExternalPayload_1", payload, outputDirectory);
3069 }
3070
3071 public static MessageEventArgs EmbeddingContainer(string container, long size, string compression)
3072 {
3073 return new WixVerboseEventArgs(null, 9028, "WixVerboses_EmbeddingContainer_1", container, size, compression);
3074 }
3075
3076 public static MessageEventArgs SwitchingToPerUserPackage(SourceLineNumber sourceLineNumbers, string path)
3077 {
3078 return new WixVerboseEventArgs(sourceLineNumbers, 9029, "WixVerboses_SwitchingToPerUserPackage_1", path);
3079 }
3080
3081 public static MessageEventArgs SetCabbingThreadCount(string threads)
3082 {
3083 return new WixVerboseEventArgs(null, 9030, "WixVerboses_SetCabbingThreadCount_1", threads);
3084 }
3085
3086 public static MessageEventArgs ValidationSerialized()
3087 {
3088 return new WixVerboseEventArgs(null, 9031, "WixVerboses_ValidationSerialized_1");
3089 }
3090
3091 public static MessageEventArgs ReusingCabCache(SourceLineNumber sourceLineNumbers, string cabinetName, string source)
3092 {
3093 return new WixVerboseEventArgs(sourceLineNumbers, 9032, "WixVerboses_ReusingCabCache_1", cabinetName, source);
3094 }
3095
3096 public static MessageEventArgs CabinetsSplitInParallel()
3097 {
3098 return new WixVerboseEventArgs(null, 9033, "WixVerboses_CabinetsSplitInParallel_1");
3099 }
3100
3101 public static MessageEventArgs ValidatedDatabase(long size)
3102 {
3103 return new WixVerboseEventArgs(null, 9034, "WixVerboses_ValidatedDatabase_1", size);
3104 }
3105 }
3106}
diff --git a/src/WixToolset.Core/Data/messages.xml.old b/src/WixToolset.Core/Data/messages.xml.old
deleted file mode 100644
index d981e2d1..00000000
--- a/src/WixToolset.Core/Data/messages.xml.old
+++ /dev/null
@@ -1,3998 +0,0 @@
1<?xml version='1.0' encoding='utf-8'?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Messages Namespace="WixToolset" Resources="Core.Data.Messages" xmlns="http://schemas.microsoft.com/genmsgs/2004/07/messages">
6 <Class Name="WixErrors" ContainerName="WixErrorEventArgs" BaseContainerName="MessageEventArgs" Level="Error">
7 <Message Id="UnexpectedException" Number="1" SourceLineNumbers="no">
8 <Instance>
9 {0}&#13;&#10;&#13;&#10;Exception Type: {1}&#13;&#10;&#13;&#10;Stack Trace:&#13;&#10;{2}
10 <Parameter Type="System.String" Name="message" />
11 <Parameter Type="System.String" Name="type" />
12 <Parameter Type="System.String" Name="stackTrace" />
13 </Instance>
14 </Message>
15 <Message Id="UnexpectedAttribute" Number="4">
16 <Instance>
17 The {0} element contains an unexpected attribute '{1}'.
18 <Parameter Type="System.String" Name="elementName" />
19 <Parameter Type="System.String" Name="attributeName" />
20 </Instance>
21 </Message>
22 <Message Id="UnexpectedElement" Number="5">
23 <Instance>
24 The {0} element contains an unexpected child element '{1}'.
25 <Parameter Type="System.String" Name="elementName" />
26 <Parameter Type="System.String" Name="childElementName" />
27 </Instance>
28 </Message>
29 <Message Id="IllegalEmptyAttributeValue" Number="6">
30 <Instance>
31 The {0}/@{1} attribute's value cannot be an empty string. If a value is not required, simply remove the entire attribute.
32 <Parameter Type="System.String" Name="elementName" />
33 <Parameter Type="System.String" Name="attributeName" />
34 </Instance>
35 <Instance>
36 The {0}/@{1} attribute's value cannot be an empty string. To use the default value "{2}", simply remove the entire attribute.
37 <Parameter Type="System.String" Name="elementName" />
38 <Parameter Type="System.String" Name="attributeName" />
39 <Parameter Type="System.String" Name="defaultValue" />
40 </Instance>
41 </Message>
42 <Message Id="InsufficientVersion" Number="7">
43 <Instance>
44 The current version of the toolset is {0}, but version {1} is required.
45 <Parameter Type="System.Version" Name="currentVersion" />
46 <Parameter Type="System.Version" Name="requiredVersion" />
47 </Instance>
48 <Instance>
49 The current version of the extension '{2}' is {0}, but version {1} is required.
50 <Parameter Type="System.Version" Name="currentVersion" />
51 <Parameter Type="System.Version" Name="requiredVersion" />
52 <Parameter Type="System.String" Name="extension" />
53 </Instance>
54 </Message>
55 <Message Id="IllegalIntegerValue" Number="8">
56 <Instance>
57 The {0}/@{1} attribute's value, '{2}', is not a legal integer value. Legal integer values are from -2,147,483,648 to 2,147,483,647.
58 <Parameter Type="System.String" Name="elementName" />
59 <Parameter Type="System.String" Name="attributeName" />
60 <Parameter Type="System.String" Name="value" />
61 </Instance>
62 </Message>
63 <Message Id="IllegalGuidValue" Number="9">
64 <Instance>
65 The {0}/@{1} attribute's value, '{2}', is not a legal guid value.
66 <Parameter Type="System.String" Name="elementName" />
67 <Parameter Type="System.String" Name="attributeName" />
68 <Parameter Type="System.String" Name="value" />
69 </Instance>
70 </Message>
71 <Message Id="ExpectedAttribute" Number="10">
72 <Instance>
73 The {0}/@{1} attribute was not found; it is required.
74 <Parameter Type="System.String" Name="elementName" />
75 <Parameter Type="System.String" Name="attributeName" />
76 </Instance>
77 <Instance>
78 The {0} element must have a value for exactly one of the {1} or {2} attributes.
79 <Parameter Type="System.String" Name="elementName" />
80 <Parameter Type="System.String" Name="attribute1Name" />
81 <Parameter Type="System.String" Name="attribute2Name" />
82 <Parameter Type="System.Boolean" Name="eitherOr" />
83 </Instance>
84 <Instance>
85 The {0}/@{1} attribute was not found; it is required when attribute {2} is specified.
86 <Parameter Type="System.String" Name="elementName" />
87 <Parameter Type="System.String" Name="attributeName" />
88 <Parameter Type="System.String" Name="otherAttributeName" />
89 </Instance>
90 <Instance>
91 The {0}/@{1} attribute was not found; it is required when attribute {2} has a value of '{3}'.
92 <Parameter Type="System.String" Name="elementName" />
93 <Parameter Type="System.String" Name="attributeName" />
94 <Parameter Type="System.String" Name="otherAttributeName" />
95 <Parameter Type="System.String" Name="otherAttributeValue" />
96 </Instance>
97 <Instance>
98 The {0}/@{1} attribute was not found; it is required unless the attribute {2} has a value of '{3}'.
99 <Parameter Type="System.String" Name="elementName" />
100 <Parameter Type="System.String" Name="attributeName" />
101 <Parameter Type="System.String" Name="otherAttributeName" />
102 <Parameter Type="System.String" Name="otherAttributeValue" />
103 <Parameter Type="System.Boolean" Name="otherAttributeValueUnless" />
104 </Instance>
105 </Message>
106 <Message Id="SecurePropertyNotUppercase" Number="11">
107 <Instance>
108 The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a secure property, it must also be a public property. This means the Property/@Id value must be completely uppercase.
109 <Parameter Type="System.String" Name="elementName" />
110 <Parameter Type="System.String" Name="attributeName" />
111 <Parameter Type="System.String" Name="propertyId" />
112 </Instance>
113 </Message>
114 <Message Id="SearchPropertyNotUppercase" Number="12">
115 <Instance>
116 The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a search property, it must also be a public property. This means the Property/@Id value must be completely uppercase.
117 <Parameter Type="System.String" Name="elementName" />
118 <Parameter Type="System.String" Name="attributeName" />
119 <Parameter Type="System.String" Name="value" />
120 </Instance>
121 </Message>
122 <Message Id="StreamNameTooLong" Number="13">
123 <Instance>
124 The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long because it will be used to create a stream name. It cannot be more than than {4} characters long.
125 <Parameter Type="System.String" Name="elementName" />
126 <Parameter Type="System.String" Name="attributeName" />
127 <Parameter Type="System.String" Name="value" />
128 <Parameter Type="System.Int32" Name="length" />
129 <Parameter Type="System.Int32" Name="maximumLength" />
130 </Instance>
131 <Instance>
132 The binary value in table '{0}' will be stored with a stream name, '{1}', that is {2} characters long. This is too long because the maximum allowed length for a stream name is 62 characters long. Since the stream name is created by concatenating the table name and values of the primary key for a row (delimited by periods), this error can be resolved by shortening a value that is part of the primary key.
133 <Parameter Type="System.String" Name="tableName" />
134 <Parameter Type="System.String" Name="streamName" />
135 <Parameter Type="System.Int32" Name="streamLength" />
136 </Instance>
137 </Message>
138 <Message Id="IllegalIdentifier" Number="14">
139 <Instance>
140 The {0} element's value, '{1}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
141 <Parameter Type="System.String" Name="elementName" />
142 <Parameter Type="System.String" Name="value" />
143 </Instance>
144 <Instance>
145 The {0}/@{1} attribute's value is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
146 <Parameter Type="System.String" Name="elementName" />
147 <Parameter Type="System.String" Name="attributeName" />
148 <Parameter Type="System.Int32" Name="disambiguator" />
149 </Instance>
150 <Instance>
151 The {0}/@{1} attribute's value, '{2}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
152 <Parameter Type="System.String" Name="elementName" />
153 <Parameter Type="System.String" Name="attributeName" />
154 <Parameter Type="System.String" Name="value" />
155 </Instance>
156 <Instance>
157 The {0}/@{1} attribute's value '{2}' contains an illegal identifier '{3}'. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
158 <Parameter Type="System.String" Name="elementName" />
159 <Parameter Type="System.String" Name="attributeName" />
160 <Parameter Type="System.String" Name="value" />
161 <Parameter Type="System.String" Name="identifier" />
162 </Instance>
163 </Message>
164 <Message Id="IllegalYesNoValue" Number="15">
165 <Instance>
166 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no value. The only legal values are 'no' and 'yes'.
167 <Parameter Type="System.String" Name="elementName" />
168 <Parameter Type="System.String" Name="attributeName" />
169 <Parameter Type="System.String" Name="value" />
170 </Instance>
171 </Message>
172 <Message Id="CabCreationFailed" Number="16" SourceLineNumbers="no">
173 <Instance>
174 Failed to create cab '{0}' while compressing file '{1}' with error 0x{2:X8}.
175 <Parameter Type="System.String" Name="cabName" />
176 <Parameter Type="System.String" Name="fileName" />
177 <Parameter Type="System.Int32" Name="error" />
178 </Instance>
179 <Instance>
180 Failed to create cab '{0}' with error 0x{1:X8}.
181 <Parameter Type="System.String" Name="cabName" />
182 <Parameter Type="System.Int32" Name="error" />
183 </Instance>
184 </Message>
185 <Message Id="CabExtractionFailed" Number="17" SourceLineNumbers="no">
186 <Instance>
187 Failed to extract cab '{0}' to directory '{1}'. This is most likely due to a lack of available disk space on the destination drive.
188 <Parameter Type="System.String" Name="cabName" />
189 <Parameter Type="System.String" Name="directoryName" />
190 </Instance>
191 <Instance>
192 Failed to extract cab '{0}' from merge module '{1}' to directory '{2}'. This is most likely due to a lack of available disk space on the destination drive.
193 <Parameter Type="System.String" Name="cabName" />
194 <Parameter Type="System.String" Name="mergeModulePath" />
195 <Parameter Type="System.String" Name="directoryName" />
196 </Instance>
197 </Message>
198 <Message Id="AppIdIncompatibleAdvertiseState" Number="18">
199 <Instance>
200 The {0}/@(1) attribute's value, '{2}' does not match the advertise state on its parent element: '{3}'. (Note: AppIds nested under Fragment, Module, or Product elements must be advertised.)
201 <Parameter Type="System.String" Name="elementName" />
202 <Parameter Type="System.String" Name="attributeName" />
203 <Parameter Type="System.String" Name="value" />
204 <Parameter Type="System.String" Name="parentValue" />
205 </Instance>
206 </Message>
207 <Message Id="IllegalAttributeWhenAdvertised" Number="19">
208 <Instance>
209 The {0}/@{1} attribute cannot be specified because the element is advertised.
210 <Parameter Type="System.String" Name="elementName" />
211 <Parameter Type="System.String" Name="attributeName" />
212 </Instance>
213 </Message>
214 <Message Id="ConditionExpected" Number="20">
215 <Instance>
216 The {0} element's inner text cannot be an empty string or completely whitespace. If you don't want a condition, then simply remove the entire {0} element.
217 <Parameter Type="System.String" Name="elementName" />
218 </Instance>
219 </Message>
220 <Message Id="IllegalAttributeValue" Number="21">
221 <Instance>
222 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}'.
223 <Parameter Type="System.String" Name="elementName" />
224 <Parameter Type="System.String" Name="attributeName" />
225 <Parameter Type="System.String" Name="value" />
226 <Parameter Type="System.String" Name="legalValue1" />
227 </Instance>
228 <Instance>
229 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', or '{4}'.
230 <Parameter Type="System.String" Name="elementName" />
231 <Parameter Type="System.String" Name="attributeName" />
232 <Parameter Type="System.String" Name="value" />
233 <Parameter Type="System.String" Name="legalValue1" />
234 <Parameter Type="System.String" Name="legalValue2" />
235 </Instance>
236 <Instance>
237 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', or '{5}'.
238 <Parameter Type="System.String" Name="elementName" />
239 <Parameter Type="System.String" Name="attributeName" />
240 <Parameter Type="System.String" Name="value" />
241 <Parameter Type="System.String" Name="legalValue1" />
242 <Parameter Type="System.String" Name="legalValue2" />
243 <Parameter Type="System.String" Name="legalValue3" />
244 </Instance>
245 <Instance>
246 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', or '{6}'.
247 <Parameter Type="System.String" Name="elementName" />
248 <Parameter Type="System.String" Name="attributeName" />
249 <Parameter Type="System.String" Name="value" />
250 <Parameter Type="System.String" Name="legalValue1" />
251 <Parameter Type="System.String" Name="legalValue2" />
252 <Parameter Type="System.String" Name="legalValue3" />
253 <Parameter Type="System.String" Name="legalValue4" />
254 </Instance>
255 <Instance>
256 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', or '{7}'.
257 <Parameter Type="System.String" Name="elementName" />
258 <Parameter Type="System.String" Name="attributeName" />
259 <Parameter Type="System.String" Name="value" />
260 <Parameter Type="System.String" Name="legalValue1" />
261 <Parameter Type="System.String" Name="legalValue2" />
262 <Parameter Type="System.String" Name="legalValue3" />
263 <Parameter Type="System.String" Name="legalValue4" />
264 <Parameter Type="System.String" Name="legalValue5" />
265 </Instance>
266 <Instance>
267 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', or '{8}'.
268 <Parameter Type="System.String" Name="elementName" />
269 <Parameter Type="System.String" Name="attributeName" />
270 <Parameter Type="System.String" Name="value" />
271 <Parameter Type="System.String" Name="legalValue1" />
272 <Parameter Type="System.String" Name="legalValue2" />
273 <Parameter Type="System.String" Name="legalValue3" />
274 <Parameter Type="System.String" Name="legalValue4" />
275 <Parameter Type="System.String" Name="legalValue5" />
276 <Parameter Type="System.String" Name="legalValue6" />
277 </Instance>
278 <Instance>
279 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', or '{9}'.
280 <Parameter Type="System.String" Name="elementName" />
281 <Parameter Type="System.String" Name="attributeName" />
282 <Parameter Type="System.String" Name="value" />
283 <Parameter Type="System.String" Name="legalValue1" />
284 <Parameter Type="System.String" Name="legalValue2" />
285 <Parameter Type="System.String" Name="legalValue3" />
286 <Parameter Type="System.String" Name="legalValue4" />
287 <Parameter Type="System.String" Name="legalValue5" />
288 <Parameter Type="System.String" Name="legalValue6" />
289 <Parameter Type="System.String" Name="legalValue7" />
290 </Instance>
291 <Instance>
292 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', or '{10}'.
293 <Parameter Type="System.String" Name="elementName" />
294 <Parameter Type="System.String" Name="attributeName" />
295 <Parameter Type="System.String" Name="value" />
296 <Parameter Type="System.String" Name="legalValue1" />
297 <Parameter Type="System.String" Name="legalValue2" />
298 <Parameter Type="System.String" Name="legalValue3" />
299 <Parameter Type="System.String" Name="legalValue4" />
300 <Parameter Type="System.String" Name="legalValue5" />
301 <Parameter Type="System.String" Name="legalValue6" />
302 <Parameter Type="System.String" Name="legalValue7" />
303 <Parameter Type="System.String" Name="legalValue8" />
304 </Instance>
305 <Instance>
306 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}', '{14}', '{15}', '{16}', '{17}', '{18}', '{19}', '{20}', '{21}', '{22}', '{23}', '{24}', '{25}', '{26}', '{27}', or '{28}'.
307 <Parameter Type="System.String" Name="elementName" />
308 <Parameter Type="System.String" Name="attributeName" />
309 <Parameter Type="System.String" Name="value" />
310 <Parameter Type="System.String" Name="legalValue1" />
311 <Parameter Type="System.String" Name="legalValue2" />
312 <Parameter Type="System.String" Name="legalValue3" />
313 <Parameter Type="System.String" Name="legalValue4" />
314 <Parameter Type="System.String" Name="legalValue5" />
315 <Parameter Type="System.String" Name="legalValue6" />
316 <Parameter Type="System.String" Name="legalValue7" />
317 <Parameter Type="System.String" Name="legalValue8" />
318 <Parameter Type="System.String" Name="legalValue9" />
319 <Parameter Type="System.String" Name="legalValue10" />
320 <Parameter Type="System.String" Name="legalValue11" />
321 <Parameter Type="System.String" Name="legalValue12" />
322 <Parameter Type="System.String" Name="legalValue13" />
323 <Parameter Type="System.String" Name="legalValue14" />
324 <Parameter Type="System.String" Name="legalValue15" />
325 <Parameter Type="System.String" Name="legalValue16" />
326 <Parameter Type="System.String" Name="legalValue17" />
327 <Parameter Type="System.String" Name="legalValue18" />
328 <Parameter Type="System.String" Name="legalValue19" />
329 <Parameter Type="System.String" Name="legalValue20" />
330 <Parameter Type="System.String" Name="legalValue21" />
331 <Parameter Type="System.String" Name="legalValue22" />
332 <Parameter Type="System.String" Name="legalValue23" />
333 <Parameter Type="System.String" Name="legalValue24" />
334 <Parameter Type="System.String" Name="legalValue25" />
335 <Parameter Type="System.String" Name="legalValue26" />
336 </Instance>
337 </Message>
338 <Message Id="CustomActionMultipleSources" Number="22">
339 <Instance>
340 The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following source attributes specified at a time: {2}, {3}, {4}, {5}, or {6}.
341 <Parameter Type="System.String" Name="elementName" />
342 <Parameter Type="System.String" Name="attributeName" />
343 <Parameter Type="System.String" Name="attributeName1" />
344 <Parameter Type="System.String" Name="attributeName2" />
345 <Parameter Type="System.String" Name="attributeName3" />
346 <Parameter Type="System.String" Name="attributeName4" />
347 <Parameter Type="System.String" Name="attributeName5" />
348 </Instance>
349 </Message>
350 <Message Id="CustomActionMultipleTargets" Number="23">
351 <Instance>
352 The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following target attributes specified at a time: {2}, {3}, {4}, {5}, {6}, {7}, or {8}.
353 <Parameter Type="System.String" Name="elementName" />
354 <Parameter Type="System.String" Name="attributeName" />
355 <Parameter Type="System.String" Name="attributeName1" />
356 <Parameter Type="System.String" Name="attributeName2" />
357 <Parameter Type="System.String" Name="attributeName3" />
358 <Parameter Type="System.String" Name="attributeName4" />
359 <Parameter Type="System.String" Name="attributeName5" />
360 <Parameter Type="System.String" Name="attributeName6" />
361 <Parameter Type="System.String" Name="attributeName7" />
362 </Instance>
363 </Message>
364 <Message Id="CustomActionIllegalInnerText" Number="24">
365 <Instance>
366 The {0} element contains illegal inner text: '{1}'. It may not contain inner text unless the {2} attribute is specified.
367 <Parameter Type="System.String" Name="elementName" />
368 <Parameter Type="System.String" Name="innerText" />
369 <Parameter Type="System.String" Name="attributeName" />
370 </Instance>
371 </Message>
372 <Message Id="DirectoryRootWithoutName" Number="25">
373 <Instance>
374 The {0} element requires the {1} attribute because there is no parent {0} element.
375 <Parameter Type="System.String" Name="elementName" />
376 <Parameter Type="System.String" Name="attributeName" />
377 </Instance>
378 </Message>
379 <Message Id="IllegalShortFilename" Number="26">
380 <Instance>
381 The {0}/@{1} attribute's value, '{2}', is not a valid 8.3-compliant name. Legal names contain no more than 8 non-period characters followed by an optional period and extension of no more than 3 non-period characters. Any character except for the follow may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space).
382 <Parameter Type="System.String" Name="elementName" />
383 <Parameter Type="System.String" Name="attributeName" />
384 <Parameter Type="System.String" Name="value" />
385 </Instance>
386 </Message>
387 <Message Id="IllegalLongFilename" Number="27">
388 <Instance>
389 The {0}/@{1} attribute's value, '{2}', is not a valid filename because it contains illegal characters. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \ ? | &gt; &lt; : / * ".
390 <Parameter Type="System.String" Name="elementName" />
391 <Parameter Type="System.String" Name="attributeName" />
392 <Parameter Type="System.String" Name="value" />
393 </Instance>
394 <Instance>
395 The {0}/@{1} attribute's value '{2}' contains a invalid filename '{3}'. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \ ? | &gt; &lt; : / * ".
396 <Parameter Type="System.String" Name="elementName" />
397 <Parameter Type="System.String" Name="attributeName" />
398 <Parameter Type="System.String" Name="value" />
399 <Parameter Type="System.String" Name="filename" />
400 </Instance>
401 </Message>
402 <Message Id="TableNameTooLong" Number="28">
403 <Instance>
404 The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.
405 <Parameter Type="System.String" Name="elementName" />
406 <Parameter Type="System.String" Name="attributeName" />
407 <Parameter Type="System.String" Name="value" />
408 </Instance>
409 </Message>
410 <Message Id="FeatureConfigurableDirectoryNotUppercase" Number="29">
411 <Instance>
412 The {0}/@{1} attribute's value, '{2}', contains lowercase characters. Since this directory is user-configurable, it needs to be a public property. This means the value must be completely uppercase.
413 <Parameter Type="System.String" Name="elementName" />
414 <Parameter Type="System.String" Name="attributeName" />
415 <Parameter Type="System.String" Name="value" />
416 </Instance>
417 </Message>
418 <Message Id="FeatureCannotFavorAndDisallowAdvertise" Number="30">
419 <Instance>
420 The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'. These options would ask the installer to disallow the advertised state for this feature while at the same time favoring it.
421 <Parameter Type="System.String" Name="elementName" />
422 <Parameter Type="System.String" Name="attributeName" />
423 <Parameter Type="System.String" Name="value" />
424 <Parameter Type="System.String" Name="otherAttributeName" />
425 <Parameter Type="System.String" Name="otherValue" />
426 </Instance>
427 </Message>
428 <Message Id="FeatureCannotFollowParentAndFavorLocalOrSource" Number="31">
429 <Instance>
430 The {0}/@{1} attribute cannot be specified if the {2} attribute's value is '{3}'. These options would ask the installer to force this feature to follow the parent installation state and simultaneously favor a particular installation state just for this feature.
431 <Parameter Type="System.String" Name="elementName" />
432 <Parameter Type="System.String" Name="attributeName" />
433 <Parameter Type="System.String" Name="otherAttributeName" />
434 <Parameter Type="System.String" Name="otherValue" />
435 </Instance>
436 </Message>
437 <Message Id="MediaEmbeddedCabinetNameTooLong" Number="32">
438 <Instance>
439 The {0}/@{1} attribute's value, '{2}', is {3} characters long. The name is too long for an embedded cabinet. It cannot be more than than 62 characters long.
440 <Parameter Type="System.String" Name="elementName" />
441 <Parameter Type="System.String" Name="attributeName" />
442 <Parameter Type="System.String" Name="value" />
443 <Parameter Type="System.Int32" Name="length" />
444 </Instance>
445 </Message>
446 <Message Id="RegistrySubElementCannotBeRemoved" Number="33">
447 <Instance>
448 The {0}/{1} element cannot be specified if the {2} attribute's value is '{3}' or '{4}'.
449 <Parameter Type="System.String" Name="registryElementName" />
450 <Parameter Type="System.String" Name="registryValueElementName" />
451 <Parameter Type="System.String" Name="actionAttributeName" />
452 <Parameter Type="System.String" Name="removeValue" />
453 <Parameter Type="System.String" Name="removeKeyOnInstallValue" />
454 </Instance>
455 </Message>
456 <Message Id="RegistryMultipleValuesWithoutMultiString" Number="34">
457 <Instance>
458 The {0}/@{1} attribute and a {0}/{2} element cannot both be specified. Only one may be specified if the {3} attribute's value is not 'multiString'.
459 <Parameter Type="System.String" Name="registryElementName" />
460 <Parameter Type="System.String" Name="valueAttributeName" />
461 <Parameter Type="System.String" Name="registryValueElementName" />
462 <Parameter Type="System.String" Name="typeAttributeName" />
463 </Instance>
464 </Message>
465 <Message Id="IllegalAttributeWithOtherAttribute" Number="35">
466 <Instance>
467 The {0}/@{1} attribute cannot be specified when attribute {2} is present.
468 <Parameter Type="System.String" Name="elementName" />
469 <Parameter Type="System.String" Name="attributeName" />
470 <Parameter Type="System.String" Name="otherAttributeName" />
471 </Instance>
472 <Instance>
473 The {0}/@{1} attribute cannot be specified when attribute {2} is present with value '{3}'.
474 <Parameter Type="System.String" Name="elementName" />
475 <Parameter Type="System.String" Name="attributeName" />
476 <Parameter Type="System.String" Name="otherAttributeName" />
477 <Parameter Type="System.String" Name="otherAttributeValue" />
478 </Instance>
479 </Message>
480 <Message Id="IllegalAttributeWithOtherAttributes" Number="36">
481 <Instance>
482 The {0}/@{1} attribute cannot be specified when attribute {2} or {3} is also present.
483 <Parameter Type="System.String" Name="elementName" />
484 <Parameter Type="System.String" Name="attributeName" />
485 <Parameter Type="System.String" Name="otherAttributeName1" />
486 <Parameter Type="System.String" Name="otherAttributeName2" />
487 </Instance>
488 <Instance>
489 The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, or {4} is also present.
490 <Parameter Type="System.String" Name="elementName" />
491 <Parameter Type="System.String" Name="attributeName" />
492 <Parameter Type="System.String" Name="otherAttributeName1" />
493 <Parameter Type="System.String" Name="otherAttributeName2" />
494 <Parameter Type="System.String" Name="otherAttributeName3" />
495 </Instance>
496 <Instance>
497 The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, {4}, or {5} is also present.
498 <Parameter Type="System.String" Name="elementName" />
499 <Parameter Type="System.String" Name="attributeName" />
500 <Parameter Type="System.String" Name="otherAttributeName1" />
501 <Parameter Type="System.String" Name="otherAttributeName2" />
502 <Parameter Type="System.String" Name="otherAttributeName3" />
503 <Parameter Type="System.String" Name="otherAttributeName4" />
504 </Instance>
505 </Message>
506 <Message Id="IllegalAttributeWithoutOtherAttributes" Number="37">
507 <Instance>
508 The {0}/@{1} attribute can only be specified with the following attribute {2} present.
509 <Parameter Type="System.String" Name="elementName" />
510 <Parameter Type="System.String" Name="attributeName" />
511 <Parameter Type="System.String" Name="otherAttributeName" />
512 </Instance>
513 <Instance>
514 The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present.
515 <Parameter Type="System.String" Name="elementName" />
516 <Parameter Type="System.String" Name="attributeName" />
517 <Parameter Type="System.String" Name="otherAttributeName1" />
518 <Parameter Type="System.String" Name="otherAttributeName2" />
519 </Instance>
520 <Instance>
521 The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present with value '{4}'.
522 <Parameter Type="System.String" Name="elementName" />
523 <Parameter Type="System.String" Name="attributeName" />
524 <Parameter Type="System.String" Name="otherAttributeName1" />
525 <Parameter Type="System.String" Name="otherAttributeName2" />
526 <Parameter Type="System.String" Name="otherAttributeValue" />
527 <Parameter Type="System.Boolean" Name="uniquifier" />
528 </Instance>
529 <Instance>
530 The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, or {4} present.
531 <Parameter Type="System.String" Name="elementName" />
532 <Parameter Type="System.String" Name="attributeName" />
533 <Parameter Type="System.String" Name="otherAttributeName1" />
534 <Parameter Type="System.String" Name="otherAttributeName2" />
535 <Parameter Type="System.String" Name="otherAttributeName3" />
536 </Instance>
537 <Instance>
538 The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, {4}, or {5} present.
539 <Parameter Type="System.String" Name="elementName" />
540 <Parameter Type="System.String" Name="attributeName" />
541 <Parameter Type="System.String" Name="otherAttributeName1" />
542 <Parameter Type="System.String" Name="otherAttributeName2" />
543 <Parameter Type="System.String" Name="otherAttributeName3" />
544 <Parameter Type="System.String" Name="otherAttributeName4" />
545 </Instance>
546 </Message>
547 <Message Id="IllegalAttributeValueWithoutOtherAttribute" Number="38">
548 <Instance>
549 The {0}/@{1} attribute's value, '{2}', can only be specified with attribute {3} present with value '{4}'.
550 <Parameter Type="System.String" Name="elementName" />
551 <Parameter Type="System.String" Name="attributeName" />
552 <Parameter Type="System.String" Name="attributeValue" />
553 <Parameter Type="System.String" Name="otherAttributeName" />
554 <Parameter Type="System.String" Name="otherAttributeValue" />
555 </Instance>
556 <Instance>
557 The {0}/@{1} attribute's value, '{2}', cannot be specified without attribute {3} present.
558 <Parameter Type="System.String" Name="elementName" />
559 <Parameter Type="System.String" Name="attributeName" />
560 <Parameter Type="System.String" Name="attributeValue" />
561 <Parameter Type="System.String" Name="otherAttributeName" />
562 </Instance>
563 </Message>
564 <Message Id="IntegralValueSentinelCollision" Number="39">
565 <Instance>
566 The integer value {0} collides with a sentinel value in the compiler code.
567 <Parameter Type="System.Int32" Name="value" />
568 </Instance>
569 <Instance>
570 The long integral value {0} collides with a sentinel value in the compiler code.
571 <Parameter Type="System.Int64" Name="value" />
572 </Instance>
573 </Message>
574 <Message Id="ExampleGuid" Number="40">
575 <Instance>
576 The {0}/@{1} attribute's value, '{2}', is not a legal Guid value. A Guid needs to be generated and put in place of '{2}' in the source file.
577 <Parameter Type="System.String" Name="elementName" />
578 <Parameter Type="System.String" Name="attributeName" />
579 <Parameter Type="System.String" Name="value" />
580 </Instance>
581 </Message>
582 <Message Id="TooManyChildren" Number="41">
583 <Instance>
584 The {0} element contains multiple {1} child elements. There can only be one {1} child element per {0} element.
585 <Parameter Type="System.String" Name="elementName" />
586 <Parameter Type="System.String" Name="childElementName" />
587 </Instance>
588 </Message>
589 <Message Id="ComponentMultipleKeyPaths" Number="42">
590 <Instance>
591 The {0} element has multiple key paths set. The key path may only be set to '{2}' in extension elements that support it or one of the following locations: {0}/@{1}, {3}/@{1}, {4}/@{1}, or {5}/@{1}.
592 <Parameter Type="System.String" Name="elementName" />
593 <Parameter Type="System.String" Name="attributeName" />
594 <Parameter Type="System.String" Name="value" />
595 <Parameter Type="System.String" Name="fileElementName" />
596 <Parameter Type="System.String" Name="registryElementName" />
597 <Parameter Type="System.String" Name="odbcDataSourceElementName" />
598 </Instance>
599 </Message>
600 <Message Id="CabClosureFailed" Number="43" SourceLineNumbers="no">
601 <Instance>
602 Failed to close cab '{0}'.
603 <Parameter Type="System.String" Name="cabinet" />
604 </Instance>
605 <Instance>
606 Failed to close cab '{0}', error: {1}.
607 <Parameter Type="System.String" Name="cabinet" />
608 <Parameter Type="System.Int32" Name="error" />
609 </Instance>
610 </Message>
611 <Message Id="ExpectedAttributes" Number="44">
612 <Instance>
613 The {0} element's {1} or {2} attribute was not found; one of these is required.
614 <Parameter Type="System.String" Name="elementName" />
615 <Parameter Type="System.String" Name="attributeName1" />
616 <Parameter Type="System.String" Name="attributeName2" />
617 </Instance>
618 <Instance>
619 The {0} element's {1}, {2}, or {3} attribute was not found; one of these is required.
620 <Parameter Type="System.String" Name="elementName" />
621 <Parameter Type="System.String" Name="attributeName1" />
622 <Parameter Type="System.String" Name="attributeName2" />
623 <Parameter Type="System.String" Name="attributeName3" />
624 </Instance>
625 <Instance>
626 The {0} element's {1}, {2}, {3}, or {4} attribute was not found; one of these is required.
627 <Parameter Type="System.String" Name="elementName" />
628 <Parameter Type="System.String" Name="attributeName1" />
629 <Parameter Type="System.String" Name="attributeName2" />
630 <Parameter Type="System.String" Name="attributeName3" />
631 <Parameter Type="System.String" Name="attributeName4" />
632 </Instance>
633 <Instance>
634 The {0} element's {1}, {2}, {3}, {4}, or {5} attribute was not found; one of these is required.
635 <Parameter Type="System.String" Name="elementName" />
636 <Parameter Type="System.String" Name="attributeName1" />
637 <Parameter Type="System.String" Name="attributeName2" />
638 <Parameter Type="System.String" Name="attributeName3" />
639 <Parameter Type="System.String" Name="attributeName4" />
640 <Parameter Type="System.String" Name="attributeName5" />
641 </Instance>
642 <Instance>
643 The {0} element's {1}, {2}, {3}, {4}, {5}, or {6} attribute was not found; one of these is required.
644 <Parameter Type="System.String" Name="elementName" />
645 <Parameter Type="System.String" Name="attributeName1" />
646 <Parameter Type="System.String" Name="attributeName2" />
647 <Parameter Type="System.String" Name="attributeName3" />
648 <Parameter Type="System.String" Name="attributeName4" />
649 <Parameter Type="System.String" Name="attributeName5" />
650 <Parameter Type="System.String" Name="attributeName6" />
651 </Instance>
652 <Instance>
653 The {0} element's {1}, {2}, {3}, {4}, {5}, {6}, or {7} attribute was not found; one of these is required.
654 <Parameter Type="System.String" Name="elementName" />
655 <Parameter Type="System.String" Name="attributeName1" />
656 <Parameter Type="System.String" Name="attributeName2" />
657 <Parameter Type="System.String" Name="attributeName3" />
658 <Parameter Type="System.String" Name="attributeName4" />
659 <Parameter Type="System.String" Name="attributeName5" />
660 <Parameter Type="System.String" Name="attributeName6" />
661 <Parameter Type="System.String" Name="attributeName7" />
662 </Instance>
663 </Message>
664 <Message Id="ExpectedAttributesWithOtherAttribute" Number="45">
665 <Instance>
666 The {0} element's {1} or {2} attribute was not found; at least one of these attributes must be specified.
667 <Parameter Type="System.String" Name="elementName" />
668 <Parameter Type="System.String" Name="attributeName1" />
669 <Parameter Type="System.String" Name="attributeName2" />
670 </Instance>
671 <Instance>
672 The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} is present.
673 <Parameter Type="System.String" Name="elementName" />
674 <Parameter Type="System.String" Name="attributeName1" />
675 <Parameter Type="System.String" Name="attributeName2" />
676 <Parameter Type="System.String" Name="otherAttributeName" />
677 </Instance>
678 <Instance>
679 The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} has a value of '{4}'.
680 <Parameter Type="System.String" Name="elementName" />
681 <Parameter Type="System.String" Name="attributeName1" />
682 <Parameter Type="System.String" Name="attributeName2" />
683 <Parameter Type="System.String" Name="otherAttributeName" />
684 <Parameter Type="System.String" Name="otherAttributeValue" />
685 </Instance>
686 </Message>
687 <Message Id="ExpectedAttributesWithoutOtherAttribute" Number="46">
688 <Instance>
689 The {0} element's {1} or {2} attribute was not found; one of these is required without attribute {3} present.
690 <Parameter Type="System.String" Name="elementName" />
691 <Parameter Type="System.String" Name="attributeName1" />
692 <Parameter Type="System.String" Name="attributeName2" />
693 <Parameter Type="System.String" Name="otherAttributeName" />
694 </Instance>
695 </Message>
696 <Message Id="MissingTypeLibFile" Number="47">
697 <Instance>
698 The {0} element is non-advertised and therefore requires a parent {1} element.
699 <Parameter Type="System.String" Name="elementName" />
700 <Parameter Type="System.String" Name="fileElementName" />
701 </Instance>
702 </Message>
703 <Message Id="InvalidDocumentElement" Number="48">
704 <Instance>
705 The document element name '{0}' is invalid. A WiX {1} file must use '{2}' as the document element name.
706 <Parameter Type="System.String" Name="elementName" />
707 <Parameter Type="System.String" Name="fileType" />
708 <Parameter Type="System.String" Name="expectedElementName" />
709 </Instance>
710 </Message>
711 <Message Id="ExpectedAttributeInElementOrParent" Number="49">
712 <Instance>
713 The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2} element.
714 <Parameter Type="System.String" Name="elementName" />
715 <Parameter Type="System.String" Name="attributeName" />
716 <Parameter Type="System.String" Name="parentElementName" />
717 </Instance>
718 <Instance>
719 The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2}/@{3} attribute.
720 <Parameter Type="System.String" Name="elementName" />
721 <Parameter Type="System.String" Name="attributeName" />
722 <Parameter Type="System.String" Name="parentElementName" />
723 <Parameter Type="System.String" Name="parentAttributeName" />
724 </Instance>
725 </Message>
726 <Message Id="UnauthorizedAccess" Number="50" SourceLineNumbers="no">
727 <Instance>
728 Access to the path '{0}' is denied.
729 <Parameter Type="System.String" Name="filePath" />
730 </Instance>
731 </Message>
732 <Message Id="IllegalModuleExclusionLanguageAttributes" Number="51">
733 <Instance>Cannot set both ExcludeLanguage and ExcludeExceptLanguage attributes on a ModuleExclusion element.</Instance>
734 </Message>
735 <Message Id="NoFirstControlSpecified" Number="52">
736 <Instance>
737 The '{0}' dialog element does not have a valid tabbable control. You must either have a tabbable control that is not marked TabSkip='yes', or you must mark a control TabSkip='no'. If you have a page with no tabbable controls (a progress page, for example), you might want to set the first Text control to be TabSkip='no'.
738 <Parameter Type="System.String" Name="dialogName" />
739 </Instance>
740 </Message>
741 <Message Id="NoDataForColumn" Number="53">
742 <Instance>
743 There is no data for column '{0}' in a contained row of custom table '{1}'. A non-null value must be supplied for this column.
744 <Parameter Type="System.String" Name="columnName" />
745 <Parameter Type="System.String" Name="tableName" />
746 </Instance>
747 </Message>
748 <Message Id="ValueAndMaskMustBeSameLength" Number="54">
749 <Instance>
750 The FileTypeMask/@Value and FileTypeMask/@Mask attributes must be the same length.
751 </Instance>
752 </Message>
753 <Message Id="TooManySearchElements" Number="55">
754 <Instance>
755 Only one search element can appear under a '{0}' element.
756 <Parameter Type="System.String" Name="elementName" />
757 </Instance>
758 </Message>
759 <Message Id="IllegalAttributeExceptOnElement" Number="56">
760 <Instance>
761 The {1} attribute can only be specified on the {2} element.
762 <Parameter Type="System.String" Name="elementName" />
763 <Parameter Type="System.String" Name="attributeName" />
764 <Parameter Type="System.String" Name="expectedElementName" />
765 </Instance>
766 </Message>
767 <Message Id="SearchElementRequired" Number="57">
768 <Instance>
769 A '{0}' element must have a search element as a child.
770 <Parameter Type="System.String" Name="elementName" />
771 </Instance>
772 </Message>
773 <Message Id="MultipleIdentifiersFound" Number="58">
774 <Instance>
775 Under a '{0}' element, multiple identifiers were found: '{1}' and '{2}'. All search elements under this element must have the same id.
776 <Parameter Type="System.String" Name="elementName" />
777 <Parameter Type="System.String" Name="identifier" />
778 <Parameter Type="System.String" Name="mismatchIdentifier" />
779 </Instance>
780 </Message>
781 <Message Id="AdvertiseStateMustMatch" Number="59">
782 <Instance>
783 The advertise state of this element: '{0}', does not match the advertise state set on the parent element: '{1}'.
784 <Parameter Type="System.String" Name="advertiseState" />
785 <Parameter Type="System.String" Name="parentAdvertiseState" />
786 </Instance>
787 </Message>
788 <Message Id="DuplicateContextValue" Number="60">
789 <Instance>
790 The context value '{0}' was duplicated. Context values must be distinct.
791 <Parameter Type="System.String" Name="contextValue" />
792 </Instance>
793 </Message>
794 <Message Id="RelativePathForRegistryElement" Number="61">
795 <Instance>
796 Cannot convert RelativePath into Registry elements.
797 </Instance>
798 </Message>
799 <Message Id="IllegalAttributeWhenNested" Number="62">
800 <Instance>
801 The {0}/@{1} attribute cannot be specified when the {0} element is nested underneath a {2} element. If this {0} is a member of a ComponentGroup where ComponentGroup/@{1} is set, then the {0}/@{1} attribute should be removed.
802 <Parameter Type="System.String" Name="elementName" />
803 <Parameter Type="System.String" Name="attributeName" />
804 <Parameter Type="System.String" Name="parentElement" />
805 </Instance>
806 </Message>
807 <Message Id="ExpectedElement" Number="63">
808 <Instance>
809 A {0} element must have at least one child element of type {1}.
810 <Parameter Type="System.String" Name="elementName" />
811 <Parameter Type="System.String" Name="childName" />
812 </Instance>
813 <Instance>
814 A {0} element must have at least one child element of type {1} or {2}.
815 <Parameter Type="System.String" Name="elementName" />
816 <Parameter Type="System.String" Name="childName1" />
817 <Parameter Type="System.String" Name="childName2" />
818 </Instance>
819 <Instance>
820 A {0} element must have at least one child element of type {1}, {2}, or {3}.
821 <Parameter Type="System.String" Name="elementName" />
822 <Parameter Type="System.String" Name="childName1" />
823 <Parameter Type="System.String" Name="childName2" />
824 <Parameter Type="System.String" Name="childName3" />
825 </Instance>
826 <Instance>
827 A {0} element must have at least one child element of type {1}, {2}, {3}, or {4}.
828 <Parameter Type="System.String" Name="elementName" />
829 <Parameter Type="System.String" Name="childName1" />
830 <Parameter Type="System.String" Name="childName2" />
831 <Parameter Type="System.String" Name="childName3" />
832 <Parameter Type="System.String" Name="childName4" />
833 </Instance>
834 </Message>
835 <Message Id="RegistryRootInvalid" Number="64">
836 <Instance>
837 Registry/@Root attribute is invalid on a nested Registry element. Either remove the Root attribute or move the Registry element so it is not nested under another Registry element.
838 </Instance>
839 </Message>
840 <Message Id="IllegalYesNoDefaultValue" Number="65">
841 <Instance>
842 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/default value. The only legal values are 'default', 'no' or 'yes'.
843 <Parameter Type="System.String" Name="elementName" />
844 <Parameter Type="System.String" Name="attributeName" />
845 <Parameter Type="System.String" Name="value" />
846 </Instance>
847 </Message>
848 <Message Id="IllegalAttributeInMergeModule" Number="66">
849 <Instance>
850 The {0}/@{1} attribute cannot be specified in a merge module.
851 <Parameter Type="System.String" Name="elementName" />
852 <Parameter Type="System.String" Name="attributeName" />
853 </Instance>
854 </Message>
855 <Message Id="GenericReadNotAllowed" Number="67">
856 <Instance>Permission elements cannot have GenericRead as the only permission specified. Include at least one other permission.</Instance>
857 </Message>
858 <Message Id="IllegalAttributeWithInnerText" Number="68">
859 <Instance>
860 The {0}/@{1} attribute cannot be specified when the element has body text as well. Specify either the attribute or the body, but not both.
861 <Parameter Type="System.String" Name="elementName" />
862 <Parameter Type="System.String" Name="attributeName" />
863 </Instance>
864 </Message>
865 <Message Id="SearchElementRequiredWithAttribute" Number="69">
866 <Instance>
867 A {0} element must have a search element as a child when the {0}/@{1} attribute has the value '{2}'.
868 <Parameter Type="System.String" Name="elementName" />
869 <Parameter Type="System.String" Name="attributeName" />
870 <Parameter Type="System.String" Name="attributeValue" />
871 </Instance>
872 </Message>
873 <Message Id="CannotAuthorSpecialProperties" Number="70">
874 <Instance>
875 The {0} property was specified. Special MSI properties cannot be authored. Use the attributes on the Property element instead.
876 <Parameter Type="System.String" Name="propertyName" />
877 </Instance>
878 </Message>
879 <Message Id="NeedSequenceBeforeOrAfter" Number="72">
880 <Instance>
881 A {0} element must have a Before attribute, After attribute, or a Sequence attribute.
882 <Parameter Type="System.String" Name="elementName" />
883 </Instance>
884 </Message>
885 <Message Id="ValueNotSupported" Number="73">
886 <Instance>
887 The {0}/@{1} attribute's value, '{2}, is not supported by the Windows Installer.
888 <Parameter Type="System.String" Name="elementName" />
889 <Parameter Type="System.String" Name="attributeName" />
890 <Parameter Type="System.String" Name="attributeValue" />
891 </Instance>
892 </Message>
893 <Message Id="TabbableControlNotAllowedInBillboard" Number="74">
894 <Instance>
895 A {0} element was specified with Type='{1}' and TabSkip='no'. Tabbable controls are not allowed in Billboards.
896 <Parameter Type="System.String" Name="elementName" />
897 <Parameter Type="System.String" Name="controlType" />
898 </Instance>
899 </Message>
900 <Message Id="CheckBoxValueOnlyValidWithCheckBox" Number="75">
901 <Instance>
902 A {0} element was specified with Type='{1}' and a CheckBoxValue. Check box values can only be specified with Type='CheckBox'.
903 <Parameter Type="System.String" Name="elementName" />
904 <Parameter Type="System.String" Name="controlType" />
905 </Instance>
906 </Message>
907 <Message Id="CabFileDoesNotExist" Number="76" SourceLineNumbers="no">
908 <Instance>
909 Attempted to extract cab '{0}' from merge module '{1}' to directory '{2}'. The cab file was not found. This usually means that you have a merge module without a cabinet inside it.
910 <Parameter Type="System.String" Name="cabName" />
911 <Parameter Type="System.String" Name="mergeModulePath" />
912 <Parameter Type="System.String" Name="directoryName" />
913 </Instance>
914 </Message>
915 <Message Id="RadioButtonTypeInconsistent" Number="77">
916 <Instance>All RadioButton elements in a RadioButtonGroup must be consistent with their use of the Bitmap, Icon, and Text attributes. Ensure all of the RadioButton elements in this group have the same attribute specified.</Instance>
917 </Message>
918 <Message Id="RadioButtonBitmapAndIconDisallowed" Number="78">
919 <Instance>RadioButtonGroup elements that contain RadioButton elements with Bitmap or Icon attributes set to "yes" can only be specified under a Control element. Move your RadioButtonGroup element as a child of the appropriate Control element.</Instance>
920 </Message>
921 <Message Id="IllegalSuppressWarningId" Number="79" SourceLineNumbers="no">
922 <Instance>
923 Illegal value '{0}' for the -sw&lt;N&gt; command line option. Specify a particular warning number, like '-sw6' to suppress the warning with ID 6, or '-sw' alone to suppress all warnings.
924 <Parameter Type="System.String" Name="suppressedId" />
925 </Instance>
926 </Message>
927 <Message Id="PreprocessorIllegalForeachVariable" Number="80">
928 <Instance>
929 The variable named '{0}' is not allowed in a foreach expression.
930 <Parameter Type="System.String" Name="variableName" />
931 </Instance>
932 </Message>
933 <Message Id="PreprocessorMissingParameterPrefix" Number="81">
934 <Instance>
935 Could not find the prefix in parameter name: '{0}'.
936 <Parameter Type="System.String" Name="parameterName" />
937 </Instance>
938 </Message>
939 <Message Id="PreprocessorExtensionForParameterMissing" Number="82">
940 <Instance>
941 Could not find the preprocessor extension for parameter '{0}'. A preprocessor extension is expected because the parameter prefix, '{1}', is not one of the standard types: 'env', 'res', 'sys', or 'var'.
942 <Parameter Type="System.String" Name="parameterName" />
943 <Parameter Type="System.String" Name="parameterPrefix" />
944 </Instance>
945 </Message>
946 <Message Id="CannotFindFile" Number="83">
947 <Instance>
948 The file with id '{0}' and name '{1}' could not be found with source path: '{2}'.
949 <Parameter Type="System.String" Name="fileId" />
950 <Parameter Type="System.String" Name="fileName" />
951 <Parameter Type="System.String" Name="filePath" />
952 </Instance>
953 </Message>
954 <Message Id="BinderFileManagerMissingFile" Number="84">
955 <Instance>
956 {0}
957 <Parameter Type="System.String" Name="exceptionMessage" />
958 </Instance>
959 </Message>
960 <Message Id="ReferenceLoopDetected" Number="86">
961 <Instance>
962 A circular reference of groups was detected. The infinite loop includes: {0}. Group references must form a directed acyclic graph.
963 <Parameter Type="System.String" Name="loopList" />
964 </Instance>
965 </Message>
966 <Message Id="GuidContainsLowercaseLetters" Number="87">
967 <Instance>
968 The {0}/@{1} attribute's value, '{2}', is a mixed-case guid. All letters in a guid value should be uppercase.
969 <Parameter Type="System.String" Name="elementName" />
970 <Parameter Type="System.String" Name="attributeName" />
971 <Parameter Type="System.String" Name="value" />
972 </Instance>
973 </Message>
974 <Message Id="InvalidDateTimeFormat" Number="88">
975 <Instance>
976 The {0}/@{1} attribute's value '{2}' is not a valid date/time value. A date/time value should follow the format YYYY-MM-DDTHH:mm:ss.
977 <Parameter Type="System.String" Name="elementName" />
978 <Parameter Type="System.String" Name="attributeName" />
979 <Parameter Type="System.String" Name="value" />
980 </Instance>
981 </Message>
982 <Message Id="MultipleEntrySections" Number="89">
983 <Instance>
984 Multiple entry sections '{0}' and '{1}' found. Only one entry section may be present in a single target.
985 <Parameter Type="System.String" Name="sectionName1" />
986 <Parameter Type="System.String" Name="sectionName2" />
987 </Instance>
988 </Message>
989 <Message Id="MultipleEntrySections2" Number="90">
990 <Instance>Location of entry section related to previous error.</Instance>
991 </Message>
992 <Message Id="DuplicateSymbol" Number="91">
993 <Instance>
994 Duplicate symbol '{0}' found. This typically means that an Id is duplicated. Access modifiers (internal, protected, private) cannot prevent these conflicts. Ensure all your identifiers of a given type (File, Component, Feature) are unique.
995 <Parameter Type="System.String" Name="symbolName" />
996 </Instance>
997 <Instance>
998 Duplicate symbol '{0}' referenced by {1}. This typically means that an Id is duplicated. Ensure all your identifiers of a given type (File, Component, Feature) are unique or use an access modifier to scope the identfier.
999 <Parameter Type="System.String" Name="symbolName" />
1000 <Parameter Type="System.String" Name="referencingSourceLineNumber" />
1001 </Instance>
1002 </Message>
1003 <Message Id="DuplicateSymbol2" Number="92">
1004 <Instance>Location of symbol related to previous error.</Instance>
1005 </Message>
1006 <Message Id="MissingEntrySection" Number="93" SourceLineNumbers="no">
1007 <Instance>
1008 Could not find entry section in provided list of intermediates. Expected section of type '{0}'.
1009 <Parameter Type="System.String" Name="sectionType" />
1010 </Instance>
1011 </Message>
1012 <Message Id="UnresolvedReference" Number="94">
1013 <Instance>
1014 The identifier '{0}' could not be found. Ensure you have typed the reference correctly and that all the necessary inputs are provided to the linker.
1015 <Parameter Type="System.String" Name="symbolName" />
1016 </Instance>
1017 <Instance>
1018 The identifier '{0}' is inaccessible due to its protection level.
1019 <Parameter Type="System.String" Name="symbolName" />
1020 <Parameter Type="WixToolset.Data.AccessModifier" Name="accessModifier" />
1021 </Instance>
1022 </Message>
1023 <Message Id="MultiplePrimaryReferences" Number="95">
1024 <Instance>
1025 Multiple primary references were found for {0} '{1}' in {2} '{3}' and {4} '{5}'.
1026 <Parameter Type="System.String" Name="crefChildType" />
1027 <Parameter Type="System.String" Name="crefChildId" />
1028 <Parameter Type="System.String" Name="crefParentType" />
1029 <Parameter Type="System.String" Name="crefParentId" />
1030 <Parameter Type="System.String" Name="conflictParentType" />
1031 <Parameter Type="System.String" Name="conflictParentId" />
1032 </Instance>
1033 </Message>
1034 <Message Id="ComponentReferencedTwice" Number="96">
1035 <Instance>
1036 Component {0} cannot be contained in a Module twice.
1037 <Parameter Type="System.String" Name="crefChildId" />
1038 </Instance>
1039 </Message>
1040 <Message Id="DuplicateModuleFileIdentifier" Number="97">
1041 <Instance>
1042 The merge module '{0}' contains a file identifier, '{1}', that is duplicated either in another merge module or in a File/@Id attribute. File identifiers must be unique. Please change one of the file identifiers to a different value.
1043 <Parameter Type="System.String" Name="moduleId" />
1044 <Parameter Type="System.String" Name="fileId" />
1045 </Instance>
1046 </Message>
1047 <Message Id="DuplicateModuleCaseInsensitiveFileIdentifier" Number="98">
1048 <Instance>
1049 The merge module '{0}' contains 2 or more file identifiers that only differ by case: '{1}' and '{2}'. The WiX toolset extracts merge module files to the file system using these identifiers. Since most file systems are not case-sensitive a collision is likely. Please contact the owner of the merge module for a fix.
1050 <Parameter Type="System.String" Name="moduleId" />
1051 <Parameter Type="System.String" Name="fileId1" />
1052 <Parameter Type="System.String" Name="fileId2" />
1053 </Instance>
1054 </Message>
1055 <Message Id="ImplicitComponentKeyPath" Number="99">
1056 <Instance>
1057 The component '{0}' does not have an explicit key path specified. If the ordering of the elements under the Component element changes, the key path will also change. To prevent accidental changes, the key path should be set to 'yes' in one of the following locations: Component/@KeyPath, File/@KeyPath, ODBCDataSource/@KeyPath, or Registry/@KeyPath.
1058 <Parameter Type="System.String" Name="componentId" />
1059 </Instance>
1060 </Message>
1061 <Message Id="DuplicateLocalizationIdentifier" Number="100">
1062 <Instance>
1063 The localization identifier '{0}' has been duplicated in multiple locations. Please resolve the conflict.
1064 <Parameter Type="System.String" Name="localizationId" />
1065 </Instance>
1066 </Message>
1067 <Message Id="LocalizationVariableUnknown" Number="102">
1068 <Instance>
1069 The localization variable !(loc.{0}) is unknown. Please ensure the variable is defined.
1070 <Parameter Type="System.String" Name="variableId" />
1071 </Instance>
1072 </Message>
1073 <Message Id="FileNotFound" Number="103">
1074 <Instance>
1075 The system cannot find the file '{0}'.
1076 <Parameter Type="System.String" Name="file" />
1077 </Instance>
1078 <Instance>
1079 The system cannot find the file '{0}' with type '{1}'.
1080 <Parameter Type="System.String" Name="file" />
1081 <Parameter Type="System.String" Name="fileType" />
1082 </Instance>
1083 </Message>
1084 <Message Id="InvalidXml" Number="104">
1085 <Instance>
1086 Not a valid {0} file; detail: {1}
1087 <Parameter Type="System.String" Name="fileType" />
1088 <Parameter Type="System.String" Name="detail" />
1089 </Instance>
1090 </Message>
1091 <Message Id="ProgIdNestedTooDeep" Number="105">
1092 <Instance>ProgId elements may not be nested more than 1 level deep.</Instance>
1093 </Message>
1094 <Message Id="CanNotHaveTwoParents" Number="106">
1095 <Instance>
1096 The DirectorySearchRef {0} can not have a Parent attribute {1} and also be nested under parent element {2}
1097 <Parameter Type="System.String" Name="directorySearch" />
1098 <Parameter Type="System.String" Name="parentAttribute" />
1099 <Parameter Type="System.String" Name="parentElement" />
1100 </Instance>
1101 </Message>
1102 <Message Id="SchemaValidationFailed" Number="107">
1103 <Instance>
1104 Schema validation failed with the following error at line {1}, column {2}: {0}
1105 <Parameter Type="System.String" Name="validationError" />
1106 <Parameter Type="System.Int32" Name="lineNumber" />
1107 <Parameter Type="System.Int32" Name="linePosition" />
1108 </Instance>
1109 </Message>
1110 <Message Id="IllegalVersionValue" Number="108">
1111 <Instance>
1112 The {0}/@{1} attribute's value, '{2}', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534.
1113 <Parameter Type="System.String" Name="elementName" />
1114 <Parameter Type="System.String" Name="attributeName" />
1115 <Parameter Type="System.String" Name="value" />
1116 </Instance>
1117 </Message>
1118 <Message Id="CustomTableNameTooLong" Number="109">
1119 <Instance>
1120 The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.
1121 <Parameter Type="System.String" Name="elementName" />
1122 <Parameter Type="System.String" Name="attributeName" />
1123 <Parameter Type="System.String" Name="value" />
1124 </Instance>
1125 </Message>
1126 <Message Id="CustomTableIllegalColumnWidth" Number="110">
1127 <Instance>
1128 The {0}/@{1} attribute's value, '{2}', is not a valid column width. Valid column widths are 2 or 4.
1129 <Parameter Type="System.String" Name="elementName" />
1130 <Parameter Type="System.String" Name="attributeName" />
1131 <Parameter Type="System.Int32" Name="value" />
1132 </Instance>
1133 </Message>
1134 <Message Id="CustomTableMissingPrimaryKey" Number="111">
1135 <Instance>The CustomTable is missing a Column element with the PrimaryKey attribute set to 'yes'. At least one column must be marked as the primary key.</Instance>
1136 </Message>
1137 <Message Id="TypeSpecificationForExtensionRequired" Number="113" SourceLineNumbers="no">
1138 <Instance>
1139 The parameter '{0}' must be followed by the extension's type specification. The type specification should be a fully qualified class and assembly identity, for example: "MyNamespace.MyClass,myextension.dll".
1140 <Parameter Type="System.String" Name="parameter" />
1141 </Instance>
1142 </Message>
1143 <Message Id="FilePathRequired" SourceLineNumbers="no" Number="114">
1144 <Instance>
1145 The parameter '{0}' must be followed by a file path.
1146 <Parameter Type="System.String" Name="parameter" />
1147 </Instance>
1148 </Message>
1149 <Message Id="DirectoryPathRequired" Number="115" SourceLineNumbers="no">
1150 <Instance>
1151 The parameter '{0}' must be followed by a directory path.
1152 <Parameter Type="System.String" Name="parameter" />
1153 </Instance>
1154 </Message>
1155 <Message Id="FileOrDirectoryPathRequired" Number="116" SourceLineNumbers="no">
1156 <Instance>
1157 The parameter '{0}' must be followed by a file or directory path. To specify a directory path the string must end with a backslash, for example: "C:\Path\".
1158 <Parameter Type="System.String" Name="parameter" />
1159 </Instance>
1160 </Message>
1161 <Message Id="PathCannotContainQuote" Number="117" SourceLineNumbers="no">
1162 <Instance>
1163 Path '{0}' contains a literal quote character. Quotes are often accidentally introduced when trying to refer to a directory path with spaces in it, such as "C:\Out Directory\" -- the backslash before the quote acts an escape character. The correct representation for that path is: "C:\Out Directory\\".
1164 <Parameter Type="System.String" Name="fileName" />
1165 </Instance>
1166 </Message>
1167 <Message Id="AdditionalArgumentUnexpected" Number="118" SourceLineNumbers="no">
1168 <Instance>
1169 Additional argument '{0}' was unexpected. Remove the argument and add the '-?' switch for more information.
1170 <Parameter Type="System.String" Name="argument" />
1171 </Instance>
1172 </Message>
1173 <Message Id="RegistryNameValueIncorrect" Number="119">
1174 <Instance>
1175 The {0}/@{1} attribute's value, '{2}', is incorrect. It should not contain values of '+', '-', or '*' when the {0}/@Value attribute is empty. Instead, use the proper element and attributes: for Name='+' use RegistryKey/@Action='createKey', for Name='-' use RemoveRegistryKey/@Action='removeOnUninstall', for Name='*' use RegistryKey/@Action='createAndRemoveOnUninstall'.
1176 <Parameter Type="System.String" Name="elementName" />
1177 <Parameter Type="System.String" Name="attributeName" />
1178 <Parameter Type="System.String" Name="value" />
1179 </Instance>
1180 </Message>
1181 <Message Id="FamilyNameTooLong" Number="120">
1182 <Instance>
1183 The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long for a family name because the maximum allowed length is 8 characters long.
1184 <Parameter Type="System.String" Name="elementName" />
1185 <Parameter Type="System.String" Name="attributeName" />
1186 <Parameter Type="System.String" Name="value" />
1187 <Parameter Type="System.Int32" Name="length" />
1188 </Instance>
1189 </Message>
1190 <Message Id="IllegalFamilyName" Number="121">
1191 <Instance>
1192 The {0}/@{1} attribute's value, '{2}', contains illegal characters for a family name. Legal values include letters, numbers, and underscores.
1193 <Parameter Type="System.String" Name="elementName" />
1194 <Parameter Type="System.String" Name="attributeName" />
1195 <Parameter Type="System.String" Name="value" />
1196 </Instance>
1197 </Message>
1198 <Message Id="IllegalLongValue" Number="122">
1199 <Instance>
1200 The {0}/@{1} attribute's value, '{2}', is not a legal long value. Legal long values are from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.
1201 <Parameter Type="System.String" Name="elementName" />
1202 <Parameter Type="System.String" Name="attributeName" />
1203 <Parameter Type="System.String" Name="value" />
1204 </Instance>
1205 </Message>
1206 <Message Id="IntegralValueOutOfRange" Number="123">
1207 <Instance>
1208 The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.
1209 <Parameter Type="System.String" Name="elementName" />
1210 <Parameter Type="System.String" Name="attributeName" />
1211 <Parameter Type="System.Int32" Name="value" />
1212 <Parameter Type="System.Int32" Name="minimum" />
1213 <Parameter Type="System.Int32" Name="maximum" />
1214 </Instance>
1215 <Instance>
1216 The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.
1217 <Parameter Type="System.String" Name="elementName" />
1218 <Parameter Type="System.String" Name="attributeName" />
1219 <Parameter Type="System.Int64" Name="value" />
1220 <Parameter Type="System.Int64" Name="minimum" />
1221 <Parameter Type="System.Int64" Name="maximum" />
1222 </Instance>
1223 </Message>
1224 <Message Id="DuplicateExtensionXmlSchemaNamespace" Number="125" SourceLineNumbers="no">
1225 <Instance>
1226 The extension '{0}' uses the same xml schema namespace, '{1}', as previously loaded extension '{2}'. Please either remove one of the extensions or rename the xml schema namespace to avoid the collision.
1227 <Parameter Type="System.String" Name="extension" />
1228 <Parameter Type="System.String" Name="extensionXmlSchemaNamespace" />
1229 <Parameter Type="System.String" Name="collidingExtension" />
1230 </Instance>
1231 </Message>
1232 <Message Id="DuplicateExtensionTable" Number="126" SourceLineNumbers="no">
1233 <Instance>
1234 The extension '{0}' contains a definition for table '{1}' that collides with a previously loaded table definition. Please remove one of the conflicting extensions or rename one of the tables to avoid the collision.
1235 <Parameter Type="System.String" Name="extension" />
1236 <Parameter Type="System.String" Name="tableName" />
1237 </Instance>
1238 </Message>
1239 <Message Id="DuplicateExtensionPreprocessorType" Number="127" SourceLineNumbers="no">
1240 <Instance>
1241 The extension '{0}' uses the same preprocessor variable prefix, '{1}', as previously loaded extension '{2}'. Please remove one of the extensions or rename the prefix to avoid the collision.
1242 <Parameter Type="System.String" Name="extension" />
1243 <Parameter Type="System.String" Name="variablePrefix" />
1244 <Parameter Type="System.String" Name="collidingExtension" />
1245 </Instance>
1246 </Message>
1247 <Message Id="FileInUse" Number="128">
1248 <Instance>
1249 The process can not access the file '{0}' because it is being used by another process.
1250 <Parameter Type="System.String" Name="file" />
1251 </Instance>
1252 </Message>
1253 <Message Id="CannotOpenMergeModule" Number="129">
1254 <Instance>
1255 Cannot open the merge module '{0}' from file '{1}'.
1256 <Parameter Type="System.String" Name="mergeModuleIdentifier" />
1257 <Parameter Type="System.String" Name="mergeModuleFile" />
1258 </Instance>
1259 </Message>
1260 <Message Id="DuplicatePrimaryKey" Number="130">
1261 <Instance>
1262 The primary key '{0}' is duplicated in table '{1}'. Please remove one of the entries or rename a part of the primary key to avoid the collision.
1263 <Parameter Type="System.String" Name="primaryKey" />
1264 <Parameter Type="System.String" Name="tableName" />
1265 </Instance>
1266 </Message>
1267 <Message Id="FileIdentifierNotFound" Number="131">
1268 <Instance>
1269 The file row with identifier '{0}' could not be found.
1270 <Parameter Type="System.String" Name="fileIdentifier" />
1271 </Instance>
1272 </Message>
1273 <Message Id="InvalidAssemblyFile" Number="132">
1274 <Instance>
1275 The assembly file '{0}' appears to be invalid. Please ensure this is a valid assembly file and that the user has the appropriate access rights to this file. More information: {1}
1276 <Parameter Type="System.String" Name="assemblyFile" />
1277 <Parameter Type="System.String" Name="moreInformation" />
1278 </Instance>
1279 </Message>
1280 <Message Id="ExpectedEndElement" Number="133">
1281 <Instance>
1282 The end element matching the '{0}' start element was not found.
1283 <Parameter Type="System.String" Name="elementName" />
1284 </Instance>
1285 </Message>
1286 <Message Id="IllegalCodepage" Number="134" SourceLineNumbers="no">
1287 <Instance>
1288 The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.
1289 <Parameter Type="System.Int32" Name="codepage" />
1290 </Instance>
1291 </Message>
1292 <Message Id="ExpectedMediaCabinet" Number="135">
1293 <Instance>
1294 The file '{0}' should be compressed but is not part of a compressed media. Files will be compressed if either the File/@Compressed or Package/@Compressed attributes are set to 'yes'. This can be fixed by setting the Media/@Cabinet attribute for media '{1}'.
1295 <Parameter Type="System.String" Name="fileId" />
1296 <Parameter Type="System.Int32" Name="diskId" />
1297 </Instance>
1298 </Message>
1299 <Message Id="InvalidIdt" Number="136">
1300 <Instance>
1301 There was an error importing the file '{0}'.
1302 <Parameter Type="System.String" Name="idtFile" />
1303 </Instance>
1304 <Instance>
1305 There was an error importing table '{1}' from file '{0}'.
1306 <Parameter Type="System.String" Name="idtFile" />
1307 <Parameter Type="System.String" Name="tableName" />
1308 </Instance>
1309 </Message>
1310 <Message Id="InvalidSequenceTable" Number="137" SourceLineNumbers="no">
1311 <Instance>
1312 Found an invalid sequence table '{0}'.
1313 <Parameter Type="System.String" Name="sequenceTableName" />
1314 </Instance>
1315 </Message>
1316 <Message Id="ExpectedDirectory" Number="138" SourceLineNumbers="no">
1317 <Instance>
1318 The directory '{0}' could not be found.
1319 <Parameter Type="System.String" Name="directory" />
1320 </Instance>
1321 </Message>
1322 <Message Id="ComponentExpectedFeature" Number="139">
1323 <Instance>
1324 The component '{0}' is not assigned to a feature. The component's {1} '{2}' requires it to be assigned to at least one feature.
1325 <Parameter Type="System.String" Name="component" />
1326 <Parameter Type="System.String" Name="type" />
1327 <Parameter Type="System.String" Name="target" />
1328 </Instance>
1329 </Message>
1330 <Message Id="RecursiveAction" Number="140" SourceLineNumbers="no">
1331 <Instance>
1332 The action '{0}' is recursively placed in the '{1}' table.
1333 <Parameter Type="System.String" Name="action" />
1334 <Parameter Type="System.String" Name="tableName" />
1335 </Instance>
1336 </Message>
1337 <Message Id="VersionMismatch" Number="141">
1338 <Instance>
1339 The {0} file format version {1} is not compatible with the expected {0} file format version {2}.
1340 <Parameter Type="System.String" Name="fileType" />
1341 <Parameter Type="System.String" Name="version" />
1342 <Parameter Type="System.String" Name="expectedVersion" />
1343 </Instance>
1344 </Message>
1345 <Message Id="UnexpectedContentNode" Number="142">
1346 <Instance>
1347 The {0} element contains an unexpected xml node of type {1}.
1348 <Parameter Type="System.String" Name="elementName" />
1349 <Parameter Type="System.String" Name="unexpectedNodeType" />
1350 </Instance>
1351 </Message>
1352 <Message Id="UnexpectedColumnCount" Number="143">
1353 <Instance>
1354 A parsed row has more fields that contain data for table '{0}' than are defined. This is potentially because a standard table is being redefined as a custom table or is based on an older table schema.
1355 <Parameter Type="System.String" Name="tableName" />
1356 </Instance>
1357 </Message>
1358 <Message Id="InvalidExtension" Number="144" SourceLineNumbers="no">
1359 <Instance>
1360 The extension '{0}' could not be loaded.
1361 <Parameter Type="System.String" Name="extension" />
1362 </Instance>
1363 <Instance>
1364 The extension '{0}' could not be loaded because of the following reason: {1}
1365 <Parameter Type="System.String" Name="extension" />
1366 <Parameter Type="System.String" Name="invalidReason" />
1367 </Instance>
1368 <Instance>
1369 The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}'.
1370 <Parameter Type="System.String" Name="extension" />
1371 <Parameter Type="System.String" Name="extensionType" />
1372 <Parameter Type="System.String" Name="expectedType" />
1373 </Instance>
1374 <Instance>
1375 The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}' or '{3}'.
1376 <Parameter Type="System.String" Name="extension" />
1377 <Parameter Type="System.String" Name="extensionType" />
1378 <Parameter Type="System.String" Name="expectedType1" />
1379 <Parameter Type="System.String" Name="expectedType2" />
1380 </Instance>
1381 </Message>
1382 <Message Id="InvalidSubExpression" Number="145">
1383 <Instance>
1384 Found invalid subexpression '{0}' in expression '{1}'.
1385 <Parameter Type="System.String" Name="subExpression" />
1386 <Parameter Type="System.String" Name="expression" />
1387 </Instance>
1388 </Message>
1389 <Message Id="UnmatchedPreprocessorInstruction" Number="146">
1390 <Instance>
1391 Found a &lt;?{1}?&gt; processing instruction without a matching &lt;?{0}?&gt; before it.
1392 <Parameter Type="System.String" Name="beginInstruction" />
1393 <Parameter Type="System.String" Name="endInstruction" />
1394 </Instance>
1395 </Message>
1396 <Message Id="NonterminatedPreprocessorInstruction" Number="147">
1397 <Instance>
1398 Found a &lt;?{0}?&gt; processing instruction without a matching &lt;?{1}?&gt; after it.
1399 <Parameter Type="System.String" Name="beginInstruction" />
1400 <Parameter Type="System.String" Name="endInstruction" />
1401 </Instance>
1402 </Message>
1403 <Message Id="ExpectedExpressionAfterNot" Number="148">
1404 <Instance>
1405 Expecting an argument for 'NOT' in expression '{0}'.
1406 <Parameter Type="System.String" Name="expression" />
1407 </Instance>
1408 </Message>
1409 <Message Id="InvalidPreprocessorVariable" Number="149">
1410 <Instance>
1411 Ill-formed preprocessor variable '$({0})'. Variables must have a prefix (like 'var.', 'env.', or 'sys.') and a name at least 1 character long. If the literal string '$({0})' is desired, use '$$({0})'.
1412 <Parameter Type="System.String" Name="variable" />
1413 </Instance>
1414 </Message>
1415 <Message Id="UndefinedPreprocessorVariable" Number="150">
1416 <Instance>
1417 Undefined preprocessor variable '$({0})'.
1418 <Parameter Type="System.String" Name="variableName" />
1419 </Instance>
1420 </Message>
1421 <Message Id="IllegalDefineStatement" Number="151">
1422 <Instance>
1423 The define statement '&lt;?define {0}?&gt;' is not well-formed. Define statements should be in the form &lt;?define variableName = "variable value"?&gt;.
1424 <Parameter Type="System.String" Name="defineStatement" />
1425 </Instance>
1426 </Message>
1427 <Message Id="VariableDeclarationCollision" Number="152">
1428 <Instance>
1429 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
1430 <Parameter Type="System.String" Name="variableName" />
1431 <Parameter Type="System.String" Name="variableValue" />
1432 <Parameter Type="System.String" Name="variableCollidingValue" />
1433 </Instance>
1434 </Message>
1435 <Message Id="CannotReundefineVariable" Number="153">
1436 <Instance>
1437 The variable '{0}' cannot be undefined because its already undefined.
1438 <Parameter Type="System.String" Name="variableName" />
1439 </Instance>
1440 </Message>
1441 <Message Id="IllegalForeach" Number="154">
1442 <Instance>
1443 The foreach statement '{0}' is illegal. The proper format for foreach is &lt;?foreach varName in valueList?&gt;.
1444 <Parameter Type="System.String" Name="foreachStatement" />
1445 </Instance>
1446 </Message>
1447 <Message Id="IllegalParentAttributeWhenNested" Number="155">
1448 <Instance>
1449 The {0}/@{1} attribute cannot be specified when a {2} element is nested underneath the {0} element.
1450 <Parameter Type="System.String" Name="parentElementName" />
1451 <Parameter Type="System.String" Name="parentAttributeName" />
1452 <Parameter Type="System.String" Name="childElement" />
1453 </Instance>
1454 </Message>
1455 <Message Id="ExpectedEndforeach" Number="156">
1456 <Instance>A &lt;?foreach?&gt; statement was found that had no matching &lt;?endforeach?&gt;.</Instance>
1457 </Message>
1458 <Message Id="UnmatchedQuotesInExpression" Number="158">
1459 <Instance>
1460 The quotes don't match in the expression '{0}'.
1461 <Parameter Type="System.String" Name="expression" />
1462 </Instance>
1463 </Message>
1464 <Message Id="UnmatchedParenthesisInExpression" Number="159">
1465 <Instance>
1466 The parenthesis don't match in the expression '{0}'.
1467 <Parameter Type="System.String" Name="expression" />
1468 </Instance>
1469 </Message>
1470 <Message Id="ExpectedVariable" Number="160">
1471 <Instance>
1472 A required variable was missing in the expression '{0}'.
1473 <Parameter Type="System.String" Name="expression" />
1474 </Instance>
1475 </Message>
1476 <Message Id="UnexpectedLiteral" Number="161">
1477 <Instance>
1478 An unexpected literal was found in the expression '{0}'.
1479 <Parameter Type="System.String" Name="expression" />
1480 </Instance>
1481 </Message>
1482 <Message Id="IllegalIntegerInExpression" Number="162">
1483 <Instance>
1484 An illegal number was found in the expression '{0}'.
1485 <Parameter Type="System.String" Name="expression" />
1486 </Instance>
1487 </Message>
1488 <Message Id="UnexpectedPreprocessorOperator" Number="163">
1489 <Instance>
1490 The operator '{0}' is unexpected.
1491 <Parameter Type="System.String" Name="operator" />
1492 </Instance>
1493 </Message>
1494 <Message Id="UnexpectedEmptySubexpression" Number="164">
1495 <Instance>
1496 The empty subexpression is unexpected in the expression '{0}'.
1497 <Parameter Type="System.String" Name="expression" />
1498 </Instance>
1499 </Message>
1500 <Message Id="UnexpectedCustomTableColumn" Number="165">
1501 <Instance>
1502 The custom table column '{0}' is unknown.
1503 <Parameter Type="System.String" Name="column" />
1504 </Instance>
1505 </Message>
1506 <Message Id="UnknownCustomTableColumnType" Number="166">
1507 <Instance>
1508 Encountered an unknown custom table column type '{0}'.
1509 <Parameter Type="System.String" Name="columnType" />
1510 </Instance>
1511 </Message>
1512 <Message Id="IllegalFileCompressionAttributes" Number="167">
1513 <Instance>Cannot have both the MsidbFileAttributesCompressed and MsidbFileAttributesNoncompressed options set in a file attributes column.</Instance>
1514 </Message>
1515 <Message Id="OverridableActionCollision" Number="168">
1516 <Instance>
1517 The {0} table contains an action '{1}' that is declared overridable in two different locations. Please remove one of the actions or the Overridable='yes' attribute from one of the actions.
1518 <Parameter Type="System.String" Name="sequenceTableName" />
1519 <Parameter Type="System.String" Name="actionName" />
1520 </Instance>
1521 </Message>
1522 <Message Id="OverridableActionCollision2" Number="169">
1523 <Instance>The location of the action related to previous error.</Instance>
1524 </Message>
1525 <Message Id="ActionCollision" Number="170">
1526 <Instance>
1527 The {0} table contains an action '{1}' that is declared in two different locations. Please remove one of the actions or set the Overridable='yes' attribute on one of their elements.
1528 <Parameter Type="System.String" Name="sequenceTableName" />
1529 <Parameter Type="System.String" Name="actionName" />
1530 </Instance>
1531 </Message>
1532 <Message Id="ActionCollision2" Number="171">
1533 <Instance>The location of the action related to previous error.</Instance>
1534 </Message>
1535 <Message Id="SuppressNonoverridableAction" Number="172">
1536 <Instance>
1537 The {0} table contains an action '{1}' that cannot be suppressed because it is not declared overridable in the base definition. Please stop suppressing the action or make it overridable in its base declaration.
1538 <Parameter Type="System.String" Name="sequenceTableName" />
1539 <Parameter Type="System.String" Name="actionName" />
1540 </Instance>
1541 </Message>
1542 <Message Id="SuppressNonoverridableAction2" Number="173">
1543 <Instance>The location of the non-overridable definition of the action related to previous error.</Instance>
1544 </Message>
1545 <Message Id="CustomActionSequencedInModule" Number="174">
1546 <Instance>
1547 The {0} table contains a custom action '{1}' that has a sequence number specified. The Sequence attribute is not allowed for custom actions in a merge module. Please remove the action or use the Before or After attributes to specify where this action should be sequenced relative to another action.
1548 <Parameter Type="System.String" Name="sequenceTableName" />
1549 <Parameter Type="System.String" Name="actionName" />
1550 </Instance>
1551 </Message>
1552 <Message Id="StandardActionRelativelyScheduledInModule" Number="175">
1553 <Instance>
1554 The {0} table contains a standard action '{1}' that does not have a sequence number specified. The Sequence attribute is required for standard actions in a merge module. Please remove the action or use the Sequence attribute.
1555 <Parameter Type="System.String" Name="sequenceTableName" />
1556 <Parameter Type="System.String" Name="actionName" />
1557 </Instance>
1558 </Message>
1559 <Message Id="ActionCircularDependency" Number="176">
1560 <Instance>
1561 The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is also scheduled to come before or after action '{1}'. Please remove this circular dependency by changing the Before or After attribute for one of the actions.
1562 <Parameter Type="System.String" Name="sequenceTableName" />
1563 <Parameter Type="System.String" Name="actionName1" />
1564 <Parameter Type="System.String" Name="actionName2" />
1565 </Instance>
1566 </Message>
1567 <Message Id="ActionScheduledRelativeToTerminationAction" Number="177">
1568 <Instance>
1569 The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is a special action which only occurs when the installer terminates. These special actions can be identified by their negative sequence numbers. Please schedule the action '{1}' to come before or after a different action.
1570 <Parameter Type="System.String" Name="sequenceTableName" />
1571 <Parameter Type="System.String" Name="actionName1" />
1572 <Parameter Type="System.String" Name="actionName2" />
1573 </Instance>
1574 </Message>
1575 <Message Id="ActionScheduledRelativeToTerminationAction2" Number="178">
1576 <Instance>The location of the special termination action related to previous error(s).</Instance>
1577 </Message>
1578 <Message Id="NoUniqueActionSequenceNumber" Number="179">
1579 <Instance>
1580 The {0} table contains an action '{1}' which cannot have a unique sequence number because it is scheduled before or after action '{2}'. There is not enough room before or after this action to assign a unique sequence number. Please schedule one of the actions differently so that it will be in a position with more sequence numbers available. Please note that sequence numbers must be an integer in the range 1 - 32767 (inclusive).
1581 <Parameter Type="System.String" Name="sequenceTableName" />
1582 <Parameter Type="System.String" Name="actionName1" />
1583 <Parameter Type="System.String" Name="actionName2" />
1584 </Instance>
1585 </Message>
1586 <Message Id="NoUniqueActionSequenceNumber2" Number="180">
1587 <Instance>The location of the sequenced action related to previous error.</Instance>
1588 </Message>
1589 <Message Id="ActionScheduledRelativeToItself" Number="181">
1590 <Instance>
1591 The {0}/@{1} attribute's value '{2}' is invalid because it would make this action dependent upon itself. Please change the value to the name of a different action.
1592 <Parameter Type="System.String" Name="elementName" />
1593 <Parameter Type="System.String" Name="attributeName" />
1594 <Parameter Type="System.String" Name="attributeValue" />
1595 </Instance>
1596 </Message>
1597 <Message Id="MissingTableDefinition" Number="182" SourceLineNumbers="no">
1598 <Instance>
1599 Cannot find the table definitions for the '{0}' table. This is likely due to a typing error or missing extension. Please ensure all the necessary extensions are supplied on the command line with the -ext parameter.
1600 <Parameter Type="System.String" Name="tableName" />
1601 </Instance>
1602 </Message>
1603 <Message Id="ExpectedRowInPatchCreationPackage" Number="183" SourceLineNumbers="no">
1604 <Instance>
1605 Could not find a row in the '{0}' table for this patch creation package. Patch creation packages must contain at least one row in the '{0}' table.
1606 <Parameter Type="System.String" Name="tableName" />
1607 </Instance>
1608 </Message>
1609 <Message Id="UnexpectedTableInMergeModule" Number="184">
1610 <Instance>
1611 An unexpected row in the '{0}' table was found in this merge module. Merge modules cannot contain the '{0}' table.
1612 <Parameter Type="System.String" Name="tableName" />
1613 </Instance>
1614 </Message>
1615 <Message Id="UnexpectedTableInPatchCreationPackage" Number="185">
1616 <Instance>
1617 An unexpected row in the '{0}' table was found in this patch creation package. Patch creation packages cannot contain the '{0}' table.
1618 <Parameter Type="System.String" Name="tableName" />
1619 </Instance>
1620 </Message>
1621 <Message Id="MergeExcludedModule" Number="186">
1622 <Instance>
1623 The module '{0}' cannot be merged because it excludes or is excluded by the merge module with signature '{1}'.
1624 <Parameter Type="System.String" Name="mergeId" />
1625 <Parameter Type="System.String" Name="otherMergeId" />
1626 </Instance>
1627 </Message>
1628 <Message Id="MergeFeatureRequired" Number="187">
1629 <Instance>
1630 The {0} table contains a row with primary key(s) '{1}' which requires a feature to properly merge from the merge module '{2}'. Nest a MergeRef element with an Id attribute set to the value '{3}' under a Feature element to fix this error.
1631 <Parameter Type="System.String" Name="tableName" />
1632 <Parameter Type="System.String" Name="primaryKeys" />
1633 <Parameter Type="System.String" Name="mergeModuleFile" />
1634 <Parameter Type="System.String" Name="mergeId" />
1635 </Instance>
1636 </Message>
1637 <Message Id="MergeLanguageFailed" Number="188">
1638 <Instance>
1639 The language '{0}' is supported but uses an invalid language transform in the merge module '{1}'.
1640 <Parameter Type="System.Int16" Name="language" />
1641 <Parameter Type="System.String" Name="mergeModuleFile" />
1642 </Instance>
1643 </Message>
1644 <Message Id="MergeLanguageUnsupported" Number="189">
1645 <Instance>
1646 Could not locate language '{0}' (or a transform for this language) in the merge module '{1}'. This is likely due to an incorrectly authored Merge/@Language attribute.
1647 <Parameter Type="System.Int16" Name="language" />
1648 <Parameter Type="System.String" Name="mergeModuleFile" />
1649 </Instance>
1650 </Message>
1651 <Message Id="TableDecompilationUnimplemented" Number="190" SourceLineNumbers="no">
1652 <Instance>
1653 Decompilation of the {0} table has not been implemented by its extension.
1654 <Parameter Type="System.String" Name="tableName" />
1655 </Instance>
1656 </Message>
1657 <Message Id="CannotDefaultMismatchedAdvertiseStates" Number="191">
1658 <Instance>
1659 MIME element cannot be marked as the default when its advertise state differs from its parent element. Ensure that the advertise state of the MIME element matches its parents element or remove the Mime/@Advertise attribute completely.
1660 </Instance>
1661 </Message>
1662 <Message Id="VersionIndependentProgIdsCannotHaveIcons" Number="192">
1663 <Instance>
1664 Version independent ProgIds cannot have Icons. Remove the Icon and/or IconIndex attributes from your ProgId element.
1665 </Instance>
1666 </Message>
1667 <Message Id="IllegalAttributeValueWithOtherAttribute" Number="193">
1668 <Instance>
1669 The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present.
1670 <Parameter Type="System.String" Name="elementName" />
1671 <Parameter Type="System.String" Name="attributeName" />
1672 <Parameter Type="System.String" Name="attributeValue" />
1673 <Parameter Type="System.String" Name="otherAttributeName" />
1674 </Instance>
1675 <Instance>
1676 The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present with value '{4}'.
1677 <Parameter Type="System.String" Name="elementName" />
1678 <Parameter Type="System.String" Name="attributeName" />
1679 <Parameter Type="System.String" Name="attributeValue" />
1680 <Parameter Type="System.String" Name="otherAttributeName" />
1681 <Parameter Type="System.String" Name="otherAttributeValue" />
1682 </Instance>
1683 </Message>
1684 <Message Id="InvalidMergeLanguage" Number="194">
1685 <Instance>
1686 The Merge element '{0}' specified an invalid language '{1}'. Verify that localization tokens are being properly resolved to a numeric LCID.
1687 <Parameter Type="System.String" Name="mergeId" />
1688 <Parameter Type="System.String" Name="mergeLanguage" />
1689 </Instance>
1690 </Message>
1691 <Message Id="WixVariableCollision" Number="195">
1692 <Instance>
1693 The WiX variable '{0}' is declared in more than one location. Please remove one of the declarations.
1694 <Parameter Type="System.String" Name="variableId" />
1695 </Instance>
1696 </Message>
1697 <Message Id="ExpectedWixVariableValue" Number="196" SourceLineNumbers="no">
1698 <Instance>
1699 The WiX variable '{0}' was declared without a value. Please specify a value for the variable.
1700 <Parameter Type="System.String" Name="variableId" />
1701 </Instance>
1702 </Message>
1703 <Message Id="WixVariableUnknown" Number="197">
1704 <Instance>
1705 The WiX variable !(wix.{0}) is unknown. Please ensure the variable is declared on the command line for light.exe, via a WixVariable element, or inline using the syntax !(wix.{0}=some value which doesn't contain parenthesis).
1706 <Parameter Type="System.String" Name="variableId" />
1707 </Instance>
1708 </Message>
1709 <Message Id="IllegalWixVariablePrefix" Number="198">
1710 <Instance>
1711 The WiX variable $(wix.{0}) uses an illegal prefix '$'. Please use the '!' prefix instead.
1712 <Parameter Type="System.String" Name="variableId" />
1713 </Instance>
1714 </Message>
1715 <Message Id="InvalidWixXmlNamespace" Number="199">
1716 <Instance>
1717 The {0} element has no namespace. Please make the {0} element look like the following: &lt;{0} xmlns="{1}"&gt;.
1718 <Parameter Type="System.String" Name="wixElementName" />
1719 <Parameter Type="System.String" Name="wixNamespace" />
1720 </Instance>
1721 <Instance>
1722 The {0} element has an incorrect namespace of '{1}'. Please make the {0} element look like the following: &lt;{0} xmlns="{2}"&gt;.
1723 <Parameter Type="System.String" Name="wixElementName" />
1724 <Parameter Type="System.String" Name="elementNamespace" />
1725 <Parameter Type="System.String" Name="wixNamespace" />
1726 </Instance>
1727 </Message>
1728 <Message Id="UnhandledExtensionElement" Number="200">
1729 <Instance>
1730 The {0} element contains an unhandled extension element '{1}'. Please ensure that the extension for elements in the '{2}' namespace has been provided.
1731 <Parameter Type="System.String" Name="elementName" />
1732 <Parameter Type="System.String" Name="extensionElementName" />
1733 <Parameter Type="System.String" Name="extensionNamespace" />
1734 </Instance>
1735 </Message>
1736 <Message Id="UnhandledExtensionAttribute" Number="201">
1737 <Instance>
1738 The {0} element contains an unhandled extension attribute '{1}'. Please ensure that the extension for attributes in the '{2}' namespace has been provided.
1739 <Parameter Type="System.String" Name="elementName" />
1740 <Parameter Type="System.String" Name="extensionAttributeName" />
1741 <Parameter Type="System.String" Name="extensionNamespace" />
1742 </Instance>
1743 </Message>
1744 <Message Id="UnsupportedExtensionAttribute" Number="202">
1745 <Instance>
1746 The {0} element contains an unsupported extension attribute '{1}'. The {0} element does not currently support extension attributes. Is the {1} attribute using the correct XML namespace?
1747 <Parameter Type="System.String" Name="elementName" />
1748 <Parameter Type="System.String" Name="extensionElementName" />
1749 </Instance>
1750 </Message>
1751 <Message Id="UnsupportedExtensionElement" Number="203">
1752 <Instance>
1753 The {0} element contains an unsupported extension element '{1}'. The {0} element does not currently support extension elements. Is the {1} element using the correct XML namespace?
1754 <Parameter Type="System.String" Name="elementName" />
1755 <Parameter Type="System.String" Name="extensionElementName" />
1756 </Instance>
1757 </Message>
1758 <Message Id="ValidationError" Number="204">
1759 <Instance>
1760 {0}: {1}
1761 <Parameter Type="System.String" Name="ice" />
1762 <Parameter Type="System.String" Name="message" />
1763 </Instance>
1764 </Message>
1765 <Message Id="IllegalRootDirectory" Number="205">
1766 <Instance>
1767 The Directory with Id '{0}' is not a valid root directory. There may only be a single root directory per product or module and its Id attribute value must be 'TARGETDIR' and its Name attribute value must be 'SourceDir'.
1768 <Parameter Type="System.String" Name="directoryId" />
1769 </Instance>
1770 </Message>
1771 <Message Id="IllegalTargetDirDefaultDir" Number="206">
1772 <Instance>
1773 The 'TARGETDIR' directory has an illegal DefaultDir value of '{0}'. The DefaultDir value is created from the *Name attributes of the Directory element. The TARGETDIR directory is a special directory which must have its Name attribute set to 'SourceDir'.
1774 <Parameter Type="System.String" Name="defaultDir" />
1775 </Instance>
1776 </Message>
1777 <Message Id="TooManyElements" Number="207">
1778 <Instance>
1779 The {0} element contains an unexpected child element '{1}'. The '{1}' element may only occur {2} time(s) under the {0} element.
1780 <Parameter Type="System.String" Name="elementName" />
1781 <Parameter Type="System.String" Name="childElementName" />
1782 <Parameter Type="System.Int32" Name="expectedInstances" />
1783 </Instance>
1784 </Message>
1785 <Message Id="ExpectedBinaryCategory" Number="208">
1786 <Instance>The Column element specifies a binary column but does not have the correct Category specified. Windows Installer requires binary columns to specify their category as binary. Please set the Category attribute's value to 'Binary'.</Instance>
1787 </Message>
1788 <Message Id="RootFeatureCannotFollowParent" Number="209">
1789 <Instance>The Feature element specifies a root feature with an illegal InstallDefault value of 'followParent'. Root features cannot follow their parent feature's install state because they don't have a parent feature. Please remove or change the value of the InstallDefault attribute.</Instance>
1790 </Message>
1791 <Message Id="FeatureNameTooLong" Number="210">
1792 <Instance>
1793 The {0}/@{1} attribute with value '{2}', is too long for a feature name. Due to limitations in the Windows Installer, feature names cannot be longer than 38 characters in length.
1794 <Parameter Type="System.String" Name="elementName" />
1795 <Parameter Type="System.String" Name="attributeName" />
1796 <Parameter Type="System.String" Name="attributeValue" />
1797 </Instance>
1798 </Message>
1799 <Message Id="SignedEmbeddedCabinet" Number="211">
1800 <Instance>The DigitalSignature element cannot be nested under a Media element which specifies EmbedCab='yes'. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or change the value of the Media/@EmbedCab attribute to 'no'.</Instance>
1801 </Message>
1802 <Message Id="ExpectedSignedCabinetName" Number="212">
1803 <Instance>The Media/@Cabinet attribute was not found; it is required when this element contains a DigitalSignature child element. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or specify a valid external cabinet name via the Cabinet attribute.</Instance>
1804 </Message>
1805 <Message Id="IllegalInlineLocVariable" Number="213">
1806 <Instance>
1807 The localization variable '{0}' specifies an illegal inline default value of '{1}'. Localization variables cannot specify default values inline, instead the value should be specified in a WiX localization (.wxl) file.
1808 <Parameter Type="System.String" Name="variableName" />
1809 <Parameter Type="System.String" Name="variableValue" />
1810 </Instance>
1811 </Message>
1812 <Message Id="MergeModuleExpectedFeature" Number="215">
1813 <Instance>
1814 The merge module '{0}' is not assigned to a feature. All merge modules must be assigned to at least one feature.
1815 <Parameter Type="System.String" Name="mergeId" />
1816 </Instance>
1817 </Message>
1818 <Message Id="Win32Exception" Number="216" SourceLineNumbers="no">
1819 <Instance>
1820 An unexpected Win32 exception with error code 0x{0:X} occurred: {1}
1821 <Parameter Type="System.Int32" Name="nativeErrorCode"/>
1822 <Parameter Type="System.String" Name="message" />
1823 </Instance>
1824 <Instance>
1825 An unexpected Win32 exception with error code 0x{0:X} occurred while accessing file '{1}': {2}
1826 <Parameter Type="System.Int32" Name="nativeErrorCode"/>
1827 <Parameter Type="System.String" Name="file"/>
1828 <Parameter Type="System.String" Name="message" />
1829 </Instance>
1830 </Message>
1831 <Message Id="UnexpectedExternalUIMessage" Number="217" SourceLineNumbers="no">
1832 <Instance>
1833 Error executing unknown ICE action. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: &quot;{0}&quot;.
1834 <Parameter Type="System.String" Name="message" />
1835 </Instance>
1836 <Instance>
1837 Error executing ICE action '{1}'. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: &quot;{0}&quot;.
1838 <Parameter Type="System.String" Name="message" />
1839 <Parameter Type="System.String" Name="action" />
1840 </Instance>
1841 </Message>
1842 <Message Id="IllegalCabbingThreadCount" Number="218" SourceLineNumbers="no">
1843 <Instance>
1844 Illegal number of threads to create cabinets: '{0}' for -ct &lt;N&gt; command line option. Specify the number of threads to use like -ct 2.
1845 <Parameter Type="System.String" Name="numThreads" />
1846 </Instance>
1847 </Message>
1848 <Message Id="IllegalEnvironmentVariable" Number="219" SourceLineNumbers="no">
1849 <Instance>
1850 The {0} environment variable is set to an invalid value of '{1}'.
1851 <Parameter Type="System.String" Name="environmentVariable" />
1852 <Parameter Type="System.String" Name="value" />
1853 </Instance>
1854 </Message>
1855 <Message Id="InvalidKeyColumn" Number="220" SourceLineNumbers="no">
1856 <Instance>
1857 The definition for the '{0}' table's '{1}' column is an invalid foreign key relationship to the {2} table's column number {3}. It is not a valid foreign key table column number because it is too small (less than 1) or greater than the count of columns in the foreign table's definition.
1858 <Parameter Type="System.String" Name="tableName" />
1859 <Parameter Type="System.String" Name="columnName" />
1860 <Parameter Type="System.String" Name="foreignTableName" />
1861 <Parameter Type="System.Int32" Name="foreignColumnNumber" />
1862 </Instance>
1863 </Message>
1864 <Message Id="CollidingModularizationTypes" Number="221" SourceLineNumbers="no">
1865 <Instance>
1866 The definition for the '{0}' table's '{1}' column is a foreign key relationship to the '{2}' table's column number {3}. The modularization types of the two column definitions differ: one is {4} and the other is {5}. Change one of the modularization types so that they match.
1867 <Parameter Type="System.String" Name="tableName" />
1868 <Parameter Type="System.String" Name="columnName" />
1869 <Parameter Type="System.String" Name="foreignTableName" />
1870 <Parameter Type="System.Int32" Name="foreignColumnNumber" />
1871 <Parameter Type="System.String" Name="modularizationType" />
1872 <Parameter Type="System.String" Name="foreignModularizationType" />
1873 </Instance>
1874 </Message>
1875 <Message Id="CubeFileNotFound" Number="222" SourceLineNumbers="no">
1876 <Instance>
1877 The cube file '{0}' cannot be found. This file is required for MSI validation.
1878 <Parameter Type="System.String" Name="cubeFile" />
1879 </Instance>
1880 </Message>
1881 <Message Id="OpenDatabaseFailed" Number="223" SourceLineNumbers="no">
1882 <Instance>
1883 Failed to open database '{0}'. Ensure it is a valid database, and it is not open by another process.
1884 <Parameter Type="System.String" Name="databaseFile" />
1885 </Instance>
1886 </Message>
1887 <Message Id="OutputTypeMismatch" Number="224">
1888 <Instance>
1889 The types of the outputs do not match. One output's type is '{0}' while the other is '{1}'.
1890 <Parameter Type="System.String" Name="beforeOutputType" />
1891 <Parameter Type="System.String" Name="afterOutputType" />
1892 </Instance>
1893 </Message>
1894 <Message Id="RealTableMissingPrimaryKeyColumn" Number="225">
1895 <Instance>
1896 The table '{0}' does not contain any primary key columns. At least one column must be marked as the primary key to ensure this table can be patched.
1897 <Parameter Type="System.String" Name="tableName" />
1898 </Instance>
1899 </Message>
1900 <Message Id="IllegalColumnName" Number="226">
1901 <Instance>
1902 The {0}/@{1} attribute's value, '{2}', is not a legal column name. It will collide with the sentinel values used in the _TransformView table.
1903 <Parameter Type="System.String" Name="elementName" />
1904 <Parameter Type="System.String" Name="attributeName" />
1905 <Parameter Type="System.String" Name="value" />
1906 </Instance>
1907 </Message>
1908 <Message Id="NoDifferencesInTransform" Number="227">
1909 <Instance>
1910 The transform being built did not contain any differences so it could not be created.
1911 </Instance>
1912 </Message>
1913 <Message Id="OutputCodepageMismatch" Number="228">
1914 <Instance>
1915 The code pages of the outputs do not match. One output's code page is '{0}' while the other is '{1}'.
1916 <Parameter Type="System.Int32" Name="beforeCodepage" />
1917 <Parameter Type="System.Int32" Name="afterCodepage" />
1918 </Instance>
1919 </Message>
1920 <Message Id="OutputCodepageMismatch2" Number="229">
1921 <Instance>
1922 The location of the mismatched code page related to the previous warning.
1923 </Instance>
1924 </Message>
1925 <Message Id="IllegalComponentWithAutoGeneratedGuid" Number="230">
1926 <Instance>
1927 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components using a Directory as a KeyPath or containing ODBCDataSource child elements cannot use an automatically generated guid. Make sure your component doesn't have a Directory as the KeyPath and move any ODBCDataSource child elements to components with explicit component guids.
1928 </Instance>
1929 <Instance>
1930 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with registry keypaths and files cannot use an automatically generated guid. Create multiple components, each with one file and/or one registry value keypath, to use automatically generated guids.
1931 <Parameter Type="System.Boolean" Name="registryKeyPath" />
1932 </Instance>
1933 </Message>
1934 <Message Id="IllegalPathForGeneratedComponentGuid" Number="231">
1935 <Instance>
1936 The component '{0}' has a key file with path '{1}'. Since this path is not rooted in one of the standard directories (like ProgramFilesFolder), this component does not fit the criteria for having an automatically generated guid. (This error may also occur if a path contains a likely standard directory such as nesting a directory with name "Common Files" under ProgramFilesFolder.)
1937 <Parameter Type="System.String" Name="componentName" />
1938 <Parameter Type="System.String" Name="keyFilePath" />
1939 </Instance>
1940 </Message>
1941 <Message Id="IllegalTerminalServerCustomActionAttributes" Number="232">
1942 <Instance>
1943 The CustomAction/@TerminalServerAware attribute's value is 'yes' but the Execute attribute is not 'deferred,' 'rollback,' or 'commit.' Terminal-Server-aware custom actions must be deferred, rollback, or commit custom actions. For more information, see http://msdn.microsoft.com/library/aa372071.aspx."
1944 </Instance>
1945 </Message>
1946 <Message Id="IllegalPropertyCustomActionAttributes" Number="233">
1947 <Instance>
1948 The CustomAction sets a property but its Execute attribute is not 'immediate' (the default). Property-setting custom actions cannot be deferred."
1949 </Instance>
1950 </Message>
1951 <Message Id="InvalidPreprocessorFunction" Number="234">
1952 <Instance>
1953 Ill-formed preprocessor function '${0}'. Functions must have a prefix (like 'fun.'), a name at least 1 character long, and matching opening and closing parentheses.
1954 <Parameter Type="System.String" Name="variable" />
1955 </Instance>
1956 </Message>
1957 <Message Id="UndefinedPreprocessorFunction" Number="235">
1958 <Instance>
1959 Undefined preprocessor function '$({0})'.
1960 <Parameter Type="System.String" Name="variableName" />
1961 </Instance>
1962 </Message>
1963 <Message Id="PreprocessorExtensionEvaluateFunctionFailed" Number="236">
1964 <Instance>
1965 In the preprocessor extension that handles prefix '{0}' while trying to call function '{1}({2})' and exception has occurred : {3}
1966 <Parameter Type="System.String" Name="prefix" />
1967 <Parameter Type="System.String" Name="function" />
1968 <Parameter Type="System.String" Name="args" />
1969 <Parameter Type="System.String" Name="message" />
1970 </Instance>
1971 </Message>
1972 <Message Id="PreprocessorExtensionGetVariableValueFailed" Number="237">
1973 <Instance>
1974 In the preprocessor extension that handles prefix '{0}' while trying to get the value for variable '{1}' and exception has occured : {2}
1975 <Parameter Type="System.String" Name="prefix" />
1976 <Parameter Type="System.String" Name="variable" />
1977 <Parameter Type="System.String" Name="message" />
1978 </Instance>
1979 </Message>
1980 <Message Id="InvalidManifestContent" Number="238">
1981 <Instance>
1982 The manifest '{0}' does not have the required assembly/assemblyIdentity element.
1983 <Parameter Type="System.String" Name="fileName" />
1984 </Instance>
1985 </Message>
1986 <Message Id="InvalidWixTransform" Number="239" SourceLineNumbers="no">
1987 <Instance>
1988 The file '{0}' is not a valid WiX Transform.
1989 <Parameter Type="System.String" Name="fileName" />
1990 </Instance>
1991 </Message>
1992 <Message Id="UnexpectedFileExtension" Number="240" SourceLineNumbers="no">
1993 <Instance>
1994 The file '{0}' has an unexpected extension. Expected one of the following: '{1}'.
1995 <Parameter Type="System.String" Name="fileName" />
1996 <Parameter Type="System.String" Name="expectedExtensions" />
1997 </Instance>
1998 </Message>
1999 <Message Id="UnexpectedTableInPatch" Number="241">
2000 <Instance>
2001 An unexpected row in the '{0}' table was found in this patch. Patches cannot contain the '{0}' table.
2002 <Parameter Type="System.String" Name="tableName" />
2003 </Instance>
2004 </Message>
2005 <Message Id="InvalidProductVersion" Number="242">
2006 <Instance>
2007 Invalid product version '{0}'. Product version must have a major version less than 256, a minor version less than 256, and a build version less than 65536.
2008 <Parameter Type="System.String" Name="version" />
2009 </Instance>
2010 <Instance>
2011 Invalid product version '{0}' in package '{1}'. When included in a bundle, all product version fields in an MSI package must be less than 65536.
2012 <Parameter Type="System.String" Name="version" />
2013 <Parameter Type="System.String" Name="packagePath" />
2014 </Instance>
2015 </Message>
2016 <Message Id="InvalidKeypathChange" Number="243">
2017 <Instance>
2018 Component '{0}' has a changed keypath in the transform '{1}'. Patches cannot change the keypath of a component.
2019 <Parameter Type="System.String" Name="component" />
2020 <Parameter Type="System.String" Name="transformPath" />
2021 </Instance>
2022 </Message>
2023 <Message Id="MissingValidatorExtension" Number="244" SourceLineNumbers="no">
2024 <Instance>
2025 The validator requires at least one extension. Add "ValidatorExtension, Wix" for the default implementation.
2026 </Instance>
2027 </Message>
2028 <Message Id="InvalidValidatorMessageType" Number="245" SourceLineNumbers="no">
2029 <Instance>
2030 Unknown validation message type '{0}'.
2031 <Parameter Type="System.String" Name="type" />
2032 </Instance>
2033 </Message>
2034 <Message Id="PatchWithoutTransforms" Number="246" SourceLineNumbers="no">
2035 <Instance>
2036 No transforms were provided to attach to the patch.
2037 </Instance>
2038 </Message>
2039 <Message Id="SingleExtensionSupported" Number="247" SourceLineNumbers="no">
2040 <Instance>
2041 Multiple extensions were specified on the command line, only a single extension is supported.
2042 </Instance>
2043 </Message>
2044 <Message Id="DuplicateTransform" Number="248" SourceLineNumbers="no">
2045 <Instance>
2046 The transform {0} was included twice on the command line. Each transform can be applied to a patch only once.
2047 <Parameter Type="System.String" Name="transform" />
2048 </Instance>
2049 </Message>
2050 <Message Id="BaselineRequired" Number="249" SourceLineNumbers="no">
2051 <Instance>
2052 No baseline was specified for one of the transforms specified. A baseline is required for all transforms in a patch.
2053 </Instance>
2054 </Message>
2055 <Message Id="PreprocessorError" Number="250">
2056 <Instance>
2057 {0}
2058 <Parameter Type="System.String" Name="message" />
2059 </Instance>
2060 </Message>
2061 <Message Id="ExpectedArgument" Number="251" SourceLineNumbers="no">
2062 <Instance>
2063 {0} is expected to be followed by a value argument.
2064 <Parameter Type="System.String" Name="argument" />
2065 </Instance>
2066 </Message>
2067 <Message Id="PatchWithoutValidTransforms" Number="252" SourceLineNumbers="no">
2068 <Instance>
2069 No valid transforms were provided to attach to the patch. Check to make sure the transforms you passed on the command line have a matching baseline authored in the patch. Also, make sure there are differences between your target and upgrade.
2070 </Instance>
2071 </Message>
2072 <Message Id="ExpectedDecompiler" Number="253" SourceLineNumbers="no">
2073 <Instance>
2074 No decompiler was provided. {0} requires a decompiler.
2075 <Parameter Type="System.String" Name="identifier" />
2076 </Instance>
2077 </Message>
2078 <Message Id="ExpectedTableInMergeModule" Number="254" SourceLineNumbers="no">
2079 <Instance>
2080 The table '{0}' was expected but was missing.
2081 <Parameter Type="System.String" Name="identifier" />
2082 </Instance>
2083 </Message>
2084 <Message Id="UnexpectedElementWithAttributeValue" Number="255">
2085 <Instance>
2086 The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}'.
2087 <Parameter Type="System.String" Name="elementName" />
2088 <Parameter Type="System.String" Name="childElementName" />
2089 <Parameter Type="System.String" Name="attribute" />
2090 <Parameter Type="System.String" Name="attributeValue" />
2091 </Instance>
2092 <Instance>
2093 The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}' or '{4}'.
2094 <Parameter Type="System.String" Name="elementName" />
2095 <Parameter Type="System.String" Name="childElementName" />
2096 <Parameter Type="System.String" Name="attribute" />
2097 <Parameter Type="System.String" Name="attributeValue1" />
2098 <Parameter Type="System.String" Name="attributeValue2" />
2099 </Instance>
2100 </Message>
2101 <Message Id="ExpectedPatchIdInWixMsp" Number="256" SourceLineNumbers="no">
2102 <Instance>
2103 The WixMsp is missing the patch ID.
2104 </Instance>
2105 </Message>
2106 <Message Id="ExpectedMediaRowsInWixMsp" Number="257" SourceLineNumbers="no">
2107 <Instance>
2108 The WixMsp has no media rows defined.
2109 </Instance>
2110 </Message>
2111 <Message Id="WixFileNotFound" Number="258" SourceLineNumbers="no">
2112 <Instance>
2113 The file '{0}' cannot be found.
2114 <Parameter Type="System.String" Name="file" />
2115 </Instance>
2116 </Message>
2117 <Message Id="ExpectedClientPatchIdInWixMsp" Number="259" SourceLineNumbers="no">
2118 <Instance>
2119 The WixMsp is missing the client patch ID. Recompile the patch source files with the latest WiX toolset.
2120 </Instance>
2121 </Message>
2122 <Message Id="NewRowAddedInTable" Number="260">
2123 <Instance>
2124 Product '{0}': Table '{1}' has a new row '{2}' added. This makes the patch not uninstallable.
2125 <Parameter Type="System.String" Name="productCode" />
2126 <Parameter Type="System.String" Name="tableName" />
2127 <Parameter Type="System.String" Name="rowId" />
2128 </Instance>
2129 </Message>
2130 <Message Id="PatchNotRemovable" Number="261" SourceLineNumbers="no">
2131 <Instance>
2132 This patch is not uninstallable. The 'Patch' element's attribute 'AllowRemoval' should be set to 'no'.
2133 </Instance>
2134 </Message>
2135 <Message Id="FileTooLarge" Number="263">
2136 <Instance>
2137 '{0}' is too large, file size must be less than 2147483648.
2138 <Parameter Type="System.String" Name="fileName" />
2139 </Instance>
2140 </Message>
2141 <Message Id="InvalidPlatformParameter" Number="264" SourceLineNumbers="no">
2142 <Instance>
2143 The parameter '{0}' is missing or has an invalid value {1}. Possible values are x86, x64, or ia64.
2144 <Parameter Type="System.String" Name="name" />
2145 <Parameter Type="System.String" Name="value" />
2146 </Instance>
2147 </Message>
2148 <Message Id="InvalidPlatformValue" Number="265">
2149 <Instance>
2150 The Platform attribute has an invalid value {0}. Possible values are x86, x64, or ia64.
2151 <Parameter Type="System.String" Name="value" />
2152 </Instance>
2153 </Message>
2154 <Message Id="IllegalValidationArguments" Number="266" SourceLineNumbers="no">
2155 <Instance>
2156 You may only specify a single default type using -t or specify custom validation using -serr and -val.
2157 </Instance>
2158 </Message>
2159 <Message Id="OrphanedComponent" Number="267">
2160 <Instance>
2161 Found orphaned Component '{0}'. If this is a Product, every Component must have at least one parent Feature. To include a Component in a Module, you must include it directly as a Component element of the Module element or indirectly via ComponentRef, ComponentGroup, or ComponentGroupRef elements.
2162 <Parameter Type="System.String" Name="componentName" />
2163 </Instance>
2164 </Message>
2165 <Message Id="IllegalCommandlineArgumentCombination" Number="268" SourceLineNumbers="no">
2166 <Instance>
2167 '-{0}' cannot be specfied in combination with '-{1}'.
2168 <Parameter Type="System.String" Name="arg1" />
2169 <Parameter Type="System.String" Name="arg2" />
2170 </Instance>
2171 </Message>
2172 <Message Id="ProductCodeInvalidForTransform" Number="269">
2173 <Instance>
2174 The value '*' is not valid for the ProductCode when used in a transform or in a patch. Copy the ProductCode from your target product MSI into the Product/@Id attribute value for your product authoring.
2175 </Instance>
2176 </Message>
2177 <Message Id="InsertInvalidSequenceActionOrder" Number="270">
2178 <Instance>
2179 Invalid order of actions {1} and {2} in sequence table {0}. Action {3} must occur after {1} and before {2}, but {2} is currently sequenced after {1}. Please fix the ordering or explicitly supply a location for the action {3}.
2180 <Parameter Type="System.String" Name="sequenceTableName" />
2181 <Parameter Type="System.String" Name="actionNameBefore" />
2182 <Parameter Type="System.String" Name="actionNameAfter" />
2183 <Parameter Type="System.String" Name="actionNameNew" />
2184 </Instance>
2185 </Message>
2186 <Message Id="InsertSequenceNoSpace" Number="271">
2187 <Instance>
2188 Not enough space exists to sequence action {3} in table {0}. It must be sequenced after {1} and before {2}, but those two actions are currently sequenced next to each other. Please move one of those actions to allow {3} to be inserted between them.
2189 <Parameter Type="System.String" Name="sequenceTableName" />
2190 <Parameter Type="System.String" Name="actionNameBefore" />
2191 <Parameter Type="System.String" Name="actionNameAfter" />
2192 <Parameter Type="System.String" Name="actionNameNew" />
2193 </Instance>
2194 </Message>
2195 <Message Id="MissingManifestForWin32Assembly" Number="272">
2196 <Instance>
2197 File '{0}' is marked as a Win32 assembly but it refers to assembly manifest '{1}' that is not present in this product.
2198 <Parameter Type="System.String" Name="file" />
2199 <Parameter Type="System.String" Name="manifest" />
2200 </Instance>
2201 </Message>
2202 <Message Id="UnableToOpenModule" Number="273">
2203 <Instance>
2204 Unable to open merge module '{0}'. Check to make sure the module language is correct. '{1}'
2205 <Parameter Type="System.String" Name="modulePath" />
2206 <Parameter Type="System.String" Name="message" />
2207 </Instance>
2208 </Message>
2209 <Message Id="ExpectedAttributeWhenElementNotUnderElement" Number="274">
2210 <Instance>
2211 The '{0}/@{1}' attribute was not found; it is required when element '{0}' is not nested under a '{2}' element.
2212 <Parameter Type="System.String" Name="elementName" />
2213 <Parameter Type="System.String" Name="attributeName" />
2214 <Parameter Type="System.String" Name="parentElementName" />
2215 </Instance>
2216 </Message>
2217 <Message Id="IllegalIdentifierLooksLikeFormatted" Number="275">
2218 <Instance>
2219 The {0}/@{1} attribute's value, '{2}', is not a legal identifier. The {0}/@{1} attribute does not support formatted string values, such as property names enclosed in brackets ([LIKETHIS]). The value must be the identifier of another element, such as the Directory/@Id attribute value.
2220 <Parameter Type="System.String" Name="elementName" />
2221 <Parameter Type="System.String" Name="attributeName" />
2222 <Parameter Type="System.String" Name="value" />
2223 </Instance>
2224 </Message>
2225 <Message Id="IllegalCodepageAttribute" Number="276">
2226 <Instance>
2227 The code page '{0}' is not a valid Windows code page. Please check the {1}/@{2} attribute value in your source file.
2228 <Parameter Type="System.String" Name="codepage" />
2229 <Parameter Type="System.String" Name="elementName" />
2230 <Parameter Type="System.String" Name="attributeName" />
2231 </Instance>
2232 </Message>
2233 <Message Id="IllegalCompressionLevel" Number="277" SourceLineNumbers="no">
2234 <Instance>
2235 The compression level '{0}' is not valid. Valid values are 'none', 'low', 'medium', 'high', and 'mszip'.
2236 <Parameter Type="System.String" Name="compressionLevel" />
2237 </Instance>
2238 </Message>
2239 <Message Id="TransformSchemaMismatch" Number="278" SourceLineNumbers="no">
2240 <Instance>The transform schema does not match the database schema. The transform may have been generated from a different database.</Instance>
2241 </Message>
2242 <Message Id="DatabaseSchemaMismatch" Number="279">
2243 <Instance>
2244 The table definition of '{0}' in the target database does not match the table definition in the updated database. A transform requires that the target database schema match the updated database schema.
2245 <Parameter Type="System.String" Name="tableName" />
2246 </Instance>
2247 </Message>
2248 <Message Id="ExpectedDirectoryGotFile" Number="280" SourceLineNumbers="no">
2249 <Instance>
2250 The {0} option requires a directory, but the provided path is a file: {1}
2251 <Parameter Type="System.String" Name="option" />
2252 <Parameter Type="System.String" Name="path" />
2253 </Instance>
2254 </Message>
2255 <Message Id="ExpectedFileGotDirectory" Number="281" SourceLineNumbers="no">
2256 <Instance>
2257 The {0} option requires a file, but the provided path is a directory: {1}
2258 <Parameter Type="System.String" Name="option" />
2259 <Parameter Type="System.String" Name="path" />
2260 </Instance>
2261 </Message>
2262 <Message Id="GacAssemblyNoStrongName" Number="282">
2263 <Instance>
2264 Assembly {0} in component {1} has no strong name and has been marked to be placed in the GAC. All assemblies installed to the GAC must have a valid strong name.
2265 <Parameter Type="System.String" Name="assemblyName" />
2266 <Parameter Type="System.String" Name="componentName" />
2267 </Instance>
2268 </Message>
2269 <Message Id="FileWriteError" Number="283" SourceLineNumbers="no">
2270 <Instance>
2271 Error writing to the path: '{0}'. Error message: '{1}'
2272 <Parameter Type="System.String" Name="path" />
2273 <Parameter Type="System.String" Name="error" />
2274 </Instance>
2275 </Message>
2276 <Message Id="InvalidCommandLineFileName" Number="284" SourceLineNumbers="no">
2277 <Instance>
2278 Invalid file name specified on the command line: '{0}'. Error message: '{1}'
2279 <Parameter Type="System.String" Name="fileName" />
2280 <Parameter Type="System.String" Name="error" />
2281 </Instance>
2282 </Message>
2283 <Message Id="ExpectedParentWithAttribute" Number="285">
2284 <Instance>
2285 When the {0}/@{1} attribute is specified, the {0} element must be nested under a {2} element.
2286 <Parameter Type="System.String" Name="parentElement" />
2287 <Parameter Type="System.String" Name="attribute" />
2288 <Parameter Type="System.String" Name="grandparentElement" />
2289 </Instance>
2290 </Message>
2291 <Message Id="IllegalWarningIdAsError" Number="286" SourceLineNumbers="no">
2292 <Instance>
2293 Illegal value '{0}' for the -wx&lt;N&gt; command line option. Specify a particular warning number, like '-wx6' to display the warning with ID 6 as an error, or '-wx' alone to suppress all warnings.
2294 <Parameter Type="System.String" Name="warningId" />
2295 </Instance>
2296 </Message>
2297 <Message Id="ExpectedAttributeOrElement" Number="287">
2298 <Instance>
2299 Element '{0}' missing attribute '{1}' or child element '{2}'. Exactly one of those is required.
2300 <Parameter Type="System.String" Name="parentElement" />
2301 <Parameter Type="System.String" Name="attribute" />
2302 <Parameter Type="System.String" Name="childElement" />
2303 </Instance>
2304 </Message>
2305 <Message Id="DuplicateVariableDefinition" Number="288" SourceLineNumbers="no">
2306 <Instance>
2307 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
2308 <Parameter Type="System.String" Name="variableName" />
2309 <Parameter Type="System.String" Name="variableValue" />
2310 <Parameter Type="System.String" Name="variableCollidingValue" />
2311 </Instance>
2312 </Message>
2313 <Message Id="InvalidVariableDefinition" Number="289" SourceLineNumbers="no">
2314 <Instance>
2315 The variable definition '{0}' is not valid. Variable definitions should be in the form -dname=value where the value is optional.
2316 <Parameter Type="System.String" Name="variableDefinition" />
2317 </Instance>
2318 </Message>
2319 <Message Id="DuplicateCabinetName" Number="290">
2320 <Instance>
2321 Duplicate cabinet name '{0}' found.
2322 <Parameter Type="System.String" Name="cabinetName" />
2323 </Instance>
2324 </Message>
2325 <Message Id="DuplicateCabinetName2" Number="291">
2326 <Instance>
2327 Duplicate cabinet name '{0}' error related to previous error.
2328 <Parameter Type="System.String" Name="cabinetName" />
2329 </Instance>
2330 </Message>
2331 <Message Id="InvalidAddedFileRowWithoutSequence" Number="292">
2332 <Instance>
2333 A row has been added to the File table with id '{1}' that does not have a sequence number assigned to it. Create your transform from a pair of msi's instead of xml outputs to get sequences assigned to your File table's rows.
2334 <Parameter Type="System.String" Name="fileRowId" />
2335 </Instance>
2336 </Message>
2337 <Message Id="DuplicateFileId" Number="293" SourceLineNumbers="no">
2338 <Instance>
2339 Multiple files with ID '{0}' exist. Windows Installer does not support file IDs that differ only by case. Change the file IDs to be unique.
2340 <Parameter Type="System.String" Name="fileId" />
2341 </Instance>
2342 </Message>
2343 <Message Id="FullTempDirectory" Number="294" SourceLineNumbers="no">
2344 <Instance>
2345 Unable to create temporary file. A common cause is that too many files that have names beginning with '{0}' are present. Delete any unneeded files in the '{1}' directory and try again.
2346 <Parameter Type="System.String" Name="prefix" />
2347 <Parameter Type="System.String" Name="directory" />
2348 </Instance>
2349 </Message>
2350 <Message Id="CreateCabAddFileFailed" Number="296" SourceLineNumbers="no">
2351 <Instance>
2352 An error (E_FAIL) was returned while adding files to a CAB file. This most commonly happens when creating a CAB file 2 GB or larger. Either reduce the size of your installation package, raise Media/@CompressionLevel to a higher compression level, or split your installation package's files into more than one CAB file.
2353 </Instance>
2354 </Message>
2355 <Message Id="CreateCabInsufficientDiskSpace" Number="297" SourceLineNumbers="no">
2356 <Instance>
2357 An error (ERROR_DISK_FULL) was returned while creating a CAB file. This means you have insufficient disk space - please clear more disk space and try this operation again.
2358 </Instance>
2359 </Message>
2360 <Message Id="UnresolvedBindReference" Number="298" SourceLineNumbers="yes">
2361 <Instance>
2362 Unresolved bind-time variable {0}.
2363 <Parameter Type="System.String" Name="BindRef" />
2364 </Instance>
2365 </Message>
2366 <Message Id="GACAssemblyIdentityWarning" Number="299" SourceLineNumbers="yes">
2367 <Instance>
2368 The destination name of file '{0}' does not match its assembly name '{1}' in your authoring. This will cause an installation failure for this assembly, because it will be installed to the Global Assembly Cache. To fix this error, update File/@Name of file '{0}' to be the actual name of the assembly.
2369 <Parameter Type="System.String" Name="fileName" />
2370 <Parameter Type="System.String" Name="assemblyName" />
2371 </Instance>
2372 </Message>
2373 <Message Id="IllegalCharactersInPath" Number="300" SourceLineNumbers="no">
2374 <Instance>
2375 Illegal characters in path '{0}'. Ensure you provided a valid path to the file.
2376 <Parameter Type="System.String" Name="pathName" />
2377 </Instance>
2378 </Message>
2379 <Message Id="ValidationFailedToOpenDatabase" Number="301" SourceLineNumbers="no">
2380 <Instance>
2381 Failed to open the database. During validation, this most commonly happens when attempting to open a database using an unsupported code page or a file that is not a valid Windows Installer database. Please use a different code page in Module/@Codepage, Package/@SummaryCodepage, Product/@Codepage, or WixLocalization/@Codepage; or make sure you provide the path to a valid Windows Installer database.
2382 </Instance>
2383 </Message>
2384 <Message Id="MustSpecifyOutputWithMoreThanOneInput" Number="302" SourceLineNumbers="no">
2385 <Instance>
2386 You must specify an output file using the "-o" or "-out" switch when you provide more than one input file.
2387 </Instance>
2388 </Message>
2389 <Message Id="IllegalSearchIdForParentDepth" Number="303">
2390 <Instance>
2391 When the parent DirectorySearch/@Depth attribute is greater than 1 for the DirectorySearch '{1}', the FileSearch/@Id attribute must be absent for FileSearch '{0}' unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'. Remove the FileSearch/@Id attribute for '{0}' to resolve this issue.
2392 <Parameter Type="System.String" Name="id" />
2393 <Parameter Type="System.String" Name="parentId" />
2394 </Instance>
2395 </Message>
2396 <Message Id="IdentifierTooLongError" Number="304">
2397 <Instance>
2398 The {0}/@{1} attribute's value, '{2}', is too long. {0}/@{1} attribute's must be {3} characters long or less.
2399 <Parameter Type="System.String" Name="elementName" />
2400 <Parameter Type="System.String" Name="attributeName" />
2401 <Parameter Type="System.String" Name="value" />
2402 <Parameter Type="System.Int32" Name="maxLength" />
2403 </Instance>
2404 </Message>
2405 <Message Id="InvalidRemoveComponent" Number="305">
2406 <Instance>
2407 Removing component '{0}' from feature '{1}' is not supported. Either the component was removed or the guid changed in the transform '{2}'. Add the component back, undo the change to the component guid, or remove the entire feature.
2408 <Parameter Type="System.String" Name="component" />
2409 <Parameter Type="System.String" Name="feature" />
2410 <Parameter Type="System.String" Name="transformPath" />
2411 </Instance>
2412 </Message>
2413 <Message Id="FinishCabFailed" Number="306" SourceLineNumbers="no">
2414 <Instance>
2415 An error (E_FAIL) was returned while finalizing a CAB file. This most commonly happens when creating a CAB file with more than 65535 files in it. Either reduce the number of files in your installation package or split your installation package's files into more than one CAB file using the Media element.
2416 </Instance>
2417 </Message>
2418 <Message Id="InvalidExtensionType" Number="307" SourceLineNumbers="no">
2419 <Instance>
2420 Either '{1}' was not defined in the assembly or the type defined in extension '{0}' could not be loaded.
2421 <Parameter Type="System.String" Name="extension" />
2422 <Parameter Type="System.String" Name="attributeType" />
2423 </Instance>
2424 <Instance>
2425 The extension type '{1}' in extension '{0}' does not inherit from the expected class '{2}'.
2426 <Parameter Type="System.String" Name="extension" />
2427 <Parameter Type="System.String" Name="className" />
2428 <Parameter Type="System.String" Name="expectedType" />
2429 </Instance>
2430 <Instance>
2431 The type '{1}' in extension '{0}' could not be loaded. Exception type '{2}' returned the following message: {3}
2432 <Parameter Type="System.String" Name="extension" />
2433 <Parameter Type="System.String" Name="className" />
2434 <Parameter Type="System.String" Name="exceptionType" />
2435 <Parameter Type="System.String" Name="exceptionMessage"/>
2436 </Instance>
2437 </Message>
2438 <Message Id="ValidationFailedDueToMultilanguageMergeModule" Number="309" SourceLineNumbers="no">
2439 <Instance>
2440 Failed to open merge module for validation. The most common cause of this error is specifying that the merge module supports multiple languages (using the Package/@Languages attribute) but not including language-specific embedded transforms. To fix this error, make the merge module language-neutral, make it language-specific, embed language transforms as specified in the MSI SDK at http://msdn.microsoft.com/library/aa367799.aspx, or disable validation.
2441 </Instance>
2442 </Message>
2443 <Message Id="ValidationFailedDueToInvalidPackage" Number="310" SourceLineNumbers="no">
2444 <Instance>
2445 Failed to open package for validation. The most common cause of this error is validating an x64 package on an x86 system. To fix this error, run validation on an x64 system or disable validation.
2446 </Instance>
2447 </Message>
2448 <Message Id="InvalidStringForCodepage" Number="311">
2449 <Instance>
2450 A string was provided with characters that are not available in the specified database code page '{0}'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.
2451 <Parameter Type="System.String" Name="codepage" />
2452 </Instance>
2453 </Message>
2454 <Message Id="InvalidEmbeddedUIFileName" Number="312">
2455 <Instance>
2456 The EmbeddedUI/@Name attribute value, '{0}', does not contain an extension. Windows Installer will not load an embedded UI DLL without an extension. Include an extension or just omit the Name attribute so it defaults to the file name portion of the Source attribute value.
2457 <Parameter Type="System.String" Name="codepage" />
2458 </Instance>
2459 </Message>
2460 <Message Id="UniqueFileSearchIdRequired" Number="313">
2461 <Instance>
2462 The DirectorySearch element '{0}' requires that the child {1} element has a unique Id when the DirectorySearch/@AssignToProperty attribute is set to 'yes'.
2463 <Parameter Type="System.String" Name="id" />
2464 <Parameter Type="System.String" Name="elementName" />
2465 </Instance>
2466 </Message>
2467 <Message Id="IllegalAttributeValueWhenNested" Number="314">
2468 <Instance>
2469 The {0}/@{1} attribute value, '{2}', cannot be specified when the {0} element is nested underneath a {3} element.
2470 <Parameter Type="System.String" Name="elementName" />
2471 <Parameter Type="System.String" Name="attributeName" />
2472 <Parameter Type="System.String" Name="attrivuteValue" />
2473 <Parameter Type="System.String" Name="parentElementName" />
2474 </Instance>
2475 </Message>
2476 <Message Id="AdminImageRequired" Number="315" SourceLineNumbers="no">
2477 <Instance>
2478 Source information is required for the product '{0}'. If you ran torch.exe with both target and updated .msi files, you must first perform an administrative installation of both .msi files then pass -a when running torch.exe.
2479 <Parameter Type="System.String" Name="productCode" />
2480 </Instance>
2481 </Message>
2482 <Message Id="SamePatchBaselineId" Number="316">
2483 <Instance>
2484 The PatchBaseline/@Id attribute value '{0}' is a child of multiple Media elements. This prevents transforms from being resolved to distinct media. Change the PatchBaseline/@Id attribute values to be unique.
2485 <Parameter Type="System.String" Name="id" />
2486 </Instance>
2487 </Message>
2488 <Message Id="SameFileIdDifferentSource" Number="317">
2489 <Instance>
2490 Two different source paths '{1}' and '{2}' were detected for the same file identifier '{0}'. You must either author these under Media elements with different Id attribute values or in different patches.
2491 <Parameter Type="System.String" Name="fileId" />
2492 <Parameter Type="System.String" Name="sourcePath1" />
2493 <Parameter Type="System.String" Name="sourcePath2" />
2494 </Instance>
2495 </Message>
2496 <Message Id="HarvestSourceNotSpecified" Number="318" SourceLineNumbers="no">
2497 <Instance>
2498 A harvest source must be specified after the harvest type and can be followed by harvester arguments.
2499 </Instance>
2500 </Message>
2501 <Message Id="OutputTargetNotSpecified" Number="319" SourceLineNumbers="no">
2502 <Instance>
2503 The '-out' or '-o' parameter must specify a file path.
2504 </Instance>
2505 </Message>
2506 <Message Id="DuplicateCommandLineOptionInExtension" Number="320" SourceLineNumbers="no">
2507 <Instance>
2508 The command line option '{0}' has already been loaded by another Heat extension.
2509 <Parameter Type="System.String" Name="switch" />
2510 </Instance>
2511 </Message>
2512 <Message Id="HarvestTypeNotFound" Number="321" SourceLineNumbers="no">
2513 <Instance>
2514 The harvest type was not found in the list of loaded Heat extensions.
2515 </Instance>
2516 <Instance>
2517 The harvest type '{0}' was specified. Harvest types cannot start with a '-'. Remove the '-' to specify a valid harvest type.
2518 <Parameter Type="System.String" Name="harvestType" />
2519 </Instance>
2520 </Message>
2521 <Message Id="BothUpgradeCodesRequired" Number="322" SourceLineNumbers="no">
2522 <Instance>
2523 Both the target and updated product authoring must define the Product/@UpgradeCode attribute if the transform validates the UpgradeCode (default). Either define the Product/@UpgradeCode attribute in both the target and updated authoring, or set the Validate/@UpgradeCode attribute to 'no' in the patch authoring.
2524 </Instance>
2525 </Message>
2526 <Message Id="IllegalBinderClassName" Number="323" SourceLineNumbers="no">
2527 <Instance>
2528 Illegal binder class name specified for -binder command line option.
2529 </Instance>
2530 </Message>
2531 <Message Id="SpecifiedBinderNotFound" Number="324" SourceLineNumbers="no">
2532 <Instance>
2533 The specified binder class '{0}' was not found in any extensions.
2534 <Parameter Type="System.String" Name="binderClass" />
2535 </Instance>
2536 </Message>
2537 <Message Id="CannotLoadBinderFileManager" Number="325" SourceLineNumbers="no">
2538 <Instance>
2539 Cannot load binder file manager: {0}. Light can only load one binder file manager and has already loaded binder file manager: {1}.
2540 <Parameter Type="System.String" Name="binderFileManager" />
2541 <Parameter Type="System.String" Name="currentBinderFileManager" />
2542 </Instance>
2543 </Message>
2544 <Message Id="CannotLoadLinkerExtension" Number="326" SourceLineNumbers="no">
2545 <Instance>
2546 Cannot load linker extension: {0}. Light can only load one link extension and has already loaded link extension: {1}.
2547 <Parameter Type="System.String" Name="linkerExtension" />
2548 <Parameter Type="System.String" Name="currentLinkerExtension" />
2549 </Instance>
2550 </Message>
2551 <Message Id="UnableToGetAuthenticodeCertOfFile" Number="327" SourceLineNumbers="no">
2552 <Instance>
2553 Unable to get the authenticode certificate of '{0}'. More information: {1}
2554 <Parameter Type="System.String" Name="filePath" />
2555 <Parameter Type="System.String" Name="moreInformation" />
2556 </Instance>
2557 </Message>
2558 <Message Id="UnableToGetAuthenticodeCertOfFileDownlevelOS" Number="328" SourceLineNumbers="no">
2559 <Instance>
2560 Unable to get the authenticode certificate of '{0}'. The cryptography API has limitations on Windows XP and Windows Server 2003. More information: {1}
2561 <Parameter Type="System.String" Name="filePath" />
2562 <Parameter Type="System.String" Name="moreInformation" />
2563 </Instance>
2564 </Message>
2565 <Message Id="ReadOnlyOutputFile" Number="329" SourceLineNumbers="no">
2566 <Instance>
2567 Unable to output to file '{0}' because it is marked as read-only.
2568 <Parameter Type="System.String" Name="filePath" />
2569 </Instance>
2570 </Message>
2571 <Message Id="CannotDefaultComponentId" Number="330">
2572 <Instance>
2573 The Component/@Id attribute was not found; it is required when there is no valid keypath to use as the default id value.
2574 </Instance>
2575 </Message>
2576 <Message Id="ParentElementAttributeRequired" Number="331">
2577 <Instance>
2578 The parent {0} element is missing the {1} attribute that is required for the {2} child element.
2579 <Parameter Type="System.String" Name="parentElement" />
2580 <Parameter Type="System.String" Name="parentAttribute" />
2581 <Parameter Type="System.String" Name="childElement" />
2582 </Instance>
2583 </Message>
2584 <Message Id="PreprocessorExtensionPragmaFailed" Number="333">
2585 <Instance>
2586 Exception thrown while processing pragma '{0}'. The exception's message is: {1}
2587 <Parameter Type="System.String" Name="pragma" />
2588 <Parameter Type="System.String" Name="message" />
2589 </Instance>
2590 </Message>
2591 <Message Id="InvalidPreprocessorPragma" Number="334">
2592 <Instance>
2593 Malformed preprocessor pragma '{0}'. Pragmas must have a prefix, a name of at least 1 character long, and be followed by optional arguments.
2594 <Parameter Type="System.String" Name="variable" />
2595 </Instance>
2596 </Message>
2597 <Message Id="SmokeUnknownFileExtension" Number="335" SourceLineNumbers="no">
2598 <Instance>
2599 Unknown input file format - expected a .msi or .msm file.
2600 </Instance>
2601 </Message>
2602 <Message Id="SmokeUnsupportedFileExtension" Number="336" SourceLineNumbers="no">
2603 <Instance>
2604 Files with an extension of .msp are not currently supported.
2605 </Instance>
2606 </Message>
2607 <Message Id="SmokeMalformedPath" Number="337" SourceLineNumbers="no">
2608 <Instance>
2609 Path contains one or more invalid characters.
2610 </Instance>
2611 </Message>
2612 <Message Id="InvalidStubExe" Number="338" SourceLineNumbers="no">
2613 <Instance>
2614 Stub executable '{0}' is not a valid Win32 executable.
2615 <Parameter Type="System.String" Name="filename" />
2616 </Instance>
2617 </Message>
2618 <Message Id="StubMissingWixburnSection" Number="339" SourceLineNumbers="no">
2619 <Instance>
2620 Stub executable '{0}' does not contain a .wixburn data section.
2621 <Parameter Type="System.String" Name="filename" />
2622 </Instance>
2623 </Message>
2624 <Message Id="StubWixburnSectionTooSmall" Number="340" SourceLineNumbers="no">
2625 <Instance>
2626 Stub executable '{0}' .wixburn data section is too small to store the Burn container header.
2627 <Parameter Type="System.String" Name="filename" />
2628 </Instance>
2629 </Message>
2630 <Message Id="MissingBundleInformation" Number="341" SourceLineNumbers="no">
2631 <Instance>
2632 The Bundle is missing '{0}' data, and cannot continue.
2633 <Parameter Type="System.String" Name="data" />
2634 </Instance>
2635 </Message>
2636 <Message Id="UnexpectedGroupChild" Number="342" SourceLineNumbers="no">
2637 <Instance>
2638 A group parent ('{0}'/'{1}') had an unexpected child ('{2}'/'{3}').
2639 <Parameter Type="System.String" Name="parentType" />
2640 <Parameter Type="System.String" Name="parentId" />
2641 <Parameter Type="System.String" Name="childType" />
2642 <Parameter Type="System.String" Name="childId" />
2643 </Instance>
2644 </Message>
2645 <Message Id="OrderingReferenceLoopDetected" Number="343">
2646 <Instance>
2647 A circular reference of ordering dependencies was detected. The infinite loop includes: {0}. Ordering dependency references must form a directed acyclic graph.
2648 <Parameter Type="System.String" Name="loopList" />
2649 </Instance>
2650 </Message>
2651 <Message Id="IdentifierNotFound" Number="344" SourceLineNumbers="no">
2652 <Instance>
2653 An expected identifier ('{1}', of type '{0}') was not found.
2654 <Parameter Type="System.String" Name="type" />
2655 <Parameter Type="System.String" Name="identifier" />
2656 </Instance>
2657 </Message>
2658 <Message Id="MergePlatformMismatch" Number="345">
2659 <Instance>
2660 '{0}' is a 64-bit merge module but the product consuming it is 32-bit. 32-bit products can consume only 32-bit merge modules.
2661 <Parameter Type="System.String" Name="mergeModuleFile" />
2662 </Instance>
2663 </Message>
2664 <Message Id="IllegalRelativeLongFilename" Number="346">
2665 <Instance>
2666 The {0}/@{1} attribute's value, '{2}', is not a valid relative long name because it contains illegal characters. Legal relative long names contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: ? | &gt; &lt; : / * ".
2667 <Parameter Type="System.String" Name="elementName" />
2668 <Parameter Type="System.String" Name="attributeName" />
2669 <Parameter Type="System.String" Name="value" />
2670 </Instance>
2671 </Message>
2672 <Message Id="IllegalAttributeValueWithLegalList" Number="347">
2673 <Instance>
2674 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: {3}.
2675 <Parameter Type="System.String" Name="elementName" />
2676 <Parameter Type="System.String" Name="attributeName" />
2677 <Parameter Type="System.String" Name="value" />
2678 <Parameter Type="System.String" Name="legalValueList" />
2679 </Instance>
2680 </Message>
2681 <Message Id="IllegalAttributeValueWithIllegalList" Number="348">
2682 <Instance>
2683 The {0}/@{1} attribute's value, '{2}', is one of the illegal options: {3}.
2684 <Parameter Type="System.String" Name="elementName" />
2685 <Parameter Type="System.String" Name="attributeName" />
2686 <Parameter Type="System.String" Name="value" />
2687 <Parameter Type="System.String" Name="illegalValueList" />
2688 </Instance>
2689 </Message>
2690
2691 <Message Id="InvalidSummaryInfoCodePage" Number="349">
2692 <Instance>
2693 The code page '{0}' is invalid for summary information. You must specify an ANSI code page.
2694 <Parameter Type="System.Int32" Name="codePage" />
2695 </Instance>
2696 </Message>
2697 <Message Id="ValidationFailedDueToLowMsiEngine" Number="350" SourceLineNumbers="no">
2698 <Instance>
2699 The package being validated requires a higher version of Windows Installer than is installed on this machine. Validation cannot continue.
2700 </Instance>
2701 </Message>
2702 <Message Id="DuplicateSourcesForOutput" Number="351" SourceLineNumbers="no">
2703 <Instance>
2704 Multiple source files ({0}) have resulted in the same output file '{1}'. This is likely because the source files only differ in extension or path. Rename the source files to avoid this problem.
2705 <Parameter Type="System.String" Name="sourceList" />
2706 <Parameter Type="System.String" Name="outputFile" />
2707 </Instance>
2708 </Message>
2709 <Message Id="UnableToReadPackageInformation" Number="352">
2710 <Instance>
2711 Unable to read package '{0}'. {1}
2712 <Parameter Type="System.String" Name="packagePath" />
2713 <Parameter Type="System.String" Name="detailedErrorMessage" />
2714 </Instance>
2715 </Message>
2716 <Message Id="MultipleFilesMatchedWithOutputSpecification" Number="353" SourceLineNumbers="no">
2717 <Instance>
2718 A per-source file output specification has been provided ('{0}'), but multiple source files match the source specification ({1}). Specifying a unique output requires that only a single source file match.
2719 <Parameter Type="System.String" Name="sourceSpecification" />
2720 <Parameter Type="System.String" Name="sourceList" />
2721 </Instance>
2722 </Message>
2723 <Message Id="InvalidBundle" Number="354" SourceLineNumbers="no">
2724 <Instance>
2725 Unable to read bundle executable '{0}'. This is not a valid WiX bundle.
2726 <Parameter Type="System.String" Name="bundleExecutable" />
2727 </Instance>
2728 </Message>
2729 <Message Id="BundleTooNew" Number="355" SourceLineNumbers="no">
2730 <Instance>
2731 Unable to read bundle executable '{0}', because this bundle was created with a newer version of WiX (bundle version '{1}'). You must use a newer version of WiX in order to read this bundle.
2732 <Parameter Type="System.String" Name="bundleExecutable" />
2733 <!-- we use a 64-bit field here because the field is really a 32-bit UInt,
2734 but UInt gives a non-CLS-compliant warning.
2735 So 64-bit makes sure we don't drop the last bit -->
2736 <Parameter Type="System.Int64" Name="bundleVersion" />
2737 </Instance>
2738 </Message>
2739 <Message Id="WrongFileExtensionForNumberOfInputs" Number="356" SourceLineNumbers="no">
2740 <Instance>
2741 The extension '{0}' on the input specified '{1}' does not match the number of inputs required to handle an input with this extension. Check if you are missing an input or have too many.
2742 <Parameter Type="System.String" Name="inputExtension" />
2743 <Parameter Type="System.String" Name="input" />
2744 </Instance>
2745 </Message>
2746 <Message Id="MediaTableCollision" Number="357">
2747 <Instance>
2748 Only one of Media and MediaTemplate tables should be authored.
2749 </Instance>
2750 </Message>
2751 <Message Id="InvalidCabinetTemplate" Number="358">
2752 <Instance>
2753 CabinetTemplate attribute's value '{0}' must contain '{{0}}' and should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the follow may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).
2754 <Parameter Type="System.String" Name="cabinetTemplate" />
2755 </Instance>
2756 </Message>
2757 <Message Id="MaximumUncompressedMediaSizeTooLarge" Number="359">
2758 <Instance>
2759 '{0}' is too large. Reduce the size of maximum uncompressed media size.
2760 <Parameter Type="System.Int32" Name="maximumUncompressedMediaSize" />
2761 </Instance>
2762 </Message>
2763 <Message Id="CatalogVerificationFailed" Number="360" SourceLineNumbers="no">
2764 <Instance>
2765 File '{0}' could not be verified with a catalog file.
2766 <Parameter Type="System.String" Name="fileName" />
2767 </Instance>
2768 </Message>
2769 <Message Id="CatalogFileHashFailed" Number="361" SourceLineNumbers="no">
2770 <Instance>
2771 Could not get hash of file '{0}'. Error: {2}.
2772 <Parameter Type="System.String" Name="fileName" />
2773 <Parameter Type="System.Int32" Name="errorCode" />
2774 </Instance>
2775 </Message>
2776 <Message Id="ReservedNamespaceViolation" Number="362">
2777 <Instance>
2778 The {0}/@{1} attribute's value begins with the reserved prefix '{2}'. Some prefixes are reserved by the Windows Installer and WiX toolset for well-known values. Change your attribute's value to not begin with the same prefix.
2779 <Parameter Type="System.String" Name="element" />
2780 <Parameter Type="System.String" Name="attribute" />
2781 <Parameter Type="System.String" Name="prefix" />
2782 </Instance>
2783 </Message>
2784 <Message Id="PerUserButAllUsersEquals1" Number="363">
2785 <Instance>
2786 The MSI '{0}' is explicitly marked to not elevate so it must be a per-user package but the ALLUSERS Property is set to '1' creating a per-machine package. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute to be explicit instead.
2787 <Parameter Type="System.String" Name="path" />
2788 </Instance>
2789 </Message>
2790 <Message Id="UnsupportedAllUsersValue" Number="364">
2791 <Instance>
2792 The MSI '{0}' set the ALLUSERS Property to '{0}' which is not supported. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.
2793 <Parameter Type="System.String" Name="path" />
2794 <Parameter Type="System.String" Name="value" />
2795 </Instance>
2796 </Message>
2797 <Message Id="DisallowedMsiProperty" Number="365">
2798 <Instance>
2799 The '{0}' MsiProperty is controlled by the bootstrapper and cannot be authored. (Illegal properties are: {1}.) Remove the MsiProperty element.
2800 <Parameter Type="System.String" Name="property" />
2801 <Parameter Type="System.String" Name="illegalValueList" />
2802 </Instance>
2803 </Message>
2804 <Message Id="MissingOrInvalidModuleInstallerVersion" Number="366">
2805 <Instance>
2806 The merge module '{0}' from file '{1}' is either missing or has an invalid installer version. The value read from the installer version in module's summary information was '{2}'. This should be a numeric value representing a valid installer version such as 200 or 301.
2807 <Parameter Type="System.String" Name="moduleId" />
2808 <Parameter Type="System.String" Name="mergeModuleFile" />
2809 <Parameter Type="System.String" Name="productInstallerVersion" />
2810 </Instance>
2811 </Message>
2812 <Message Id="IllegalGeneratedGuidComponentUnversionedKeypath" Number="367">
2813 <Instance>
2814 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component's keypath is not versioned. Create multiple components to use automatically generated guids.
2815 </Instance>
2816 </Message>
2817 <Message Id="IllegalGeneratedGuidComponentVersionedNonkeypath" Number="368">
2818 <Instance>
2819 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component has a non-keypath file that is versioned. Create multiple components to use automatically generated guids.
2820 </Instance>
2821 </Message>
2822 <Message Id="DuplicateComponentGuids" Number="369">
2823 <Instance>
2824 Component/@Id='{0}' has a @Guid value '{1}' that duplicates another component in this package. It is recommended to give each component its own unique GUID.
2825 <Parameter Type="System.String" Name="componentId" />
2826 <Parameter Type="System.String" Name="guid" />
2827 </Instance>
2828 </Message>
2829 <Message Id="DuplicateProviderDependencyKey" Number="370" SourceLineNumbers="no">
2830 <Instance>
2831 The provider dependency key '{0}' was already imported from the package with Id '{1}'. Please remove the Provides element with the key '{0}' from the package authoring.
2832 <Parameter Type="System.String" Name="providerKey" />
2833 <Parameter Type="System.String" Name="packageId" />
2834 </Instance>
2835 </Message>
2836 <Message Id="MissingDependencyVersion" Number="371" SourceLineNumbers="no">
2837 <Instance>
2838 The provider dependency version was not authored for the package with Id '{0}'. Please author the Provides/@Version attribute for this package.
2839 <Parameter Type="System.String" Name="packageId" />
2840 </Instance>
2841 </Message>
2842
2843 <Message Id="UnexpectedElementWithAttribute" Number="372">
2844 <Instance>
2845 The {0} element cannot have a child element '{1}' when attribute '{2}' is set.
2846 <Parameter Type="System.String" Name="elementName" />
2847 <Parameter Type="System.String" Name="childElementName" />
2848 <Parameter Type="System.String" Name="attribute" />
2849 </Instance>
2850 </Message>
2851 <Message Id="ExpectedAttributeWithElement" Number="373">
2852 <Instance>
2853 The {0} element must have attribute '{1}' when child element '{2}' is present.
2854 <Parameter Type="System.String" Name="elementName" />
2855 <Parameter Type="System.String" Name="attribute" />
2856 <Parameter Type="System.String" Name="childElementName" />
2857 </Instance>
2858 </Message>
2859 <Message Id="DuplicatedUiLocalization" Number="374">
2860 <Instance>
2861 The localization for control {0} in dialog {1} is duplicated. Only one localization per control is allowed.
2862 <Parameter Type="System.String" Name="controlName" />
2863 <Parameter Type="System.String" Name="dialogName" />
2864 </Instance>
2865 <Instance>
2866 The localization for dialog {0} is duplicated. Only one localization per dialog is allowed.
2867 <Parameter Type="System.String" Name="dialogName" />
2868 </Instance>
2869 </Message>
2870 <Message Id="MaximumCabinetSizeForLargeFileSplittingTooLarge" Number="375">
2871 <Instance>
2872 '{0}' is too large. Reduce the size of maximum cabinet size for large file splitting. The maximum permitted value is '{1}' MB.
2873 <Parameter Type="System.Int32" Name="maximumCabinetSizeForLargeFileSplitting" />
2874 <Parameter Type="System.Int32" Name="maxValueOfMaxCabSizeForLargeFileSplitting" />
2875 </Instance>
2876 </Message>
2877 <Message Id="SplitCabinetCopyRegistrationFailed" Number="376" SourceLineNumbers="no">
2878 <Instance>
2879 Failed to register the copy command for cabinet '{0}' formed by splitting cabinet '{1}'.
2880 <Parameter Type="System.String" Name="newCabName" />
2881 <Parameter Type="System.String" Name="firstCabName" />
2882 </Instance>
2883 </Message>
2884 <Message Id="SplitCabinetNameCollision" Number="377" SourceLineNumbers="no">
2885 <Instance>
2886 The cabinet name '{0}' collides with the new cabinet formed by splitting cabinet '{1}', consider renaming cabinet '{0}'.
2887 <Parameter Type="System.String" Name="newCabName" />
2888 <Parameter Type="System.String" Name="firstCabName" />
2889 </Instance>
2890 </Message>
2891 <Message Id="SplitCabinetInsertionFailed" Number="378" SourceLineNumbers="no">
2892 <Instance>
2893 Could not find the last split cabinet '{2}' in the Media Table. So failed to add new cabinet '{0}' formed by splitting cabinet '{1}' to the installer package.
2894 <Parameter Type="System.String" Name="newCabName" />
2895 <Parameter Type="System.String" Name="firstCabName" />
2896 <Parameter Type="System.String" Name="lastCabinetOfThisSequence" />
2897 </Instance>
2898 </Message>
2899 <Message Id="InvalidPreprocessorFunctionAutoVersion" Number="379">
2900 <Instance>
2901 Invalid AutoVersion template specified.
2902 </Instance>
2903 </Message>
2904 <Message Id="InvalidModuleOrBundleVersion" Number="380">
2905 <Instance>
2906 Invalid {0}/@Version '{1}'. {0} version has a max value of "65535.65535.65535.65535" and must be all numeric.
2907 <Parameter Type="System.String" Name="moduleOrBundle" />
2908 <Parameter Type="System.String" Name="version" />
2909 </Instance>
2910 </Message>
2911 <Message Id="UnsupportedPlatformForElement" Number="381">
2912 <Instance>
2913 The element {1} does not support platform '{0}'. Consider removing the element or using the preprocessor to conditionally include the element based on the platform.
2914 <Parameter Type="System.String" Name="platform" />
2915 <Parameter Type="System.String" Name="elementName" />
2916 </Instance>
2917 </Message>
2918 <Message Id="MissingMedia" Number="382">
2919 <Instance>
2920 There is no media defined for disk id '{0}'. You must author either &lt;Media Id='{0}' ...&gt; or &lt;MediaTemplate ...&gt;.
2921 <Parameter Type="System.Int32" Name="diskId" />
2922 </Instance>
2923 </Message>
2924 <Message Id="RemotePayloadUnsupported" Number="383">
2925 <Instance>
2926 The RemotePayload element can only be used for ExePackage and MsuPackage payloads.
2927 </Instance>
2928 </Message>
2929 <Message Id="IllegalYesNoAlwaysValue" Number="384">
2930 <Instance>
2931 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/always value. The only legal values are 'always', 'no' or 'yes'.
2932 <Parameter Type="System.String" Name="elementName" />
2933 <Parameter Type="System.String" Name="attributeName" />
2934 <Parameter Type="System.String" Name="value" />
2935 </Instance>
2936 </Message>
2937 <Message Id="TooDeeplyIncluded" Number="385">
2938 <Instance>
2939 Include files cannot be nested more deeply than {0} times. Make sure included files don't accidentally include themselves.
2940 <Parameter Type="System.Int32" Name="depth" />
2941 </Instance>
2942 </Message>
2943 <Message Id="InlineDirectorySyntaxRequiresPath" Number="387">
2944 <Instance>
2945 The {0}/@{1} attribute's value '{2}' only specifies a directory reference. The inline directory syntax requires that at least one directory be specified in addition to the value. For example, use '{3}:\foo\' to add a 'foo' directory.
2946 <Parameter Type="System.String" Name="elementName" />
2947 <Parameter Type="System.String" Name="attributeName" />
2948 <Parameter Type="System.String" Name="value" />
2949 <Parameter Type="System.String" Name="identifier" />
2950 </Instance>
2951 </Message>
2952 <Message Id="InsecureBundleFilename" Number="388" SourceLineNumbers="no">
2953 <Instance>
2954 The file name '{0}' creates an insecure bundle. Windows will load unnecessary compatibility shims into a bundle with that file name. These compatibility shims can be DLL hijacked allowing attackers to compromise your customers' computer. Choose a different bundle file name.
2955 <Parameter Type="System.String" Name="filename" />
2956 </Instance>
2957 </Message>
2958 <Message Id="PayloadMustBeRelativeToCache" Number="389">
2959 <Instance>
2960 The {0}/@{1} attribute's value, '{2}', is not a legal path name: Payload names must be relative to their cache directory and cannot contain '..'.
2961 <Parameter Type="System.String" Name="elementName" />
2962 <Parameter Type="System.String" Name="attributeName" />
2963 <Parameter Type="System.String" Name="attributeValue" />
2964 </Instance>
2965 </Message>
2966 <Message Id="MsiTransactionX86BeforeX64" Number="390">
2967 <Instance>
2968 MSI transactions must install all x64 packages before any x86 package.
2969 </Instance>
2970 </Message>
2971 </Class>
2972
2973 <Class Name="WixWarnings" ContainerName="WixWarningEventArgs" BaseContainerName="MessageEventArgs" Level="Warning">
2974 <Message Id="IdentifierCannotBeModularized" Number="1000">
2975 <Instance>
2976 The {0}/@{1} attribute's value, '{2}', is {3} characters long. It will be too long if modularized. The identifier shouldn't be longer than {4} characters long to allow for modularization (appending a guid for merge modules).
2977 <Parameter Type="System.String" Name="elementName" />
2978 <Parameter Type="System.String" Name="attributeName" />
2979 <Parameter Type="System.String" Name="identifier" />
2980 <Parameter Type="System.Int32" Name="length" />
2981 <Parameter Type="System.Int32" Name="maximumLength" />
2982 </Instance>
2983 </Message>
2984 <Message Id="EmptyAttributeValue" Number="1001">
2985 <Instance>
2986 The {0}/@{1} attribute's value cannot be an empty string. If you want the value to be null or empty, simply remove the entire attribute.
2987 <Parameter Type="System.String" Name="elementName" />
2988 <Parameter Type="System.String" Name="attributeName" />
2989 </Instance>
2990 </Message>
2991 <Message Id="UnableToFindFileFromCabOrImage" Number="1002">
2992 <Instance>
2993 Unable to find existing file {0} to place in src location {1}. Will likely cause a linker break.
2994 <Parameter Type="System.String" Name="existingFileSpec" />
2995 <Parameter Type="System.String" Name="srcFileSpec" />
2996 </Instance>
2997 </Message>
2998 <Message Id="CopyFileFileIdUseless" Number="1003">
2999 <Instance>Since the CopyFile/@FileId attribute was specified but none of the following attributes (DestinationName, DestinationDirectory, DestinationProperty) were specified, this authoring will not do anything.</Instance>
3000 </Message>
3001 <Message Id="NestedInstall" Number="1004">
3002 <Instance>
3003 The {0}.{1} column's value, '{2}', indicates a nested install. Nested installations are not supported by the WiX team. This action will be left out of the decompiled output.
3004 <Parameter Type="System.String" Name="tableName" />
3005 <Parameter Type="System.String" Name="columnName" />
3006 <Parameter Type="System.Object" Name="value" />
3007 </Instance>
3008 </Message>
3009 <Message Id="OrphanedProgId" Number="1005">
3010 <Instance>
3011 ProgId '{0}' is orphaned. It has no associated component, so it will never install. Every ProgId should have either a parent Class element or child Extension element (at any distance).
3012 <Parameter Type="System.String" Name="progId" />
3013 </Instance>
3014 </Message>
3015 <Message Id="PropertyUseless" Number="1006">
3016 <Instance>
3017 Property '{0}' does not contain a Value attribute and is not marked as Admin, Secure, or Hidden. The Property element is being ignored.
3018 <Parameter Type="System.String" Name="id" />
3019 </Instance>
3020 </Message>
3021 <Message Id="RemoveFileNameRequired" Number="1007">
3022 <Instance>The RemoveFile/@Name attribute will soon become required. In order to match the old functionality of not specifying this attribute, please use the new RemoveFolder element instead.</Instance>
3023 </Message>
3024 <Message Id="SuppressAction" Number="1008">
3025 <Instance>
3026 The action '{0}' in the {1} table is being suppressed.
3027 <Parameter Type="System.String" Name="action" />
3028 <Parameter Type="System.String" Name="sequenceName" />
3029 </Instance>
3030 </Message>
3031 <Message Id="SuppressMergedAction" Number="1009" SourceLineNumbers="no">
3032 <Instance>
3033 The merged action '{0}' in the {1} table is being suppressed.
3034 <Parameter Type="System.String" Name="action" />
3035 <Parameter Type="System.String" Name="sequenceName" />
3036 </Instance>
3037 </Message>
3038 <Message Id="TargetDirCorrectedDefaultDir" Number="1010" SourceLineNumbers="no">
3039 <Instance>
3040 The Directory with Id 'TARGETDIR' must have the value 'SourceDir' in its 'DefaultDir' column. This has been automatically corrected for you in the decompiled output.
3041 </Instance>
3042 </Message>
3043 <Message Id="AccessDeniedForDeletion" Number="1011">
3044 <Instance>
3045 Access denied; cannot delete '{0}'.
3046 <Parameter Type="System.String" Name="tempFilesBasePath" />
3047 </Instance>
3048 </Message>
3049 <Message Id="DirectoryInUse" Number="1012">
3050 <Instance>
3051 The directory '{0}' is in use and cannot be deleted.
3052 <Parameter Type="System.String" Name="filePath" />
3053 </Instance>
3054 </Message>
3055 <Message Id="AccessDeniedForSettingAttributes" Number="1013">
3056 <Instance>
3057 Access denied; cannot set attributes on '{0}'.
3058 <Parameter Type="System.String" Name="filePath" />
3059 </Instance>
3060 </Message>
3061 <Message Id="UnknownAction" Number="1024">
3062 <Instance>
3063 The {0} table contains an action '{1}' which is not a known custom action, dialog, or standard action. This action will be left out of the decompiled output.
3064 <Parameter Type="System.String" Name="sequenceTableName" />
3065 <Parameter Type="System.String" Name="actionName" />
3066 </Instance>
3067 </Message>
3068 <Message Id="IdentifierTooLong" Number="1026">
3069 <Instance>
3070 The {0}/@{1} attribute's value, '{2}', is too long for an identifier. Standard identifiers are 72 characters long or less.
3071 <Parameter Type="System.String" Name="elementName" />
3072 <Parameter Type="System.String" Name="attributeName" />
3073 <Parameter Type="System.String" Name="value" />
3074 </Instance>
3075 </Message>
3076 <Message Id="UnknownPermission" Number="1030">
3077 <Instance>
3078 The {0} table contains a row with primary key '{1}' which has an unknown permission at bit {2}.
3079 <Parameter Type="System.String" Name="tableName" />
3080 <Parameter Type="System.String" Name="primaryKey" />
3081 <Parameter Type="System.Int32" Name="bitPosition" />
3082 </Instance>
3083 </Message>
3084 <Message Id="DirectoryRedundantNames" Number="1031">
3085 <Instance>
3086 The {0} element's {1} and {2} values are both '{3}'. This is redundant; the {2} attribute should be removed.
3087 <Parameter Type="System.String" Name="elementName" />
3088 <Parameter Type="System.String" Name="shortNameAttributeName" />
3089 <Parameter Type="System.String" Name="longNameAttributeName" />
3090 <Parameter Type="System.String" Name="attributeValue" />
3091 </Instance>
3092 <Instance>
3093 The {0} element's source and destination names are identical. This is redundant; the {1} and {2} attributes should be removed if present.
3094 <Parameter Type="System.String" Name="elementName" />
3095 <Parameter Type="System.String" Name="sourceNameAttributeName" />
3096 <Parameter Type="System.String" Name="longSourceAttributeName" />
3097 </Instance>
3098 </Message>
3099 <Message Id="UnableToResetAcls" Number="1032" SourceLineNumbers="no">
3100 <Instance>Unable to reset acls on destination files.</Instance>
3101 </Message>
3102 <Message Id="MediaExternalCabinetFilenameIllegal" Number="1033">
3103 <Instance>
3104 The {0}/@{1} attribute's value, '{2}', is not a valid external cabinet name. Legal cabinet names should follow 8.3 format: they should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the following may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).
3105 <Parameter Type="System.String" Name="elementName" />
3106 <Parameter Type="System.String" Name="attributeName" />
3107 <Parameter Type="System.String" Name="value" />
3108 </Instance>
3109 </Message>
3110 <Message Id="DeprecatedPreProcVariable" Number="1034">
3111 <Instance>
3112 The built-in preprocessor variable '{0}' is deprecated. Please correct your authoring to use the new '{1}' preprocessor variable instead.
3113 <Parameter Type="System.String" Name="oldName" />
3114 <Parameter Type="System.String" Name="newName" />
3115 </Instance>
3116 </Message>
3117 <Message Id="FileSearchFileNameIssue" Number="1043">
3118 <Instance>
3119 The {0} element's {1} and {2} attributes were found. Due to a bug with the Windows Installer, only the Name or LongName attribute should be used. Use the Name attribute for 8.3 compliant file names and the LongName attribute for longer ones. When using only the LongName attribute, ICE03 should be ignored for the Signature table's FileName column.
3120 <Parameter Type="System.String" Name="elementName" />
3121 <Parameter Type="System.String" Name="attributeName1" />
3122 <Parameter Type="System.String" Name="attributeName2" />
3123 </Instance>
3124 </Message>
3125 <Message Id="AmbiguousFileOrDirectoryName" Number="1044">
3126 <Instance>
3127 The {0}/@{1} attribute's value '{2}' is an ambiguous short name because it ends with a '~' character followed by a number. Under some circumstances, this name could resolve to more than one file or directory name and lead to unpredictable results (for example 'MICROS~1' may correspond to 'Microsoft Shared' or 'Microsoft Foo' or literally 'Micros~1').
3128 <Parameter Type="System.String" Name="elementName" />
3129 <Parameter Type="System.String" Name="attributeName" />
3130 <Parameter Type="System.String" Name="value" />
3131 </Instance>
3132 </Message>
3133 <Message Id="PossiblyIncorrectTypelibVersion" Number="1048">
3134 <Instance>
3135 The Typelib table entry with Id '{0}' could have an incorrect version of '256.0'. InstallShield has a bug relating to the Typelib Version column: it will incorrectly set the value '65536' in to represent version '1.0'. However, this number actually corresponds to version '256.0'. This bug will not affect the typelib version that is registered during installation, however, it will prevent the Windows Installer from correctly identifying whether a typelib is already installed and lead to unnecessary reinstallations of the typelib.
3136 <Parameter Type="System.String" Name="id" />
3137 </Instance>
3138 </Message>
3139 <Message Id="ImplicitComponentPrimaryFeature" Number="1049" SourceLineNumbers="no">
3140 <Instance>
3141 The component '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the ComponentRef/@Primary, ComponentGroupRef/@Primary, or FeatureGroupRef/@Primary locations for this component.
3142 <Parameter Type="System.String" Name="componentId" />
3143 </Instance>
3144 </Message>
3145 <Message Id="ActionSequenceCollision" Number="1050">
3146 <Instance>
3147 The {0} table contains actions '{1}' and '{2}' which both have the same sequence number {3}. Please change the sequence number for one of these actions to avoid an ICE warning.
3148 <Parameter Type="System.String" Name="sequenceTableName" />
3149 <Parameter Type="System.String" Name="actionName1" />
3150 <Parameter Type="System.String" Name="actionName2" />
3151 <Parameter Type="System.Int32" Name="sequenceNumber" />
3152 </Instance>
3153 </Message>
3154 <Message Id="ActionSequenceCollision2" Number="1051">
3155 <Instance>The location of the action related to previous warning.</Instance>
3156 </Message>
3157 <Message Id="SuppressAction2" Number="1052">
3158 <Instance>The location of the suppressed action related to previous warning.</Instance>
3159 </Message>
3160 <Message Id="UnexpectedTableInProduct" Number="1053">
3161 <Instance>
3162 An unexpected row in the '{0}' table was found in this product. Products should not contain the '{0}' table.
3163 <Parameter Type="System.String" Name="tableName" />
3164 </Instance>
3165 </Message>
3166 <Message Id="DeprecatedAttribute" Number="1054">
3167 <Instance>
3168 The {0}/@{1} attribute has been deprecated.
3169 <Parameter Type="System.String" Name="elementName" />
3170 <Parameter Type="System.String" Name="attributeName" />
3171 </Instance>
3172 <Instance>
3173 The {0}/@{1} attribute has been deprecated. Please use the {2} attribute instead.
3174 <Parameter Type="System.String" Name="elementName" />
3175 <Parameter Type="System.String" Name="attributeName" />
3176 <Parameter Type="System.String" Name="newAttributeName" />
3177 </Instance>
3178 <Instance>
3179 The {0}/@{1} attribute has been deprecated. Please use the {2} or {3} attribute instead.
3180 <Parameter Type="System.String" Name="elementName" />
3181 <Parameter Type="System.String" Name="attributeName" />
3182 <Parameter Type="System.String" Name="newAttributeName1" />
3183 <Parameter Type="System.String" Name="newAttributeName2" />
3184 </Instance>
3185 </Message>
3186 <Message Id="MergeRescheduledAction" Number="1055">
3187 <Instance>
3188 The {0} table contains an action '{1}' which cannot be merged from the merge module '{2}'. This action is likely colliding with an action in the database that is being created. The colliding action may have been authored in the database or merged in from another merge module. If this is a standard action, it is likely colliding due to a difference in the condition for the action in the database and merge module. If this is a custom action, it should only be declared in the database or one merge module.
3189 <Parameter Type="System.String" Name="tableName" />
3190 <Parameter Type="System.String" Name="actionName" />
3191 <Parameter Type="System.String" Name="mergeModuleFile" />
3192 </Instance>
3193 </Message>
3194 <Message Id="MergeTableFailed" Number="1056">
3195 <Instance>
3196 The {0} table contains a row with primary key(s) '{1}' which cannot be merged from the merge module '{2}'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.
3197 <Parameter Type="System.String" Name="tableName" />
3198 <Parameter Type="System.String" Name="primaryKeys" />
3199 <Parameter Type="System.String" Name="mergeModuleFile" />
3200 </Instance>
3201 </Message>
3202 <Message Id="DecompiledStandardActionRelativelyScheduledInModule" Number="1057">
3203 <Instance>
3204 The {0} table contains a standard action '{1}' that does not have a sequence number specified. A value in the Sequence column is required for standard actions in a merge module. Remove the action from the decompiled authoring to have WiX automatically sequence it.
3205 <Parameter Type="System.String" Name="sequenceTableName" />
3206 <Parameter Type="System.String" Name="actionName" />
3207 </Instance>
3208 </Message>
3209 <Message Id="IllegalActionInSequence" Number="1058">
3210 <Instance>
3211 The {0} table contains an action '{1}' which is not allowed in this table. If this is a standard action then it is not valid for this table, if it is a custom action or dialog then this table does not accept actions of that type. This action will be left out of the decompiled output.
3212 <Parameter Type="System.String" Name="sequenceTableName" />
3213 <Parameter Type="System.String" Name="actionName" />
3214 </Instance>
3215 </Message>
3216 <Message Id="ExpectedForeignRow" Number="1059">
3217 <Instance>
3218 The {0} table contains a row with primary key(s) '{1}' whose {2} column contains a value, '{3}', which specifies a foreign key relationship with the {4} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.
3219 <Parameter Type="System.String" Name="tableName" />
3220 <Parameter Type="System.String" Name="primaryKey" />
3221 <Parameter Type="System.String" Name="columnName" />
3222 <Parameter Type="System.String" Name="columnValue" />
3223 <Parameter Type="System.String" Name="foreignTableName" />
3224 </Instance>
3225 <Instance>
3226 The {0} table contains a row with primary key(s) '{1}' whose {2} and {4} columns contain the values, '{3}' and '{5}', which specify a foreign key relationship with the {6} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.
3227 <Parameter Type="System.String" Name="tableName" />
3228 <Parameter Type="System.String" Name="primaryKey" />
3229 <Parameter Type="System.String" Name="columnName1" />
3230 <Parameter Type="System.String" Name="columnValue1" />
3231 <Parameter Type="System.String" Name="columnName2" />
3232 <Parameter Type="System.String" Name="columnValue2" />
3233 <Parameter Type="System.String" Name="foreignTableName" />
3234 </Instance>
3235 </Message>
3236 <Message Id="DecompilingAsCustomTable" Number="1060">
3237 <Instance>
3238 The {0} table is being decompiled as a custom table.
3239 <Parameter Type="System.String" Name="tableName" />
3240 </Instance>
3241 </Message>
3242 <Message Id="IllegalPatchCreationTable" Number="1061">
3243 <Instance>
3244 The {0} table is not legal in a patch creation file. The information in this table will be left out of the decompiled output.
3245 <Parameter Type="System.String" Name="tableName" />
3246 </Instance>
3247 </Message>
3248 <Message Id="SkippingMergeModuleTable" Number="1062">
3249 <Instance>
3250 The {0} table can only be represented in WiX for merge modules. The information in this table will be left out of the decompiled output.
3251 <Parameter Type="System.String" Name="tableName" />
3252 </Instance>
3253 </Message>
3254 <Message Id="SkippingPatchCreationTable" Number="1063">
3255 <Instance>
3256 The {0} table can only be represented in WiX for patch creation files. The information in this table will be left out of the decompiled output.
3257 <Parameter Type="System.String" Name="tableName" />
3258 </Instance>
3259 </Message>
3260 <Message Id="UnrepresentableColumnValue" Number="1064">
3261 <Instance>
3262 The {0}.{1} column's value, '{2}', cannot currently be represented in the WiX schema.
3263 <Parameter Type="System.String" Name="tableName" />
3264 <Parameter Type="System.String" Name="columnName" />
3265 <Parameter Type="System.Object" Name="value" />
3266 </Instance>
3267 </Message>
3268 <Message Id="DeprecatedTable" Number="1065" SourceLineNumbers="no">
3269 <Instance>
3270 The {0} table is not supported by the WiX toolset because it has been deprecated by the Windows Installer team. Any information in this table will be left out of the decompiled output.
3271 <Parameter Type="System.String" Name="tableName" />
3272 </Instance>
3273 </Message>
3274 <Message Id="PatchTable" Number="1066">
3275 <Instance>
3276 The {0} table is added to the install package by a transform from a patch package (.msp) and not authored directly into an install package (.msi). The information in this table will be left out of the decompiled output.
3277 <Parameter Type="System.String" Name="tableName" />
3278 </Instance>
3279 </Message>
3280 <Message Id="IllegalColumnValue" Number="1067">
3281 <Instance>
3282 The {0}.{1} column's value, '{2}', is not a recognized legal value. This information will be left out of the decompiled output.
3283 <Parameter Type="System.String" Name="tableName" />
3284 <Parameter Type="System.String" Name="columnName" />
3285 <Parameter Type="System.Object" Name="value" />
3286 </Instance>
3287 </Message>
3288 <Message Id="DeprecatedLongNameAttribute" Number="1069">
3289 <Instance>
3290 The {0}/@{1} attribute has been deprecated. Since WiX now has the ability to generate short file/directory names, the desired name should be specified in the {2} attribute instead. If the name specified in the {2} attribute is a short name, then WiX will not generate a short name. If the name specified in the {2} attribute is a long name and you want to manually specify the short name, please set the short name value in the {3} attribute.
3291 <Parameter Type="System.String" Name="elementName" />
3292 <Parameter Type="System.String" Name="longNameAttributeName" />
3293 <Parameter Type="System.String" Name="nameAttributeName" />
3294 <Parameter Type="System.String" Name="shortNameAttributeName" />
3295 </Instance>
3296 </Message>
3297 <Message Id="GeneratedShortFileNameConflict" Number="1070">
3298 <Instance>
3299 The short file name '{0}' was generated for multiple files that may be installed to the same directory. This could be due to conflicting long file names specified by the File/@Name attribute. If that is the case, please resolve the conflict in those attributes. Otherwise, please manually set the File/@ShortName attribute on the conflicting row to fix the collision. If one of the colliding files was added via a patch, that short file name should be specified manually to avoid disturbing the original short file name.
3300 <Parameter Type="System.String" Name="shortFileName" />
3301 </Instance>
3302 </Message>
3303 <Message Id="GeneratedShortFileNameConflict2" Number="1071">
3304 <Instance>
3305 The location of a conflicting generated short file name related to the previous warning.
3306 </Instance>
3307 </Message>
3308 <Message Id="DangerousTableInMergeModule" Number="1072">
3309 <Instance>
3310 Merge modules should not contain the '{0}' table because all merge conflicts cannot avoided. However, this warning can be suppressed if all of the consumers of the Merge Module agree to not duplicate identifiers in the '{0}' table.
3311 <Parameter Type="System.String" Name="tableName" />
3312 </Instance>
3313 </Message>
3314 <Message Id="DeprecatedLocalizationVariablePrefix" Number="1073">
3315 <Instance>
3316 The localization variable $(loc.{0}) uses a deprecated prefix '$'. Please use the '!' prefix instead. Since the prefix '$' is also used by the preprocessor, it has been deprecated to avoid namespace collisions.
3317 <Parameter Type="System.String" Name="variableId" />
3318 </Instance>
3319 </Message>
3320 <Message Id="PlaceholderValue" Number="1074">
3321 <Instance>
3322 The {0}/@{1} attribute's value, '{2}', is a placeholder value used in example files. Please replace this placeholder with the appropriate value.
3323 <Parameter Type="System.String" Name="elementName" />
3324 <Parameter Type="System.String" Name="attributeName" />
3325 <Parameter Type="System.String" Name="value" />
3326 </Instance>
3327 </Message>
3328 <Message Id="MissingUpgradeCode" Number="1075">
3329 <Instance>The Product/@UpgradeCode attribute was not found; it is strongly recommended to ensure that this product can be upgraded.</Instance>
3330 </Message>
3331 <Message Id="ValidationWarning" Number="1076">
3332 <Instance>
3333 {0}: {1}
3334 <Parameter Type="System.String" Name="ice" />
3335 <Parameter Type="System.String" Name="message" />
3336 </Instance>
3337 </Message>
3338 <Message Id="PropertyValueContainsPropertyReference" Number="1077">
3339 <Instance>
3340 The '{0}' Property contains '[{1}]' in its value which is an illegal reference to another property. If this value is a string literal, not a property reference, please ignore this warning. To set a property with the value of another property, use a CustomAction with Property and Value attributes.
3341 <Parameter Type="System.String" Name="propertyId" />
3342 <Parameter Type="System.String" Name="otherProperty" />
3343 </Instance>
3344 </Message>
3345 <Message Id="DeprecatedUpgradeProperty" Number="1078">
3346 <Instance>Specifying a Property element as a child of an Upgrade element has been deprecated. Please specify this Property element as a child of a different element such as Product or Fragment.</Instance>
3347 </Message>
3348 <Message Id="EmptyCabinet" Number="1079">
3349 <Instance>
3350 The cabinet '{0}' does not contain any files. If this installation contains no files, this warning can likely be safely ignored. Otherwise, please add files to the cabinet or remove it.
3351 <Parameter Type="System.String" Name="cabinetName" />
3352 </Instance>
3353 <Instance>
3354 The cabinet '{0}' does not contain any files. If this patch contains no files, this warning can likely be safely ignored. Otherwise, try passing -p to torch.exe when first building the transforms, or add a ComponentRef to your PatchFamily authoring to pull changed files into the cabinet.
3355 <Parameter Type="System.String" Name="cabinetName" />
3356 <Parameter Type="System.Boolean" Name="isPatch" />
3357 </Instance>
3358 </Message>
3359 <Message Id="DeprecatedRegistryElement" Number="1080">
3360 <Instance>The Registry element has been deprecated. Please use one of the new elements which replaces its functionality: RegistryKey for creating registry keys, RegistryValue for writing registry values, RemoveRegistryKey for removing registry keys, and RemoveRegistryValue for removing registry values.</Instance>
3361 </Message>
3362 <Message Id="IllegalRegistryKeyPath" Number="1081">
3363 <Instance>
3364 Component '{0}' specifies an illegal registry keypath of '{1}'. Since this entry actually represents a registry key, not a registry value, it cannot be the keypath.
3365 <Parameter Type="System.String" Name="componentName" />
3366 <Parameter Type="System.String" Name="registryId" />
3367 </Instance>
3368 </Message>
3369 <Message Id="DeprecatedPatchSequenceTargetAttribute" Number="1082">
3370 <Instance>
3371 The {0}/@{1} attribute has been deprecated in favor of the more strongly-typed ProductCode or TargetImage attributes. Please use the ProductCode attribute for indicating the ProductCode of a patch family directly, or the TargetImage attribute to specify the TargetImage which in turn will retrieve the ProductCode of the patch family.
3372 <Parameter Type="System.String" Name="elementName" />
3373 <Parameter Type="System.String" Name="attributeName" />
3374 </Instance>
3375 </Message>
3376 <Message Id="ProductIdAuthored" Number="1083">
3377 <Instance>
3378 The 'ProductID' property should not be directly authored because it will prevent the ValidateProductID standard action from performing any validation during the installation. This property will be set by the ValidateProductID standard action or control event.
3379 </Instance>
3380 </Message>
3381 <Message Id="ImplicitMergeModulePrimaryFeature" Number="1084" SourceLineNumbers="no">
3382 <Instance>
3383 The merge module '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the MergeRef/@Primary or FeatureGroupRef/@Primary locations for this component.
3384 <Parameter Type="System.String" Name="componentId" />
3385 </Instance>
3386 </Message>
3387 <Message Id="DeprecatedIgnoreModularizationElement" Number="1085">
3388 <Instance>
3389 The IgnoreModularization element has been deprecated. Use the Binary/@SuppressModularization, CustomAction/@SuppressModularization, or Property/@SuppressModularization attribute instead.
3390 </Instance>
3391 </Message>
3392 <Message Id="PropertyModularizationSuppressed" Number="1086">
3393 <Instance>
3394 The Property/@SuppressModularization attribute has been set to 'yes'. Using this functionality is strongly discouraged; it should only be necessary as a workaround of last resort in rare scenarios.
3395 </Instance>
3396 </Message>
3397 <Message Id="DeprecatedPackageCompressedAttribute" Number="1087">
3398 <Instance>
3399 The Package/@Compressed attribute is deprecated under the Module element because merge modules must always be compressed.
3400 </Instance>
3401 </Message>
3402 <Message Id="DeprecatedModuleGuidAttribute" Number="1088">
3403 <Instance>
3404 The Module/@Guid attribute is deprecated merge modules use their package code as the modularization guid. Use the Package/@Id attribute instead.
3405 </Instance>
3406 </Message>
3407 <Message Id="DeprecatedQuestionMarksGuid" Number="1090">
3408 <Instance>
3409 The {0}/@{1} attribute's value '????????-????-????-????-????????????' has been deprecated. Use '*' instead.
3410 <Parameter Type="System.String" Name="elementName" />
3411 <Parameter Type="System.String" Name="attributeName" />
3412 </Instance>
3413 </Message>
3414 <Message Id="PackageCodeSet" Number="1091">
3415 <Instance>
3416 The Package/@Id attribute has been set. Setting this attribute will allow nonidentical .msi files to have the same package code. This may be a problem because the package code is the primary identifier used by the installer to search for and validate the correct package for a given installation. If a package is changed without changing the package code, the installer may not use the newer package if both are still accessible to the installer. Please remove the Id attribute in order to automatically generate a new package code for each new .msi file.
3417 </Instance>
3418 </Message>
3419 <Message Id="InvalidModuleOrBundleVersion" Number="1093">
3420 <Instance>
3421 Invalid {0}/@Version '{1}'. {0} version has a max value of "65535.65535.65535.65535" and must be all numeric.
3422 <Parameter Type="System.String" Name="moduleOrBundle" />
3423 <Parameter Type="System.String" Name="version" />
3424 </Instance>
3425 </Message>
3426 <Message Id="InvalidRemoveFile" Number="1095">
3427 <Instance>
3428 File '{0}' was removed from component '{1}'. Removing a file from a component will not result in the file being removed by a patch. You should author a RemoveFile element in your component to remove the file from the installation if you want the file to be removed.
3429 <Parameter Type="System.String" Name="file" />
3430 <Parameter Type="System.String" Name="component" />
3431 </Instance>
3432 </Message>
3433 <Message Id="PreprocessorWarning" Number="1096">
3434 <Instance>
3435 {0}
3436 <Parameter Type="System.String" Name="message" />
3437 </Instance>
3438 </Message>
3439 <Message Id="UpdateOfNonKeyPathFile" Number="1097" SourceLineNumbers="no">
3440 <Instance>
3441 File '{0}' in Component '{1}' was changed, but the KeyPath file '{2}' was not. This file will not be patched on the target system if the REINSTALLMODE does not contain 'A'. The KeyPath file should also be changed and included in your patch.
3442 <Parameter Type="System.String" Name="nonKeyPathFileId" />
3443 <Parameter Type="System.String" Name="componentId" />
3444 <Parameter Type="System.String" Name="keyPathFileId" />
3445 </Instance>
3446 </Message>
3447 <Message Id="UnsupportedCommandLineArgument" Number="1098" SourceLineNumbers="no">
3448 <Instance>
3449 '{0}' is not a valid command line argument.
3450 <Parameter Type="System.String" Name="arg" />
3451 </Instance>
3452 </Message>
3453 <Message Id="MajorUpgradePatchNotRecommended" Number="1099" SourceLineNumbers="no">
3454 <Instance>
3455 Changing the ProductCode in a patch is not recommended because the patch cannot be uninstalled nor can it be sequenced along with other patches for the target product. See http://msdn2.microsoft.com/library/aa367571.aspx for more information.
3456 </Instance>
3457 </Message>
3458 <Message Id="RetainRangeMismatch" Number="1100">
3459 <Instance>
3460 Mismatch in RetainRangeCounts for the file '{0}' - ignoring the retain ranges.
3461 <Parameter Type="System.String" Name="fileId"/>
3462 </Instance>
3463 </Message>
3464 <Message Id="DefaultLanguageUsedForVersionedFile" Number="1101">
3465 <Instance>
3466 The DefaultLanguage '{0}' was used for file '{1}' which has no language. Specifying a language that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Either specify a value for DefaultLanguage or put the language in the version information resource to eliminate this warning.
3467 <Parameter Type="System.String" Name="language"/>
3468 <Parameter Type="System.String" Name="fileId"/>
3469 </Instance>
3470 </Message>
3471 <Message Id="DefaultLanguageUsedForUnversionedFile" Number="1102">
3472 <Instance>
3473 The DefaultLanguage '{0}' was used for file '{1}' which has no language or version. For unversioned files, specifying a value for DefaultLanguage is not neccessary and it will not be used when determining file versions. Remove the DefaultLanguage attribute to eliminate this warning.
3474 <Parameter Type="System.String" Name="language"/>
3475 <Parameter Type="System.String" Name="fileId"/>
3476 </Instance>
3477 </Message>
3478 <Message Id="DefaultVersionUsedForUnversionedFile" Number="1103">
3479 <Instance>
3480 The DefaultVersion '{0}' was used for file '{1}' which has no version. No entry for this file will be placed in the MsiFileHash table. For unversioned files, specifying a version that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Version the resource to eliminate this warning.
3481 <Parameter Type="System.String" Name="version"/>
3482 <Parameter Type="System.String" Name="fileId"/>
3483 </Instance>
3484 </Message>
3485 <Message Id="InvalidHigherInstallerVersionInModule" Number="1104">
3486 <Instance>
3487 Merge module '{0}' has an installer version of {1} which is greater than the product's installer version of {2}. Merging a module with a higher installer version than the product it is being merged into can result in invalid values in the resulting msi. You must set the Package/@InstallerVersion attribute to {1} or greater to merge this merge module into your product.
3488 <Parameter Type="System.String" Name="moduleId" />
3489 <Parameter Type="System.Int32" Name="moduleInstallerVersion" />
3490 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3491 </Instance>
3492 </Message>
3493 <Message Id="ValidationFailedDueToSystemPolicy" Number="1105" SourceLineNumbers="no">
3494 <Instance>
3495 Validation could not run due to system policy. To eliminate this warning, run the process as admin or suppress ICE validation.
3496 </Instance>
3497 </Message>
3498 <Message Id="ColumnsIncompatibleWithInstallerVersion" Number="1106">
3499 <Instance>
3500 Table '{0}' uses columns that require a version of Windows Installer greater than specified in your package ('{1}').
3501 <Parameter Type="System.String" Name="tableName" />
3502 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3503 </Instance>
3504 </Message>
3505 <Message Id="TableIncompatibleWithInstallerVersion" Number="1107">
3506 <Instance>
3507 Using table '{0}' requires a version of Windows Installer greater than specified in your package ('{1}').
3508 <Parameter Type="System.String" Name="tableName" />
3509 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3510 </Instance>
3511 </Message>
3512 <Message Id="DeprecatedCommandLineSwitch" Number="1108" SourceLineNumbers="no">
3513 <Instance>
3514 The command line switch '{0}' is deprecated.
3515 <Parameter Type="System.String" Name="oldSwitch" />
3516 </Instance>
3517 <Instance>
3518 The command line switch '{0}' is deprecated. Please use '{1}' instead.
3519 <Parameter Type="System.String" Name="oldSwitch" />
3520 <Parameter Type="System.String" Name="newSwitch" />
3521 </Instance>
3522 </Message>
3523 <Message Id="UnexpectedEntrySection" Number="1109">
3524 <Instance>
3525 Found mismatched entry point &lt;{0}&gt;. Expected &lt;{1}&gt; for specified output package type {2}.
3526 <Parameter Type="System.String" Name="sectionType" />
3527 <Parameter Type="System.String" Name="expectedType" />
3528 <Parameter Type="System.String" Name="outputExtension" />
3529 </Instance>
3530 </Message>
3531 <Message Id="NewComponentAddedToExistingFeature" Number="1110">
3532 <Instance>
3533 Component '{0}' was added to feature '{1}' in the transform '{2}'. If you cannot guarantee that this feature will always be installed, you should consider adding new components to new top-level features to prevent prompts for source when installing this patch.
3534 <Parameter Type="System.String" Name="component" />
3535 <Parameter Type="System.String" Name="feature" />
3536 <Parameter Type="System.String" Name="transformPath" />
3537 </Instance>
3538 </Message>
3539 <Message Id="DeprecatedAttributeValue" Number="1111">
3540 <Instance>
3541 The value &quot;{0}&quot; for the {1}/@{2} attribute has been deprecated. Please use &quot;{3}&quot; instead.
3542 <Parameter Type="System.String" Name="attributeValue" />
3543 <Parameter Type="System.String" Name="elementName" />
3544 <Parameter Type="System.String" Name="attributeName" />
3545 <Parameter Type="System.String" Name="newAttributeValue" />
3546 </Instance>
3547 </Message>
3548 <Message Id="InsufficientPermissionHarvestTypeLib" Number="1112" SourceLineNumbers="no">
3549 <Instance>
3550 Not enough permissions to harvest type library. On Windows Vista, you must either run Heat elevated, or install Windows Vista SP1 (or higher).
3551 </Instance>
3552 </Message>
3553 <Message Id="UnclearShortcut" Number="1113">
3554 <Instance>
3555 Because it is an advertised shortcut, the target of shortcut '{0}' will be the keypath of component '{2}' rather than parent file '{1}'. To eliminate this warning, you can (1) make the Shortcut element a child of the File element that is the keypath of component '{2}', (2) make file '{1}' the keypath of component '{2}', or (3) remove the @Advertise attribute so the shortcut is a non-advertised shortcut.
3556 <Parameter Type="System.String" Name="shortcutId" />
3557 <Parameter Type="System.String" Name="fileId" />
3558 <Parameter Type="System.String" Name="componentId" />
3559 </Instance>
3560 </Message>
3561 <Message Id="TooManyProgIds" Number="1114">
3562 <Instance>
3563 Class '{0}' tried to use ProgId '{1}' which has already been associated with class '{2}'. This information will be left out of the decompiled output.
3564 <Parameter Type="System.String" Name="clsId" />
3565 <Parameter Type="System.String" Name="progId" />
3566 <Parameter Type="System.String" Name="otherClsId" />
3567 </Instance>
3568 </Message>
3569 <Message Id="BadColumnDataIgnored" Number="1115">
3570 <Instance>
3571 The value '{0}' in table '{1}', column '{2}' is invalid according to the column's validation information. The decompiled output includes a best-effort representation of this value.
3572 <Parameter Type="System.String" Name="value" />
3573 <Parameter Type="System.String" Name="tableName" />
3574 <Parameter Type="System.String" Name="columnName" />
3575 </Instance>
3576 </Message>
3577 <Message Id="NullMsiAssemblyNameValue" Number="1116">
3578 <Instance>
3579 The assembly in component '{0}' has a null or empty {1} assembly name value.
3580 <Parameter Type="System.String" Name="componentName" />
3581 <Parameter Type="System.String" Name="name" />
3582 </Instance>
3583 </Message>
3584 <Message Id="InvalidAttributeCombination" Number="1117">
3585 <Instance>
3586 It is invalid to combine attributes {0} and {1}. The decompiled output will set attribute {2} to {3}.
3587 <Parameter Type="System.String" Name="attrib1" />
3588 <Parameter Type="System.String" Name="attrib2" />
3589 <Parameter Type="System.String" Name="name" />
3590 <Parameter Type="System.String" Name="value" />
3591 </Instance>
3592 </Message>
3593 <Message Id="VariableDeclarationCollision" Number="1118">
3594 <Instance>
3595 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
3596 <Parameter Type="System.String" Name="variableName" />
3597 <Parameter Type="System.String" Name="variableValue" />
3598 <Parameter Type="System.String" Name="variableCollidingValue" />
3599 </Instance>
3600 </Message>
3601 <Message Id="DuplicatePrimaryKey" Number="1119">
3602 <Instance>
3603 The primary key '{0}' is duplicated in table '{1}' and will be ignored. Please remove one of the entries or rename a part of the primary key to avoid the collision.
3604 <Parameter Type="System.String" Name="primaryKey" />
3605 <Parameter Type="System.String" Name="tableName" />
3606 </Instance>
3607 </Message>
3608 <Message Id="RequiresMsi200for64bitPackage" Number="1121">
3609 <Instance>
3610 Package/@InstallerVersion must be 200 or greater for a 64-bit package. The value will be changed to 200. Please specify a value of 200 or greater in order to eliminate this warning.
3611 </Instance>
3612 </Message>
3613 <Message Id="ExternalCabsAreNotSigned" Number="1122" SourceLineNumbers="no">
3614 <Instance>
3615 The installer database '{0}' has external cabs, but at least one of them is not signed. Please ensure that all external cabs are signed, if you mean to sign them. If you don't mean to sign them, there is no need to run the insignia tool as part of your build.
3616 <Parameter Type="System.String" Name="databaseFile" />
3617 </Instance>
3618 </Message>
3619 <Message Id="FailedToDeleteTempDir" Number="1123" SourceLineNumbers="no">
3620 <Instance>
3621 Failed to delete temporary directory: {0}
3622 <Parameter Type="System.String" Name="directory" />
3623 </Instance>
3624 </Message>
3625 <Message Id="StandardDirectoryConflictInMergeModule" Number="1124">
3626 <Instance>
3627 The Directory '{0}' starts with the same Id as the standard folder in Windows Installer '{1}'. A directory Id that begins with the same Id as a standard folder that is in an MSM may encounter a conflict when merging the MSM into an MSI. This may result in the contents of this merge module being installed to an unexpected location. To eliminate this warning, change your directory Id to not start with the same Id as any standard folders.
3628 <Parameter Type="System.String" Name="directory" />
3629 <Parameter Type="System.String" Name="standardDirectory" />
3630 </Instance>
3631 </Message>
3632 <Message Id="PreprocessorUnknownPragma" Number="1125">
3633 <Instance>
3634 The pragma '{0}' is unknown. Please ensure you have referenced the extension that defines this pragma.
3635 <Parameter Type="System.String" Name="pragmaName" />
3636 </Instance>
3637 </Message>
3638 <Message Id="DeprecatedComponentGroupId" Number="1126">
3639 <Instance>
3640 The {0}/@Id attribute contains invalid characters for an identifier. Being able to use invalid identifier characters for a {0} identifier has been deprecated.
3641 <Parameter Type="System.String" Name="elementName" />
3642 </Instance>
3643 </Message>
3644 <Message Id="UxPayloadsOnlySupportEmbedding" Number="1127">
3645 <Instance>
3646 A UX Payload ('{0}') was marked for something other than embedded packaging, possibly because it included a @DownloadUrl attribute. At present, UX Payloads must be embedded in the Bundle, so the requested packaging is being ignored.
3647 <Parameter Type="System.String" Name="sourceFile" />
3648 </Instance>
3649 </Message>
3650 <Message Id="DiscardedRollbackBoundary" Number="1129">
3651 <Instance>
3652 The RollbackBoundary '{0}' was discarded because it was not followed by a package. Without a package the rollback boundary doesn't do anything. Verify that the RollbackBoundary element is not followed by another RollbackBoundary and that the element is not at the end of the chain.
3653 <Parameter Type="System.String" Name="rollbackBoundaryId" />
3654 </Instance>
3655 </Message>
3656 <Message Id="DeprecatedElement" Number="1130">
3657 <Instance>
3658 The {0} element has been deprecated.
3659 <Parameter Type="System.String" Name="elementName" />
3660 </Instance>
3661 <Instance>
3662 The {0} element has been deprecated. Please use the {1} element instead.
3663 <Parameter Type="System.String" Name="elementName" />
3664 <Parameter Type="System.String" Name="newElementName" />
3665 </Instance>
3666 <Instance>
3667 The {0} element has been deprecated. Please use the {1} or {2} element instead.
3668 <Parameter Type="System.String" Name="elementName" />
3669 <Parameter Type="System.String" Name="newElementName1" />
3670 <Parameter Type="System.String" Name="newElementName2" />
3671 </Instance>
3672 </Message>
3673 <Message Id="CannotUpdateCabCache" Number="1131">
3674 <Instance>
3675 Cannot update the timestamp of cached cabinet: '{0}'. If the timestamp is not updated, the build may rebuild more than is necessary. To fix the issue, ensure that the cabinet file is writable, error: {1}
3676 <Parameter Type="System.String" Name="cabinetPath" />
3677 <Parameter Type="System.String" Name="detail" />
3678 </Instance>
3679 </Message>
3680 <Message Id="DownloadUrlNotSupportedForEmbeddedPayloads" Number="1132">
3681 <Instance>
3682 The Payload '{0}' is embedded but included a @DownloadUrl attribute. Embedded Payloads cannot be downloaded so the download URL is being ignored.
3683 <Parameter Type="System.String" Name="payloadId" />
3684 </Instance>
3685 </Message>
3686 <Message Id="DiscouragedAllUsersValue" Number="1133">
3687 <Instance>
3688 Bundles require a package to be either per-machine or per-user. The MSI '{0}' ALLUSERS Property is set to '2' which may change from per-user to per-machine at install time. The Bundle will assume the package is per-{1} and will not work correctly if that changes. If possible, remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.
3689 <Parameter Type="System.String" Name="path" />
3690 <Parameter Type="System.String" Name="machineOrUser" />
3691 </Instance>
3692 </Message>
3693 <Message Id="ImplicitlyPerUser" Number="1134">
3694 <Instance>
3695 The MSI '{0}' does not explicitly indicate that it is a per-user package even though the ALLUSERS Property is blank. This suggests a per-user package so the Bundle will assume the package is per-user. If possible, use the Package/@InstallScope attribute to be explicit instead.
3696 <Parameter Type="System.String" Name="path" />
3697 </Instance>
3698 </Message>
3699 <Message Id="PerUserButForcingPerMachine" Number="1135">
3700 <Instance>
3701 The MSI '{0}' is a per-user package being forced to per-machine. Verify that the MsiPackage/@ForcePerMachine attribute is expected and that the per-user package works correctly when forced to install per-machine.
3702 <Parameter Type="System.String" Name="path" />
3703 </Instance>
3704 </Message>
3705 <Message Id="AttributeShouldContain" Number="1136">
3706 <Instance>
3707 The {0}/@{1} attribute value '{2}' should contain '{3}' when the {0}/@{4} attribute is set to '{5}'.
3708 <Parameter Type="System.String" Name="elementName" />
3709 <Parameter Type="System.String" Name="attributeName" />
3710 <Parameter Type="System.String" Name="attributeValue" />
3711 <Parameter Type="System.String" Name="expectedContains" />
3712 <Parameter Type="System.String" Name="otherAttributeName" />
3713 <Parameter Type="System.String" Name="otherAttributeValue" />
3714 </Instance>
3715 </Message>
3716 <Message Id="DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions" Number="1137">
3717 <Instance>
3718 Component/@Id='{0}' has a @Guid value '{1}' that duplicates another component in this package. This is not officially supported by Windows Installer but works as long as all components have mutually-exclusive conditions. It is recommended to give each component its own unique GUID.
3719 <Parameter Type="System.String" Name="componentId" />
3720 <Parameter Type="System.String" Name="guid" />
3721 </Instance>
3722 </Message>
3723 <Message Id="DeprecatedRegistryKeyActionAttribute" Number="1138">
3724 <Instance>
3725 The RegistryKey/@Action attribute has been deprecated. In most cases, you can simply omit @Action. If you need to force Windows Installer to create an empty key or recursively delete the key, use the ForceCreateOnInstall or ForceDeleteOnUninstall attributes instead.
3726 </Instance>
3727 </Message>
3728 <Message Id="NotABinaryWixlib" Number="1139" SourceLineNumbers="no">
3729 <Instance>
3730 '{0}' is not a binary Wixlib and has no embedded files.
3731 <Parameter Type="System.String" Name="wixlib" />
3732 </Instance>
3733 </Message>
3734 <Message Id="NoPerMachineDependencies" Number="1140">
3735 <Instance>
3736 Bundle dependencies will not be registered on per-machine package '{0}' for a per-user bundle. Either make sure that all packages are installed per-machine, or author any per-machine dependencies as permanent packages.
3737 <Parameter Type="System.String" Name="packageId" />
3738 </Instance>
3739 </Message>
3740 <Message Id="DownloadUrlNotSupportedForAttachedContainers" Number="1141">
3741 <Instance>
3742 The Container '{0}' is attached but included a @DownloadUrl attribute. Attached Containers cannot be downloaded so the download URL is being ignored.
3743 <Parameter Type="System.String" Name="containerId" />
3744 </Instance>
3745 </Message>
3746 <Message Id="ReservedAttribute" Number="1142">
3747 <Instance>
3748 The {0}/@{1} attribute is reserved for future use and has no effect in this version of the WiX toolset.
3749 <Parameter Type="System.String" Name="elementName" />
3750 <Parameter Type="System.String" Name="attributeName" />
3751 </Instance>
3752 </Message>
3753 <Message Id="RequiresMsi500forArmPackage" Number="1143">
3754 <Instance>
3755 Package/@InstallerVersion must be 500 or greater for an Arm package. The value will be changed to 500. Please specify a value of 500 or greater in order to eliminate this warning.
3756 </Instance>
3757 </Message>
3758 <Message Id="RemotePayloadsMustNotAlsoBeCompressed" Number="1144">
3759 <Instance>
3760 The {0}/@Compressed attribute must have value 'no' when a RemotePayload child element is present. RemotePayload indicates that a package will always be downloaded and cannot be compressed into a bundle. To eliminate this warning, explicitly set the {0}/@Compressed attribute to 'no'.
3761 <Parameter Type="System.String" Name="elementName" />
3762 </Instance>
3763 </Message>
3764 <Message Id="AllChangesIncludedInPatch" Number="1145">
3765 <Instance>
3766 All changes between the baseline and upgraded packages will be included in the patch except for any change to the ProductCode. The 'All' element is supported primarily for testing purposes and negates the benefits of patch families.
3767 </Instance>
3768 </Message>
3769 <Message Id="RelatedAttributeConditionallyIgnored" Number="1146">
3770 <Instance>
3771 Ignoring attribute {0} because attribute {1} is set to {2}.
3772 <Parameter Type="System.String" Name="recessiveAttribute" />
3773 <Parameter Type="System.String" Name="dominantAttribute" />
3774 <Parameter Type="System.String" Name="dominantValue" />
3775 </Instance>
3776 </Message>
3777 <Message Id="BackslashTerminateInlineDirectorySyntax" Number="1147">
3778 <Instance>
3779 Backslash terminate the {0}/@{1} attribute's inline directory value '{2}'. A backslash ensures a directory name will not be mistaken for a directory reference.
3780 <Parameter Type="System.String" Name="elementName" />
3781 <Parameter Type="System.String" Name="attributeName" />
3782 <Parameter Type="System.String" Name="value" />
3783 </Instance>
3784 </Message>
3785 <Message Id="VersionTruncated" Number="1148">
3786 <Instance>
3787 Product version {0} in package '{1}' is not valid per the MSI SDK and cannot be represented in a bundle. It has been truncated to {2}.
3788 <Parameter Type="System.String" Name="originalVersion" />
3789 <Parameter Type="System.String" Name="package" />
3790 <Parameter Type="System.String" Name="truncatedVersion" />
3791 </Instance>
3792 </Message>
3793 <Message Id="ServiceConfigFamilyNotSupported" Number="1149">
3794 <Instance>
3795 {0} functionality is documented in the Windows Installer SDK to "not [work] as expected." Consider replacing {0} with the WixUtilExtension ServiceConfig element.
3796 <Parameter Type="System.String" Name="elementName" />
3797 </Instance>
3798 </Message>
3799 </Class>
3800
3801 <Class Name="WixVerboses" ContainerName="WixVerboseEventArgs" BaseContainerName="MessageEventArgs" Level="Verbose">
3802 <Message Id="ImportBinaryStream" Number="9000" SourceLineNumbers="no">
3803 <Instance>
3804 Importing binary stream from '{0}'.
3805 <Parameter Type="System.String" Name="streamSource" />
3806 </Instance>
3807 </Message>
3808 <Message Id="ImportIconStream" Number="9001" SourceLineNumbers="no">
3809 <Instance>
3810 Importing icon stream from '{0}'.
3811 <Parameter Type="System.String" Name="streamSource" />
3812 </Instance>
3813 </Message>
3814 <Message Id="CopyFile" Number="9002" SourceLineNumbers="no">
3815 <Instance>
3816 Copying file '{0}' to '{1}'.
3817 <Parameter Type="System.String" Name="sourceFile" />
3818 <Parameter Type="System.String" Name="destinationFile" />
3819 </Instance>
3820 </Message>
3821 <Message Id="MoveFile" Number="9003" SourceLineNumbers="no">
3822 <Instance>
3823 Moving file '{0}' to '{1}'.
3824 <Parameter Type="System.String" Name="sourceFile" />
3825 <Parameter Type="System.String" Name="destinationFile" />
3826 </Instance>
3827 </Message>
3828 <Message Id="CreateDirectory" Number="9004" SourceLineNumbers="no">
3829 <Instance>
3830 The directory '{0}' does not exist, creating it now.
3831 <Parameter Type="System.String" Name="directory" />
3832 </Instance>
3833 </Message>
3834 <Message Id="RemoveDestinationFile" Number="9005" SourceLineNumbers="no">
3835 <Instance>
3836 The destination file '{0}' already exists, attempting to remove it.
3837 <Parameter Type="System.String" Name="destinationFile" />
3838 </Instance>
3839 </Message>
3840 <Message Id="CabFile" Number="9006" SourceLineNumbers="no">
3841 <Instance>
3842 Cabbing file {0} from '{1}'.
3843 <Parameter Type="System.String" Name="fileId" />
3844 <Parameter Type="System.String" Name="filePath" />
3845 </Instance>
3846 </Message>
3847 <Message Id="UpdatingFileInformation" Number="9007" SourceLineNumbers="no">
3848 <Instance>Updating file information.</Instance>
3849 </Message>
3850 <Message Id="GeneratingDatabase" Number="9008" SourceLineNumbers="no">
3851 <Instance>Generating database.</Instance>
3852 </Message>
3853 <Message Id="MergingModules" Number="9009" SourceLineNumbers="no">
3854 <Instance>Merging modules.</Instance>
3855 </Message>
3856 <Message Id="CreatingCabinetFiles" Number="9010" SourceLineNumbers="no">
3857 <Instance>Creating cabinet files.</Instance>
3858 </Message>
3859 <Message Id="ImportingStreams" Number="9011" SourceLineNumbers="no">
3860 <Instance>Importing streams.</Instance>
3861 </Message>
3862 <Message Id="LayingOutMedia" Number="9012" SourceLineNumbers="no">
3863 <Instance>Laying out media.</Instance>
3864 </Message>
3865 <Message Id="DecompilingTable" Number="9013" SourceLineNumbers="no">
3866 <Instance>
3867 Decompiling the {0} table.
3868 <Parameter Type="System.String" Name="tableName" />
3869 </Instance>
3870 </Message>
3871 <Message Id="ValidationInfo" Number="9014" SourceLineNumbers="no">
3872 <Instance>
3873 {0}: {1}
3874 <Parameter Type="System.String" Name="ice" />
3875 <Parameter Type="System.String" Name="message" />
3876 </Instance>
3877 </Message>
3878 <Message Id="CreateCabinet" Number="9015" SourceLineNumbers="no">
3879 <Instance>
3880 Creating cabinet '{0}'.
3881 <Parameter Type="System.String" Name="cabinet" />
3882 </Instance>
3883 </Message>
3884 <Message Id="ValidatingDatabase" Number="9016" SourceLineNumbers="no">
3885 <Instance>Validating database.</Instance>
3886 </Message>
3887 <Message Id="OpeningMergeModule" Number="9017" SourceLineNumbers="no">
3888 <Instance>
3889 Opening merge module '{0}' with language '{1}'.
3890 <Parameter Type="System.String" Name="modulePath" />
3891 <Parameter Type="System.Int16" Name="language" />
3892 </Instance>
3893 </Message>
3894 <Message Id="MergingMergeModule" Number="9018" SourceLineNumbers="no">
3895 <Instance>
3896 Merging merge module '{0}'.
3897 <Parameter Type="System.String" Name="modulePath" />
3898 </Instance>
3899 </Message>
3900 <Message Id="ConnectingMergeModule" Number="9019" SourceLineNumbers="no">
3901 <Instance>
3902 Connecting merge module '{0}' to feature '{1}'.
3903 <Parameter Type="System.String" Name="modulePath" />
3904 <Parameter Type="System.String" Name="feature" />
3905 </Instance>
3906 </Message>
3907 <Message Id="ResequencingMergeModuleFiles" Number="9020" SourceLineNumbers="no">
3908 <Instance>Resequencing files from all merge modules.</Instance>
3909 </Message>
3910 <Message Id="BinderTempDirLocatedAt" Number="9021" SourceLineNumbers="no">
3911 <Instance>
3912 Binder temporary directory located at '{0}'.
3913 <Parameter Type="System.String" Name="directory" />
3914 </Instance>
3915 </Message>
3916 <Message Id="ValidatorTempDirLocatedAt" Number="9022" SourceLineNumbers="no">
3917 <Instance>
3918 Validator temporary directory located at '{0}'.
3919 <Parameter Type="System.String" Name="directory" />
3920 </Instance>
3921 </Message>
3922 <Message Id="GeneratingBundle" Number="9023" SourceLineNumbers="no">
3923 <Instance>
3924 Generating Burn bundle '{0}' from stub '{1}'.
3925 <Parameter Type="System.String" Name="bundleFile" />
3926 <Parameter Type="System.String" Name="stubFile" />
3927 </Instance>
3928 </Message>
3929 <Message Id="ResolvingManifest" Number="9024" SourceLineNumbers="no">
3930 <Instance>
3931 Generating resolved manifest '{0}'.
3932 <Parameter Type="System.String" Name="manifestFile" />
3933 </Instance>
3934 </Message>
3935 <Message Id="LoadingPayload" Number="9025" SourceLineNumbers="no">
3936 <Instance>
3937 Loading payload '{0}' into container.
3938 <Parameter Type="System.String" Name="payload" />
3939 </Instance>
3940 </Message>
3941 <Message Id="BundleGuid" Number="9026" SourceLineNumbers="no">
3942 <Instance>
3943 Assigning bundle GUID '{0}'.
3944 <Parameter Type="System.String" Name="bundleGuid" />
3945 </Instance>
3946 </Message>
3947 <Message Id="CopyingExternalPayload" Number="9027" SourceLineNumbers="no">
3948 <Instance>
3949 Copying external payload from '{0}' to '{1}'.
3950 <Parameter Type="System.String" Name="payload" />
3951 <Parameter Type="System.String" Name="outputDirectory" />
3952 </Instance>
3953 </Message>
3954 <Message Id="EmbeddingContainer" Number="9028" SourceLineNumbers="no">
3955 <Instance>
3956 Embedding container '{0}' ({1} bytes) with '{2}' compression.
3957 <Parameter Type="System.String" Name="container" />
3958 <Parameter Type="System.Int64" Name="size" />
3959 <Parameter Type="System.String" Name="compression" />
3960 </Instance>
3961 </Message>
3962 <Message Id="SwitchingToPerUserPackage" Number="9029">
3963 <Instance>
3964 Bundle switching from per-machine to per-user due to addition of per-user package '{0}'.
3965 <Parameter Type="System.String" Name="path" />
3966 </Instance>
3967 </Message>
3968 <Message Id="SetCabbingThreadCount" Number="9030" SourceLineNumbers="no">
3969 <Instance>
3970 There will be '{0}' threads used to produce CAB files.
3971 <Parameter Type="System.String" Name="threads" />
3972 </Instance>
3973 </Message>
3974 <Message Id="ValidationSerialized" Number="9031" SourceLineNumbers="no">
3975 <Instance>
3976 Multiple packages cannot reliably be validated simultaneously. This validation will resume when the other package being validated has completed.
3977 </Instance>
3978 </Message>
3979 <Message Id="ReusingCabCache" Number="9032">
3980 <Instance>
3981 Reusing cabinet '{0}' from cabinet cache path: '{1}'.
3982 <Parameter Type="System.String" Name="cabinetName" />
3983 <Parameter Type="System.String" Name="source" />
3984 </Instance>
3985 </Message>
3986 <Message Id="CabinetsSplitInParallel" Number="9033" SourceLineNumbers="no">
3987 <Instance>
3988 Multiple Cabinets with Large Files are splitting simultaneously. This current cabinet is waiting on a shared resource and splitting will resume when the other splitting has completed.
3989 </Instance>
3990 </Message>
3991 <Message Id="ValidatedDatabase" Number="9034" SourceLineNumbers="no">
3992 <Instance>
3993 Validation complete: {0:N0}ms elapsed.
3994 <Parameter Type="System.Int64" Name="size" />
3995 </Instance>
3996 </Message>
3997 </Class>
3998</Messages>
diff --git a/src/WixToolset.Core/Extensibility/HeatExtension.cs b/src/WixToolset.Core/Extensibility/HeatExtension.cs
index 2b4a6823..b0da75f1 100644
--- a/src/WixToolset.Core/Extensibility/HeatExtension.cs
+++ b/src/WixToolset.Core/Extensibility/HeatExtension.cs
@@ -123,13 +123,13 @@ namespace WixToolset.Core.Extensibility
123 } 123 }
124 else 124 else
125 { 125 {
126 throw new WixException(WixErrors.InvalidExtension(assemblyName, innerE.Message)); 126 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, innerE.Message));
127 } 127 }
128 } 128 }
129 } 129 }
130 else 130 else
131 { 131 {
132 throw new WixException(WixErrors.InvalidExtension(assemblyName, e.Message)); 132 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, e.Message));
133 } 133 }
134 } 134 }
135 } 135 }
@@ -143,7 +143,7 @@ namespace WixToolset.Core.Extensibility
143 } 143 }
144 catch (Exception e) 144 catch (Exception e)
145 { 145 {
146 throw new WixException(WixErrors.InvalidExtensionType(assemblyName, className, e.GetType().ToString(), e.Message)); 146 throw new WixException(ErrorMessages.InvalidExtensionType(assemblyName, className, e.GetType().ToString(), e.Message));
147 } 147 }
148 } 148 }
149 else 149 else
@@ -157,7 +157,7 @@ namespace WixToolset.Core.Extensibility
157 } 157 }
158 else 158 else
159 { 159 {
160 throw new WixException(WixErrors.InvalidExtensionType(assemblyName, typeof(AssemblyDefaultHeatExtensionAttribute).ToString())); 160 throw new WixException(ErrorMessages.InvalidExtensionType(assemblyName, typeof(AssemblyDefaultHeatExtensionAttribute).ToString()));
161 } 161 }
162 } 162 }
163 } 163 }
@@ -168,7 +168,7 @@ namespace WixToolset.Core.Extensibility
168 } 168 }
169 else 169 else
170 { 170 {
171 throw new WixException(WixErrors.InvalidExtensionType(extension, extensionType.ToString(), typeof(HeatExtension).ToString())); 171 throw new WixException(ErrorMessages.InvalidExtensionType(extension, extensionType.ToString(), typeof(HeatExtension).ToString()));
172 } 172 }
173 } 173 }
174 174
@@ -191,7 +191,7 @@ namespace WixToolset.Core.Extensibility
191 } 191 }
192 catch (Exception e) 192 catch (Exception e)
193 { 193 {
194 throw new WixException(WixErrors.InvalidExtension(assemblyName, e.Message)); 194 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, e.Message));
195 } 195 }
196 196
197 return extensionAssembly; 197 return extensionAssembly;
diff --git a/src/WixToolset.Core/Extensibility/IHarvesterCore.cs b/src/WixToolset.Core/Extensibility/IHarvesterCore.cs
index 9a6fd10c..a9001b46 100644
--- a/src/WixToolset.Core/Extensibility/IHarvesterCore.cs
+++ b/src/WixToolset.Core/Extensibility/IHarvesterCore.cs
@@ -2,22 +2,14 @@
2 2
3namespace WixToolset 3namespace WixToolset
4{ 4{
5 using System; 5 using WixToolset.Extensibility.Services;
6 using System.Diagnostics.CodeAnalysis;
7 using System.IO;
8 using WixToolset.Data;
9 using Wix = WixToolset.Data.Serialize;
10 6
11 /// <summary> 7 /// <summary>
12 /// The WiX Toolset harvester core. 8 /// The WiX Toolset harvester core.
13 /// </summary> 9 /// </summary>
14 public interface IHarvesterCore 10 public interface IHarvesterCore
15 { 11 {
16 /// <summary> 12 IMessaging Messaging { get; set; }
17 /// Gets whether the harvester core encountered an error while processing.
18 /// </summary>
19 /// <value>Flag if core encountered an error during processing.</value>
20 bool EncounteredError { get; }
21 13
22 /// <summary> 14 /// <summary>
23 /// Gets or sets the value of the extension argument passed to heat. 15 /// Gets or sets the value of the extension argument passed to heat.
@@ -47,12 +39,6 @@ namespace WixToolset
47 string GenerateIdentifier(string prefix, params string[] args); 39 string GenerateIdentifier(string prefix, params string[] args);
48 40
49 /// <summary> 41 /// <summary>
50 /// Sends a message to the message delegate if there is one.
51 /// </summary>
52 /// <param name="mea">Message event arguments.</param>
53 void OnMessage(MessageEventArgs mea);
54
55 /// <summary>
56 /// Resolves a file's path if the Wix.File.Source value starts with "SourceDir\". 42 /// Resolves a file's path if the Wix.File.Source value starts with "SourceDir\".
57 /// </summary> 43 /// </summary>
58 /// <param name="fileSource">The Wix.File.Source value with "SourceDir\".</param> 44 /// <param name="fileSource">The Wix.File.Source value with "SourceDir\".</param>
diff --git a/src/WixToolset.Core/Extensibility/IHeatCore.cs b/src/WixToolset.Core/Extensibility/IHeatCore.cs
index 031c8132..1365dfaf 100644
--- a/src/WixToolset.Core/Extensibility/IHeatCore.cs
+++ b/src/WixToolset.Core/Extensibility/IHeatCore.cs
@@ -2,20 +2,12 @@
2 2
3namespace WixToolset.Core.Extensibility 3namespace WixToolset.Core.Extensibility
4{ 4{
5 using WixToolset.Data;
6
7 /// <summary> 5 /// <summary>
8 /// The WiX Toolset Harvester application core. 6 /// The WiX Toolset Harvester application core.
9 /// </summary> 7 /// </summary>
10 public interface IHeatCore 8 public interface IHeatCore
11 { 9 {
12 /// <summary> 10 /// <summary>
13 /// Gets whether the mutator core encountered an error while processing.
14 /// </summary>
15 /// <value>Flag if core encountered an error during processing.</value>
16 bool EncounteredError { get; }
17
18 /// <summary>
19 /// Gets the harvester. 11 /// Gets the harvester.
20 /// </summary> 12 /// </summary>
21 /// <value>The harvester.</value> 13 /// <value>The harvester.</value>
@@ -26,11 +18,5 @@ namespace WixToolset.Core.Extensibility
26 /// </summary> 18 /// </summary>
27 /// <value>The mutator.</value> 19 /// <value>The mutator.</value>
28 Mutator Mutator { get; } 20 Mutator Mutator { get; }
29
30 /// <summary>
31 /// Sends a message to the message delegate if there is one.
32 /// </summary>
33 /// <param name="mea">Message event arguments.</param>
34 void OnMessage(MessageEventArgs mea);
35 } 21 }
36} 22}
diff --git a/src/WixToolset.Core/ExtensionManager.cs b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
index 6a9d3b5a..5714701a 100644
--- a/src/WixToolset.Core/ExtensionManager.cs
+++ b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
@@ -1,6 +1,6 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset.Core 3namespace WixToolset.Core.ExtensibilityServices
4{ 4{
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
@@ -83,7 +83,7 @@ namespace WixToolset.Core
83 } 83 }
84 catch (Exception e) 84 catch (Exception e)
85 { 85 {
86 throw new WixException(WixErrors.InvalidExtension(assemblyName, e.Message), e); 86 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, e.Message), e);
87 } 87 }
88 } 88 }
89 89
@@ -102,11 +102,11 @@ namespace WixToolset.Core
102 return false; 102 return false;
103 } 103 }
104 104
105 throw new WixException(WixErrors.InvalidExtension(assemblyName, innerE.Message), innerE); 105 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, innerE.Message), innerE);
106 } 106 }
107 catch (Exception e) 107 catch (Exception e)
108 { 108 {
109 throw new WixException(WixErrors.InvalidExtension(assemblyName, e.Message), e); 109 throw new WixException(ErrorMessages.InvalidExtension(assemblyName, e.Message), e);
110 } 110 }
111 } 111 }
112 } 112 }
diff --git a/src/WixToolset.Core/ExtensibilityServices/Messaging.cs b/src/WixToolset.Core/ExtensibilityServices/Messaging.cs
new file mode 100644
index 00000000..4510f264
--- /dev/null
+++ b/src/WixToolset.Core/ExtensibilityServices/Messaging.cs
@@ -0,0 +1,194 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Core.ExtensibilityServices
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.Text;
9 using WixToolset.Data;
10 using WixToolset.Extensibility;
11 using WixToolset.Extensibility.Services;
12
13 internal class Messaging : IMessaging
14 {
15 private IMessageListener listener;
16 private HashSet<int> suppressedWarnings = new HashSet<int>();
17 private HashSet<int> warningsAsErrors = new HashSet<int>();
18
19 public bool EncounteredError { get; private set; }
20
21 public int LastErrorNumber { get; private set; }
22
23 public bool ShowVerboseMessages { get; set; }
24
25 public bool SuppressAllWarnings { get; set; }
26
27 public bool WarningsAsError { get; set; }
28
29 public void ElevateWarningMessage(int warningNumber)
30 {
31 this.warningsAsErrors.Add(warningNumber);
32 }
33
34 public void SetListener(IMessageListener listener)
35 {
36 this.listener = listener;
37 }
38
39 public void SuppressWarningMessage(int warningNumber)
40 {
41 this.suppressedWarnings.Add(warningNumber);
42 }
43
44 public string FormatMessage(Message message)
45 {
46 var level = CalculateMessageLevel(message);
47
48 if (level == MessageLevel.Nothing)
49 {
50 return String.Empty;
51 }
52
53 var shortAppName = String.IsNullOrEmpty(this.listener?.ShortAppName) ? "WIX" : this.listener.ShortAppName;
54 var longAppName = String.IsNullOrEmpty(this.listener?.LongAppName) ? "WIX" : this.listener.LongAppName;
55
56 var fileNames = new List<string>();
57 var errorFileName = longAppName;
58 for (var sln = message.SourceLineNumbers; null != sln; sln = sln.Parent)
59 {
60 if (String.IsNullOrEmpty(sln.FileName))
61 {
62 continue;
63 }
64 else if (sln.LineNumber.HasValue)
65 {
66 if (fileNames.Count == 0)
67 {
68 errorFileName = String.Format(CultureInfo.CurrentUICulture, WixStrings.Format_FirstLineNumber, sln.FileName, sln.LineNumber);
69 }
70
71 fileNames.Add(String.Format(CultureInfo.CurrentUICulture, WixStrings.Format_LineNumber, sln.FileName, sln.LineNumber));
72 }
73 else
74 {
75 if (fileNames.Count == 0)
76 {
77 errorFileName = sln.FileName;
78 }
79
80 fileNames.Add(sln.FileName);
81 }
82 }
83
84 var levelString = String.Empty;
85 if (MessageLevel.Warning == level)
86 {
87 levelString = WixStrings.MessageType_Warning;
88 }
89 else if (MessageLevel.Error == level)
90 {
91 levelString = WixStrings.MessageType_Error;
92 }
93
94 string formatted;
95 if (message.ResourceManager == null)
96 {
97 formatted = String.Format(CultureInfo.InvariantCulture, message.ResourceNameOrFormat, message.MessageArgs);
98 }
99 else
100 {
101 formatted = String.Format(CultureInfo.InvariantCulture, message.ResourceManager.GetString(message.ResourceNameOrFormat), message.MessageArgs);
102 }
103
104 var builder = new StringBuilder();
105 if (level == MessageLevel.Information || level == MessageLevel.Verbose)
106 {
107 builder.AppendFormat(WixStrings.Format_InfoMessage, formatted);
108 }
109 else
110 {
111 builder.AppendFormat(WixStrings.Format_NonInfoMessage, errorFileName, levelString, shortAppName, message.Id, formatted);
112 }
113
114 if (fileNames.Count > 1)
115 {
116 builder.AppendFormat(WixStrings.INF_SourceTrace, Environment.NewLine);
117
118 foreach (var fileName in fileNames)
119 {
120 builder.AppendFormat(WixStrings.INF_SourceTraceLocation, fileName, Environment.NewLine);
121 }
122
123 builder.AppendLine();
124 }
125
126 return builder.ToString();
127 }
128
129 public void Write(Message message)
130 {
131 var level = CalculateMessageLevel(message);
132
133 if (level == MessageLevel.Nothing)
134 {
135 return;
136 }
137
138 if (level == MessageLevel.Error)
139 {
140 this.EncounteredError = true;
141 this.LastErrorNumber = message.Id;
142 }
143
144 if (this.listener != null)
145 {
146 this.listener.Write(message);
147 }
148 else if (level == MessageLevel.Error)
149 {
150 throw new WixException(message);
151 }
152 }
153
154 public void Write(string message, bool verbose = false)
155 {
156 if (!verbose || this.ShowVerboseMessages)
157 {
158 this.listener?.Write(message);
159 }
160 }
161
162 /// <summary>
163 /// Determines the level of this message, when taking into account warning-as-error,
164 /// warning level, verbosity level and message suppressed by the caller.
165 /// </summary>
166 /// <param name="message">Event arguments for the message.</param>
167 /// <returns>MessageLevel representing the level of this message.</returns>
168 private MessageLevel CalculateMessageLevel(Message message)
169 {
170 var level = message.Level;
171
172 if (level == MessageLevel.Verbose)
173 {
174 if (!this.ShowVerboseMessages)
175 {
176 level = MessageLevel.Nothing;
177 }
178 }
179 else if (level == MessageLevel.Warning)
180 {
181 if (this.SuppressAllWarnings || this.suppressedWarnings.Contains(message.Id))
182 {
183 level = MessageLevel.Nothing;
184 }
185 else if (this.WarningsAsError || this.warningsAsErrors.Contains(message.Id))
186 {
187 level = MessageLevel.Error;
188 }
189 }
190
191 return level;
192 }
193 }
194}
diff --git a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
index 8a67efe9..d2486890 100644
--- a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
+++ b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
@@ -34,10 +34,14 @@ namespace WixToolset.Core.ExtensibilityServices
34 public ParseHelper(IServiceProvider serviceProvider) 34 public ParseHelper(IServiceProvider serviceProvider)
35 { 35 {
36 this.ServiceProvider = serviceProvider; 36 this.ServiceProvider = serviceProvider;
37
38 this.Messaging = serviceProvider.GetService<IMessaging>();
37 } 39 }
38 40
39 private IServiceProvider ServiceProvider { get; } 41 private IServiceProvider ServiceProvider { get; }
40 42
43 private IMessaging Messaging { get; }
44
41 private ITupleDefinitionCreator Creator { get; set; } 45 private ITupleDefinitionCreator Creator { get; set; }
42 46
43 public bool ContainsProperty(string possibleProperty) 47 public bool ContainsProperty(string possibleProperty)
@@ -136,7 +140,7 @@ namespace WixToolset.Core.ExtensibilityServices
136 // TODO: should overriding the parent identifier with a specific id be an error or a warning or just let it slide? 140 // TODO: should overriding the parent identifier with a specific id be an error or a warning or just let it slide?
137 //if (null != parentId) 141 //if (null != parentId)
138 //{ 142 //{
139 // this.core.OnMessage(WixErrors.Xxx(sourceLineNumbers)); 143 // this.core.Write(WixErrors.Xxx(sourceLineNumbers));
140 //} 144 //}
141 145
142 id = inlineSyntax[0].TrimEnd(':'); 146 id = inlineSyntax[0].TrimEnd(':');
@@ -360,7 +364,7 @@ namespace WixToolset.Core.ExtensibilityServices
360 364
361 if (ParseHelper.PutGuidHere.IsMatch(value)) 365 if (ParseHelper.PutGuidHere.IsMatch(value))
362 { 366 {
363 Messaging.Instance.OnMessage(WixErrors.ExampleGuid(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 367 this.Messaging.Write(ErrorMessages.ExampleGuid(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
364 return CompilerConstants.IllegalGuid; 368 return CompilerConstants.IllegalGuid;
365 } 369 }
366 else if (value.StartsWith("!(loc", StringComparison.Ordinal) || value.StartsWith("$(loc", StringComparison.Ordinal) || value.StartsWith("!(wix", StringComparison.Ordinal)) 370 else if (value.StartsWith("!(loc", StringComparison.Ordinal) || value.StartsWith("$(loc", StringComparison.Ordinal) || value.StartsWith("!(wix", StringComparison.Ordinal))
@@ -374,14 +378,14 @@ namespace WixToolset.Core.ExtensibilityServices
374 // TODO: This used to be a pedantic error, what should it be now? 378 // TODO: This used to be a pedantic error, what should it be now?
375 //if (uppercaseGuid != value) 379 //if (uppercaseGuid != value)
376 //{ 380 //{
377 // Messaging.Instance.OnMessage(WixErrors.GuidContainsLowercaseLetters(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 381 // this.Messaging.Write(WixErrors.GuidContainsLowercaseLetters(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
378 //} 382 //}
379 383
380 return String.Concat("{", uppercaseGuid, "}"); 384 return String.Concat("{", uppercaseGuid, "}");
381 } 385 }
382 else 386 else
383 { 387 {
384 Messaging.Instance.OnMessage(WixErrors.IllegalGuidValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 388 this.Messaging.Write(ErrorMessages.IllegalGuidValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
385 } 389 }
386 } 390 }
387 391
@@ -391,7 +395,7 @@ namespace WixToolset.Core.ExtensibilityServices
391 public Identifier GetAttributeIdentifier(SourceLineNumber sourceLineNumbers, XAttribute attribute) 395 public Identifier GetAttributeIdentifier(SourceLineNumber sourceLineNumbers, XAttribute attribute)
392 { 396 {
393 var access = AccessModifier.Public; 397 var access = AccessModifier.Public;
394 var value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeEmpty); 398 var value = Common.GetAttributeValue(this.Messaging, sourceLineNumbers, attribute, EmptyRule.CanBeEmpty);
395 399
396 var match = ParseHelper.LegalIdentifierWithAccess.Match(value); 400 var match = ParseHelper.LegalIdentifierWithAccess.Match(value);
397 if (!match.Success) 401 if (!match.Success)
@@ -407,7 +411,7 @@ namespace WixToolset.Core.ExtensibilityServices
407 411
408 if (Common.IsIdentifier(value) && 72 < value.Length) 412 if (Common.IsIdentifier(value) && 72 < value.Length)
409 { 413 {
410 Messaging.Instance.OnMessage(WixWarnings.IdentifierTooLong(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 414 this.Messaging.Write(WarningMessages.IdentifierTooLong(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
411 } 415 }
412 416
413 return new Identifier(value, access); 417 return new Identifier(value, access);
@@ -415,7 +419,7 @@ namespace WixToolset.Core.ExtensibilityServices
415 419
416 public string GetAttributeIdentifierValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) 420 public string GetAttributeIdentifierValue(SourceLineNumber sourceLineNumbers, XAttribute attribute)
417 { 421 {
418 return Common.GetAttributeIdentifierValue(sourceLineNumbers, attribute); 422 return Common.GetAttributeIdentifierValue(this.Messaging, sourceLineNumbers, attribute);
419 } 423 }
420 424
421 public string[] GetAttributeInlineDirectorySyntax(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool resultUsedToCreateReference = false) 425 public string[] GetAttributeInlineDirectorySyntax(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool resultUsedToCreateReference = false)
@@ -432,12 +436,12 @@ namespace WixToolset.Core.ExtensibilityServices
432 string id = result[0].TrimEnd(':'); 436 string id = result[0].TrimEnd(':');
433 if (1 == result.Length) 437 if (1 == result.Length)
434 { 438 {
435 Messaging.Instance.OnMessage(WixErrors.InlineDirectorySyntaxRequiresPath(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, id)); 439 this.Messaging.Write(ErrorMessages.InlineDirectorySyntaxRequiresPath(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, id));
436 return null; 440 return null;
437 } 441 }
438 else if (!this.IsValidIdentifier(id)) 442 else if (!this.IsValidIdentifier(id))
439 { 443 {
440 Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, id)); 444 this.Messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, id));
441 return null; 445 return null;
442 } 446 }
443 447
@@ -449,13 +453,13 @@ namespace WixToolset.Core.ExtensibilityServices
449 { 453 {
450 if (!this.IsValidLongFilename(result[0], false, false)) 454 if (!this.IsValidLongFilename(result[0], false, false))
451 { 455 {
452 Messaging.Instance.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[0])); 456 this.Messaging.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[0]));
453 return null; 457 return null;
454 } 458 }
455 } 459 }
456 else if (!this.IsValidIdentifier(result[0])) 460 else if (!this.IsValidIdentifier(result[0]))
457 { 461 {
458 Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[0])); 462 this.Messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[0]));
459 return null; 463 return null;
460 } 464 }
461 465
@@ -467,14 +471,14 @@ namespace WixToolset.Core.ExtensibilityServices
467 { 471 {
468 if (!this.IsValidLongFilename(result[i], false, false)) 472 if (!this.IsValidLongFilename(result[i], false, false))
469 { 473 {
470 Messaging.Instance.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[i])); 474 this.Messaging.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, result[i]));
471 return null; 475 return null;
472 } 476 }
473 } 477 }
474 478
475 if (1 < result.Length && !value.EndsWith("\\")) 479 if (1 < result.Length && !value.EndsWith("\\"))
476 { 480 {
477 Messaging.Instance.OnMessage(WixWarnings.BackslashTerminateInlineDirectorySyntax(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 481 this.Messaging.Write(WarningMessages.BackslashTerminateInlineDirectorySyntax(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
478 } 482 }
479 } 483 }
480 484
@@ -483,7 +487,7 @@ namespace WixToolset.Core.ExtensibilityServices
483 487
484 public int GetAttributeIntegerValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, int minimum, int maximum) 488 public int GetAttributeIntegerValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, int minimum, int maximum)
485 { 489 {
486 return Common.GetAttributeIntegerValue(sourceLineNumbers, attribute, minimum, maximum); 490 return Common.GetAttributeIntegerValue(this.Messaging, sourceLineNumbers, attribute, minimum, maximum);
487 } 491 }
488 492
489 public string GetAttributeLongFilename(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool allowWildcards, bool allowRelative) 493 public string GetAttributeLongFilename(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool allowWildcards, bool allowRelative)
@@ -501,11 +505,11 @@ namespace WixToolset.Core.ExtensibilityServices
501 { 505 {
502 if (allowRelative) 506 if (allowRelative)
503 { 507 {
504 Messaging.Instance.OnMessage(WixErrors.IllegalRelativeLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 508 this.Messaging.Write(ErrorMessages.IllegalRelativeLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
505 } 509 }
506 else 510 else
507 { 511 {
508 Messaging.Instance.OnMessage(WixErrors.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 512 this.Messaging.Write(ErrorMessages.IllegalLongFilename(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
509 } 513 }
510 } 514 }
511 else if (allowRelative) 515 else if (allowRelative)
@@ -513,12 +517,12 @@ namespace WixToolset.Core.ExtensibilityServices
513 string normalizedPath = value.Replace('\\', '/'); 517 string normalizedPath = value.Replace('\\', '/');
514 if (normalizedPath.StartsWith("../", StringComparison.Ordinal) || normalizedPath.Contains("/../")) 518 if (normalizedPath.StartsWith("../", StringComparison.Ordinal) || normalizedPath.Contains("/../"))
515 { 519 {
516 Messaging.Instance.OnMessage(WixErrors.PayloadMustBeRelativeToCache(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 520 this.Messaging.Write(ErrorMessages.PayloadMustBeRelativeToCache(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
517 } 521 }
518 } 522 }
519 else if (CompilerCore.IsAmbiguousFilename(value)) 523 else if (CompilerCore.IsAmbiguousFilename(value))
520 { 524 {
521 Messaging.Instance.OnMessage(WixWarnings.AmbiguousFileOrDirectoryName(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 525 this.Messaging.Write(WarningMessages.AmbiguousFileOrDirectoryName(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
522 } 526 }
523 } 527 }
524 528
@@ -539,11 +543,11 @@ namespace WixToolset.Core.ExtensibilityServices
539 543
540 if (CompilerConstants.LongNotSet == longValue || CompilerConstants.IllegalLong == longValue) 544 if (CompilerConstants.LongNotSet == longValue || CompilerConstants.IllegalLong == longValue)
541 { 545 {
542 Messaging.Instance.OnMessage(WixErrors.IntegralValueSentinelCollision(sourceLineNumbers, longValue)); 546 this.Messaging.Write(ErrorMessages.IntegralValueSentinelCollision(sourceLineNumbers, longValue));
543 } 547 }
544 else if (minimum > longValue || maximum < longValue) 548 else if (minimum > longValue || maximum < longValue)
545 { 549 {
546 Messaging.Instance.OnMessage(WixErrors.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, longValue, minimum, maximum)); 550 this.Messaging.Write(ErrorMessages.IntegralValueOutOfRange(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, longValue, minimum, maximum));
547 longValue = CompilerConstants.IllegalLong; 551 longValue = CompilerConstants.IllegalLong;
548 } 552 }
549 553
@@ -551,11 +555,11 @@ namespace WixToolset.Core.ExtensibilityServices
551 } 555 }
552 catch (FormatException) 556 catch (FormatException)
553 { 557 {
554 Messaging.Instance.OnMessage(WixErrors.IllegalLongValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 558 this.Messaging.Write(ErrorMessages.IllegalLongValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
555 } 559 }
556 catch (OverflowException) 560 catch (OverflowException)
557 { 561 {
558 Messaging.Instance.OnMessage(WixErrors.IllegalLongValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 562 this.Messaging.Write(ErrorMessages.IllegalLongValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
559 } 563 }
560 } 564 }
561 565
@@ -564,7 +568,7 @@ namespace WixToolset.Core.ExtensibilityServices
564 568
565 public string GetAttributeValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, EmptyRule emptyRule = EmptyRule.CanBeWhitespaceOnly) 569 public string GetAttributeValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, EmptyRule emptyRule = EmptyRule.CanBeWhitespaceOnly)
566 { 570 {
567 return Common.GetAttributeValue(sourceLineNumbers, attribute, emptyRule); 571 return Common.GetAttributeValue(this.Messaging, sourceLineNumbers, attribute, emptyRule);
568 } 572 }
569 573
570 public string GetAttributeVersionValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) 574 public string GetAttributeVersionValue(SourceLineNumber sourceLineNumbers, XAttribute attribute)
@@ -584,7 +588,7 @@ namespace WixToolset.Core.ExtensibilityServices
584 return value; 588 return value;
585 } 589 }
586 590
587 Messaging.Instance.OnMessage(WixErrors.IllegalVersionValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 591 this.Messaging.Write(ErrorMessages.IllegalVersionValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
588 } 592 }
589 593
590 return null; 594 return null;
@@ -608,7 +612,7 @@ namespace WixToolset.Core.ExtensibilityServices
608 return YesNoDefaultType.Default; 612 return YesNoDefaultType.Default;
609 613
610 default: 614 default:
611 Messaging.Instance.OnMessage(WixErrors.IllegalYesNoDefaultValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 615 this.Messaging.Write(ErrorMessages.IllegalYesNoDefaultValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
612 return YesNoDefaultType.IllegalValue; 616 return YesNoDefaultType.IllegalValue;
613 } 617 }
614 } 618 }
@@ -628,7 +632,7 @@ namespace WixToolset.Core.ExtensibilityServices
628 return YesNoType.No; 632 return YesNoType.No;
629 633
630 default: 634 default:
631 Messaging.Instance.OnMessage(WixErrors.IllegalYesNoValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); 635 this.Messaging.Write(ErrorMessages.IllegalYesNoValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value));
632 return YesNoType.IllegalValue; 636 return YesNoType.IllegalValue;
633 } 637 }
634 } 638 }
@@ -722,7 +726,7 @@ namespace WixToolset.Core.ExtensibilityServices
722 else 726 else
723 { 727 {
724 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(element); 728 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(element);
725 Messaging.Instance.OnMessage(WixErrors.UnhandledExtensionAttribute(sourceLineNumbers, element.Name.LocalName, attribute.Name.LocalName, attribute.Name.NamespaceName)); 729 this.Messaging.Write(ErrorMessages.UnhandledExtensionAttribute(sourceLineNumbers, element.Name.LocalName, attribute.Name.LocalName, attribute.Name.NamespaceName));
726 } 730 }
727 } 731 }
728 732
@@ -736,7 +740,7 @@ namespace WixToolset.Core.ExtensibilityServices
736 else 740 else
737 { 741 {
738 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(element); 742 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(element);
739 Messaging.Instance.OnMessage(WixErrors.UnhandledExtensionElement(childSourceLineNumbers, parentElement.Name.LocalName, element.Name.LocalName, element.Name.NamespaceName)); 743 this.Messaging.Write(ErrorMessages.UnhandledExtensionElement(childSourceLineNumbers, parentElement.Name.LocalName, element.Name.LocalName, element.Name.NamespaceName));
740 } 744 }
741 } 745 }
742 746
@@ -751,7 +755,7 @@ namespace WixToolset.Core.ExtensibilityServices
751 else 755 else
752 { 756 {
753 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(element); 757 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(element);
754 Messaging.Instance.OnMessage(WixErrors.UnhandledExtensionElement(childSourceLineNumbers, parentElement.Name.LocalName, element.Name.LocalName, element.Name.NamespaceName)); 758 this.Messaging.Write(ErrorMessages.UnhandledExtensionElement(childSourceLineNumbers, parentElement.Name.LocalName, element.Name.LocalName, element.Name.NamespaceName));
755 } 759 }
756 760
757 return keyPath; 761 return keyPath;
@@ -775,13 +779,13 @@ namespace WixToolset.Core.ExtensibilityServices
775 public void UnexpectedAttribute(XElement element, XAttribute attribute) 779 public void UnexpectedAttribute(XElement element, XAttribute attribute)
776 { 780 {
777 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(element); 781 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(element);
778 Common.UnexpectedAttribute(sourceLineNumbers, attribute); 782 Common.UnexpectedAttribute(this.Messaging, sourceLineNumbers, attribute);
779 } 783 }
780 784
781 public void UnexpectedElement(XElement parentElement, XElement childElement) 785 public void UnexpectedElement(XElement parentElement, XElement childElement)
782 { 786 {
783 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(childElement); 787 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(childElement);
784 Messaging.Instance.OnMessage(WixErrors.UnexpectedElement(sourceLineNumbers, parentElement.Name.LocalName, childElement.Name.LocalName)); 788 this.Messaging.Write(ErrorMessages.UnexpectedElement(sourceLineNumbers, parentElement.Name.LocalName, childElement.Name.LocalName));
785 } 789 }
786 790
787 private void CreateTupleDefinitionCreator() 791 private void CreateTupleDefinitionCreator()
diff --git a/src/WixToolset.Core/ExtensibilityServices/PreprocessHelper.cs b/src/WixToolset.Core/ExtensibilityServices/PreprocessHelper.cs
index bcbd6a67..0e3e0bfd 100644
--- a/src/WixToolset.Core/ExtensibilityServices/PreprocessHelper.cs
+++ b/src/WixToolset.Core/ExtensibilityServices/PreprocessHelper.cs
@@ -42,7 +42,7 @@ namespace WixToolset.Core.ExtensibilityServices
42 { 42 {
43 if (showWarning) 43 if (showWarning)
44 { 44 {
45 context.Messaging.OnMessage(WixWarnings.VariableDeclarationCollision(context.CurrentSourceLineNumber, name, value, currentValue)); 45 context.Messaging.Write(WarningMessages.VariableDeclarationCollision(context.CurrentSourceLineNumber, name, value, currentValue));
46 } 46 }
47 47
48 context.Variables[name] = value; 48 context.Variables[name] = value;
@@ -56,7 +56,7 @@ namespace WixToolset.Core.ExtensibilityServices
56 // Check to make sure there are 2 parts and neither is an empty string. 56 // Check to make sure there are 2 parts and neither is an empty string.
57 if (2 != prefixParts.Length || 0 >= prefixParts[0].Length || 0 >= prefixParts[1].Length) 57 if (2 != prefixParts.Length || 0 >= prefixParts[0].Length || 0 >= prefixParts[1].Length)
58 { 58 {
59 throw new WixException(WixErrors.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, function)); 59 throw new WixException(ErrorMessages.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, function));
60 } 60 }
61 61
62 var prefix = prefixParts[0]; 62 var prefix = prefixParts[0];
@@ -65,7 +65,7 @@ namespace WixToolset.Core.ExtensibilityServices
65 // Check to make sure there are 2 parts, neither is an empty string, and the second part ends with a closing paren. 65 // Check to make sure there are 2 parts, neither is an empty string, and the second part ends with a closing paren.
66 if (2 != functionParts.Length || 0 >= functionParts[0].Length || 0 >= functionParts[1].Length || !functionParts[1].EndsWith(")", StringComparison.Ordinal)) 66 if (2 != functionParts.Length || 0 >= functionParts[0].Length || 0 >= functionParts[1].Length || !functionParts[1].EndsWith(")", StringComparison.Ordinal))
67 { 67 {
68 throw new WixException(WixErrors.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, function)); 68 throw new WixException(ErrorMessages.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, function));
69 } 69 }
70 70
71 var functionName = functionParts[0]; 71 var functionName = functionParts[0];
@@ -113,7 +113,7 @@ namespace WixToolset.Core.ExtensibilityServices
113 // Make sure the base version is specified 113 // Make sure the base version is specified
114 if (args.Length == 0 || String.IsNullOrEmpty(args[0])) 114 if (args.Length == 0 || String.IsNullOrEmpty(args[0]))
115 { 115 {
116 throw new WixException(WixErrors.InvalidPreprocessorFunctionAutoVersion(context.CurrentSourceLineNumber)); 116 throw new WixException(ErrorMessages.InvalidPreprocessorFunctionAutoVersion(context.CurrentSourceLineNumber));
117 } 117 }
118 118
119 // Build = days since 1/1/2000; Revision = seconds since midnight / 2 119 // Build = days since 1/1/2000; Revision = seconds since midnight / 2
@@ -137,7 +137,7 @@ namespace WixToolset.Core.ExtensibilityServices
137 } 137 }
138 catch (Exception e) 138 catch (Exception e)
139 { 139 {
140 throw new WixException(WixErrors.PreprocessorExtensionEvaluateFunctionFailed(context.CurrentSourceLineNumber, prefix, function, String.Join(",", args), e.Message)); 140 throw new WixException(ErrorMessages.PreprocessorExtensionEvaluateFunctionFailed(context.CurrentSourceLineNumber, prefix, function, String.Join(",", args), e.Message));
141 } 141 }
142 } 142 }
143 else 143 else
@@ -165,7 +165,7 @@ namespace WixToolset.Core.ExtensibilityServices
165 } 165 }
166 else 166 else
167 { 167 {
168 throw new WixException(WixErrors.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, variable)); 168 throw new WixException(ErrorMessages.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, variable));
169 } 169 }
170 } 170 }
171 else 171 else
@@ -185,7 +185,7 @@ namespace WixToolset.Core.ExtensibilityServices
185 } 185 }
186 else 186 else
187 { 187 {
188 throw new WixException(WixErrors.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, variable)); 188 throw new WixException(ErrorMessages.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, variable));
189 } 189 }
190 } 190 }
191 } 191 }
@@ -220,7 +220,7 @@ namespace WixToolset.Core.ExtensibilityServices
220 return context.CurrentSourceLineNumber.FileName; 220 return context.CurrentSourceLineNumber.FileName;
221 221
222 case "PLATFORM": 222 case "PLATFORM":
223 context.Messaging.OnMessage(WixWarnings.DeprecatedPreProcVariable(context.CurrentSourceLineNumber, "$(sys.PLATFORM)", "$(sys.BUILDARCH)")); 223 context.Messaging.Write(WarningMessages.DeprecatedPreProcVariable(context.CurrentSourceLineNumber, "$(sys.PLATFORM)", "$(sys.BUILDARCH)"));
224 224
225 goto case "BUILDARCH"; 225 goto case "BUILDARCH";
226 226
@@ -260,7 +260,7 @@ namespace WixToolset.Core.ExtensibilityServices
260 } 260 }
261 catch (Exception e) 261 catch (Exception e)
262 { 262 {
263 throw new WixException(WixErrors.PreprocessorExtensionGetVariableValueFailed(context.CurrentSourceLineNumber, prefix, name, e.Message)); 263 throw new WixException(ErrorMessages.PreprocessorExtensionGetVariableValueFailed(context.CurrentSourceLineNumber, prefix, name, e.Message));
264 } 264 }
265 } 265 }
266 else 266 else
@@ -277,7 +277,7 @@ namespace WixToolset.Core.ExtensibilityServices
277 // Check to make sure there are 2 parts and neither is an empty string. 277 // Check to make sure there are 2 parts and neither is an empty string.
278 if (2 != prefixParts.Length) 278 if (2 != prefixParts.Length)
279 { 279 {
280 throw new WixException(WixErrors.InvalidPreprocessorPragma(context.CurrentSourceLineNumber, pragmaName)); 280 throw new WixException(ErrorMessages.InvalidPreprocessorPragma(context.CurrentSourceLineNumber, pragmaName));
281 } 281 }
282 282
283 var prefix = prefixParts[0]; 283 var prefix = prefixParts[0];
@@ -285,7 +285,7 @@ namespace WixToolset.Core.ExtensibilityServices
285 285
286 if (String.IsNullOrEmpty(prefix) || String.IsNullOrEmpty(pragma)) 286 if (String.IsNullOrEmpty(prefix) || String.IsNullOrEmpty(pragma))
287 { 287 {
288 throw new WixException(WixErrors.InvalidPreprocessorPragma(context.CurrentSourceLineNumber, pragmaName)); 288 throw new WixException(ErrorMessages.InvalidPreprocessorPragma(context.CurrentSourceLineNumber, pragmaName));
289 } 289 }
290 290
291 switch (prefix) 291 switch (prefix)
@@ -295,7 +295,7 @@ namespace WixToolset.Core.ExtensibilityServices
295 { 295 {
296 // Add any core defined pragmas here 296 // Add any core defined pragmas here
297 default: 297 default:
298 context.Messaging.OnMessage(WixWarnings.PreprocessorUnknownPragma(context.CurrentSourceLineNumber, pragmaName)); 298 context.Messaging.Write(WarningMessages.PreprocessorUnknownPragma(context.CurrentSourceLineNumber, pragmaName));
299 break; 299 break;
300 } 300 }
301 break; 301 break;
@@ -306,7 +306,7 @@ namespace WixToolset.Core.ExtensibilityServices
306 { 306 {
307 if (!extension.ProcessPragma(prefix, pragma, args, parent)) 307 if (!extension.ProcessPragma(prefix, pragma, args, parent))
308 { 308 {
309 context.Messaging.OnMessage(WixWarnings.PreprocessorUnknownPragma(context.CurrentSourceLineNumber, pragmaName)); 309 context.Messaging.Write(WarningMessages.PreprocessorUnknownPragma(context.CurrentSourceLineNumber, pragmaName));
310 } 310 }
311 } 311 }
312 break; 312 break;
@@ -339,7 +339,7 @@ namespace WixToolset.Core.ExtensibilityServices
339 currentPosition = remainder.IndexOf(')'); 339 currentPosition = remainder.IndexOf(')');
340 if (-1 == currentPosition) 340 if (-1 == currentPosition)
341 { 341 {
342 context.Messaging.OnMessage(WixErrors.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, remainder)); 342 context.Messaging.Write(ErrorMessages.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, remainder));
343 break; 343 break;
344 } 344 }
345 345
@@ -385,12 +385,12 @@ namespace WixToolset.Core.ExtensibilityServices
385 { 385 {
386 if (isFunction) 386 if (isFunction)
387 { 387 {
388 context.Messaging.OnMessage(WixErrors.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, remainder)); 388 context.Messaging.Write(ErrorMessages.InvalidPreprocessorFunction(context.CurrentSourceLineNumber, remainder));
389 break; 389 break;
390 } 390 }
391 else 391 else
392 { 392 {
393 context.Messaging.OnMessage(WixErrors.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, remainder)); 393 context.Messaging.Write(ErrorMessages.InvalidPreprocessorVariable(context.CurrentSourceLineNumber, remainder));
394 break; 394 break;
395 } 395 }
396 } 396 }
@@ -410,12 +410,12 @@ namespace WixToolset.Core.ExtensibilityServices
410 { 410 {
411 if (isFunction) 411 if (isFunction)
412 { 412 {
413 context.Messaging.OnMessage(WixErrors.UndefinedPreprocessorFunction(context.CurrentSourceLineNumber, subString)); 413 context.Messaging.Write(ErrorMessages.UndefinedPreprocessorFunction(context.CurrentSourceLineNumber, subString));
414 break; 414 break;
415 } 415 }
416 else 416 else
417 { 417 {
418 context.Messaging.OnMessage(WixErrors.UndefinedPreprocessorVariable(context.CurrentSourceLineNumber, subString)); 418 context.Messaging.Write(ErrorMessages.UndefinedPreprocessorVariable(context.CurrentSourceLineNumber, subString));
419 break; 419 break;
420 } 420 }
421 } 421 }
@@ -448,7 +448,7 @@ namespace WixToolset.Core.ExtensibilityServices
448 { 448 {
449 if (!context.Variables.Remove(name)) 449 if (!context.Variables.Remove(name))
450 { 450 {
451 context.Messaging.OnMessage(WixErrors.CannotReundefineVariable(context.CurrentSourceLineNumber, name)); 451 context.Messaging.Write(ErrorMessages.CannotReundefineVariable(context.CurrentSourceLineNumber, name));
452 } 452 }
453 } 453 }
454 454
diff --git a/src/WixToolset.Core/Harvester.cs b/src/WixToolset.Core/Harvester.cs
index 0f79a2d6..b9c27418 100644
--- a/src/WixToolset.Core/Harvester.cs
+++ b/src/WixToolset.Core/Harvester.cs
@@ -57,7 +57,7 @@ namespace WixToolset
57 57
58 if (null == this.harvesterExtension) 58 if (null == this.harvesterExtension)
59 { 59 {
60 throw new WixException(WixErrors.HarvestTypeNotFound()); 60 throw new WixException(ErrorMessages.HarvestTypeNotFound());
61 } 61 }
62 62
63 this.harvesterExtension.Core = this.Core; 63 this.harvesterExtension.Core = this.Core;
diff --git a/src/WixToolset.Core/HarvesterCore.cs b/src/WixToolset.Core/HarvesterCore.cs
index 87e3c33f..92a057d8 100644
--- a/src/WixToolset.Core/HarvesterCore.cs
+++ b/src/WixToolset.Core/HarvesterCore.cs
@@ -5,44 +5,26 @@ namespace WixToolset.Core
5 using System; 5 using System;
6 using System.Diagnostics.CodeAnalysis; 6 using System.Diagnostics.CodeAnalysis;
7 using System.IO; 7 using System.IO;
8 using WixToolset.Data; 8 using WixToolset.Extensibility.Services;
9 9
10 /// <summary> 10 /// <summary>
11 /// The WiX Toolset harvester core. 11 /// The WiX Toolset harvester core.
12 /// </summary> 12 /// </summary>
13 public sealed class HarvesterCore : IHarvesterCore 13 public sealed class HarvesterCore : IHarvesterCore
14 { 14 {
15 private string extensionArgument; 15 public IMessaging Messaging { get; set; }
16 private string rootDirectory;
17
18 /// <summary>
19 /// Gets whether the harvester core encountered an error while processing.
20 /// </summary>
21 /// <value>Flag if core encountered an error during processing.</value>
22 public bool EncounteredError
23 {
24 get { return Messaging.Instance.EncounteredError; }
25 }
26 16
27 /// <summary> 17 /// <summary>
28 /// Gets or sets the value of the extension argument passed to heat. 18 /// Gets or sets the value of the extension argument passed to heat.
29 /// </summary> 19 /// </summary>
30 /// <value>The extension argument.</value> 20 /// <value>The extension argument.</value>
31 public string ExtensionArgument 21 public string ExtensionArgument { get; set; }
32 {
33 get { return this.extensionArgument; }
34 set { this.extensionArgument = value; }
35 }
36 22
37 /// <summary> 23 /// <summary>
38 /// Gets or sets the value of the root directory that is being harvested. 24 /// Gets or sets the value of the root directory that is being harvested.
39 /// </summary> 25 /// </summary>
40 /// <value>The root directory being harvested.</value> 26 /// <value>The root directory being harvested.</value>
41 public string RootDirectory 27 public string RootDirectory { get; set; }
42 {
43 get { return this.rootDirectory; }
44 set { this.rootDirectory = value; }
45 }
46 28
47 /// <summary> 29 /// <summary>
48 /// Create an identifier based on passed file name 30 /// Create an identifier based on passed file name
@@ -67,15 +49,6 @@ namespace WixToolset.Core
67 } 49 }
68 50
69 /// <summary> 51 /// <summary>
70 /// Sends a message to the message delegate if there is one.
71 /// </summary>
72 /// <param name="mea">Message event arguments.</param>
73 public void OnMessage(MessageEventArgs mea)
74 {
75 Messaging.Instance.OnMessage(mea);
76 }
77
78 /// <summary>
79 /// Resolves a file's path if the Wix.File.Source value starts with "SourceDir\". 52 /// Resolves a file's path if the Wix.File.Source value starts with "SourceDir\".
80 /// </summary> 53 /// </summary>
81 /// <param name="fileSource">The Wix.File.Source value with "SourceDir\".</param> 54 /// <param name="fileSource">The Wix.File.Source value with "SourceDir\".</param>
@@ -84,7 +57,7 @@ namespace WixToolset.Core
84 { 57 {
85 if (fileSource.StartsWith("SourceDir\\", StringComparison.Ordinal)) 58 if (fileSource.StartsWith("SourceDir\\", StringComparison.Ordinal))
86 { 59 {
87 string file = Path.GetFullPath(this.rootDirectory); 60 string file = Path.GetFullPath(this.RootDirectory);
88 if (File.Exists(file)) 61 if (File.Exists(file))
89 { 62 {
90 return file; 63 return file;
@@ -92,7 +65,7 @@ namespace WixToolset.Core
92 else 65 else
93 { 66 {
94 fileSource = fileSource.Substring(10); 67 fileSource = fileSource.Substring(10);
95 fileSource = Path.Combine(Path.GetFullPath(this.rootDirectory), fileSource); 68 fileSource = Path.Combine(Path.GetFullPath(this.RootDirectory), fileSource);
96 } 69 }
97 } 70 }
98 71
diff --git a/src/WixToolset.Core/HeatCore.cs b/src/WixToolset.Core/HeatCore.cs
index 2384a1ed..8e02a7b5 100644
--- a/src/WixToolset.Core/HeatCore.cs
+++ b/src/WixToolset.Core/HeatCore.cs
@@ -3,12 +3,11 @@
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using WixToolset.Core.Extensibility; 5 using WixToolset.Core.Extensibility;
6 using WixToolset.Data;
7 6
8 /// <summary> 7 /// <summary>
9 /// The WiX Toolset Harvester application core. 8 /// The WiX Toolset Harvester application core.
10 /// </summary> 9 /// </summary>
11 public sealed class HeatCore : IHeatCore, IMessageHandler 10 public sealed class HeatCore : IHeatCore
12 { 11 {
13 private Harvester harvester; 12 private Harvester harvester;
14 private Mutator mutator; 13 private Mutator mutator;
@@ -24,15 +23,6 @@ namespace WixToolset.Core
24 } 23 }
25 24
26 /// <summary> 25 /// <summary>
27 /// Gets whether the mutator core encountered an error while processing.
28 /// </summary>
29 /// <value>Flag if core encountered an error during processing.</value>
30 public bool EncounteredError
31 {
32 get { return Messaging.Instance.EncounteredError; }
33 }
34
35 /// <summary>
36 /// Gets the harvester. 26 /// Gets the harvester.
37 /// </summary> 27 /// </summary>
38 /// <value>The harvester.</value> 28 /// <value>The harvester.</value>
@@ -49,14 +39,5 @@ namespace WixToolset.Core
49 { 39 {
50 get { return this.mutator; } 40 get { return this.mutator; }
51 } 41 }
52
53 /// <summary>
54 /// Sends a message to the message delegate if there is one.
55 /// </summary>
56 /// <param name="mea">Message event arguments.</param>
57 public void OnMessage(MessageEventArgs mea)
58 {
59 Messaging.Instance.OnMessage(mea);
60 }
61 } 42 }
62} 43}
diff --git a/src/WixToolset.Core/ICommand.cs b/src/WixToolset.Core/ICommand.cs
deleted file mode 100644
index 957f735b..00000000
--- a/src/WixToolset.Core/ICommand.cs
+++ /dev/null
@@ -1,9 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 internal interface ICommand
6 {
7 void Execute();
8 }
9}
diff --git a/src/WixToolset.Core/IfDefEventHandler.cs b/src/WixToolset.Core/IfDefEventHandler.cs
deleted file mode 100644
index 37a7206e..00000000
--- a/src/WixToolset.Core/IfDefEventHandler.cs
+++ /dev/null
@@ -1,46 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 using System;
6 using System.Text;
7 using WixToolset.Data;
8
9 public delegate void IfDefEventHandler(object sender, IfDefEventArgs e);
10
11 public class IfDefEventArgs : EventArgs
12 {
13 private SourceLineNumber sourceLineNumbers;
14 private bool isIfDef;
15 private bool isDefined;
16 private string variableName;
17
18 public IfDefEventArgs(SourceLineNumber sourceLineNumbers, bool isIfDef, bool isDefined, string variableName)
19 {
20 this.sourceLineNumbers = sourceLineNumbers;
21 this.isIfDef = isIfDef;
22 this.isDefined = isDefined;
23 this.variableName = variableName;
24 }
25
26 public SourceLineNumber SourceLineNumbers
27 {
28 get { return this.sourceLineNumbers; }
29 }
30
31 public bool IsDefined
32 {
33 get { return this.isDefined; }
34 }
35
36 public bool IsIfDef
37 {
38 get { return this.isIfDef; }
39 }
40
41 public string VariableName
42 {
43 get { return this.variableName; }
44 }
45 }
46}
diff --git a/src/WixToolset.Core/IncribeContext.cs b/src/WixToolset.Core/IncribeContext.cs
index 15dd3664..9e4e3602 100644
--- a/src/WixToolset.Core/IncribeContext.cs
+++ b/src/WixToolset.Core/IncribeContext.cs
@@ -3,8 +3,8 @@
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using System; 5 using System;
6 using WixToolset.Data;
7 using WixToolset.Extensibility; 6 using WixToolset.Extensibility;
7 using WixToolset.Extensibility.Services;
8 8
9 internal class InscribeContext : IInscribeContext 9 internal class InscribeContext : IInscribeContext
10 { 10 {
@@ -15,7 +15,7 @@ namespace WixToolset.Core
15 15
16 public IServiceProvider ServiceProvider { get; } 16 public IServiceProvider ServiceProvider { get; }
17 17
18 public Messaging Messaging { get; } = Messaging.Instance; 18 public IMessaging Messaging { get; set; }
19 19
20 public string IntermediateFolder { get; set; } 20 public string IntermediateFolder { get; set; }
21 21
diff --git a/src/WixToolset.Core/Inscriber.cs b/src/WixToolset.Core/Inscriber.cs
index 81781ad4..efe64ad2 100644
--- a/src/WixToolset.Core/Inscriber.cs
+++ b/src/WixToolset.Core/Inscriber.cs
@@ -8,7 +8,7 @@ namespace WixToolset
8 /// <summary> 8 /// <summary>
9 /// Converts a wixout representation of an MSM database into a ComponentGroup the form of WiX source. 9 /// Converts a wixout representation of an MSM database into a ComponentGroup the form of WiX source.
10 /// </summary> 10 /// </summary>
11 public sealed class Inscriber : IMessageHandler 11 public sealed class Inscriber
12 { 12 {
13 /// <summary> 13 /// <summary>
14 /// Gets or sets the temp files collection. 14 /// Gets or sets the temp files collection.
@@ -433,10 +433,5 @@ namespace WixToolset
433#endif 433#endif
434 return true; 434 return true;
435 } 435 }
436
437 public void OnMessage(MessageEventArgs e)
438 {
439 Messaging.Instance.OnMessage(e);
440 }
441 } 436 }
442} 437}
diff --git a/src/WixToolset.Core/InspectorCore.cs b/src/WixToolset.Core/InspectorCore.cs
deleted file mode 100644
index 63b6af6e..00000000
--- a/src/WixToolset.Core/InspectorCore.cs
+++ /dev/null
@@ -1,32 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 using System;
6 using WixToolset.Data;
7 using WixToolset.Extensibility;
8
9 /// <summary>
10 /// Core facilities for inspector extensions.
11 /// </summary>
12 internal sealed class InspectorCore : IInspectorCore
13 {
14 /// <summary>
15 /// Gets whether an error occured.
16 /// </summary>
17 /// <value>Whether an error occured.</value>
18 public bool EncounteredError
19 {
20 get { return Messaging.Instance.EncounteredError; }
21 }
22
23 /// <summary>
24 /// Logs a message to the log handler.
25 /// </summary>
26 /// <param name="e">The <see cref="MessageEventArgs"/> that contains information to log.</param>
27 public void OnMessage(MessageEventArgs e)
28 {
29 Messaging.Instance.OnMessage(e);
30 }
31 }
32}
diff --git a/src/WixToolset.Core/Librarian.cs b/src/WixToolset.Core/Librarian.cs
index 50357d8a..a64d77dd 100644
--- a/src/WixToolset.Core/Librarian.cs
+++ b/src/WixToolset.Core/Librarian.cs
@@ -67,7 +67,7 @@ namespace WixToolset.Core
67 /// <param name="library">Library to validate.</param> 67 /// <param name="library">Library to validate.</param>
68 private Intermediate Validate(Intermediate library) 68 private Intermediate Validate(Intermediate library)
69 { 69 {
70 FindEntrySectionAndLoadSymbolsCommand find = new FindEntrySectionAndLoadSymbolsCommand(library.Sections); 70 FindEntrySectionAndLoadSymbolsCommand find = new FindEntrySectionAndLoadSymbolsCommand(this.Context.Messaging, library.Sections);
71 find.Execute(); 71 find.Execute();
72 72
73 // TODO: Consider bringing this sort of verification back. 73 // TODO: Consider bringing this sort of verification back.
@@ -80,7 +80,7 @@ namespace WixToolset.Core
80 // reportDupes.Execute(); 80 // reportDupes.Execute();
81 // } 81 // }
82 82
83 return (Messaging.Instance.EncounteredError ? null : library); 83 return (this.Context.Messaging.EncounteredError ? null : library);
84 } 84 }
85 85
86 private static Dictionary<string, Localization> CollateLocalizations(IEnumerable<Localization> localizations) 86 private static Dictionary<string, Localization> CollateLocalizations(IEnumerable<Localization> localizations)
@@ -130,7 +130,7 @@ namespace WixToolset.Core
130 } 130 }
131 else 131 else
132 { 132 {
133 this.Context.Messaging.OnMessage(WixDataErrors.FileNotFound(tuple.SourceLineNumbers, pathField.Path, tuple.Definition.Name)); 133 this.Context.Messaging.Write(ErrorMessages.FileNotFound(tuple.SourceLineNumbers, pathField.Path, tuple.Definition.Name));
134 } 134 }
135 } 135 }
136 } 136 }
diff --git a/src/WixToolset.Core/LibraryContext.cs b/src/WixToolset.Core/LibraryContext.cs
index b3efbffa..c6278482 100644
--- a/src/WixToolset.Core/LibraryContext.cs
+++ b/src/WixToolset.Core/LibraryContext.cs
@@ -6,12 +6,13 @@ namespace WixToolset.Core
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Extensibility; 8 using WixToolset.Extensibility;
9 using WixToolset.Extensibility.Services;
9 10
10 public class LibraryContext : ILibraryContext 11 public class LibraryContext : ILibraryContext
11 { 12 {
12 public IServiceProvider ServiceProvider { get; } 13 public IServiceProvider ServiceProvider { get; }
13 14
14 public Messaging Messaging { get; set; } 15 public IMessaging Messaging { get; set; }
15 16
16 public bool BindFiles { get; set; } 17 public bool BindFiles { get; set; }
17 18
diff --git a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
index 00613ca1..daf3e878 100644
--- a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
+++ b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
@@ -6,14 +6,18 @@ namespace WixToolset.Core.Link
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility.Services;
9 10
10 internal class FindEntrySectionAndLoadSymbolsCommand : ICommand 11 internal class FindEntrySectionAndLoadSymbolsCommand
11 { 12 {
12 public FindEntrySectionAndLoadSymbolsCommand(IEnumerable<IntermediateSection> sections) 13 public FindEntrySectionAndLoadSymbolsCommand(IMessaging messaging, IEnumerable<IntermediateSection> sections)
13 { 14 {
15 this.Messaging = messaging;
14 this.Sections = sections; 16 this.Sections = sections;
15 } 17 }
16 18
19 private IMessaging Messaging { get; }
20
17 private IEnumerable<IntermediateSection> Sections { get; } 21 private IEnumerable<IntermediateSection> Sections { get; }
18 22
19 /// <summary> 23 /// <summary>
@@ -55,7 +59,7 @@ namespace WixToolset.Core.Link
55 //if (SectionType.Unknown != expectedEntrySectionType && section.Type != expectedEntrySectionType) 59 //if (SectionType.Unknown != expectedEntrySectionType && section.Type != expectedEntrySectionType)
56 //{ 60 //{
57 // string outputExtension = Output.GetExtension(this.ExpectedOutputType); 61 // string outputExtension = Output.GetExtension(this.ExpectedOutputType);
58 // Messaging.Instance.OnMessage(WixWarnings.UnexpectedEntrySection(section.SourceLineNumbers, section.Type.ToString(), expectedEntrySectionType.ToString(), outputExtension)); 62 // this.Messaging.Write(WixWarnings.UnexpectedEntrySection(section.SourceLineNumbers, section.Type.ToString(), expectedEntrySectionType.ToString(), outputExtension));
59 //} 63 //}
60 64
61 if (null == this.EntrySection) 65 if (null == this.EntrySection)
@@ -64,8 +68,8 @@ namespace WixToolset.Core.Link
64 } 68 }
65 else 69 else
66 { 70 {
67 Messaging.Instance.OnMessage(WixErrors.MultipleEntrySections(this.EntrySection.Tuples.FirstOrDefault()?.SourceLineNumbers, this.EntrySection.Id, section.Id)); 71 this.Messaging.Write(ErrorMessages.MultipleEntrySections(this.EntrySection.Tuples.FirstOrDefault()?.SourceLineNumbers, this.EntrySection.Id, section.Id));
68 Messaging.Instance.OnMessage(WixErrors.MultipleEntrySections2(section.Tuples.FirstOrDefault()?.SourceLineNumbers)); 72 this.Messaging.Write(ErrorMessages.MultipleEntrySections2(section.Tuples.FirstOrDefault()?.SourceLineNumbers));
69 } 73 }
70 } 74 }
71 75
diff --git a/src/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs b/src/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs
index ac0dd7ec..23fac864 100644
--- a/src/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs
+++ b/src/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs
@@ -5,15 +5,19 @@ namespace WixToolset.Link
5 using System.Collections.Generic; 5 using System.Collections.Generic;
6 using System.Linq; 6 using System.Linq;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Extensibility.Services;
8 9
9 public class ReportConflictingSymbolsCommand 10 public class ReportConflictingSymbolsCommand
10 { 11 {
11 public ReportConflictingSymbolsCommand(IEnumerable<Symbol> possibleConflicts, IEnumerable<IntermediateSection> resolvedSections) 12 public ReportConflictingSymbolsCommand(IMessaging messaging, IEnumerable<Symbol> possibleConflicts, IEnumerable<IntermediateSection> resolvedSections)
12 { 13 {
14 this.Messaging = messaging;
13 this.PossibleConflicts = possibleConflicts; 15 this.PossibleConflicts = possibleConflicts;
14 this.ResolvedSections = resolvedSections; 16 this.ResolvedSections = resolvedSections;
15 } 17 }
16 18
19 private IMessaging Messaging { get; }
20
17 private IEnumerable<Symbol> PossibleConflicts { get; } 21 private IEnumerable<Symbol> PossibleConflicts { get; }
18 22
19 private IEnumerable<IntermediateSection> ResolvedSections { get; } 23 private IEnumerable<IntermediateSection> ResolvedSections { get; }
@@ -37,11 +41,11 @@ namespace WixToolset.Link
37 41
38 if (actuallyReferencedDuplicateSymbols.Any()) 42 if (actuallyReferencedDuplicateSymbols.Any())
39 { 43 {
40 Messaging.Instance.OnMessage(WixErrors.DuplicateSymbol(referencedDuplicateSymbol.Row.SourceLineNumbers, referencedDuplicateSymbol.Name)); 44 this.Messaging.Write(ErrorMessages.DuplicateSymbol(referencedDuplicateSymbol.Row.SourceLineNumbers, referencedDuplicateSymbol.Name));
41 45
42 foreach (Symbol duplicate in actuallyReferencedDuplicateSymbols) 46 foreach (Symbol duplicate in actuallyReferencedDuplicateSymbols)
43 { 47 {
44 Messaging.Instance.OnMessage(WixErrors.DuplicateSymbol2(duplicate.Row.SourceLineNumbers)); 48 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(duplicate.Row.SourceLineNumbers));
45 } 49 }
46 } 50 }
47 } 51 }
diff --git a/src/WixToolset.Core/Link/ResolveReferencesCommand.cs b/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
index 266871bd..c05464e9 100644
--- a/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
+++ b/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
@@ -7,19 +7,21 @@ namespace WixToolset.Link
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Tuples;
10 using WixToolset.Extensibility.Services;
10 11
11 /// <summary> 12 /// <summary>
12 /// Resolves all the simple references in a section. 13 /// Resolves all the simple references in a section.
13 /// </summary> 14 /// </summary>
14 internal class ResolveReferencesCommand : ICommand 15 internal class ResolveReferencesCommand
15 { 16 {
16 private IntermediateSection entrySection; 17 private IntermediateSection entrySection;
17 private IDictionary<string, Symbol> symbols; 18 private IDictionary<string, Symbol> symbols;
18 private HashSet<Symbol> referencedSymbols; 19 private HashSet<Symbol> referencedSymbols;
19 private HashSet<IntermediateSection> resolvedSections; 20 private HashSet<IntermediateSection> resolvedSections;
20 21
21 public ResolveReferencesCommand(IntermediateSection entrySection, IDictionary<string, Symbol> symbols) 22 public ResolveReferencesCommand(IMessaging messaging, IntermediateSection entrySection, IDictionary<string, Symbol> symbols)
22 { 23 {
24 this.Messaging = messaging;
23 this.entrySection = entrySection; 25 this.entrySection = entrySection;
24 this.symbols = symbols; 26 this.symbols = symbols;
25 } 27 }
@@ -30,6 +32,8 @@ namespace WixToolset.Link
30 32
31 public IEnumerable<IntermediateSection> ResolvedSections { get { return this.resolvedSections; } } 33 public IEnumerable<IntermediateSection> ResolvedSections { get { return this.resolvedSections; } }
32 34
35 private IMessaging Messaging { get; }
36
33 /// <summary> 37 /// <summary>
34 /// Resolves all the simple references in a section. 38 /// Resolves all the simple references in a section.
35 /// </summary> 39 /// </summary>
@@ -69,14 +73,14 @@ namespace WixToolset.Link
69 73
70 if (!this.symbols.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var symbol)) 74 if (!this.symbols.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var symbol))
71 { 75 {
72 Messaging.Instance.OnMessage(WixErrors.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName)); 76 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName));
73 } 77 }
74 else // see if the symbol (and any of its duplicates) are appropriately accessible. 78 else // see if the symbol (and any of its duplicates) are appropriately accessible.
75 { 79 {
76 IList<Symbol> accessible = DetermineAccessibleSymbols(section, symbol); 80 IList<Symbol> accessible = DetermineAccessibleSymbols(section, symbol);
77 if (!accessible.Any()) 81 if (!accessible.Any())
78 { 82 {
79 Messaging.Instance.OnMessage(WixErrors.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName, symbol.Access)); 83 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName, symbol.Access));
80 } 84 }
81 else if (1 == accessible.Count) 85 else if (1 == accessible.Count)
82 { 86 {
@@ -95,16 +99,16 @@ namespace WixToolset.Link
95 99
96 if (String.IsNullOrEmpty(referencingSourceLineNumber)) 100 if (String.IsNullOrEmpty(referencingSourceLineNumber))
97 { 101 {
98 Messaging.Instance.OnMessage(WixErrors.DuplicateSymbol(accessibleSymbol.Row.SourceLineNumbers, accessibleSymbol.Name)); 102 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Row.SourceLineNumbers, accessibleSymbol.Name));
99 } 103 }
100 else 104 else
101 { 105 {
102 Messaging.Instance.OnMessage(WixErrors.DuplicateSymbol(accessibleSymbol.Row.SourceLineNumbers, accessibleSymbol.Name, referencingSourceLineNumber)); 106 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Row.SourceLineNumbers, accessibleSymbol.Name, referencingSourceLineNumber));
103 } 107 }
104 108
105 foreach (Symbol accessibleDuplicate in accessible.Skip(1)) 109 foreach (Symbol accessibleDuplicate in accessible.Skip(1))
106 { 110 {
107 Messaging.Instance.OnMessage(WixErrors.DuplicateSymbol2(accessibleDuplicate.Row.SourceLineNumbers)); 111 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(accessibleDuplicate.Row.SourceLineNumbers));
108 } 112 }
109 } 113 }
110 } 114 }
diff --git a/src/WixToolset.Core/Link/WixGroupingOrdering.cs b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
index f15ebc75..50c4d8d2 100644
--- a/src/WixToolset.Core/Link/WixGroupingOrdering.cs
+++ b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
@@ -11,13 +11,14 @@ namespace WixToolset.Core.Link
11 using System.Text; 11 using System.Text;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Tuples;
14 using WixToolset.Extensibility.Services;
14 15
15 /// <summary> 16 /// <summary>
16 /// Grouping and Ordering class of the WiX toolset. 17 /// Grouping and Ordering class of the WiX toolset.
17 /// </summary> 18 /// </summary>
18 internal sealed class WixGroupingOrdering : IMessageHandler 19 internal sealed class WixGroupingOrdering
19 { 20 {
20 private IMessageHandler messageHandler; 21 private IMessaging messageHandler;
21 private List<string> groupTypes; 22 private List<string> groupTypes;
22 private List<string> itemTypes; 23 private List<string> itemTypes;
23 private ItemCollection items; 24 private ItemCollection items;
@@ -32,7 +33,7 @@ namespace WixToolset.Core.Link
32 /// <param name="messageHandler">Handler for any error messages.</param> 33 /// <param name="messageHandler">Handler for any error messages.</param>
33 /// <param name="groupTypes">Group types to include.</param> 34 /// <param name="groupTypes">Group types to include.</param>
34 /// <param name="itemTypes">Item types to include.</param> 35 /// <param name="itemTypes">Item types to include.</param>
35 public WixGroupingOrdering(IntermediateSection entrySections, IMessageHandler messageHandler) 36 public WixGroupingOrdering(IntermediateSection entrySections, IMessaging messageHandler)
36 { 37 {
37 this.EntrySection = entrySections; 38 this.EntrySection = entrySections;
38 this.messageHandler = messageHandler; 39 this.messageHandler = messageHandler;
@@ -59,29 +60,6 @@ namespace WixToolset.Core.Link
59 } 60 }
60 61
61 /// <summary> 62 /// <summary>
62 /// Sends a message to the message handler if there is one.
63 /// </summary>
64 /// <param name="mea">Message event arguments.</param>
65 public void OnMessage(MessageEventArgs e)
66 {
67 WixErrorEventArgs errorEventArgs = e as WixErrorEventArgs;
68
69 if (null != errorEventArgs || MessageLevel.Error == e.Level)
70 {
71 this.encounteredError = true;
72 }
73
74 if (null != this.messageHandler)
75 {
76 this.messageHandler.OnMessage(e);
77 }
78 else if (null != errorEventArgs)
79 {
80 throw new WixException(errorEventArgs);
81 }
82 }
83
84 /// <summary>
85 /// Finds all nested items under a parent group and creates new WixGroup data for them. 63 /// Finds all nested items under a parent group and creates new WixGroup data for them.
86 /// </summary> 64 /// </summary>
87 /// <param name="parentType">The group type for the parent group to flatten.</param> 65 /// <param name="parentType">The group type for the parent group to flatten.</param>
@@ -156,7 +134,7 @@ namespace WixToolset.Core.Link
156 Item parentItem; 134 Item parentItem;
157 if (!this.items.TryGetValue(parentType, parentId, out parentItem)) 135 if (!this.items.TryGetValue(parentType, parentId, out parentItem))
158 { 136 {
159 this.OnMessage(WixErrors.IdentifierNotFound(parentType, parentId)); 137 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(parentType, parentId));
160 return; 138 return;
161 } 139 }
162 140
@@ -257,7 +235,7 @@ namespace WixToolset.Core.Link
257 //if (null == wixGroupTable || 0 == wixGroupTable.Rows.Count) 235 //if (null == wixGroupTable || 0 == wixGroupTable.Rows.Count)
258 //{ 236 //{
259 // // TODO: Change message name to make it *not* Bundle specific? 237 // // TODO: Change message name to make it *not* Bundle specific?
260 // this.OnMessage(WixErrors.MissingBundleInformation("WixGroup")); 238 // this.Write(WixErrors.MissingBundleInformation("WixGroup"));
261 //} 239 //}
262 240
263 // Collect all of the groups 241 // Collect all of the groups
@@ -326,7 +304,7 @@ namespace WixToolset.Core.Link
326 if (this.FindCircularGroupReference(item, item, itemsSeen, out circularReference)) 304 if (this.FindCircularGroupReference(item, item, itemsSeen, out circularReference))
327 { 305 {
328 itemsInKnownLoops.Add(itemsSeen); 306 itemsInKnownLoops.Add(itemsSeen);
329 this.OnMessage(WixErrors.ReferenceLoopDetected(item.Row.SourceLineNumbers, circularReference)); 307 this.messageHandler.Write(ErrorMessages.ReferenceLoopDetected(item.Row.SourceLineNumbers, circularReference));
330 } 308 }
331 } 309 }
332 } 310 }
@@ -398,12 +376,12 @@ namespace WixToolset.Core.Link
398 376
399 if (!this.items.TryGetValue(rowItemType, rowItemName, out var item)) 377 if (!this.items.TryGetValue(rowItemType, rowItemName, out var item))
400 { 378 {
401 this.OnMessage(WixErrors.IdentifierNotFound(rowItemType, rowItemName)); 379 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(rowItemType, rowItemName));
402 } 380 }
403 381
404 if (!this.items.TryGetValue(rowDependsOnType, rowDependsOnName, out var dependsOn)) 382 if (!this.items.TryGetValue(rowDependsOnType, rowDependsOnName, out var dependsOn))
405 { 383 {
406 this.OnMessage(WixErrors.IdentifierNotFound(rowDependsOnType, rowDependsOnName)); 384 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(rowDependsOnType, rowDependsOnName));
407 } 385 }
408 386
409 if (null == item || null == dependsOn) 387 if (null == item || null == dependsOn)
@@ -411,7 +389,7 @@ namespace WixToolset.Core.Link
411 continue; 389 continue;
412 } 390 }
413 391
414 item.AddAfter(dependsOn, this); 392 item.AddAfter(dependsOn, this.messageHandler);
415 } 393 }
416 } 394 }
417 395
@@ -426,12 +404,12 @@ namespace WixToolset.Core.Link
426 // ordering. 404 // ordering.
427 foreach (Item item in this.items) 405 foreach (Item item in this.items)
428 { 406 {
429 item.PropagateAfterToChildItems(this); 407 item.PropagateAfterToChildItems(this.messageHandler);
430 } 408 }
431 409
432 foreach (Item item in this.items) 410 foreach (Item item in this.items)
433 { 411 {
434 item.FlattenAfters(this); 412 item.FlattenAfters(this.messageHandler);
435 } 413 }
436 } 414 }
437 415
@@ -595,7 +573,7 @@ namespace WixToolset.Core.Link
595 /// </summary> 573 /// </summary>
596 /// <param name="items">List of items to add.</param> 574 /// <param name="items">List of items to add.</param>
597 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 575 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
598 public void AddAfter(ItemCollection items, IMessageHandler messageHandler) 576 public void AddAfter(ItemCollection items, IMessaging messageHandler)
599 { 577 {
600 foreach (Item item in items) 578 foreach (Item item in items)
601 { 579 {
@@ -608,7 +586,7 @@ namespace WixToolset.Core.Link
608 /// </summary> 586 /// </summary>
609 /// <param name="item">Items to add.</param> 587 /// <param name="item">Items to add.</param>
610 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 588 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
611 public void AddAfter(Item after, IMessageHandler messageHandler) 589 public void AddAfter(Item after, IMessaging messageHandler)
612 { 590 {
613 if (this.beforeItems.Contains(after)) 591 if (this.beforeItems.Contains(after))
614 { 592 {
@@ -617,7 +595,7 @@ namespace WixToolset.Core.Link
617 // have lost some distinction between authored and propagated ordering. 595 // have lost some distinction between authored and propagated ordering.
618 string circularReference = String.Format(CultureInfo.InvariantCulture, "{0}:{1} -> {2}:{3} -> {0}:{1}", 596 string circularReference = String.Format(CultureInfo.InvariantCulture, "{0}:{1} -> {2}:{3} -> {0}:{1}",
619 this.Type, this.Id, after.Type, after.Id); 597 this.Type, this.Id, after.Type, after.Id);
620 messageHandler.OnMessage(WixErrors.OrderingReferenceLoopDetected(after.Row.SourceLineNumbers, circularReference)); 598 messageHandler.Write(ErrorMessages.OrderingReferenceLoopDetected(after.Row.SourceLineNumbers, circularReference));
621 return; 599 return;
622 } 600 }
623 601
@@ -632,7 +610,7 @@ namespace WixToolset.Core.Link
632 /// <remarks>Because items don't know about their parent groups (and can, in fact, be in more 610 /// <remarks>Because items don't know about their parent groups (and can, in fact, be in more
633 /// than one group at a time), we need to propagate the 'afters' from each parent item to its children 611 /// than one group at a time), we need to propagate the 'afters' from each parent item to its children
634 /// before we attempt to flatten the ordering.</remarks> 612 /// before we attempt to flatten the ordering.</remarks>
635 public void PropagateAfterToChildItems(IMessageHandler messageHandler) 613 public void PropagateAfterToChildItems(IMessaging messageHandler)
636 { 614 {
637 if (this.ShouldItemPropagateChildOrdering()) 615 if (this.ShouldItemPropagateChildOrdering())
638 { 616 {
@@ -647,7 +625,7 @@ namespace WixToolset.Core.Link
647 /// Flattens the ordering dependency for this item. 625 /// Flattens the ordering dependency for this item.
648 /// </summary> 626 /// </summary>
649 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 627 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
650 public void FlattenAfters(IMessageHandler messageHandler) 628 public void FlattenAfters(IMessaging messageHandler)
651 { 629 {
652 if (this.flattenedAfterItems) 630 if (this.flattenedAfterItems)
653 { 631 {
diff --git a/src/WixToolset.Core/LinkContext.cs b/src/WixToolset.Core/LinkContext.cs
index 1384cf98..b4474ec5 100644
--- a/src/WixToolset.Core/LinkContext.cs
+++ b/src/WixToolset.Core/LinkContext.cs
@@ -17,7 +17,7 @@ namespace WixToolset.Core
17 17
18 public IServiceProvider ServiceProvider { get; } 18 public IServiceProvider ServiceProvider { get; }
19 19
20 public Messaging Messaging { get; set; } 20 public IMessaging Messaging { get; set; }
21 21
22 public IEnumerable<ILinkerExtension> Extensions { get; set; } 22 public IEnumerable<ILinkerExtension> Extensions { get; set; }
23 23
diff --git a/src/WixToolset.Core/Linker.cs b/src/WixToolset.Core/Linker.cs
index ccf6f329..d980d79f 100644
--- a/src/WixToolset.Core/Linker.cs
+++ b/src/WixToolset.Core/Linker.cs
@@ -17,7 +17,7 @@ namespace WixToolset.Core
17 /// <summary> 17 /// <summary>
18 /// Linker core of the WiX toolset. 18 /// Linker core of the WiX toolset.
19 /// </summary> 19 /// </summary>
20 public sealed class Linker : IMessageHandler 20 public sealed class Linker
21 { 21 {
22 private static readonly char[] colonCharacter = ":".ToCharArray(); 22 private static readonly char[] colonCharacter = ":".ToCharArray();
23 private static readonly string emptyGuid = Guid.Empty.ToString("B"); 23 private static readonly string emptyGuid = Guid.Empty.ToString("B");
@@ -129,14 +129,14 @@ namespace WixToolset.Core
129 129
130 // First find the entry section and while processing all sections load all the symbols from all of the sections. 130 // First find the entry section and while processing all sections load all the symbols from all of the sections.
131 // sections.FindEntrySectionAndLoadSymbols(false, this, expectedOutputType, out entrySection, out allSymbols); 131 // sections.FindEntrySectionAndLoadSymbols(false, this, expectedOutputType, out entrySection, out allSymbols);
132 var find = new FindEntrySectionAndLoadSymbolsCommand(sections); 132 var find = new FindEntrySectionAndLoadSymbolsCommand(this.Context.Messaging, sections);
133 find.ExpectedOutputType = this.Context.ExpectedOutputType; 133 find.ExpectedOutputType = this.Context.ExpectedOutputType;
134 find.Execute(); 134 find.Execute();
135 135
136 // Must have found the entry section by now. 136 // Must have found the entry section by now.
137 if (null == find.EntrySection) 137 if (null == find.EntrySection)
138 { 138 {
139 throw new WixException(WixErrors.MissingEntrySection(this.Context.ExpectedOutputType.ToString())); 139 throw new WixException(ErrorMessages.MissingEntrySection(this.Context.ExpectedOutputType.ToString()));
140 } 140 }
141 141
142 // Add the missing standard action symbols. 142 // Add the missing standard action symbols.
@@ -144,12 +144,12 @@ namespace WixToolset.Core
144 144
145 // Resolve the symbol references to find the set of sections we care about for linking. 145 // Resolve the symbol references to find the set of sections we care about for linking.
146 // Of course, we start with the entry section (that's how it got its name after all). 146 // Of course, we start with the entry section (that's how it got its name after all).
147 var resolve = new ResolveReferencesCommand(find.EntrySection, find.Symbols); 147 var resolve = new ResolveReferencesCommand(this.Context.Messaging, find.EntrySection, find.Symbols);
148 resolve.BuildingMergeModule = (SectionType.Module == find.EntrySection.Type); 148 resolve.BuildingMergeModule = (SectionType.Module == find.EntrySection.Type);
149 149
150 resolve.Execute(); 150 resolve.Execute();
151 151
152 if (Messaging.Instance.EncounteredError) 152 if (this.Context.Messaging.EncounteredError)
153 { 153 {
154 return null; 154 return null;
155 } 155 }
@@ -160,7 +160,7 @@ namespace WixToolset.Core
160 160
161 this.FlattenSectionsComplexReferences(sections); 161 this.FlattenSectionsComplexReferences(sections);
162 162
163 if (Messaging.Instance.EncounteredError) 163 if (this.Context.Messaging.EncounteredError)
164 { 164 {
165 return null; 165 return null;
166 } 166 }
@@ -172,7 +172,7 @@ namespace WixToolset.Core
172 var modulesToFeatures = new ConnectToFeatureCollection(); 172 var modulesToFeatures = new ConnectToFeatureCollection();
173 this.ProcessComplexReferences(find.EntrySection, sections, referencedComponents, componentsToFeatures, featuresToFeatures, modulesToFeatures); 173 this.ProcessComplexReferences(find.EntrySection, sections, referencedComponents, componentsToFeatures, featuresToFeatures, modulesToFeatures);
174 174
175 if (Messaging.Instance.EncounteredError) 175 if (this.Context.Messaging.EncounteredError)
176 { 176 {
177 return null; 177 return null;
178 } 178 }
@@ -182,15 +182,15 @@ namespace WixToolset.Core
182 { 182 {
183 if (!referencedComponents.Contains(symbol.Name)) 183 if (!referencedComponents.Contains(symbol.Name))
184 { 184 {
185 this.OnMessage(WixErrors.OrphanedComponent(symbol.Row.SourceLineNumbers, symbol.Row.Id.Id)); 185 this.OnMessage(ErrorMessages.OrphanedComponent(symbol.Row.SourceLineNumbers, symbol.Row.Id.Id));
186 } 186 }
187 } 187 }
188 188
189 // Report duplicates that would ultimately end up being primary key collisions. 189 // Report duplicates that would ultimately end up being primary key collisions.
190 var reportDupes = new ReportConflictingSymbolsCommand(find.PossiblyConflictingSymbols, resolve.ResolvedSections); 190 var reportDupes = new ReportConflictingSymbolsCommand(this.Context.Messaging, find.PossiblyConflictingSymbols, resolve.ResolvedSections);
191 reportDupes.Execute(); 191 reportDupes.Execute();
192 192
193 if (Messaging.Instance.EncounteredError) 193 if (this.Context.Messaging.EncounteredError)
194 { 194 {
195 return null; 195 return null;
196 } 196 }
@@ -422,7 +422,7 @@ namespace WixToolset.Core
422 } 422 }
423 else if (!row.Overridable || (collidingRow.Overridable && row.Overridable)) 423 else if (!row.Overridable || (collidingRow.Overridable && row.Overridable))
424 { 424 {
425 this.OnMessage(WixErrors.WixVariableCollision(row.SourceLineNumbers, row.WixVariable)); 425 this.OnMessage(ErrorMessages.WixVariableCollision(row.SourceLineNumbers, row.WixVariable));
426 } 426 }
427 } 427 }
428 else 428 else
@@ -691,7 +691,7 @@ namespace WixToolset.Core
691 // Bundles have groups of data that must be flattened in a way different from other types. 691 // Bundles have groups of data that must be flattened in a way different from other types.
692 this.FlattenBundleTables(resolvedSection); 692 this.FlattenBundleTables(resolvedSection);
693 693
694 if (Messaging.Instance.EncounteredError) 694 if (this.Context.Messaging.EncounteredError)
695 { 695 {
696 return null; 696 return null;
697 } 697 }
@@ -702,7 +702,7 @@ namespace WixToolset.Core
702 this.CheckOutputConsistency(output); 702 this.CheckOutputConsistency(output);
703#endif 703#endif
704 704
705 return Messaging.Instance.EncounteredError ? null : output; 705 return this.Context.Messaging.EncounteredError ? null : output;
706 } 706 }
707 707
708#if SOLVE_CUSTOM_TABLE 708#if SOLVE_CUSTOM_TABLE
@@ -1079,10 +1079,10 @@ namespace WixToolset.Core
1079 /// <summary> 1079 /// <summary>
1080 /// Sends a message to the message delegate if there is one. 1080 /// Sends a message to the message delegate if there is one.
1081 /// </summary> 1081 /// </summary>
1082 /// <param name="mea">Message event arguments.</param> 1082 /// <param name="message">Message event arguments.</param>
1083 public void OnMessage(MessageEventArgs e) 1083 public void OnMessage(Message message)
1084 { 1084 {
1085 this.Context.Messaging.OnMessage(e); 1085 this.Context.Messaging.Write(message);
1086 } 1086 }
1087 1087
1088 /// <summary> 1088 /// <summary>
@@ -1138,7 +1138,7 @@ namespace WixToolset.Core
1138 { 1138 {
1139 if (connection.IsExplicitPrimaryFeature) 1139 if (connection.IsExplicitPrimaryFeature)
1140 { 1140 {
1141 this.OnMessage(WixErrors.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), connection.PrimaryFeature ?? resolvedSection.Id)); 1141 this.OnMessage(ErrorMessages.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), connection.PrimaryFeature ?? resolvedSection.Id));
1142 continue; 1142 continue;
1143 } 1143 }
1144 else 1144 else
@@ -1170,7 +1170,7 @@ namespace WixToolset.Core
1170 connection = featuresToFeatures[wixComplexReferenceRow.Child]; 1170 connection = featuresToFeatures[wixComplexReferenceRow.Child];
1171 if (null != connection) 1171 if (null != connection)
1172 { 1172 {
1173 this.OnMessage(WixErrors.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id))); 1173 this.OnMessage(ErrorMessages.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id)));
1174 continue; 1174 continue;
1175 } 1175 }
1176 1176
@@ -1187,7 +1187,7 @@ namespace WixToolset.Core
1187 { 1187 {
1188 if (connection.IsExplicitPrimaryFeature) 1188 if (connection.IsExplicitPrimaryFeature)
1189 { 1189 {
1190 this.OnMessage(WixErrors.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id))); 1190 this.OnMessage(ErrorMessages.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id)));
1191 continue; 1191 continue;
1192 } 1192 }
1193 else 1193 else
@@ -1214,7 +1214,7 @@ namespace WixToolset.Core
1214 case ComplexReferenceChildType.Component: 1214 case ComplexReferenceChildType.Component:
1215 if (componentsToModules.ContainsKey(wixComplexReferenceRow.Child)) 1215 if (componentsToModules.ContainsKey(wixComplexReferenceRow.Child))
1216 { 1216 {
1217 this.OnMessage(WixErrors.ComponentReferencedTwice(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.Child)); 1217 this.OnMessage(ErrorMessages.ComponentReferencedTwice(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.Child));
1218 continue; 1218 continue;
1219 } 1219 }
1220 else 1220 else
@@ -1258,7 +1258,7 @@ namespace WixToolset.Core
1258 connection = featuresToFeatures[wixComplexReferenceRow.Child]; 1258 connection = featuresToFeatures[wixComplexReferenceRow.Child];
1259 if (null != connection) 1259 if (null != connection)
1260 { 1260 {
1261 this.OnMessage(WixErrors.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id))); 1261 this.OnMessage(ErrorMessages.MultiplePrimaryReferences(wixComplexReferenceRow.SourceLineNumbers, wixComplexReferenceRow.ChildType.ToString(), wixComplexReferenceRow.Child, wixComplexReferenceRow.ParentType.ToString(), wixComplexReferenceRow.Parent, (null != connection.PrimaryFeature ? "Feature" : "Product"), (null != connection.PrimaryFeature ? connection.PrimaryFeature : resolvedSection.Id)));
1262 continue; 1262 continue;
1263 } 1263 }
1264 1264
@@ -1443,7 +1443,7 @@ namespace WixToolset.Core
1443 // way up to present the loop as a directed graph. 1443 // way up to present the loop as a directed graph.
1444 var loop = String.Join(" -> ", loopDetector); 1444 var loop = String.Join(" -> ", loopDetector);
1445 1445
1446 this.OnMessage(WixErrors.ReferenceLoopDetected(wixComplexReferenceRow?.SourceLineNumbers, loop)); 1446 this.OnMessage(ErrorMessages.ReferenceLoopDetected(wixComplexReferenceRow?.SourceLineNumbers, loop));
1447 1447
1448 // Cleanup the parentGroupsNeedingProcessing and the loopDetector just like the 1448 // Cleanup the parentGroupsNeedingProcessing and the loopDetector just like the
1449 // exit of this method does at the end because we are exiting early. 1449 // exit of this method does at the end because we are exiting early.
@@ -1580,7 +1580,7 @@ namespace WixToolset.Core
1580 // will hold Payloads under UX, ChainPackages (references?) under Chain, 1580 // will hold Payloads under UX, ChainPackages (references?) under Chain,
1581 // and ChainPackages/Payloads under the attached and any detatched 1581 // and ChainPackages/Payloads under the attached and any detatched
1582 // Containers. 1582 // Containers.
1583 var groups = new WixGroupingOrdering(entrySection, this); 1583 var groups = new WixGroupingOrdering(entrySection, this.Context.Messaging);
1584 1584
1585 // Create UX payloads and Package payloads 1585 // Create UX payloads and Package payloads
1586 groups.UseTypes(new string[] { "Container", "Layout", "PackageGroup", "PayloadGroup", "Package" }, new string[] { "PackageGroup", "Package", "PayloadGroup", "Payload" }); 1586 groups.UseTypes(new string[] { "Container", "Layout", "PackageGroup", "PayloadGroup", "Package" }, new string[] { "PackageGroup", "Package", "PayloadGroup", "Payload" });
@@ -1685,11 +1685,11 @@ namespace WixToolset.Core
1685 // display an error for the component or merge module as approrpriate 1685 // display an error for the component or merge module as approrpriate
1686 if (null != multipleFeatureComponents) 1686 if (null != multipleFeatureComponents)
1687 { 1687 {
1688 this.OnMessage(WixErrors.ComponentExpectedFeature(row.SourceLineNumbers, connectionId, row.Definition.Name, row.Id.Id)); 1688 this.OnMessage(ErrorMessages.ComponentExpectedFeature(row.SourceLineNumbers, connectionId, row.Definition.Name, row.Id.Id));
1689 } 1689 }
1690 else 1690 else
1691 { 1691 {
1692 this.OnMessage(WixErrors.MergeModuleExpectedFeature(row.SourceLineNumbers, connectionId)); 1692 this.OnMessage(ErrorMessages.MergeModuleExpectedFeature(row.SourceLineNumbers, connectionId));
1693 } 1693 }
1694 } 1694 }
1695 else 1695 else
@@ -1704,7 +1704,7 @@ namespace WixToolset.Core
1704 { 1704 {
1705 if (!multipleFeatureComponents.Contains(connectionId)) 1705 if (!multipleFeatureComponents.Contains(connectionId))
1706 { 1706 {
1707 this.OnMessage(WixWarnings.ImplicitComponentPrimaryFeature(connectionId)); 1707 this.OnMessage(WarningMessages.ImplicitComponentPrimaryFeature(connectionId));
1708 1708
1709 // remember this component so only one warning is generated for it 1709 // remember this component so only one warning is generated for it
1710 multipleFeatureComponents[connectionId] = null; 1710 multipleFeatureComponents[connectionId] = null;
@@ -1712,7 +1712,7 @@ namespace WixToolset.Core
1712 } 1712 }
1713 else 1713 else
1714 { 1714 {
1715 this.OnMessage(WixWarnings.ImplicitMergeModulePrimaryFeature(connectionId)); 1715 this.OnMessage(WarningMessages.ImplicitMergeModulePrimaryFeature(connectionId));
1716 } 1716 }
1717 } 1717 }
1718 1718
diff --git a/src/WixToolset.Core/Localizer.cs b/src/WixToolset.Core/Localizer.cs
index 8265c026..d4f89e7a 100644
--- a/src/WixToolset.Core/Localizer.cs
+++ b/src/WixToolset.Core/Localizer.cs
@@ -9,6 +9,7 @@ namespace WixToolset.Core
9 using WixToolset.Data.Rows; 9 using WixToolset.Data.Rows;
10 using WixToolset.Core.Native; 10 using WixToolset.Core.Native;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Services;
12 13
13 /// <summary> 14 /// <summary>
14 /// Parses localization files and localizes database values. 15 /// Parses localization files and localizes database values.
@@ -24,7 +25,7 @@ namespace WixToolset.Core
24 /// <summary> 25 /// <summary>
25 /// Instantiate a new Localizer. 26 /// Instantiate a new Localizer.
26 /// </summary> 27 /// </summary>
27 public Localizer(IEnumerable<Localization> localizations) 28 public Localizer(IMessaging messaging, IEnumerable<Localization> localizations)
28 { 29 {
29 this.Codepage = -1; 30 this.Codepage = -1;
30 this.variables = new Dictionary<string, BindVariable>(); 31 this.variables = new Dictionary<string, BindVariable>();
@@ -39,7 +40,7 @@ namespace WixToolset.Core
39 40
40 foreach (var variable in localization.Variables) 41 foreach (var variable in localization.Variables)
41 { 42 {
42 Localizer.AddWixVariable(this.variables, variable); 43 Localizer.AddWixVariable(messaging, this.variables, variable);
43 } 44 }
44 45
45 foreach (KeyValuePair<string, LocalizedControl> localizedControl in localization.LocalizedControls) 46 foreach (KeyValuePair<string, LocalizedControl> localizedControl in localization.LocalizedControls)
@@ -86,7 +87,7 @@ namespace WixToolset.Core
86 /// <param name="tableDefinitions">Collection containing TableDefinitions to use when loading the localization file.</param> 87 /// <param name="tableDefinitions">Collection containing TableDefinitions to use when loading the localization file.</param>
87 /// <param name="suppressSchema">Suppress xml schema validation while loading.</param> 88 /// <param name="suppressSchema">Suppress xml schema validation while loading.</param>
88 /// <returns>Returns the loaded localization file.</returns> 89 /// <returns>Returns the loaded localization file.</returns>
89 public static Localization ParseLocalizationFile(string path) 90 public static Localization ParseLocalizationFile(IMessaging messaging, string path)
90 { 91 {
91 XElement root = XDocument.Load(path).Root; 92 XElement root = XDocument.Load(path).Root;
92 Localization localization = null; 93 Localization localization = null;
@@ -96,23 +97,23 @@ namespace WixToolset.Core
96 { 97 {
97 if (Localizer.WxlNamespace == root.Name.Namespace) 98 if (Localizer.WxlNamespace == root.Name.Namespace)
98 { 99 {
99 localization = ParseWixLocalizationElement(root); 100 localization = ParseWixLocalizationElement(messaging, root);
100 } 101 }
101 else // invalid or missing namespace 102 else // invalid or missing namespace
102 { 103 {
103 if (null == root.Name.Namespace) 104 if (null == root.Name.Namespace)
104 { 105 {
105 Messaging.Instance.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, Localizer.WxlNamespace.NamespaceName)); 106 messaging.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, Localizer.WxlNamespace.NamespaceName));
106 } 107 }
107 else 108 else
108 { 109 {
109 Messaging.Instance.OnMessage(WixErrors.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, root.Name.LocalName, Localizer.WxlNamespace.NamespaceName)); 110 messaging.Write(ErrorMessages.InvalidWixXmlNamespace(sourceLineNumbers, Localizer.XmlElementName, root.Name.LocalName, Localizer.WxlNamespace.NamespaceName));
110 } 111 }
111 } 112 }
112 } 113 }
113 else 114 else
114 { 115 {
115 Messaging.Instance.OnMessage(WixErrors.InvalidDocumentElement(sourceLineNumbers, root.Name.LocalName, "localization", Localizer.XmlElementName)); 116 messaging.Write(ErrorMessages.InvalidDocumentElement(sourceLineNumbers, root.Name.LocalName, "localization", Localizer.XmlElementName));
116 } 117 }
117 118
118 return localization; 119 return localization;
@@ -123,7 +124,7 @@ namespace WixToolset.Core
123 /// </summary> 124 /// </summary>
124 /// <param name="variables">Dictionary of variable rows.</param> 125 /// <param name="variables">Dictionary of variable rows.</param>
125 /// <param name="wixVariableRow">Row to add to the variables dictionary.</param> 126 /// <param name="wixVariableRow">Row to add to the variables dictionary.</param>
126 private static void AddWixVariable(IDictionary<string, BindVariable> variables, BindVariable wixVariableRow) 127 private static void AddWixVariable(IMessaging messaging, IDictionary<string, BindVariable> variables, BindVariable wixVariableRow)
127 { 128 {
128 if (!variables.TryGetValue(wixVariableRow.Id, out var existingWixVariableRow) || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) 129 if (!variables.TryGetValue(wixVariableRow.Id, out var existingWixVariableRow) || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable))
129 { 130 {
@@ -131,7 +132,7 @@ namespace WixToolset.Core
131 } 132 }
132 else if (!wixVariableRow.Overridable) 133 else if (!wixVariableRow.Overridable)
133 { 134 {
134 Messaging.Instance.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); 135 messaging.Write(ErrorMessages.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id));
135 } 136 }
136 } 137 }
137 138
@@ -139,7 +140,7 @@ namespace WixToolset.Core
139 /// Parses the WixLocalization element. 140 /// Parses the WixLocalization element.
140 /// </summary> 141 /// </summary>
141 /// <param name="node">Element to parse.</param> 142 /// <param name="node">Element to parse.</param>
142 private static Localization ParseWixLocalizationElement(XElement node) 143 private static Localization ParseWixLocalizationElement(IMessaging messaging, XElement node)
143 { 144 {
144 int codepage = -1; 145 int codepage = -1;
145 string culture = null; 146 string culture = null;
@@ -161,13 +162,13 @@ namespace WixToolset.Core
161 // do nothing; @Language is used for locutil which can't convert Culture to lcid 162 // do nothing; @Language is used for locutil which can't convert Culture to lcid
162 break; 163 break;
163 default: 164 default:
164 Common.UnexpectedAttribute(sourceLineNumbers, attrib); 165 Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib);
165 break; 166 break;
166 } 167 }
167 } 168 }
168 else 169 else
169 { 170 {
170 Common.UnexpectedAttribute(sourceLineNumbers, attrib); 171 Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib);
171 } 172 }
172 } 173 }
173 174
@@ -181,32 +182,32 @@ namespace WixToolset.Core
181 switch (child.Name.LocalName) 182 switch (child.Name.LocalName)
182 { 183 {
183 case "String": 184 case "String":
184 Localizer.ParseString(child, variables); 185 Localizer.ParseString(messaging, child, variables);
185 break; 186 break;
186 187
187 case "UI": 188 case "UI":
188 Localizer.ParseUI(child, localizedControls); 189 Localizer.ParseUI(messaging, child, localizedControls);
189 break; 190 break;
190 191
191 default: 192 default:
192 Messaging.Instance.OnMessage(WixErrors.UnexpectedElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); 193 messaging.Write(ErrorMessages.UnexpectedElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString()));
193 break; 194 break;
194 } 195 }
195 } 196 }
196 else 197 else
197 { 198 {
198 Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString())); 199 messaging.Write(ErrorMessages.UnsupportedExtensionElement(sourceLineNumbers, node.Name.ToString(), child.Name.ToString()));
199 } 200 }
200 } 201 }
201 202
202 return Messaging.Instance.EncounteredError ? null : new Localization(codepage, culture, variables, localizedControls); 203 return messaging.EncounteredError ? null : new Localization(codepage, culture, variables, localizedControls);
203 } 204 }
204 205
205 /// <summary> 206 /// <summary>
206 /// Parse a localization string into a WixVariableRow. 207 /// Parse a localization string into a WixVariableRow.
207 /// </summary> 208 /// </summary>
208 /// <param name="node">Element to parse.</param> 209 /// <param name="node">Element to parse.</param>
209 private static void ParseString(XElement node, IDictionary<string, BindVariable> variables) 210 private static void ParseString(IMessaging messaging, XElement node, IDictionary<string, BindVariable> variables)
210 { 211 {
211 string id = null; 212 string id = null;
212 bool overridable = false; 213 bool overridable = false;
@@ -219,22 +220,22 @@ namespace WixToolset.Core
219 switch (attrib.Name.LocalName) 220 switch (attrib.Name.LocalName)
220 { 221 {
221 case "Id": 222 case "Id":
222 id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 223 id = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib);
223 break; 224 break;
224 case "Overridable": 225 case "Overridable":
225 overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib); 226 overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib);
226 break; 227 break;
227 case "Localizable": 228 case "Localizable":
228 ; // do nothing 229 ; // do nothing
229 break; 230 break;
230 default: 231 default:
231 Messaging.Instance.OnMessage(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); 232 messaging.Write(ErrorMessages.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString()));
232 break; 233 break;
233 } 234 }
234 } 235 }
235 else 236 else
236 { 237 {
237 Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); 238 messaging.Write(ErrorMessages.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString()));
238 } 239 }
239 } 240 }
240 241
@@ -242,14 +243,14 @@ namespace WixToolset.Core
242 243
243 if (null == id) 244 if (null == id)
244 { 245 {
245 Messaging.Instance.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); 246 messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, "String", "Id"));
246 } 247 }
247 else if (0 == id.Length) 248 else if (0 == id.Length)
248 { 249 {
249 Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); 250 messaging.Write(ErrorMessages.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0));
250 } 251 }
251 252
252 if (!Messaging.Instance.EncounteredError) 253 if (!messaging.EncounteredError)
253 { 254 {
254 var variable = new BindVariable 255 var variable = new BindVariable
255 { 256 {
@@ -259,7 +260,7 @@ namespace WixToolset.Core
259 Value = value, 260 Value = value,
260 }; 261 };
261 262
262 Localizer.AddWixVariable(variables, variable); 263 Localizer.AddWixVariable(messaging, variables, variable);
263 } 264 }
264 } 265 }
265 266
@@ -268,7 +269,7 @@ namespace WixToolset.Core
268 /// </summary> 269 /// </summary>
269 /// <param name="node">Element to parse.</param> 270 /// <param name="node">Element to parse.</param>
270 /// <param name="localizedControls">Dictionary of localized controls.</param> 271 /// <param name="localizedControls">Dictionary of localized controls.</param>
271 private static void ParseUI(XElement node, IDictionary<string, LocalizedControl> localizedControls) 272 private static void ParseUI(IMessaging messaging, XElement node, IDictionary<string, LocalizedControl> localizedControls)
272 { 273 {
273 string dialog = null; 274 string dialog = null;
274 string control = null; 275 string control = null;
@@ -287,49 +288,49 @@ namespace WixToolset.Core
287 switch (attrib.Name.LocalName) 288 switch (attrib.Name.LocalName)
288 { 289 {
289 case "Dialog": 290 case "Dialog":
290 dialog = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 291 dialog = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib);
291 break; 292 break;
292 case "Control": 293 case "Control":
293 control = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 294 control = Common.GetAttributeIdentifierValue(messaging, sourceLineNumbers, attrib);
294 break; 295 break;
295 case "X": 296 case "X":
296 x = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 297 x = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue);
297 break; 298 break;
298 case "Y": 299 case "Y":
299 y = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 300 y = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue);
300 break; 301 break;
301 case "Width": 302 case "Width":
302 width = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 303 width = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue);
303 break; 304 break;
304 case "Height": 305 case "Height":
305 height = Common.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 306 height = Common.GetAttributeIntegerValue(messaging, sourceLineNumbers, attrib, 0, short.MaxValue);
306 break; 307 break;
307 case "RightToLeft": 308 case "RightToLeft":
308 if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 309 if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib))
309 { 310 {
310 attribs |= MsiInterop.MsidbControlAttributesRTLRO; 311 attribs |= MsiInterop.MsidbControlAttributesRTLRO;
311 } 312 }
312 break; 313 break;
313 case "RightAligned": 314 case "RightAligned":
314 if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 315 if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib))
315 { 316 {
316 attribs |= MsiInterop.MsidbControlAttributesRightAligned; 317 attribs |= MsiInterop.MsidbControlAttributesRightAligned;
317 } 318 }
318 break; 319 break;
319 case "LeftScroll": 320 case "LeftScroll":
320 if (YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 321 if (YesNoType.Yes == Common.GetAttributeYesNoValue(messaging, sourceLineNumbers, attrib))
321 { 322 {
322 attribs |= MsiInterop.MsidbControlAttributesLeftScroll; 323 attribs |= MsiInterop.MsidbControlAttributesLeftScroll;
323 } 324 }
324 break; 325 break;
325 default: 326 default:
326 Common.UnexpectedAttribute(sourceLineNumbers, attrib); 327 Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib);
327 break; 328 break;
328 } 329 }
329 } 330 }
330 else 331 else
331 { 332 {
332 Common.UnexpectedAttribute(sourceLineNumbers, attrib); 333 Common.UnexpectedAttribute(messaging, sourceLineNumbers, attrib);
333 } 334 }
334 } 335 }
335 336
@@ -339,24 +340,24 @@ namespace WixToolset.Core
339 { 340 {
340 if (MsiInterop.MsidbControlAttributesRTLRO == (attribs & MsiInterop.MsidbControlAttributesRTLRO)) 341 if (MsiInterop.MsidbControlAttributesRTLRO == (attribs & MsiInterop.MsidbControlAttributesRTLRO))
341 { 342 {
342 Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightToLeft", "Control")); 343 messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightToLeft", "Control"));
343 } 344 }
344 else if (MsiInterop.MsidbControlAttributesRightAligned == (attribs & MsiInterop.MsidbControlAttributesRightAligned)) 345 else if (MsiInterop.MsidbControlAttributesRightAligned == (attribs & MsiInterop.MsidbControlAttributesRightAligned))
345 { 346 {
346 Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightAligned", "Control")); 347 messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "RightAligned", "Control"));
347 } 348 }
348 else if (MsiInterop.MsidbControlAttributesLeftScroll == (attribs & MsiInterop.MsidbControlAttributesLeftScroll)) 349 else if (MsiInterop.MsidbControlAttributesLeftScroll == (attribs & MsiInterop.MsidbControlAttributesLeftScroll))
349 { 350 {
350 Messaging.Instance.OnMessage(WixErrors.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "LeftScroll", "Control")); 351 messaging.Write(ErrorMessages.IllegalAttributeWithoutOtherAttributes(sourceLineNumbers, node.Name.ToString(), "LeftScroll", "Control"));
351 } 352 }
352 } 353 }
353 354
354 if (String.IsNullOrEmpty(control) && String.IsNullOrEmpty(dialog)) 355 if (String.IsNullOrEmpty(control) && String.IsNullOrEmpty(dialog))
355 { 356 {
356 Messaging.Instance.OnMessage(WixErrors.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.ToString(), "Dialog", "Control")); 357 messaging.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(sourceLineNumbers, node.Name.ToString(), "Dialog", "Control"));
357 } 358 }
358 359
359 if (!Messaging.Instance.EncounteredError) 360 if (!messaging.EncounteredError)
360 { 361 {
361 LocalizedControl localizedControl = new LocalizedControl(dialog, control, x, y, width, height, attribs, text); 362 LocalizedControl localizedControl = new LocalizedControl(dialog, control, x, y, width, height, attribs, text);
362 string key = localizedControl.GetKey(); 363 string key = localizedControl.GetKey();
@@ -364,11 +365,11 @@ namespace WixToolset.Core
364 { 365 {
365 if (String.IsNullOrEmpty(localizedControl.Control)) 366 if (String.IsNullOrEmpty(localizedControl.Control))
366 { 367 {
367 Messaging.Instance.OnMessage(WixErrors.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog)); 368 messaging.Write(ErrorMessages.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog));
368 } 369 }
369 else 370 else
370 { 371 {
371 Messaging.Instance.OnMessage(WixErrors.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog, localizedControl.Control)); 372 messaging.Write(ErrorMessages.DuplicatedUiLocalization(sourceLineNumbers, localizedControl.Dialog, localizedControl.Control));
372 } 373 }
373 } 374 }
374 else 375 else
diff --git a/src/WixToolset.Core/Mutator.cs b/src/WixToolset.Core/Mutator.cs
index f935b570..7f1af13a 100644
--- a/src/WixToolset.Core/Mutator.cs
+++ b/src/WixToolset.Core/Mutator.cs
@@ -71,7 +71,7 @@ namespace WixToolset.Core
71 } 71 }
72 finally 72 finally
73 { 73 {
74 encounteredError = this.Core.EncounteredError; 74 encounteredError = this.Core.Messaging.EncounteredError;
75 } 75 }
76 76
77 // return the Wix document element only if mutation completed successfully 77 // return the Wix document element only if mutation completed successfully
@@ -98,7 +98,7 @@ namespace WixToolset.Core
98 98
99 wixString = mutatorExtension.Mutate(wixString); 99 wixString = mutatorExtension.Mutate(wixString);
100 100
101 if (String.IsNullOrEmpty(wixString) || this.Core.EncounteredError) 101 if (String.IsNullOrEmpty(wixString) || this.Core.Messaging.EncounteredError)
102 { 102 {
103 break; 103 break;
104 } 104 }
@@ -106,7 +106,7 @@ namespace WixToolset.Core
106 } 106 }
107 finally 107 finally
108 { 108 {
109 encounteredError = this.Core.EncounteredError; 109 encounteredError = this.Core.Messaging.EncounteredError;
110 } 110 }
111 111
112 return encounteredError ? null : wixString; 112 return encounteredError ? null : wixString;
diff --git a/src/WixToolset.Core/Preprocess/IfDefEventHandler.cs b/src/WixToolset.Core/Preprocess/IfDefEventHandler.cs
new file mode 100644
index 00000000..ff181d61
--- /dev/null
+++ b/src/WixToolset.Core/Preprocess/IfDefEventHandler.cs
@@ -0,0 +1,28 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Core.Preprocess
4{
5 using System;
6 using WixToolset.Data;
7
8 public delegate void IfDefEventHandler(object sender, IfDefEventArgs e);
9
10 public class IfDefEventArgs : EventArgs
11 {
12 public IfDefEventArgs(SourceLineNumber sourceLineNumbers, bool isIfDef, bool isDefined, string variableName)
13 {
14 this.SourceLineNumbers = sourceLineNumbers;
15 this.IsIfDef = isIfDef;
16 this.IsDefined = isDefined;
17 this.VariableName = variableName;
18 }
19
20 public SourceLineNumber SourceLineNumbers { get; }
21
22 public bool IsDefined { get; }
23
24 public bool IsIfDef { get; }
25
26 public string VariableName { get; }
27 }
28}
diff --git a/src/WixToolset.Core/IncludedFileEventHandler.cs b/src/WixToolset.Core/Preprocess/IncludedFileEventHandler.cs
index 57527e5c..beba216d 100644
--- a/src/WixToolset.Core/IncludedFileEventHandler.cs
+++ b/src/WixToolset.Core/Preprocess/IncludedFileEventHandler.cs
@@ -1,6 +1,6 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset 3namespace WixToolset.Core.Preprocess
4{ 4{
5 using System; 5 using System;
6 using WixToolset.Data; 6 using WixToolset.Data;
@@ -17,9 +17,6 @@ namespace WixToolset
17 /// </summary> 17 /// </summary>
18 public class IncludedFileEventArgs : EventArgs 18 public class IncludedFileEventArgs : EventArgs
19 { 19 {
20 private SourceLineNumber sourceLineNumbers;
21 private string fullName;
22
23 /// <summary> 20 /// <summary>
24 /// Creates a new IncludedFileEventArgs. 21 /// Creates a new IncludedFileEventArgs.
25 /// </summary> 22 /// </summary>
@@ -27,26 +24,20 @@ namespace WixToolset
27 /// <param name="fullName">The full path of the included file.</param> 24 /// <param name="fullName">The full path of the included file.</param>
28 public IncludedFileEventArgs(SourceLineNumber sourceLineNumbers, string fullName) 25 public IncludedFileEventArgs(SourceLineNumber sourceLineNumbers, string fullName)
29 { 26 {
30 this.sourceLineNumbers = sourceLineNumbers; 27 this.SourceLineNumbers = sourceLineNumbers;
31 this.fullName = fullName; 28 this.FullName = fullName;
32 } 29 }
33 30
34 /// <summary> 31 /// <summary>
35 /// Gets the full path of the included file. 32 /// Gets the full path of the included file.
36 /// </summary> 33 /// </summary>
37 /// <value>The full path of the included file.</value> 34 /// <value>The full path of the included file.</value>
38 public string FullName 35 public string FullName { get; }
39 {
40 get { return this.fullName; }
41 }
42 36
43 /// <summary> 37 /// <summary>
44 /// Gets the source line numbers. 38 /// Gets the source line numbers.
45 /// </summary> 39 /// </summary>
46 /// <value>The source line numbers.</value> 40 /// <value>The source line numbers.</value>
47 public SourceLineNumber SourceLineNumbers 41 public SourceLineNumber SourceLineNumbers { get; }
48 {
49 get { return this.sourceLineNumbers; }
50 }
51 } 42 }
52} 43}
diff --git a/src/WixToolset.Core/ProcessedStreamEventHandler.cs b/src/WixToolset.Core/Preprocess/ProcessedStreamEventHandler.cs
index de6b5d1f..434590d2 100644
--- a/src/WixToolset.Core/ProcessedStreamEventHandler.cs
+++ b/src/WixToolset.Core/Preprocess/ProcessedStreamEventHandler.cs
@@ -1,6 +1,6 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset 3namespace WixToolset.Core.Preprocess
4{ 4{
5 using System; 5 using System;
6 using System.Xml.Linq; 6 using System.Xml.Linq;
diff --git a/src/WixToolset.Core/Preprocess/ResolvedVariableEventHandler.cs b/src/WixToolset.Core/Preprocess/ResolvedVariableEventHandler.cs
new file mode 100644
index 00000000..df3a7e6a
--- /dev/null
+++ b/src/WixToolset.Core/Preprocess/ResolvedVariableEventHandler.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Core.Preprocess
4{
5 using System;
6 using WixToolset.Data;
7
8 public delegate void ResolvedVariableEventHandler(object sender, ResolvedVariableEventArgs e);
9
10 public class ResolvedVariableEventArgs : EventArgs
11 {
12 public ResolvedVariableEventArgs(SourceLineNumber sourceLineNumbers, string variableName, string variableValue)
13 {
14 this.SourceLineNumbers = sourceLineNumbers;
15 this.VariableName = variableName;
16 this.VariableValue = variableValue;
17 }
18
19 public SourceLineNumber SourceLineNumbers { get; }
20
21 public string VariableName { get; }
22
23 public string VariableValue { get; }
24 }
25}
diff --git a/src/WixToolset.Core/PreprocessContext.cs b/src/WixToolset.Core/PreprocessContext.cs
index c0acc31e..cb29d1ff 100644
--- a/src/WixToolset.Core/PreprocessContext.cs
+++ b/src/WixToolset.Core/PreprocessContext.cs
@@ -6,6 +6,7 @@ namespace WixToolset.Core
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Extensibility; 8 using WixToolset.Extensibility;
9 using WixToolset.Extensibility.Services;
9 10
10 /// <summary> 11 /// <summary>
11 /// The preprocessor core. 12 /// The preprocessor core.
@@ -19,7 +20,7 @@ namespace WixToolset.Core
19 20
20 public IServiceProvider ServiceProvider { get; } 21 public IServiceProvider ServiceProvider { get; }
21 22
22 public Messaging Messaging { get; set; } 23 public IMessaging Messaging { get; set; }
23 24
24 public IEnumerable<IPreprocessorExtension> Extensions { get; set; } 25 public IEnumerable<IPreprocessorExtension> Extensions { get; set; }
25 26
diff --git a/src/WixToolset.Core/Preprocessor.cs b/src/WixToolset.Core/Preprocessor.cs
index 195ede9e..53d60c87 100644
--- a/src/WixToolset.Core/Preprocessor.cs
+++ b/src/WixToolset.Core/Preprocessor.cs
@@ -136,7 +136,7 @@ namespace WixToolset.Core
136 } 136 }
137 else 137 else
138 { 138 {
139 this.Context.Messaging.OnMessage(WixErrors.DuplicateExtensionPreprocessorType(extension.GetType().ToString(), prefix, collidingExtension.GetType().ToString())); 139 this.Context.Messaging.Write(ErrorMessages.DuplicateExtensionPreprocessorType(extension.GetType().ToString(), prefix, collidingExtension.GetType().ToString()));
140 } 140 }
141 } 141 }
142 } 142 }
@@ -159,7 +159,7 @@ namespace WixToolset.Core
159 catch (XmlException e) 159 catch (XmlException e)
160 { 160 {
161 this.UpdateCurrentLineNumber(reader, 0); 161 this.UpdateCurrentLineNumber(reader, 0);
162 throw new WixException(WixErrors.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message)); 162 throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message));
163 } 163 }
164 finally 164 finally
165 { 165 {
@@ -347,12 +347,12 @@ namespace WixToolset.Core
347 case "elseif": 347 case "elseif":
348 if (0 == ifStack.Count) 348 if (0 == ifStack.Count)
349 { 349 {
350 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "elseif")); 350 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "elseif"));
351 } 351 }
352 352
353 if (IfState.If != ifContext.IfState && IfState.ElseIf != ifContext.IfState) 353 if (IfState.If != ifContext.IfState && IfState.ElseIf != ifContext.IfState)
354 { 354 {
355 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "elseif")); 355 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "elseif"));
356 } 356 }
357 357
358 ifContext.IfState = IfState.ElseIf; // we're now in an elseif 358 ifContext.IfState = IfState.ElseIf; // we're now in an elseif
@@ -370,12 +370,12 @@ namespace WixToolset.Core
370 case "else": 370 case "else":
371 if (0 == ifStack.Count) 371 if (0 == ifStack.Count)
372 { 372 {
373 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "else")); 373 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "else"));
374 } 374 }
375 375
376 if (IfState.If != ifContext.IfState && IfState.ElseIf != ifContext.IfState) 376 if (IfState.If != ifContext.IfState && IfState.ElseIf != ifContext.IfState)
377 { 377 {
378 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "else")); 378 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "else"));
379 } 379 }
380 380
381 ifContext.IfState = IfState.Else; // we're now in an else 381 ifContext.IfState = IfState.Else; // we're now in an else
@@ -386,7 +386,7 @@ namespace WixToolset.Core
386 case "endif": 386 case "endif":
387 if (0 == ifStack.Count) 387 if (0 == ifStack.Count)
388 { 388 {
389 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "endif")); 389 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "if", "endif"));
390 } 390 }
391 391
392 ifContext = (IfContext)ifStack.Pop(); 392 ifContext = (IfContext)ifStack.Pop();
@@ -466,7 +466,7 @@ namespace WixToolset.Core
466 break; 466 break;
467 467
468 case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error 468 case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error
469 throw new WixException(WixErrors.UnmatchedPreprocessorInstruction(sourceLineNumbers, "foreach", "endforeach")); 469 throw new WixException(ErrorMessages.UnmatchedPreprocessorInstruction(sourceLineNumbers, "foreach", "endforeach"));
470 470
471 case "pragma": 471 case "pragma":
472 this.PreprocessPragma(reader.Value, currentContainer); 472 this.PreprocessPragma(reader.Value, currentContainer);
@@ -483,7 +483,7 @@ namespace WixToolset.Core
483 { 483 {
484 if ("Include" != reader.LocalName) 484 if ("Include" != reader.LocalName)
485 { 485 {
486 this.Context.Messaging.OnMessage(WixErrors.InvalidDocumentElement(sourceLineNumbers, reader.Name, "include", "Include")); 486 this.Context.Messaging.Write(ErrorMessages.InvalidDocumentElement(sourceLineNumbers, reader.Name, "include", "Include"));
487 } 487 }
488 488
489 this.IncludeNextStack.Pop(); 489 this.IncludeNextStack.Pop();
@@ -540,13 +540,13 @@ namespace WixToolset.Core
540 540
541 if (0 != ifStack.Count) 541 if (0 != ifStack.Count)
542 { 542 {
543 throw new WixException(WixErrors.NonterminatedPreprocessorInstruction(this.Context.CurrentSourceLineNumber, "if", "endif")); 543 throw new WixException(ErrorMessages.NonterminatedPreprocessorInstruction(this.Context.CurrentSourceLineNumber, "if", "endif"));
544 } 544 }
545 545
546 // TODO: can this actually happen? 546 // TODO: can this actually happen?
547 if (0 != containerStack.Count) 547 if (0 != containerStack.Count)
548 { 548 {
549 throw new WixException(WixErrors.NonterminatedPreprocessorInstruction(this.Context.CurrentSourceLineNumber, "nodes", "nodes")); 549 throw new WixException(ErrorMessages.NonterminatedPreprocessorInstruction(this.Context.CurrentSourceLineNumber, "nodes", "nodes"));
550 } 550 }
551 } 551 }
552 552
@@ -559,7 +559,7 @@ namespace WixToolset.Core
559 // Resolve other variables in the error message. 559 // Resolve other variables in the error message.
560 errorMessage = this.Helper.PreprocessString(this.Context, errorMessage); 560 errorMessage = this.Helper.PreprocessString(this.Context, errorMessage);
561 561
562 throw new WixException(WixErrors.PreprocessorError(this.Context.CurrentSourceLineNumber, errorMessage)); 562 throw new WixException(ErrorMessages.PreprocessorError(this.Context.CurrentSourceLineNumber, errorMessage));
563 } 563 }
564 564
565 /// <summary> 565 /// <summary>
@@ -571,7 +571,7 @@ namespace WixToolset.Core
571 // Resolve other variables in the warning message. 571 // Resolve other variables in the warning message.
572 warningMessage = this.Helper.PreprocessString(this.Context, warningMessage); 572 warningMessage = this.Helper.PreprocessString(this.Context, warningMessage);
573 573
574 this.Context.Messaging.OnMessage(WixWarnings.PreprocessorWarning(this.Context.CurrentSourceLineNumber, warningMessage)); 574 this.Context.Messaging.Write(WarningMessages.PreprocessorWarning(this.Context.CurrentSourceLineNumber, warningMessage));
575 } 575 }
576 576
577 /// <summary> 577 /// <summary>
@@ -584,7 +584,7 @@ namespace WixToolset.Core
584 584
585 if (!match.Success) 585 if (!match.Success)
586 { 586 {
587 throw new WixException(WixErrors.IllegalDefineStatement(this.Context.CurrentSourceLineNumber, originalDefine)); 587 throw new WixException(ErrorMessages.IllegalDefineStatement(this.Context.CurrentSourceLineNumber, originalDefine));
588 } 588 }
589 589
590 var defineName = match.Groups["varName"].Value; 590 var defineName = match.Groups["varName"].Value;
@@ -645,7 +645,7 @@ namespace WixToolset.Core
645 645
646 if (null == includeFile) 646 if (null == includeFile)
647 { 647 {
648 throw new WixException(WixErrors.FileNotFound(sourceLineNumbers, includePath, "include")); 648 throw new WixException(ErrorMessages.FileNotFound(sourceLineNumbers, includePath, "include"));
649 } 649 }
650 650
651 using (XmlReader reader = XmlReader.Create(includeFile, DocumentXmlReaderSettings)) 651 using (XmlReader reader = XmlReader.Create(includeFile, DocumentXmlReaderSettings))
@@ -660,7 +660,7 @@ namespace WixToolset.Core
660 catch (XmlException e) 660 catch (XmlException e)
661 { 661 {
662 this.UpdateCurrentLineNumber(reader, 0); 662 this.UpdateCurrentLineNumber(reader, 0);
663 throw new WixException(WixErrors.InvalidXml(sourceLineNumbers, "source", e.Message)); 663 throw new WixException(ErrorMessages.InvalidXml(sourceLineNumbers, "source", e.Message));
664 } 664 }
665 665
666 this.IncludedFile?.Invoke(this, new IncludedFileEventArgs(sourceLineNumbers, includeFile)); 666 this.IncludedFile?.Invoke(this, new IncludedFileEventArgs(sourceLineNumbers, includeFile));
@@ -681,7 +681,7 @@ namespace WixToolset.Core
681 var indexOfInToken = reader.Value.IndexOf(" in ", StringComparison.Ordinal); 681 var indexOfInToken = reader.Value.IndexOf(" in ", StringComparison.Ordinal);
682 if (0 > indexOfInToken) 682 if (0 > indexOfInToken)
683 { 683 {
684 throw new WixException(WixErrors.IllegalForeach(this.Context.CurrentSourceLineNumber, reader.Value)); 684 throw new WixException(ErrorMessages.IllegalForeach(this.Context.CurrentSourceLineNumber, reader.Value));
685 } 685 }
686 686
687 // parse out the variable name 687 // parse out the variable name
@@ -751,7 +751,7 @@ namespace WixToolset.Core
751 } 751 }
752 else if (reader.NodeType == XmlNodeType.None) 752 else if (reader.NodeType == XmlNodeType.None)
753 { 753 {
754 throw new WixException(WixErrors.ExpectedEndforeach(this.Context.CurrentSourceLineNumber)); 754 throw new WixException(ErrorMessages.ExpectedEndforeach(this.Context.CurrentSourceLineNumber));
755 } 755 }
756 756
757 reader.Read(); 757 reader.Read();
@@ -773,7 +773,7 @@ namespace WixToolset.Core
773 catch (XmlException e) 773 catch (XmlException e)
774 { 774 {
775 this.UpdateCurrentLineNumber(loopReader, offset); 775 this.UpdateCurrentLineNumber(loopReader, offset);
776 throw new WixException(WixErrors.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message)); 776 throw new WixException(ErrorMessages.InvalidXml(this.Context.CurrentSourceLineNumber, "source", e.Message));
777 } 777 }
778 778
779 fragmentStream.Position = 0; // seek back to the beginning for the next loop. 779 fragmentStream.Position = 0; // seek back to the beginning for the next loop.
@@ -791,7 +791,7 @@ namespace WixToolset.Core
791 791
792 if (!match.Success) 792 if (!match.Success)
793 { 793 {
794 throw new WixException(WixErrors.InvalidPreprocessorPragma(this.Context.CurrentSourceLineNumber, pragmaText)); 794 throw new WixException(ErrorMessages.InvalidPreprocessorPragma(this.Context.CurrentSourceLineNumber, pragmaText));
795 } 795 }
796 796
797 // resolve other variables in the pragma argument(s) 797 // resolve other variables in the pragma argument(s)
@@ -803,7 +803,7 @@ namespace WixToolset.Core
803 } 803 }
804 catch (Exception e) 804 catch (Exception e)
805 { 805 {
806 throw new WixException(WixErrors.PreprocessorExtensionPragmaFailed(this.Context.CurrentSourceLineNumber, pragmaText, e.Message)); 806 throw new WixException(ErrorMessages.PreprocessorExtensionPragmaFailed(this.Context.CurrentSourceLineNumber, pragmaText, e.Message));
807 } 807 }
808 } 808 }
809 809
@@ -830,7 +830,7 @@ namespace WixToolset.Core
830 int endingQuotes = expression.IndexOf('\"', 1); 830 int endingQuotes = expression.IndexOf('\"', 1);
831 if (-1 == endingQuotes) 831 if (-1 == endingQuotes)
832 { 832 {
833 throw new WixException(WixErrors.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 833 throw new WixException(ErrorMessages.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
834 } 834 }
835 835
836 // cut the quotes off the string 836 // cut the quotes off the string
@@ -864,7 +864,7 @@ namespace WixToolset.Core
864 864
865 if (-1 == endingParen) 865 if (-1 == endingParen)
866 { 866 {
867 throw new WixException(WixErrors.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 867 throw new WixException(ErrorMessages.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
868 } 868 }
869 token = expression.Substring(0, endingParen + 1); 869 token = expression.Substring(0, endingParen + 1);
870 870
@@ -981,12 +981,12 @@ namespace WixToolset.Core
981 else if (variable.IndexOf("(", StringComparison.Ordinal) != -1 || variable.IndexOf(")", StringComparison.Ordinal) != -1) 981 else if (variable.IndexOf("(", StringComparison.Ordinal) != -1 || variable.IndexOf(")", StringComparison.Ordinal) != -1)
982 { 982 {
983 // make sure it doesn't contain parenthesis 983 // make sure it doesn't contain parenthesis
984 throw new WixException(WixErrors.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 984 throw new WixException(ErrorMessages.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
985 } 985 }
986 else if (variable.IndexOf("\"", StringComparison.Ordinal) != -1) 986 else if (variable.IndexOf("\"", StringComparison.Ordinal) != -1)
987 { 987 {
988 // shouldn't contain quotes 988 // shouldn't contain quotes
989 throw new WixException(WixErrors.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 989 throw new WixException(ErrorMessages.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
990 } 990 }
991 991
992 return varValue; 992 return varValue;
@@ -1017,7 +1017,7 @@ namespace WixToolset.Core
1017 { 1017 {
1018 if (stringLiteral) 1018 if (stringLiteral)
1019 { 1019 {
1020 throw new WixException(WixErrors.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 1020 throw new WixException(ErrorMessages.UnmatchedQuotesInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
1021 } 1021 }
1022 1022
1023 rightValue = this.GetNextToken(originalExpression, ref expression, out stringLiteral); 1023 rightValue = this.GetNextToken(originalExpression, ref expression, out stringLiteral);
@@ -1068,7 +1068,7 @@ namespace WixToolset.Core
1068 { 1068 {
1069 if (operation.Length > 0) 1069 if (operation.Length > 0)
1070 { 1070 {
1071 throw new WixException(WixErrors.ExpectedVariable(this.Context.CurrentSourceLineNumber, originalExpression)); 1071 throw new WixException(ErrorMessages.ExpectedVariable(this.Context.CurrentSourceLineNumber, originalExpression));
1072 } 1072 }
1073 1073
1074 // false expression 1074 // false expression
@@ -1083,7 +1083,7 @@ namespace WixToolset.Core
1083 } 1083 }
1084 else 1084 else
1085 { 1085 {
1086 throw new WixException(WixErrors.UnexpectedLiteral(this.Context.CurrentSourceLineNumber, originalExpression)); 1086 throw new WixException(ErrorMessages.UnexpectedLiteral(this.Context.CurrentSourceLineNumber, originalExpression));
1087 } 1087 }
1088 } 1088 }
1089 else 1089 else
@@ -1123,11 +1123,11 @@ namespace WixToolset.Core
1123 } 1123 }
1124 catch (FormatException) 1124 catch (FormatException)
1125 { 1125 {
1126 throw new WixException(WixErrors.IllegalIntegerInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 1126 throw new WixException(ErrorMessages.IllegalIntegerInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
1127 } 1127 }
1128 catch (OverflowException) 1128 catch (OverflowException)
1129 { 1129 {
1130 throw new WixException(WixErrors.IllegalIntegerInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 1130 throw new WixException(ErrorMessages.IllegalIntegerInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
1131 } 1131 }
1132 1132
1133 // Compare the numbers 1133 // Compare the numbers
@@ -1169,7 +1169,7 @@ namespace WixToolset.Core
1169 closeParenIndex = expression.IndexOf(')', closeParenIndex); 1169 closeParenIndex = expression.IndexOf(')', closeParenIndex);
1170 if (closeParenIndex == -1) 1170 if (closeParenIndex == -1)
1171 { 1171 {
1172 throw new WixException(WixErrors.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression)); 1172 throw new WixException(ErrorMessages.UnmatchedParenthesisInExpression(this.Context.CurrentSourceLineNumber, originalExpression));
1173 } 1173 }
1174 1174
1175 if (InsideQuotes(expression, closeParenIndex)) 1175 if (InsideQuotes(expression, closeParenIndex))
@@ -1218,7 +1218,7 @@ namespace WixToolset.Core
1218 currentValue = !currentValue; 1218 currentValue = !currentValue;
1219 break; 1219 break;
1220 default: 1220 default:
1221 throw new WixException(WixErrors.UnexpectedPreprocessorOperator(this.Context.CurrentSourceLineNumber, operation.ToString())); 1221 throw new WixException(ErrorMessages.UnexpectedPreprocessorOperator(this.Context.CurrentSourceLineNumber, operation.ToString()));
1222 } 1222 }
1223 } 1223 }
1224 1224
@@ -1267,7 +1267,7 @@ namespace WixToolset.Core
1267 expression = expression.Trim(); 1267 expression = expression.Trim();
1268 if (expression.Length == 0) 1268 if (expression.Length == 0)
1269 { 1269 {
1270 throw new WixException(WixErrors.UnexpectedEmptySubexpression(this.Context.CurrentSourceLineNumber, originalExpression)); 1270 throw new WixException(ErrorMessages.UnexpectedEmptySubexpression(this.Context.CurrentSourceLineNumber, originalExpression));
1271 } 1271 }
1272 1272
1273 // If the expression starts with parenthesis, evaluate it 1273 // If the expression starts with parenthesis, evaluate it
@@ -1288,7 +1288,7 @@ namespace WixToolset.Core
1288 expression = expression.Substring(3).Trim(); 1288 expression = expression.Substring(3).Trim();
1289 if (expression.Length == 0) 1289 if (expression.Length == 0)
1290 { 1290 {
1291 throw new WixException(WixErrors.ExpectedExpressionAfterNot(this.Context.CurrentSourceLineNumber, originalExpression)); 1291 throw new WixException(ErrorMessages.ExpectedExpressionAfterNot(this.Context.CurrentSourceLineNumber, originalExpression));
1292 } 1292 }
1293 1293
1294 expressionValue = this.EvaluateExpressionRecurse(originalExpression, ref expression, PreprocessorOperation.Not, true); 1294 expressionValue = this.EvaluateExpressionRecurse(originalExpression, ref expression, PreprocessorOperation.Not, true);
@@ -1317,7 +1317,7 @@ namespace WixToolset.Core
1317 } 1317 }
1318 else 1318 else
1319 { 1319 {
1320 throw new WixException(WixErrors.InvalidSubExpression(this.Context.CurrentSourceLineNumber, expression, originalExpression)); 1320 throw new WixException(ErrorMessages.InvalidSubExpression(this.Context.CurrentSourceLineNumber, expression, originalExpression));
1321 } 1321 }
1322 } 1322 }
1323 1323
@@ -1351,7 +1351,7 @@ namespace WixToolset.Core
1351 { 1351 {
1352 if (1023 < this.CurrentFileStack.Count) 1352 if (1023 < this.CurrentFileStack.Count)
1353 { 1353 {
1354 throw new WixException(WixErrors.TooDeeplyIncluded(this.Context.CurrentSourceLineNumber, this.CurrentFileStack.Count)); 1354 throw new WixException(ErrorMessages.TooDeeplyIncluded(this.Context.CurrentSourceLineNumber, this.CurrentFileStack.Count));
1355 } 1355 }
1356 1356
1357 this.CurrentFileStack.Push(fileName); 1357 this.CurrentFileStack.Push(fileName);
diff --git a/src/WixToolset.Core/ResolvedVariableEventHandler.cs b/src/WixToolset.Core/ResolvedVariableEventHandler.cs
deleted file mode 100644
index 232ad9e4..00000000
--- a/src/WixToolset.Core/ResolvedVariableEventHandler.cs
+++ /dev/null
@@ -1,39 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 using System;
6 using System.Text;
7 using WixToolset.Data;
8
9 public delegate void ResolvedVariableEventHandler(object sender, ResolvedVariableEventArgs e);
10
11 public class ResolvedVariableEventArgs : EventArgs
12 {
13 private SourceLineNumber sourceLineNumbers;
14 private string variableName;
15 private string variableValue;
16
17 public ResolvedVariableEventArgs(SourceLineNumber sourceLineNumbers, string variableName, string variableValue)
18 {
19 this.sourceLineNumbers = sourceLineNumbers;
20 this.variableName = variableName;
21 this.variableValue = variableValue;
22 }
23
24 public SourceLineNumber SourceLineNumbers
25 {
26 get { return this.sourceLineNumbers; }
27 }
28
29 public string VariableName
30 {
31 get { return this.variableName; }
32 }
33
34 public string VariableValue
35 {
36 get { return this.variableValue; }
37 }
38 }
39}
diff --git a/src/WixToolset.Core/SourceFile.cs b/src/WixToolset.Core/SourceFile.cs
index 3b1e386a..f1064513 100644
--- a/src/WixToolset.Core/SourceFile.cs
+++ b/src/WixToolset.Core/SourceFile.cs
@@ -15,7 +15,5 @@ namespace WixToolset.Core
15 public string OutputPath { get; set; } 15 public string OutputPath { get; set; }
16 16
17 public string SourcePath { get; set; } 17 public string SourcePath { get; set; }
18
19 public Stream Stream { get; set; }
20 } 18 }
21} 19}
diff --git a/src/WixToolset.Core/Util.cs b/src/WixToolset.Core/Util.cs
deleted file mode 100644
index 5950fe0a..00000000
--- a/src/WixToolset.Core/Util.cs
+++ /dev/null
@@ -1,17 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 using System;
6
7 /// <summary>
8 /// Common Wix utility methods and types.
9 /// </summary>
10 public sealed class Util
11 {
12 /// <summary>
13 /// Set by WixToolTasks to indicate WIX is running inside MSBuild
14 /// </summary>
15 public static bool RunningInMsBuild { get; set; }
16 }
17}
diff --git a/src/WixToolset.Core/Uuid.cs b/src/WixToolset.Core/Uuid.cs
index d512d92f..0501c285 100644
--- a/src/WixToolset.Core/Uuid.cs
+++ b/src/WixToolset.Core/Uuid.cs
@@ -10,16 +10,9 @@ namespace WixToolset
10 /// <summary> 10 /// <summary>
11 /// Implementation of RFC 4122 - A Universally Unique Identifier (UUID) URN Namespace. 11 /// Implementation of RFC 4122 - A Universally Unique Identifier (UUID) URN Namespace.
12 /// </summary> 12 /// </summary>
13 public sealed class Uuid 13 public static class Uuid
14 { 14 {
15 /// <summary> 15 /// <summary>
16 /// Protect the constructor.
17 /// </summary>
18 private Uuid()
19 {
20 }
21
22 /// <summary>
23 /// Creates a version 3 name-based UUID. 16 /// Creates a version 3 name-based UUID.
24 /// </summary> 17 /// </summary>
25 /// <param name="namespaceGuid">The namespace UUID.</param> 18 /// <param name="namespaceGuid">The namespace UUID.</param>
diff --git a/src/WixToolset.Core/Exceptions/WixFileNotFoundException.cs b/src/WixToolset.Core/WixFileNotFoundException.cs
index 14169c4c..7bffe417 100644
--- a/src/WixToolset.Core/Exceptions/WixFileNotFoundException.cs
+++ b/src/WixToolset.Core/WixFileNotFoundException.cs
@@ -14,18 +14,10 @@ namespace WixToolset
14 /// <summary> 14 /// <summary>
15 /// Instantiate a new WixFileNotFoundException. 15 /// Instantiate a new WixFileNotFoundException.
16 /// </summary> 16 /// </summary>
17 /// <param name="file">The file that could not be found.</param>
18 public WixFileNotFoundException(string file) : this(null, file, null)
19 {
20 }
21
22 /// <summary>
23 /// Instantiate a new WixFileNotFoundException.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Source line information pertaining to the file that cannot be found.</param> 17 /// <param name="sourceLineNumbers">Source line information pertaining to the file that cannot be found.</param>
26 /// <param name="file">The file that could not be found.</param> 18 /// <param name="file">The file that could not be found.</param>
27 public WixFileNotFoundException(SourceLineNumber sourceLineNumbers, string file) : 19 public WixFileNotFoundException(SourceLineNumber sourceLineNumbers, string file) :
28 base(WixErrors.FileNotFound(sourceLineNumbers, file)) 20 base(ErrorMessages.FileNotFound(sourceLineNumbers, file))
29 { 21 {
30 } 22 }
31 23
@@ -45,7 +37,7 @@ namespace WixToolset
45 /// <param name="file">The file that could not be found.</param> 37 /// <param name="file">The file that could not be found.</param>
46 /// <param name="fileType">The type of file that cannot be found.</param> 38 /// <param name="fileType">The type of file that cannot be found.</param>
47 public WixFileNotFoundException(SourceLineNumber sourceLineNumbers, string file, string fileType) : 39 public WixFileNotFoundException(SourceLineNumber sourceLineNumbers, string file, string fileType) :
48 base(WixErrors.FileNotFound(sourceLineNumbers, file, fileType)) 40 base(ErrorMessages.FileNotFound(sourceLineNumbers, file, fileType))
49 { 41 {
50 } 42 }
51 } 43 }
diff --git a/src/WixToolset.Core/WixGenericMessageEventArgs.cs b/src/WixToolset.Core/WixGenericMessageEventArgs.cs
deleted file mode 100644
index 2c1d4705..00000000
--- a/src/WixToolset.Core/WixGenericMessageEventArgs.cs
+++ /dev/null
@@ -1,45 +0,0 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset
4{
5 using System;
6 using System.Resources;
7 using WixToolset.Data;
8
9 /// <summary>
10 /// Generic event args for message events.
11 /// </summary>
12 public class WixGenericMessageEventArgs : MessageEventArgs
13 {
14 /// <summary>
15 /// Creates a new generc message event arg.
16 /// </summary>
17 /// <param name="sourceLineNumbers">Source line numbers for the message.</param>
18 /// <param name="id">Id for the message.</param>
19 /// <param name="level">Level for the message.</param>
20 /// <param name="format">Format message for arguments.</param>
21 /// <param name="messageArgs">Arguments for the format string.</param>
22 public WixGenericMessageEventArgs(SourceLineNumber sourceLineNumbers, int id, MessageLevel level, string format, params object[] messageArgs)
23 : base(sourceLineNumbers, id, format, messageArgs)
24 {
25 base.Level = level;
26 base.ResourceManager = new GenericResourceManager();
27 }
28
29 /// <summary>
30 /// Private resource manager to return our format message as the "localized" string untouched.
31 /// </summary>
32 private class GenericResourceManager : ResourceManager
33 {
34 /// <summary>
35 /// Passes the "resource name" through as the format string.
36 /// </summary>
37 /// <param name="name">Format message that is passed in as the resource name.</param>
38 /// <returns>The name.</returns>
39 public override string GetString(string name)
40 {
41 return name;
42 }
43 }
44 }
45}
diff --git a/src/WixToolset.Core/WixStrings.Designer.cs b/src/WixToolset.Core/WixStrings.Designer.cs
index 36e64267..ab98ed6a 100644
--- a/src/WixToolset.Core/WixStrings.Designer.cs
+++ b/src/WixToolset.Core/WixStrings.Designer.cs
@@ -37,102 +37,7 @@ namespace WixToolset {
37 return resourceMan; 37 return resourceMan;
38 } 38 }
39 } 39 }
40 40
41 /// <summary>
42 /// Overrides the current thread's CurrentUICulture property for all
43 /// resource lookups using this strongly typed resource class.
44 /// </summary>
45 [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
46 internal static global::System.Globalization.CultureInfo Culture {
47 get {
48 return resourceCulture;
49 }
50 set {
51 resourceCulture = value;
52 }
53 }
54
55 /// <summary>
56 /// Looks up a localized string similar to Cannot index into a FileRowCollection that allows duplicate FileIds.
57 /// </summary>
58 internal static string EXP_CannotIndexIntoFileRowCollection {
59 get {
60 return ResourceManager.GetString("EXP_CannotIndexIntoFileRowCollection", resourceCulture);
61 }
62 }
63
64 /// <summary>
65 /// Looks up a localized string similar to The value &apos;{0}&apos; is not a legal identifier and therefore cannot be modularized..
66 /// </summary>
67 internal static string EXP_CannotModularizeIllegalID {
68 get {
69 return ResourceManager.GetString("EXP_CannotModularizeIllegalID", resourceCulture);
70 }
71 }
72
73 /// <summary>
74 /// Looks up a localized string similar to Cannot set column &apos;{0}&apos; with value {1} because it is greater than the maximum allowed value for this column, {2}..
75 /// </summary>
76 internal static string EXP_CannotSetColumnWithValueGreaterThanMaxValue {
77 get {
78 return ResourceManager.GetString("EXP_CannotSetColumnWithValueGreaterThanMaxValue", resourceCulture);
79 }
80 }
81
82 /// <summary>
83 /// Looks up a localized string similar to Cannot set column &apos;{0}&apos; with value {1} because it is less than the minimum allowed value for this column, {2}..
84 /// </summary>
85 internal static string EXP_CannotSetColumnWithValueLessThanMinValue {
86 get {
87 return ResourceManager.GetString("EXP_CannotSetColumnWithValueLessThanMinValue", resourceCulture);
88 }
89 }
90
91 /// <summary>
92 /// Looks up a localized string similar to A Merge table FileCompression column cannot be set to the invalid value &apos;{0}&apos;..
93 /// </summary>
94 internal static string EXP_CannotSetMergeTableFileCompressionColumnToInvalidValue {
95 get {
96 return ResourceManager.GetString("EXP_CannotSetMergeTableFileCompressionColumnToInvalidValue", resourceCulture);
97 }
98 }
99
100 /// <summary>
101 /// Looks up a localized string similar to Cannot set column &apos;{0}&apos; with a null value because this is a required field..
102 /// </summary>
103 internal static string EXP_CannotSetNullOnRequiredField {
104 get {
105 return ResourceManager.GetString("EXP_CannotSetNullOnRequiredField", resourceCulture);
106 }
107 }
108
109 /// <summary>
110 /// Looks up a localized string similar to Cannot set number column &apos;{0}&apos; with a value of type &apos;{1}&apos;..
111 /// </summary>
112 internal static string EXP_CannotSetNumberColumnWithValueOfType {
113 get {
114 return ResourceManager.GetString("EXP_CannotSetNumberColumnWithValueOfType", resourceCulture);
115 }
116 }
117
118 /// <summary>
119 /// Looks up a localized string similar to Cannot set string column &apos;{0}&apos; with a value of type &apos;{1}&apos;..
120 /// </summary>
121 internal static string EXP_CannotSetStringColumnWithValueOfType {
122 get {
123 return ResourceManager.GetString("EXP_CannotSetStringColumnWithValueOfType", resourceCulture);
124 }
125 }
126
127 /// <summary>
128 /// Looks up a localized string similar to Could not determine ProductCode from transform summary information.
129 /// </summary>
130 public static string EXP_CouldnotDetermineProductCodeFromTransformSummaryInfo {
131 get {
132 return ResourceManager.GetString("EXP_CouldnotDetermineProductCodeFromTransformSummaryInfo", resourceCulture);
133 }
134 }
135
136 /// <summary> 41 /// <summary>
137 /// Looks up a localized string similar to Could not find a unique identifier for the given resource name.. 42 /// Looks up a localized string similar to Could not find a unique identifier for the given resource name..
138 /// </summary> 43 /// </summary>
@@ -143,24 +48,6 @@ namespace WixToolset {
143 } 48 }
144 49
145 /// <summary> 50 /// <summary>
146 /// Looks up a localized string similar to Didn&apos;t find duplicated symbol..
147 /// </summary>
148 internal static string EXP_DidnotFindDuplicateSymbol {
149 get {
150 return ResourceManager.GetString("EXP_DidnotFindDuplicateSymbol", resourceCulture);
151 }
152 }
153
154 /// <summary>
155 /// Looks up a localized string similar to Expected ComplexReference type..
156 /// </summary>
157 internal static string EXP_ExpectedComplexReferenceType {
158 get {
159 return ResourceManager.GetString("EXP_ExpectedComplexReferenceType", resourceCulture);
160 }
161 }
162
163 /// <summary>
164 /// Looks up a localized string similar to Found an ActionRow with a non-existent {0} action: {1}.. 51 /// Looks up a localized string similar to Found an ActionRow with a non-existent {0} action: {1}..
165 /// </summary> 52 /// </summary>
166 public static string EXP_FoundActionRowWinNonExistentAction { 53 public static string EXP_FoundActionRowWinNonExistentAction {
@@ -179,33 +66,6 @@ namespace WixToolset {
179 } 66 }
180 67
181 /// <summary> 68 /// <summary>
182 /// Looks up a localized string similar to Illegal arguments passed..
183 /// </summary>
184 internal static string EXP_IllegalArgumentsPassed {
185 get {
186 return ResourceManager.GetString("EXP_IllegalArgumentsPassed", resourceCulture);
187 }
188 }
189
190 /// <summary>
191 /// Looks up a localized string similar to Invalid table name passed into GenerateIdentifier..
192 /// </summary>
193 internal static string EXP_InvalidTableNamePassed {
194 get {
195 return ResourceManager.GetString("EXP_InvalidTableNamePassed", resourceCulture);
196 }
197 }
198
199 /// <summary>
200 /// Looks up a localized string similar to A Merge table FileCompression column contains an invalid value &apos;{0}&apos;..
201 /// </summary>
202 internal static string EXP_MergeTableFileCompressionColumnContainsInvalidValue {
203 get {
204 return ResourceManager.GetString("EXP_MergeTableFileCompressionColumnContainsInvalidValue", resourceCulture);
205 }
206 }
207
208 /// <summary>
209 /// Looks up a localized string similar to Multiple harvester extensions specified.. 69 /// Looks up a localized string similar to Multiple harvester extensions specified..
210 /// </summary> 70 /// </summary>
211 internal static string EXP_MultipleHarvesterExtensionsSpecified { 71 internal static string EXP_MultipleHarvesterExtensionsSpecified {
@@ -215,24 +75,6 @@ namespace WixToolset {
215 } 75 }
216 76
217 /// <summary> 77 /// <summary>
218 /// Looks up a localized string similar to The other object is not a FileRow..
219 /// </summary>
220 internal static string EXP_OtherObjectIsNotFileRow {
221 get {
222 return ResourceManager.GetString("EXP_OtherObjectIsNotFileRow", resourceCulture);
223 }
224 }
225
226 /// <summary>
227 /// Looks up a localized string similar to Transform authored into multiple Media &apos;{0}&apos; and &apos;{1}&apos;..
228 /// </summary>
229 public static string EXP_TransformAuthoredIntoMultipleMedia {
230 get {
231 return ResourceManager.GetString("EXP_TransformAuthoredIntoMultipleMedia", resourceCulture);
232 }
233 }
234
235 /// <summary>
236 /// Looks up a localized string similar to Unexpected complex reference child type: {0}. 78 /// Looks up a localized string similar to Unexpected complex reference child type: {0}.
237 /// </summary> 79 /// </summary>
238 internal static string EXP_UnexpectedComplexReferenceChildType { 80 internal static string EXP_UnexpectedComplexReferenceChildType {
@@ -269,78 +111,6 @@ namespace WixToolset {
269 } 111 }
270 112
271 /// <summary> 113 /// <summary>
272 /// Looks up a localized string similar to Unknown control attribute: &apos;{0}&apos;..
273 /// </summary>
274 internal static string EXP_UnknowControlAttribute {
275 get {
276 return ResourceManager.GetString("EXP_UnknowControlAttribute", resourceCulture);
277 }
278 }
279
280 /// <summary>
281 /// Looks up a localized string similar to Unknown column type: {0}.
282 /// </summary>
283 internal static string EXP_UnknownColumnType {
284 get {
285 return ResourceManager.GetString("EXP_UnknownColumnType", resourceCulture);
286 }
287 }
288
289 /// <summary>
290 /// Looks up a localized string similar to Unknown compression level type: {0}.
291 /// </summary>
292 internal static string EXP_UnknownCompressionLevelType {
293 get {
294 return ResourceManager.GetString("EXP_UnknownCompressionLevelType", resourceCulture);
295 }
296 }
297
298 /// <summary>
299 /// Looks up a localized string similar to Unknown custom column category &apos;{0}&apos;..
300 /// </summary>
301 internal static string EXP_UnknownCustomColumnCategory {
302 get {
303 return ResourceManager.GetString("EXP_UnknownCustomColumnCategory", resourceCulture);
304 }
305 }
306
307 /// <summary>
308 /// Looks up a localized string similar to Unknown custom column modularization type &apos;{0}&apos;..
309 /// </summary>
310 internal static string EXP_UnknownCustomColumnModularizationType {
311 get {
312 return ResourceManager.GetString("EXP_UnknownCustomColumnModularizationType", resourceCulture);
313 }
314 }
315
316 /// <summary>
317 /// Looks up a localized string similar to Unknown custom column type &apos;{0}&apos;..
318 /// </summary>
319 internal static string EXP_UnknownCustomColumnType {
320 get {
321 return ResourceManager.GetString("EXP_UnknownCustomColumnType", resourceCulture);
322 }
323 }
324
325 /// <summary>
326 /// Looks up a localized string similar to Unknown output type..
327 /// </summary>
328 internal static string EXP_UnknownOutputType {
329 get {
330 return ResourceManager.GetString("EXP_UnknownOutputType", resourceCulture);
331 }
332 }
333
334 /// <summary>
335 /// Looks up a localized string similar to Unknown permission attribute &apos;{0}&apos;..
336 /// </summary>
337 internal static string EXP_UnknownPermissionAttribute {
338 get {
339 return ResourceManager.GetString("EXP_UnknownPermissionAttribute", resourceCulture);
340 }
341 }
342
343 /// <summary>
344 /// Looks up a localized string similar to Unknown platform enumeration &apos;{0}&apos; encountered.. 114 /// Looks up a localized string similar to Unknown platform enumeration &apos;{0}&apos; encountered..
345 /// </summary> 115 /// </summary>
346 internal static string EXP_UnknownPlatformEnum { 116 internal static string EXP_UnknownPlatformEnum {
@@ -350,24 +120,6 @@ namespace WixToolset {
350 } 120 }
351 121
352 /// <summary> 122 /// <summary>
353 /// Looks up a localized string similar to Unknown sequence table..
354 /// </summary>
355 internal static string EXP_UnknowSequenceTable {
356 get {
357 return ResourceManager.GetString("EXP_UnknowSequenceTable", resourceCulture);
358 }
359 }
360
361 /// <summary>
362 /// Looks up a localized string similar to The table {0} is not supported..
363 /// </summary>
364 internal static string EXP_UnsupportedTable {
365 get {
366 return ResourceManager.GetString("EXP_UnsupportedTable", resourceCulture);
367 }
368 }
369
370 /// <summary>
371 /// Looks up a localized string similar to {0}({1}). 123 /// Looks up a localized string similar to {0}({1}).
372 /// </summary> 124 /// </summary>
373 internal static string Format_FirstLineNumber { 125 internal static string Format_FirstLineNumber {
diff --git a/src/WixToolset.Core/WixStrings.resx b/src/WixToolset.Core/WixStrings.resx
index 3fbf639e..47402f59 100644
--- a/src/WixToolset.Core/WixStrings.resx
+++ b/src/WixToolset.Core/WixStrings.resx
@@ -117,39 +117,9 @@
117 <resheader name="writer"> 117 <resheader name="writer">
118 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 118 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119 </resheader> 119 </resheader>
120 <data name="EXP_CannotIndexIntoFileRowCollection" xml:space="preserve">
121 <value>Cannot index into a FileRowCollection that allows duplicate FileIds</value>
122 </data>
123 <data name="EXP_CannotModularizeIllegalID" xml:space="preserve">
124 <value>The value '{0}' is not a legal identifier and therefore cannot be modularized.</value>
125 </data>
126 <data name="EXP_CannotSetColumnWithValueGreaterThanMaxValue" xml:space="preserve">
127 <value>Cannot set column '{0}' with value {1} because it is greater than the maximum allowed value for this column, {2}.</value>
128 </data>
129 <data name="EXP_CannotSetColumnWithValueLessThanMinValue" xml:space="preserve">
130 <value>Cannot set column '{0}' with value {1} because it is less than the minimum allowed value for this column, {2}.</value>
131 </data>
132 <data name="EXP_CannotSetMergeTableFileCompressionColumnToInvalidValue" xml:space="preserve">
133 <value>A Merge table FileCompression column cannot be set to the invalid value '{0}'.</value>
134 </data>
135 <data name="EXP_CannotSetNullOnRequiredField" xml:space="preserve">
136 <value>Cannot set column '{0}' with a null value because this is a required field.</value>
137 </data>
138 <data name="EXP_CannotSetNumberColumnWithValueOfType" xml:space="preserve">
139 <value>Cannot set number column '{0}' with a value of type '{1}'.</value>
140 </data>
141 <data name="EXP_CannotSetStringColumnWithValueOfType" xml:space="preserve">
142 <value>Cannot set string column '{0}' with a value of type '{1}'.</value>
143 </data>
144 <data name="EXP_CouldnotDetermineProductCodeFromTransformSummaryInfo" xml:space="preserve">
145 <value>Could not determine ProductCode from transform summary information</value>
146 </data>
147 <data name="EXP_CouldnotFileUniqueIDForResourceName" xml:space="preserve"> 120 <data name="EXP_CouldnotFileUniqueIDForResourceName" xml:space="preserve">
148 <value>Could not find a unique identifier for the given resource name.</value> 121 <value>Could not find a unique identifier for the given resource name.</value>
149 </data> 122 </data>
150 <data name="EXP_DidnotFindDuplicateSymbol" xml:space="preserve">
151 <value>Didn't find duplicated symbol.</value>
152 </data>
153 <data name="EXP_ExpectedComplexReferenceType" xml:space="preserve"> 123 <data name="EXP_ExpectedComplexReferenceType" xml:space="preserve">
154 <value>Expected ComplexReference type.</value> 124 <value>Expected ComplexReference type.</value>
155 </data> 125 </data>
@@ -159,24 +129,9 @@
159 <data name="EXP_FoundActionRowWithNoSequenceBeforeOrAfterColumnSet" xml:space="preserve"> 129 <data name="EXP_FoundActionRowWithNoSequenceBeforeOrAfterColumnSet" xml:space="preserve">
160 <value>Found an ActionRow with no Sequence, Before, or After column set.</value> 130 <value>Found an ActionRow with no Sequence, Before, or After column set.</value>
161 </data> 131 </data>
162 <data name="EXP_IllegalArgumentsPassed" xml:space="preserve">
163 <value>Illegal arguments passed.</value>
164 </data>
165 <data name="EXP_InvalidTableNamePassed" xml:space="preserve">
166 <value>Invalid table name passed into GenerateIdentifier.</value>
167 </data>
168 <data name="EXP_MergeTableFileCompressionColumnContainsInvalidValue" xml:space="preserve">
169 <value>A Merge table FileCompression column contains an invalid value '{0}'.</value>
170 </data>
171 <data name="EXP_MultipleHarvesterExtensionsSpecified" xml:space="preserve"> 132 <data name="EXP_MultipleHarvesterExtensionsSpecified" xml:space="preserve">
172 <value>Multiple harvester extensions specified.</value> 133 <value>Multiple harvester extensions specified.</value>
173 </data> 134 </data>
174 <data name="EXP_OtherObjectIsNotFileRow" xml:space="preserve">
175 <value>The other object is not a FileRow.</value>
176 </data>
177 <data name="EXP_TransformAuthoredIntoMultipleMedia" xml:space="preserve">
178 <value>Transform authored into multiple Media '{0}' and '{1}'.</value>
179 </data>
180 <data name="EXP_UnexpectedComplexReferenceChildType" xml:space="preserve"> 135 <data name="EXP_UnexpectedComplexReferenceChildType" xml:space="preserve">
181 <value>Unexpected complex reference child type: {0}</value> 136 <value>Unexpected complex reference child type: {0}</value>
182 </data> 137 </data>
@@ -189,39 +144,9 @@
189 <data name="EXP_UnexpectedMergerErrorWithType" xml:space="preserve"> 144 <data name="EXP_UnexpectedMergerErrorWithType" xml:space="preserve">
190 <value>Encountered an unexpected merge error of type '{0}' for which there is currently no error message to display. More information about the merge and the failure can be found in the merge log: '{1}'</value> 145 <value>Encountered an unexpected merge error of type '{0}' for which there is currently no error message to display. More information about the merge and the failure can be found in the merge log: '{1}'</value>
191 </data> 146 </data>
192 <data name="EXP_UnknowControlAttribute" xml:space="preserve">
193 <value>Unknown control attribute: '{0}'.</value>
194 </data>
195 <data name="EXP_UnknownColumnType" xml:space="preserve">
196 <value>Unknown column type: {0}</value>
197 </data>
198 <data name="EXP_UnknownCompressionLevelType" xml:space="preserve">
199 <value>Unknown compression level type: {0}</value>
200 </data>
201 <data name="EXP_UnknownCustomColumnCategory" xml:space="preserve">
202 <value>Unknown custom column category '{0}'.</value>
203 </data>
204 <data name="EXP_UnknownCustomColumnModularizationType" xml:space="preserve">
205 <value>Unknown custom column modularization type '{0}'.</value>
206 </data>
207 <data name="EXP_UnknownCustomColumnType" xml:space="preserve">
208 <value>Unknown custom column type '{0}'.</value>
209 </data>
210 <data name="EXP_UnknownOutputType" xml:space="preserve">
211 <value>Unknown output type.</value>
212 </data>
213 <data name="EXP_UnknownPermissionAttribute" xml:space="preserve">
214 <value>Unknown permission attribute '{0}'.</value>
215 </data>
216 <data name="EXP_UnknowSequenceTable" xml:space="preserve">
217 <value>Unknown sequence table.</value>
218 </data>
219 <data name="EXP_UnknownPlatformEnum" xml:space="preserve"> 147 <data name="EXP_UnknownPlatformEnum" xml:space="preserve">
220 <value>Unknown platform enumeration '{0}' encountered.</value> 148 <value>Unknown platform enumeration '{0}' encountered.</value>
221 </data> 149 </data>
222 <data name="EXP_UnsupportedTable" xml:space="preserve">
223 <value>The table {0} is not supported.</value>
224 </data>
225 <data name="Format_FirstLineNumber" xml:space="preserve"> 150 <data name="Format_FirstLineNumber" xml:space="preserve">
226 <value>{0}({1})</value> 151 <value>{0}({1})</value>
227 </data> 152 </data>
diff --git a/src/WixToolset.Core/WixToolsetServiceProvider.cs b/src/WixToolset.Core/WixToolsetServiceProvider.cs
index c77f3813..995daa89 100644
--- a/src/WixToolset.Core/WixToolsetServiceProvider.cs
+++ b/src/WixToolset.Core/WixToolsetServiceProvider.cs
@@ -11,6 +11,7 @@ namespace WixToolset.Core
11 public class WixToolsetServiceProvider : IServiceProvider 11 public class WixToolsetServiceProvider : IServiceProvider
12 { 12 {
13 private ExtensionManager extensionManager; 13 private ExtensionManager extensionManager;
14 private Messaging messaging;
14 private ParseHelper parseHelper; 15 private ParseHelper parseHelper;
15 private PreprocessHelper preprocessHelper; 16 private PreprocessHelper preprocessHelper;
16 private TupleDefinitionCreator tupleDefinitionCreator; 17 private TupleDefinitionCreator tupleDefinitionCreator;
@@ -62,6 +63,11 @@ namespace WixToolset.Core
62 return this.extensionManager = this.extensionManager ?? new ExtensionManager(); 63 return this.extensionManager = this.extensionManager ?? new ExtensionManager();
63 } 64 }
64 65
66 if (serviceType == typeof(IMessaging))
67 {
68 return this.messaging = this.messaging ?? new Messaging();
69 }
70
65 if (serviceType == typeof(ITupleDefinitionCreator)) 71 if (serviceType == typeof(ITupleDefinitionCreator))
66 { 72 {
67 return this.tupleDefinitionCreator = this.tupleDefinitionCreator ?? new TupleDefinitionCreator(this); 73 return this.tupleDefinitionCreator = this.tupleDefinitionCreator ?? new TupleDefinitionCreator(this);
diff --git a/src/WixToolset.Core/WixVariableResolver.cs b/src/WixToolset.Core/WixVariableResolver.cs
index c4572d33..f8bccef0 100644
--- a/src/WixToolset.Core/WixVariableResolver.cs
+++ b/src/WixToolset.Core/WixVariableResolver.cs
@@ -11,6 +11,7 @@ namespace WixToolset.Core
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Tuples;
13 using WixToolset.Extensibility; 13 using WixToolset.Extensibility;
14 using WixToolset.Extensibility.Services;
14 15
15 /// <summary> 16 /// <summary>
16 /// WiX variable resolver. 17 /// WiX variable resolver.
@@ -22,16 +23,15 @@ namespace WixToolset.Core
22 /// <summary> 23 /// <summary>
23 /// Instantiate a new WixVariableResolver. 24 /// Instantiate a new WixVariableResolver.
24 /// </summary> 25 /// </summary>
25 public WixVariableResolver(Localizer localizer = null) 26 public WixVariableResolver(IMessaging messaging, Localizer localizer = null)
26 { 27 {
27 this.wixVariables = new Dictionary<string, string>(); 28 this.wixVariables = new Dictionary<string, string>();
29 this.Messaging = messaging;
28 this.Localizer = localizer; 30 this.Localizer = localizer;
29 } 31 }
30 32
31 /// <summary> 33 private IMessaging Messaging { get; }
32 /// Gets or sets the localizer. 34
33 /// </summary>
34 /// <value>The localizer.</value>
35 private Localizer Localizer { get; } 35 private Localizer Localizer { get; }
36 36
37 /// <summary> 37 /// <summary>
@@ -52,7 +52,7 @@ namespace WixToolset.Core
52 } 52 }
53 catch (ArgumentException) 53 catch (ArgumentException)
54 { 54 {
55 Messaging.Instance.OnMessage(WixErrors.WixVariableCollision(null, name)); 55 this.Messaging.Write(ErrorMessages.WixVariableCollision(null, name));
56 } 56 }
57 } 57 }
58 58
@@ -70,7 +70,7 @@ namespace WixToolset.Core
70 { 70 {
71 if (!wixVariableRow.Overridable) // collision 71 if (!wixVariableRow.Overridable) // collision
72 { 72 {
73 Messaging.Instance.OnMessage(WixErrors.WixVariableCollision(wixVariableRow.SourceLineNumbers, wixVariableRow.WixVariable)); 73 this.Messaging.Write(ErrorMessages.WixVariableCollision(wixVariableRow.SourceLineNumbers, wixVariableRow.WixVariable));
74 } 74 }
75 } 75 }
76 } 76 }
@@ -153,7 +153,7 @@ namespace WixToolset.Core
153 // localization variables to not support inline default values 153 // localization variables to not support inline default values
154 if ("loc" == variableNamespace) 154 if ("loc" == variableNamespace)
155 { 155 {
156 Messaging.Instance.OnMessage(WixErrors.IllegalInlineLocVariable(sourceLineNumbers, variableId, variableDefaultValue)); 156 this.Messaging.Write(ErrorMessages.IllegalInlineLocVariable(sourceLineNumbers, variableId, variableDefaultValue));
157 } 157 }
158 } 158 }
159 159
@@ -183,7 +183,7 @@ namespace WixToolset.Core
183 // warn about deprecated syntax of $(loc.var) 183 // warn about deprecated syntax of $(loc.var)
184 if ('$' == sb[matches[i].Index]) 184 if ('$' == sb[matches[i].Index])
185 { 185 {
186 Messaging.Instance.OnMessage(WixWarnings.DeprecatedLocalizationVariablePrefix(sourceLineNumbers, variableId)); 186 this.Messaging.Write(WarningMessages.DeprecatedLocalizationVariablePrefix(sourceLineNumbers, variableId));
187 } 187 }
188 188
189 resolvedValue = this.Localizer?.GetLocalizedValue(variableId); 189 resolvedValue = this.Localizer?.GetLocalizedValue(variableId);
@@ -193,7 +193,7 @@ namespace WixToolset.Core
193 // illegal syntax of $(wix.var) 193 // illegal syntax of $(wix.var)
194 if ('$' == sb[matches[i].Index]) 194 if ('$' == sb[matches[i].Index])
195 { 195 {
196 Messaging.Instance.OnMessage(WixErrors.IllegalWixVariablePrefix(sourceLineNumbers, variableId)); 196 this.Messaging.Write(ErrorMessages.IllegalWixVariablePrefix(sourceLineNumbers, variableId));
197 } 197 }
198 else 198 else
199 { 199 {
@@ -225,11 +225,11 @@ namespace WixToolset.Core
225 } 225 }
226 else if ("loc" == variableNamespace && errorOnUnknown) // unresolved loc variable 226 else if ("loc" == variableNamespace && errorOnUnknown) // unresolved loc variable
227 { 227 {
228 Messaging.Instance.OnMessage(WixErrors.LocalizationVariableUnknown(sourceLineNumbers, variableId)); 228 this.Messaging.Write(ErrorMessages.LocalizationVariableUnknown(sourceLineNumbers, variableId));
229 } 229 }
230 else if (!localizationOnly && "wix" == variableNamespace && errorOnUnknown) // unresolved wix variable 230 else if (!localizationOnly && "wix" == variableNamespace && errorOnUnknown) // unresolved wix variable
231 { 231 {
232 Messaging.Instance.OnMessage(WixErrors.WixVariableUnknown(sourceLineNumbers, variableId)); 232 this.Messaging.Write(ErrorMessages.WixVariableUnknown(sourceLineNumbers, variableId));
233 } 233 }
234 } 234 }
235 } 235 }
@@ -321,7 +321,7 @@ namespace WixToolset.Core
321 } 321 }
322 else 322 else
323 { 323 {
324 throw new WixException(WixErrors.UnresolvedBindReference(sourceLineNumbers, value)); 324 throw new WixException(ErrorMessages.UnresolvedBindReference(sourceLineNumbers, value));
325 } 325 }
326 } 326 }
327 } 327 }
diff --git a/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
index bd4b70da..3714f9e7 100644
--- a/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
@@ -25,7 +25,7 @@ namespace WixToolsetTest.CoreIntegration
25 var intermediateFolder = fs.GetFolder(); 25 var intermediateFolder = fs.GetFolder();
26 26
27 var program = new Program(); 27 var program = new Program();
28 var result = program.Run(new WixToolsetServiceProvider(), new[] 28 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
29 { 29 {
30 "build", 30 "build",
31 Path.Combine(folder, "Package.wxs"), 31 Path.Combine(folder, "Package.wxs"),
@@ -68,7 +68,7 @@ namespace WixToolsetTest.CoreIntegration
68 var intermediateFolder = fs.GetFolder(); 68 var intermediateFolder = fs.GetFolder();
69 69
70 var program = new Program(); 70 var program = new Program();
71 var result = program.Run(new WixToolsetServiceProvider(), new[] 71 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
72 { 72 {
73 "build", 73 "build",
74 Path.Combine(folder, "Package.wxs"), 74 Path.Combine(folder, "Package.wxs"),
diff --git a/src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs
index 1b7a18cf..4f34f330 100644
--- a/src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs
@@ -23,7 +23,7 @@ namespace WixToolsetTest.CoreIntegration
23 var intermediateFolder = fs.GetFolder(); 23 var intermediateFolder = fs.GetFolder();
24 24
25 var program = new Program(); 25 var program = new Program();
26 var result = program.Run(new WixToolsetServiceProvider(), new[] 26 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
27 { 27 {
28 "build", 28 "build",
29 Path.Combine(folder, "Package.wxs"), 29 Path.Combine(folder, "Package.wxs"),
@@ -59,7 +59,7 @@ namespace WixToolsetTest.CoreIntegration
59 var intermediateFolder = fs.GetFolder(); 59 var intermediateFolder = fs.GetFolder();
60 60
61 var program = new Program(); 61 var program = new Program();
62 var result = program.Run(new WixToolsetServiceProvider(), new[] 62 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
63 { 63 {
64 "build", 64 "build",
65 Path.Combine(folder, "Package.wxs"), 65 Path.Combine(folder, "Package.wxs"),
@@ -95,7 +95,7 @@ namespace WixToolsetTest.CoreIntegration
95 var intermediateFolder = fs.GetFolder(); 95 var intermediateFolder = fs.GetFolder();
96 96
97 var program = new Program(); 97 var program = new Program();
98 var result = program.Run(new WixToolsetServiceProvider(), new[] 98 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
99 { 99 {
100 "build", 100 "build",
101 Path.Combine(folder, "Package.wxs"), 101 Path.Combine(folder, "Package.wxs"),
@@ -125,7 +125,7 @@ namespace WixToolsetTest.CoreIntegration
125 var intermediateFolder = fs.GetFolder(); 125 var intermediateFolder = fs.GetFolder();
126 126
127 var program = new Program(); 127 var program = new Program();
128 var result = program.Run(new WixToolsetServiceProvider(), new[] 128 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
129 { 129 {
130 "build", 130 "build",
131 Path.Combine(folder, "Package.wxs"), 131 Path.Combine(folder, "Package.wxs"),
@@ -155,7 +155,7 @@ namespace WixToolsetTest.CoreIntegration
155 var intermediateFolder = fs.GetFolder(); 155 var intermediateFolder = fs.GetFolder();
156 156
157 var program = new Program(); 157 var program = new Program();
158 var result = program.Run(new WixToolsetServiceProvider(), new[] 158 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
159 { 159 {
160 "build", 160 "build",
161 Path.Combine(folder, "Package.wxs"), 161 Path.Combine(folder, "Package.wxs"),
@@ -185,7 +185,7 @@ namespace WixToolsetTest.CoreIntegration
185 var intermediateFolder = fs.GetFolder(); 185 var intermediateFolder = fs.GetFolder();
186 186
187 var program = new Program(); 187 var program = new Program();
188 var result = program.Run(new WixToolsetServiceProvider(), new[] 188 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
189 { 189 {
190 "build", 190 "build",
191 Path.Combine(folder, "Module.wxs"), 191 Path.Combine(folder, "Module.wxs"),
@@ -219,7 +219,7 @@ namespace WixToolsetTest.CoreIntegration
219 var intermediateFolder = fs.GetFolder(); 219 var intermediateFolder = fs.GetFolder();
220 220
221 var program = new Program(); 221 var program = new Program();
222 var result = program.Run(new WixToolsetServiceProvider(), new[] 222 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
223 { 223 {
224 "build", 224 "build",
225 Path.Combine(folder, "Package.wxs"), 225 Path.Combine(folder, "Package.wxs"),
@@ -255,7 +255,7 @@ namespace WixToolsetTest.CoreIntegration
255 var intermediateFolder = fs.GetFolder(); 255 var intermediateFolder = fs.GetFolder();
256 256
257 var program = new Program(); 257 var program = new Program();
258 var result = program.Run(new WixToolsetServiceProvider(), new[] 258 var result = program.Run(new WixToolsetServiceProvider(), null, new[]
259 { 259 {
260 "build", 260 "build",
261 Path.Combine(folder, "Package.wxs"), 261 Path.Combine(folder, "Package.wxs"),
diff --git a/src/wix/Program.cs b/src/wix/Program.cs
index 21a158d2..4cfc0138 100644
--- a/src/wix/Program.cs
+++ b/src/wix/Program.cs
@@ -3,7 +3,11 @@
3namespace WixToolset.Core 3namespace WixToolset.Core
4{ 4{
5 using System; 5 using System;
6 using System.Globalization;
7 using System.Text;
8 using System.Threading;
6 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Extensibility;
7 using WixToolset.Extensibility.Services; 11 using WixToolset.Extensibility.Services;
8 12
9 /// <summary> 13 /// <summary>
@@ -19,12 +23,12 @@ namespace WixToolset.Core
19 [MTAThread] 23 [MTAThread]
20 public static int Main(string[] args) 24 public static int Main(string[] args)
21 { 25 {
22 Messaging.Instance.InitializeAppName("WIX", "wix.exe");
23 Messaging.Instance.Display += DisplayMessage;
24
25 var serviceProvider = new WixToolsetServiceProvider(); 26 var serviceProvider = new WixToolsetServiceProvider();
27
28 var listener = new ConsoleMessageListener("WIX", "wix.exe");
29
26 var program = new Program(); 30 var program = new Program();
27 return program.Run(serviceProvider, args); 31 return program.Run(serviceProvider, listener, args);
28 } 32 }
29 33
30 /// <summary> 34 /// <summary>
@@ -33,10 +37,13 @@ namespace WixToolset.Core
33 /// <param name="serviceProvider">Service provider to use throughout this execution.</param> 37 /// <param name="serviceProvider">Service provider to use throughout this execution.</param>
34 /// <param name="args">Command-line arguments to execute.</param> 38 /// <param name="args">Command-line arguments to execute.</param>
35 /// <returns>Returns the application error code.</returns> 39 /// <returns>Returns the application error code.</returns>
36 public int Run(IServiceProvider serviceProvider, string[] args) 40 public int Run(IServiceProvider serviceProvider, IMessageListener listener, string[] args)
37 { 41 {
42 var messaging = serviceProvider.GetService<IMessaging>();
43 messaging.SetListener(listener);
44
38 var context = serviceProvider.GetService<ICommandLineContext>(); 45 var context = serviceProvider.GetService<ICommandLineContext>();
39 context.Messaging = Messaging.Instance; 46 context.Messaging = messaging;
40 context.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider); 47 context.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider);
41 context.ParsedArguments = args; 48 context.ParsedArguments = args;
42 49
@@ -57,17 +64,50 @@ namespace WixToolset.Core
57 return extensionManager; 64 return extensionManager;
58 } 65 }
59 66
60 private static void DisplayMessage(object sender, DisplayEventArgs e) 67 private class ConsoleMessageListener : IMessageListener
61 { 68 {
62 switch (e.Level) 69 public ConsoleMessageListener(string shortName, string longName)
70 {
71 this.ShortAppName = shortName;
72 this.LongAppName = longName;
73
74 PrepareConsoleForLocalization();
75 }
76
77 public string LongAppName { get; }
78
79 public string ShortAppName { get; }
80
81 public void Write(Message message)
63 { 82 {
64 case MessageLevel.Warning: 83 var filename = message.SourceLineNumbers?.FileName ?? this.LongAppName;
65 case MessageLevel.Error: 84 var line = message.SourceLineNumbers?.LineNumber ?? -1;
66 Console.Error.WriteLine(e.Message); 85 var type = message.Level.ToString().ToLowerInvariant();
67 break; 86 var output = message.Level >= MessageLevel.Warning ? Console.Out : Console.Error;
68 default: 87
69 Console.WriteLine(e.Message); 88 if (line > 0)
70 break; 89 {
90 filename = String.Concat(filename, "(", line, ")");
91 }
92
93 output.WriteLine("{0} : {1} {2}{3:0000}: {4}", filename, type, this.ShortAppName, message.Id, message.ToString());
94 }
95
96 public void Write(string message)
97 {
98 Console.Out.WriteLine(message);
99 }
100
101 private static void PrepareConsoleForLocalization()
102 {
103 Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture();
104
105 if (Console.OutputEncoding.CodePage != Encoding.UTF8.CodePage &&
106 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage &&
107 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage)
108 {
109 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
110 }
71 } 111 }
72 } 112 }
73 } 113 }