diff options
| author | Rob Mensching <rob@firegiant.com> | 2017-08-20 14:22:07 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2017-08-20 14:25:49 -0700 |
| commit | 3e1c5e3fa80a2498f7d6aac5c0f8ca9e3bd7c66c (patch) | |
| tree | bbe907a4c5ebf7aa5e3f02141f6e3abd31cb7b5c /src | |
| parent | 6dee3b45cb679786bd49a5db8fde9006d283b3e2 (diff) | |
| download | wix-3e1c5e3fa80a2498f7d6aac5c0f8ca9e3bd7c66c.tar.gz wix-3e1c5e3fa80a2498f7d6aac5c0f8ca9e3bd7c66c.tar.bz2 wix-3e1c5e3fa80a2498f7d6aac5c0f8ca9e3bd7c66c.zip | |
Move to .NET Core 2.0
Diffstat (limited to 'src')
34 files changed, 1709 insertions, 0 deletions
diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 00000000..0ea54cfe --- /dev/null +++ b/src/Directory.Build.props | |||
| @@ -0,0 +1,18 @@ | |||
| 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 | <Project> | ||
| 5 | <PropertyGroup> | ||
| 6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
| 7 | <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)..\build\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath> | ||
| 8 | <OutputPath>$(MSBuildThisFileDirectory)..\build\$(Configuration)\</OutputPath> | ||
| 9 | |||
| 10 | <Authors>Rob Mensching, Bob Arnson</Authors> | ||
| 11 | <Company>WiX Toolset</Company> | ||
| 12 | <Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright> | ||
| 13 | </PropertyGroup> | ||
| 14 | |||
| 15 | <PropertyGroup> | ||
| 16 | <WixToolsetRootFolder>$(MSBuildThisFileDirectory)..\..\</WixToolsetRootFolder> | ||
| 17 | </PropertyGroup> | ||
| 18 | </Project> | ||
diff --git a/src/WixToolset.Extensibility/AssemblyInfo.cs b/src/WixToolset.Extensibility/AssemblyInfo.cs new file mode 100644 index 00000000..6512230a --- /dev/null +++ b/src/WixToolset.Extensibility/AssemblyInfo.cs | |||
| @@ -0,0 +1,9 @@ | |||
| 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 | |||
| 3 | using System; | ||
| 4 | using System.Reflection; | ||
| 5 | using System.Runtime.InteropServices; | ||
| 6 | |||
| 7 | [assembly: AssemblyCulture("")] | ||
| 8 | [assembly:CLSCompliant(true)] | ||
| 9 | [assembly: ComVisible(false)] | ||
diff --git a/src/WixToolset.Extensibility/BindFileWithPath.cs b/src/WixToolset.Extensibility/BindFileWithPath.cs new file mode 100644 index 00000000..f07873fc --- /dev/null +++ b/src/WixToolset.Extensibility/BindFileWithPath.cs | |||
| @@ -0,0 +1,20 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | /// <summary> | ||
| 6 | /// Bind file with its path. | ||
| 7 | /// </summary> | ||
| 8 | public class BindFileWithPath | ||
| 9 | { | ||
| 10 | /// <summary> | ||
| 11 | /// Gets or sets the identifier of the file with this path. | ||
| 12 | /// </summary> | ||
| 13 | public string Id { get; set; } | ||
| 14 | |||
| 15 | /// <summary> | ||
| 16 | /// Gets or sets the file path. | ||
| 17 | /// </summary> | ||
| 18 | public string Path { get; set; } | ||
| 19 | } | ||
| 20 | } | ||
diff --git a/src/WixToolset.Extensibility/BindPath.cs b/src/WixToolset.Extensibility/BindPath.cs new file mode 100644 index 00000000..236ee4ec --- /dev/null +++ b/src/WixToolset.Extensibility/BindPath.cs | |||
| @@ -0,0 +1,52 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Bind path representation. | ||
| 9 | /// </summary> | ||
| 10 | public class BindPath | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Creates an unnamed bind path. | ||
| 14 | /// </summary> | ||
| 15 | /// <param name="path">Path for the bind path.</param> | ||
| 16 | public BindPath(string path) : this(String.Empty, path) | ||
| 17 | { | ||
| 18 | } | ||
| 19 | |||
| 20 | /// <summary> | ||
| 21 | /// Creates a named bind path. | ||
| 22 | /// </summary> | ||
| 23 | /// <param name="name">Name of the bind path.</param> | ||
| 24 | /// <param name="path">Path for the bind path.</param> | ||
| 25 | public BindPath(string name, string path) | ||
| 26 | { | ||
| 27 | this.Name = name; | ||
| 28 | this.Path = path; | ||
| 29 | } | ||
| 30 | |||
| 31 | /// <summary> | ||
| 32 | /// Parses a bind path from its string representation | ||
| 33 | /// </summary> | ||
| 34 | /// <param name="bindPath">String representation of bind path that looks like: [name=]path</param> | ||
| 35 | /// <returns>Parsed bind path.</returns> | ||
| 36 | public static BindPath Parse(string bindPath) | ||
| 37 | { | ||
| 38 | string[] namedPath = bindPath.Split(new char[] { '=' }, 2); | ||
| 39 | return (1 == namedPath.Length) ? new BindPath(namedPath[0]) : new BindPath(namedPath[0], namedPath[1]); | ||
| 40 | } | ||
| 41 | |||
| 42 | /// <summary> | ||
| 43 | /// Name of the bind path or String.Empty if the path is unnamed. | ||
| 44 | /// </summary> | ||
| 45 | public string Name { get; set; } | ||
| 46 | |||
| 47 | /// <summary> | ||
| 48 | /// Path for the bind path. | ||
| 49 | /// </summary> | ||
| 50 | public string Path { get; set; } | ||
| 51 | } | ||
| 52 | } | ||
diff --git a/src/WixToolset.Extensibility/BindStage.cs b/src/WixToolset.Extensibility/BindStage.cs new file mode 100644 index 00000000..71ac5616 --- /dev/null +++ b/src/WixToolset.Extensibility/BindStage.cs | |||
| @@ -0,0 +1,27 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | /// <summary> | ||
| 6 | /// Bind stage of a file.. The reason we need this is to change the ResolveFile behavior based on if | ||
| 7 | /// dynamic bindpath plugin is desirable. We cannot change the signature of ResolveFile since it might | ||
| 8 | /// break existing implementers which derived from BinderFileManager | ||
| 9 | /// </summary> | ||
| 10 | public enum BindStage | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Normal binding | ||
| 14 | /// </summary> | ||
| 15 | Normal, | ||
| 16 | |||
| 17 | /// <summary> | ||
| 18 | /// Bind the file path of the target build file | ||
| 19 | /// </summary> | ||
| 20 | Target, | ||
| 21 | |||
| 22 | /// <summary> | ||
| 23 | /// Bind the file path of the updated build file | ||
| 24 | /// </summary> | ||
| 25 | Updated, | ||
| 26 | } | ||
| 27 | } | ||
diff --git a/src/WixToolset.Extensibility/BinderExtension.cs b/src/WixToolset.Extensibility/BinderExtension.cs new file mode 100644 index 00000000..c6ccb3c2 --- /dev/null +++ b/src/WixToolset.Extensibility/BinderExtension.cs | |||
| @@ -0,0 +1,40 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Base class for creating an binder extension. | ||
| 9 | /// </summary> | ||
| 10 | public abstract class BinderExtension : IBinderExtension | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets or sets the binder core for the extension. | ||
| 14 | /// </summary> | ||
| 15 | /// <value>Binder core for the extension.</value> | ||
| 16 | public IBinderCore Core { get; set; } | ||
| 17 | |||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Called before binding occurs. | ||
| 21 | /// </summary> | ||
| 22 | public virtual void Initialize(Output output) | ||
| 23 | { | ||
| 24 | } | ||
| 25 | |||
| 26 | /// <summary> | ||
| 27 | /// Called after variable resolution occurs. | ||
| 28 | /// </summary> | ||
| 29 | public virtual void AfterResolvedFields(Output output) | ||
| 30 | { | ||
| 31 | } | ||
| 32 | |||
| 33 | /// <summary> | ||
| 34 | /// Called after all output changes occur and right before the output is bound into its final format. | ||
| 35 | /// </summary> | ||
| 36 | public virtual void Finish(Output output) | ||
| 37 | { | ||
| 38 | } | ||
| 39 | } | ||
| 40 | } | ||
diff --git a/src/WixToolset.Extensibility/CabinetBuildOption.cs b/src/WixToolset.Extensibility/CabinetBuildOption.cs new file mode 100644 index 00000000..6f63131c --- /dev/null +++ b/src/WixToolset.Extensibility/CabinetBuildOption.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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | /// <summary> | ||
| 6 | /// Options for building the cabinet. | ||
| 7 | /// </summary> | ||
| 8 | public enum CabinetBuildOption | ||
| 9 | { | ||
| 10 | /// <summary> | ||
| 11 | /// Build the cabinet and move it to the target location. | ||
| 12 | /// </summary> | ||
| 13 | BuildAndMove, | ||
| 14 | |||
| 15 | /// <summary> | ||
| 16 | /// Build the cabinet and copy it to the target location. | ||
| 17 | /// </summary> | ||
| 18 | BuildAndCopy, | ||
| 19 | |||
| 20 | /// <summary> | ||
| 21 | /// Just copy the cabinet to the target location. | ||
| 22 | /// </summary> | ||
| 23 | Copy | ||
| 24 | } | ||
| 25 | } | ||
diff --git a/src/WixToolset.Extensibility/CompilerConstants.cs b/src/WixToolset.Extensibility/CompilerConstants.cs new file mode 100644 index 00000000..6d4ca742 --- /dev/null +++ b/src/WixToolset.Extensibility/CompilerConstants.cs | |||
| @@ -0,0 +1,19 @@ | |||
| 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 | |||
| 3 | namespace WixToolset | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Constants used by compiler. | ||
| 9 | /// </summary> | ||
| 10 | public class CompilerConstants | ||
| 11 | { | ||
| 12 | public const int IntegerNotSet = int.MinValue; | ||
| 13 | public const int IllegalInteger = int.MinValue + 1; | ||
| 14 | public const long LongNotSet = long.MinValue; | ||
| 15 | public const long IllegalLong = long.MinValue + 1; | ||
| 16 | public const string IllegalGuid = "IllegalGuid"; | ||
| 17 | public static readonly Version IllegalVersion = new Version(Int32.MaxValue, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue); | ||
| 18 | } | ||
| 19 | } | ||
diff --git a/src/WixToolset.Extensibility/CompilerExtension.cs b/src/WixToolset.Extensibility/CompilerExtension.cs new file mode 100644 index 00000000..522ffcf8 --- /dev/null +++ b/src/WixToolset.Extensibility/CompilerExtension.cs | |||
| @@ -0,0 +1,74 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using System.Xml.Linq; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Base class for creating a compiler extension. | ||
| 10 | /// </summary> | ||
| 11 | public abstract class CompilerExtension : ICompilerExtension | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Gets or sets the compiler core for the extension. | ||
| 15 | /// </summary> | ||
| 16 | /// <value>Compiler core for the extension.</value> | ||
| 17 | public ICompilerCore Core { get; set; } | ||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Gets the schema namespace for this extension. | ||
| 21 | /// </summary> | ||
| 22 | /// <value>Schema namespace supported by this extension.</value> | ||
| 23 | public XNamespace Namespace { get; protected set; } | ||
| 24 | |||
| 25 | /// <summary> | ||
| 26 | /// Called at the beginning of the compilation of a source file. | ||
| 27 | /// </summary> | ||
| 28 | public virtual void Initialize() | ||
| 29 | { | ||
| 30 | } | ||
| 31 | |||
| 32 | /// <summary> | ||
| 33 | /// Processes an attribute for the Compiler. | ||
| 34 | /// </summary> | ||
| 35 | /// <param name="parentElement">Parent element of attribute.</param> | ||
| 36 | /// <param name="attribute">Attribute to process.</param> | ||
| 37 | /// <param name="context">Extra information about the context in which this element is being parsed.</param> | ||
| 38 | public virtual void ParseAttribute(XElement parentElement, XAttribute attribute, IDictionary<string, string> context) | ||
| 39 | { | ||
| 40 | this.Core.UnexpectedAttribute(parentElement, attribute); | ||
| 41 | } | ||
| 42 | |||
| 43 | /// <summary> | ||
| 44 | /// Processes an element for the Compiler. | ||
| 45 | /// </summary> | ||
| 46 | /// <param name="parentElement">Parent element of element to process.</param> | ||
| 47 | /// <param name="element">Element to process.</param> | ||
| 48 | /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> | ||
| 49 | public virtual void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context) | ||
| 50 | { | ||
| 51 | this.Core.UnexpectedElement(parentElement, element); | ||
| 52 | } | ||
| 53 | |||
| 54 | /// <summary> | ||
| 55 | /// Processes an element for the Compiler, with the ability to supply a component keypath. | ||
| 56 | /// </summary> | ||
| 57 | /// <param name="parentElement">Parent element of element to process.</param> | ||
| 58 | /// <param name="element">Element to process.</param> | ||
| 59 | /// <param name="keyPath">Explicit key path.</param> | ||
| 60 | /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> | ||
| 61 | public virtual ComponentKeyPath ParsePossibleKeyPathElement(XElement parentElement, XElement element, IDictionary<string, string> context) | ||
| 62 | { | ||
| 63 | this.ParseElement(parentElement, element, context); | ||
| 64 | return null; | ||
| 65 | } | ||
| 66 | |||
| 67 | /// <summary> | ||
| 68 | /// Called at the end of the compilation of a source file. | ||
| 69 | /// </summary> | ||
| 70 | public virtual void Finish() | ||
| 71 | { | ||
| 72 | } | ||
| 73 | } | ||
| 74 | } | ||
diff --git a/src/WixToolset.Extensibility/ComponentKeyPath.cs b/src/WixToolset.Extensibility/ComponentKeyPath.cs new file mode 100644 index 00000000..f00e8f74 --- /dev/null +++ b/src/WixToolset.Extensibility/ComponentKeyPath.cs | |||
| @@ -0,0 +1,57 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | |||
| 7 | public enum ComponentKeyPathType | ||
| 8 | { | ||
| 9 | /// <summary> | ||
| 10 | /// Not a key path. | ||
| 11 | /// </summary> | ||
| 12 | None, | ||
| 13 | |||
| 14 | /// <summary> | ||
| 15 | /// File resource as a key path. | ||
| 16 | /// </summary> | ||
| 17 | File, | ||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Folder as a key path. | ||
| 21 | /// </summary> | ||
| 22 | Directory, | ||
| 23 | |||
| 24 | /// <summary> | ||
| 25 | /// ODBC data source as a key path. | ||
| 26 | /// </summary> | ||
| 27 | OdbcDataSource, | ||
| 28 | |||
| 29 | /// <summary> | ||
| 30 | /// A simple registry key acting as a key path. | ||
| 31 | /// </summary> | ||
| 32 | Registry, | ||
| 33 | |||
| 34 | /// <summary> | ||
| 35 | /// A registry key that contains a formatted property acting as a key path. | ||
| 36 | /// </summary> | ||
| 37 | RegistryFormatted | ||
| 38 | } | ||
| 39 | |||
| 40 | public class ComponentKeyPath | ||
| 41 | { | ||
| 42 | /// <summary> | ||
| 43 | /// Identifier of the resource to be a key path. | ||
| 44 | /// </summary> | ||
| 45 | public string Id { get; set; } | ||
| 46 | |||
| 47 | /// <summary> | ||
| 48 | /// Indicates whether the key path was explicitly set for this resource. | ||
| 49 | /// </summary> | ||
| 50 | public bool Explicit { get; set; } | ||
| 51 | |||
| 52 | /// <summary> | ||
| 53 | /// Type of resource to be the key path. | ||
| 54 | /// </summary> | ||
| 55 | public ComponentKeyPathType Type { get; set; } | ||
| 56 | } | ||
| 57 | } | ||
diff --git a/src/WixToolset.Extensibility/DecompilerConstants.cs b/src/WixToolset.Extensibility/DecompilerConstants.cs new file mode 100644 index 00000000..58742182 --- /dev/null +++ b/src/WixToolset.Extensibility/DecompilerConstants.cs | |||
| @@ -0,0 +1,15 @@ | |||
| 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 | |||
| 3 | namespace WixToolset | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Constants used by decompiler. | ||
| 9 | /// </summary> | ||
| 10 | public class DecompilerConstants | ||
| 11 | { | ||
| 12 | public const char PrimaryKeyDelimiter = '/'; | ||
| 13 | public const string PrimaryKeyDelimiterString = "/"; | ||
| 14 | } | ||
| 15 | } | ||
diff --git a/src/WixToolset.Extensibility/DecompilerExtension.cs b/src/WixToolset.Extensibility/DecompilerExtension.cs new file mode 100644 index 00000000..00277639 --- /dev/null +++ b/src/WixToolset.Extensibility/DecompilerExtension.cs | |||
| @@ -0,0 +1,59 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Base class for creating a decompiler extension. | ||
| 9 | /// </summary> | ||
| 10 | public abstract class DecompilerExtension : IDecompilerExtension | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets or sets the decompiler core for the extension. | ||
| 14 | /// </summary> | ||
| 15 | /// <value>The decompiler core for the extension.</value> | ||
| 16 | public IDecompilerCore Core { get; set; } | ||
| 17 | |||
| 18 | /// <summary> | ||
| 19 | /// Gets the table definitions this extension decompiles. | ||
| 20 | /// </summary> | ||
| 21 | /// <value>Table definitions this extension decompiles.</value> | ||
| 22 | public virtual TableDefinitionCollection TableDefinitions { get; protected set; } | ||
| 23 | |||
| 24 | /// <summary> | ||
| 25 | /// Gets the library that this decompiler wants removed from the decomipiled output. | ||
| 26 | /// </summary> | ||
| 27 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 28 | /// <returns>The library for this extension or null if there is no library to be removed.</returns> | ||
| 29 | public virtual Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions) | ||
| 30 | { | ||
| 31 | return null; | ||
| 32 | } | ||
| 33 | |||
| 34 | /// <summary> | ||
| 35 | /// Called at the beginning of the decompilation of a database. | ||
| 36 | /// </summary> | ||
| 37 | /// <param name="tables">The collection of all tables.</param> | ||
| 38 | public virtual void Initialize(TableIndexedCollection tables) | ||
| 39 | { | ||
| 40 | } | ||
| 41 | |||
| 42 | /// <summary> | ||
| 43 | /// Decompiles an extension table. | ||
| 44 | /// </summary> | ||
| 45 | /// <param name="table">The table to decompile.</param> | ||
| 46 | public virtual void DecompileTable(Table table) | ||
| 47 | { | ||
| 48 | this.Core.UnexpectedTable(table); | ||
| 49 | } | ||
| 50 | |||
| 51 | /// <summary> | ||
| 52 | /// Finalize decompilation. | ||
| 53 | /// </summary> | ||
| 54 | /// <param name="tables">The collection of all tables.</param> | ||
| 55 | public virtual void Finish(TableIndexedCollection tables) | ||
| 56 | { | ||
| 57 | } | ||
| 58 | } | ||
| 59 | } | ||
diff --git a/src/WixToolset.Extensibility/ExtensionData.cs b/src/WixToolset.Extensibility/ExtensionData.cs new file mode 100644 index 00000000..4cf262b9 --- /dev/null +++ b/src/WixToolset.Extensibility/ExtensionData.cs | |||
| @@ -0,0 +1,75 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.IO; | ||
| 7 | using System.Reflection; | ||
| 8 | using System.Xml; | ||
| 9 | using WixToolset.Data; | ||
| 10 | |||
| 11 | public abstract class ExtensionData : IExtensionData | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Gets the optional table definitions for this extension. | ||
| 15 | /// </summary> | ||
| 16 | /// <value>Table definisions for this extension or null if there are no table definitions.</value> | ||
| 17 | public virtual TableDefinitionCollection TableDefinitions | ||
| 18 | { | ||
| 19 | get { return null; } | ||
| 20 | } | ||
| 21 | |||
| 22 | /// <summary> | ||
| 23 | /// Gets the optional default culture. | ||
| 24 | /// </summary> | ||
| 25 | /// <value>The optional default culture.</value> | ||
| 26 | public virtual string DefaultCulture | ||
| 27 | { | ||
| 28 | get { return null; } | ||
| 29 | } | ||
| 30 | |||
| 31 | /// <summary> | ||
| 32 | /// Gets the optional library associated with this extension. | ||
| 33 | /// </summary> | ||
| 34 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 35 | /// <returns>The library for this extension or null if there is no library.</returns> | ||
| 36 | public virtual Library GetLibrary(TableDefinitionCollection tableDefinitions) | ||
| 37 | { | ||
| 38 | return null; | ||
| 39 | } | ||
| 40 | |||
| 41 | /// <summary> | ||
| 42 | /// Help for loading a library from an embedded resource. | ||
| 43 | /// </summary> | ||
| 44 | /// <param name="assembly">The assembly containing the embedded resource.</param> | ||
| 45 | /// <param name="resourceName">The name of the embedded resource being requested.</param> | ||
| 46 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 47 | /// <returns>The loaded library.</returns> | ||
| 48 | protected static Library LoadLibraryHelper(Assembly assembly, string resourceName, TableDefinitionCollection tableDefinitions) | ||
| 49 | { | ||
| 50 | using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) | ||
| 51 | { | ||
| 52 | UriBuilder uriBuilder = new UriBuilder(assembly.CodeBase); | ||
| 53 | uriBuilder.Scheme = "embeddedresource"; | ||
| 54 | uriBuilder.Fragment = resourceName; | ||
| 55 | |||
| 56 | return Library.Load(resourceStream, uriBuilder.Uri, tableDefinitions, false); | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | /// <summary> | ||
| 61 | /// Helper for loading table definitions from an embedded resource. | ||
| 62 | /// </summary> | ||
| 63 | /// <param name="assembly">The assembly containing the embedded resource.</param> | ||
| 64 | /// <param name="resourceName">The name of the embedded resource being requested.</param> | ||
| 65 | /// <returns>The loaded table definitions.</returns> | ||
| 66 | protected static TableDefinitionCollection LoadTableDefinitionHelper(Assembly assembly, string resourceName) | ||
| 67 | { | ||
| 68 | using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) | ||
| 69 | using (XmlReader reader = XmlReader.Create(resourceStream)) | ||
| 70 | { | ||
| 71 | return TableDefinitionCollection.Load(reader); | ||
| 72 | } | ||
| 73 | } | ||
| 74 | } | ||
| 75 | } | ||
diff --git a/src/WixToolset.Extensibility/ExtensionHelper.cs b/src/WixToolset.Extensibility/ExtensionHelper.cs new file mode 100644 index 00000000..9c1ca950 --- /dev/null +++ b/src/WixToolset.Extensibility/ExtensionHelper.cs | |||
| @@ -0,0 +1,53 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.Collections.Specialized; | ||
| 7 | using System.IO; | ||
| 8 | using System.Reflection; | ||
| 9 | using System.Xml; | ||
| 10 | using WixToolset.Data; | ||
| 11 | using WixToolset.Extensibility; | ||
| 12 | |||
| 13 | /// <summary> | ||
| 14 | /// The main class for a WiX extension. | ||
| 15 | /// </summary> | ||
| 16 | public static class ExtensionHelper | ||
| 17 | { | ||
| 18 | /// <summary> | ||
| 19 | /// Help for loading a library from an embedded resource. | ||
| 20 | /// </summary> | ||
| 21 | /// <param name="assembly">The assembly containing the embedded resource.</param> | ||
| 22 | /// <param name="resourceName">The name of the embedded resource being requested.</param> | ||
| 23 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 24 | /// <returns>The loaded library.</returns> | ||
| 25 | public static Library LoadLibraryHelper(Assembly assembly, string resourceName, TableDefinitionCollection tableDefinitions) | ||
| 26 | { | ||
| 27 | using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) | ||
| 28 | { | ||
| 29 | UriBuilder uriBuilder = new UriBuilder(); | ||
| 30 | uriBuilder.Scheme = "embeddedresource"; | ||
| 31 | uriBuilder.Path = assembly.Location; | ||
| 32 | uriBuilder.Fragment = resourceName; | ||
| 33 | |||
| 34 | return Library.Load(resourceStream, uriBuilder.Uri, tableDefinitions, false); | ||
| 35 | } | ||
| 36 | } | ||
| 37 | |||
| 38 | /// <summary> | ||
| 39 | /// Helper for loading table definitions from an embedded resource. | ||
| 40 | /// </summary> | ||
| 41 | /// <param name="assembly">The assembly containing the embedded resource.</param> | ||
| 42 | /// <param name="resourceName">The name of the embedded resource being requested.</param> | ||
| 43 | /// <returns>The loaded table definitions.</returns> | ||
| 44 | public static TableDefinitionCollection LoadTableDefinitionHelper(Assembly assembly, string resourceName) | ||
| 45 | { | ||
| 46 | using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) | ||
| 47 | using (XmlReader reader = XmlReader.Create(resourceStream)) | ||
| 48 | { | ||
| 49 | return TableDefinitionCollection.Load(reader); | ||
| 50 | } | ||
| 51 | } | ||
| 52 | } | ||
| 53 | } | ||
diff --git a/src/WixToolset.Extensibility/IBinderCore.cs b/src/WixToolset.Extensibility/IBinderCore.cs new file mode 100644 index 00000000..a4044c11 --- /dev/null +++ b/src/WixToolset.Extensibility/IBinderCore.cs | |||
| @@ -0,0 +1,35 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | public interface IBinderCore : IMessageHandler | ||
| 8 | { | ||
| 9 | /// <summary> | ||
| 10 | /// Gets or sets the file manager core for the extension. | ||
| 11 | /// </summary> | ||
| 12 | /// <value>File manager core for the extension.</value> | ||
| 13 | IBinderFileManagerCore FileManagerCore { get; set; } | ||
| 14 | |||
| 15 | /// <summary> | ||
| 16 | /// Gets whether the binder core encountered an error while processing. | ||
| 17 | /// </summary> | ||
| 18 | /// <value>Flag if core encountered an error during processing.</value> | ||
| 19 | bool EncounteredError { get; } | ||
| 20 | |||
| 21 | /// <summary> | ||
| 22 | /// Gets the table definitions used by the Binder. | ||
| 23 | /// </summary> | ||
| 24 | /// <value>Table definitions used by the binder.</value> | ||
| 25 | TableDefinitionCollection TableDefinitions { get; } | ||
| 26 | |||
| 27 | /// <summary> | ||
| 28 | /// Generate an identifier by hashing data from the row. | ||
| 29 | /// </summary> | ||
| 30 | /// <param name="prefix">Three letter or less prefix for generated row identifier.</param> | ||
| 31 | /// <param name="args">Information to hash.</param> | ||
| 32 | /// <returns>The generated identifier.</returns> | ||
| 33 | string CreateIdentifier(string prefix, params string[] args); | ||
| 34 | } | ||
| 35 | } | ||
diff --git a/src/WixToolset.Extensibility/IBinderExtension.cs b/src/WixToolset.Extensibility/IBinderExtension.cs new file mode 100644 index 00000000..19790b14 --- /dev/null +++ b/src/WixToolset.Extensibility/IBinderExtension.cs | |||
| @@ -0,0 +1,33 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Interface all binder extensions implement. | ||
| 9 | /// </summary> | ||
| 10 | public interface IBinderExtension | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets or sets the binder core for the extension. | ||
| 14 | /// </summary> | ||
| 15 | /// <value>Binder core for the extension.</value> | ||
| 16 | IBinderCore Core { get; set; } | ||
| 17 | |||
| 18 | /// <summary> | ||
| 19 | /// Called before binding occurs. | ||
| 20 | /// </summary> | ||
| 21 | void Initialize(Output output); | ||
| 22 | |||
| 23 | /// <summary> | ||
| 24 | /// Called after variable resolution occurs. | ||
| 25 | /// </summary> | ||
| 26 | void AfterResolvedFields(Output output); | ||
| 27 | |||
| 28 | /// <summary> | ||
| 29 | /// Called after all output changes occur and right before the output is bound into its final format. | ||
| 30 | /// </summary> | ||
| 31 | void Finish(Output output); | ||
| 32 | } | ||
| 33 | } | ||
diff --git a/src/WixToolset.Extensibility/IBinderFileManager.cs b/src/WixToolset.Extensibility/IBinderFileManager.cs new file mode 100644 index 00000000..3a2b1d40 --- /dev/null +++ b/src/WixToolset.Extensibility/IBinderFileManager.cs | |||
| @@ -0,0 +1,29 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using WixToolset.Data; | ||
| 7 | using WixToolset.Data.Rows; | ||
| 8 | |||
| 9 | public interface IBinderFileManager | ||
| 10 | { | ||
| 11 | IBinderFileManagerCore Core { set; } | ||
| 12 | |||
| 13 | ResolvedCabinet ResolveCabinet(string cabinetPath, IEnumerable<BindFileWithPath> files); | ||
| 14 | |||
| 15 | string ResolveFile(string source, string type, SourceLineNumber sourceLineNumbers, BindStage bindStage); | ||
| 16 | |||
| 17 | string ResolveRelatedFile(string source, string relatedSource, string type, SourceLineNumber sourceLineNumbers, BindStage bindStage); | ||
| 18 | |||
| 19 | string ResolveMedia(MediaRow mediaRow, string mediaLayoutDirectory, string layoutDirectory); | ||
| 20 | |||
| 21 | string ResolveUrl(string url, string fallbackUrl, string packageId, string payloadId, string fileName); | ||
| 22 | |||
| 23 | bool? CompareFiles(string targetFile, string updatedFile); | ||
| 24 | |||
| 25 | bool CopyFile(string source, string destination, bool overwrite); | ||
| 26 | |||
| 27 | bool MoveFile(string source, string destination, bool overwrite); | ||
| 28 | } | ||
| 29 | } | ||
diff --git a/src/WixToolset.Extensibility/IBinderFileManagerCore.cs b/src/WixToolset.Extensibility/IBinderFileManagerCore.cs new file mode 100644 index 00000000..f5adf4e1 --- /dev/null +++ b/src/WixToolset.Extensibility/IBinderFileManagerCore.cs | |||
| @@ -0,0 +1,54 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | public interface IBinderFileManagerCore : IMessageHandler | ||
| 9 | { | ||
| 10 | /// <summary> | ||
| 11 | /// Gets or sets the path to cabinet cache. | ||
| 12 | /// </summary> | ||
| 13 | /// <value>The path to cabinet cache.</value> | ||
| 14 | string CabCachePath { get; } | ||
| 15 | |||
| 16 | /// <summary> | ||
| 17 | /// Gets or sets the active subStorage used for binding. | ||
| 18 | /// </summary> | ||
| 19 | /// <value>The subStorage object.</value> | ||
| 20 | SubStorage ActiveSubStorage { get; } | ||
| 21 | |||
| 22 | /// <summary> | ||
| 23 | /// Gets or sets the output object used for binding. | ||
| 24 | /// </summary> | ||
| 25 | /// <value>The output object.</value> | ||
| 26 | Output Output { get; } | ||
| 27 | |||
| 28 | /// <summary> | ||
| 29 | /// Gets or sets the path to the temp files location. | ||
| 30 | /// </summary> | ||
| 31 | /// <value>The path to the temp files location.</value> | ||
| 32 | string TempFilesLocation { get; } | ||
| 33 | |||
| 34 | /// <summary> | ||
| 35 | /// Gets the property if re-basing target is true or false | ||
| 36 | /// </summary> | ||
| 37 | /// <value>It returns true if target bind path is to be replaced, otherwise false.</value> | ||
| 38 | bool RebaseTarget { get; } | ||
| 39 | |||
| 40 | /// <summary> | ||
| 41 | /// Gets the property if re-basing updated build is true or false | ||
| 42 | /// </summary> | ||
| 43 | /// <value>It returns true if updated bind path is to be replaced, otherwise false.</value> | ||
| 44 | bool RebaseUpdated { get; } | ||
| 45 | |||
| 46 | /// <summary> | ||
| 47 | /// Gets the collection of paths to locate files during ResolveFile for the provided BindStage and name. | ||
| 48 | /// </summary> | ||
| 49 | /// <param name="stage">Optional stage to get bind paths for. Default is normal.</param> | ||
| 50 | /// <param name="name">Optional name of the bind paths to get. Default is the unnamed paths.</param> | ||
| 51 | /// <value>The bind paths to locate files.</value> | ||
| 52 | IEnumerable<string> GetBindPaths(BindStage stage = BindStage.Normal, string name = null); | ||
| 53 | } | ||
| 54 | } | ||
diff --git a/src/WixToolset.Extensibility/ICompilerCore.cs b/src/WixToolset.Extensibility/ICompilerCore.cs new file mode 100644 index 00000000..b2ad6abd --- /dev/null +++ b/src/WixToolset.Extensibility/ICompilerCore.cs | |||
| @@ -0,0 +1,339 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.Collections; | ||
| 7 | using System.Collections.Generic; | ||
| 8 | using System.Xml.Linq; | ||
| 9 | using WixToolset.Data; | ||
| 10 | |||
| 11 | /// <summary> | ||
| 12 | /// Core interface provided by the compiler. | ||
| 13 | /// </summary> | ||
| 14 | public interface ICompilerCore : IMessageHandler | ||
| 15 | { | ||
| 16 | /// <summary> | ||
| 17 | /// Gets whether the compiler core encountered an error while processing. | ||
| 18 | /// </summary> | ||
| 19 | /// <value>Flag if core encountered an error during processing.</value> | ||
| 20 | bool EncounteredError { get; } | ||
| 21 | |||
| 22 | /// <summary> | ||
| 23 | /// Gets the platform which the compiler will use when defaulting 64-bit attributes and elements. | ||
| 24 | /// </summary> | ||
| 25 | /// <value>The platform which the compiler will use when defaulting 64-bit attributes and elements.</value> | ||
| 26 | Platform CurrentPlatform { get; } | ||
| 27 | |||
| 28 | /// <summary> | ||
| 29 | /// Creates a version 3 name-based UUID. | ||
| 30 | /// </summary> | ||
| 31 | /// <param name="namespaceGuid">The namespace UUID.</param> | ||
| 32 | /// <param name="value">The value.</param> | ||
| 33 | /// <returns>The generated GUID for the given namespace and value.</returns> | ||
| 34 | string CreateGuid(Guid namespaceGuid, string value); | ||
| 35 | |||
| 36 | /// <summary> | ||
| 37 | /// Create an identifier by hashing data from the row. | ||
| 38 | /// </summary> | ||
| 39 | /// <param name="prefix">Three letter or less prefix for generated row identifier.</param> | ||
| 40 | /// <param name="args">Information to hash.</param> | ||
| 41 | /// <returns>The new identifier.</returns> | ||
| 42 | Identifier CreateIdentifier(string prefix, params string[] args); | ||
| 43 | |||
| 44 | /// <summary> | ||
| 45 | /// Create an identifier based on passed file name | ||
| 46 | /// </summary> | ||
| 47 | /// <param name="name">File name to generate identifer from</param> | ||
| 48 | /// <returns></returns> | ||
| 49 | Identifier CreateIdentifierFromFilename(string filename); | ||
| 50 | |||
| 51 | /// <summary> | ||
| 52 | /// Convert a bit array into an int value. | ||
| 53 | /// </summary> | ||
| 54 | /// <param name="bits">The bit array to convert.</param> | ||
| 55 | /// <returns>The converted int value.</returns> | ||
| 56 | int CreateIntegerFromBitArray(BitArray bits); | ||
| 57 | |||
| 58 | /// <summary> | ||
| 59 | /// Creates a row in the active section. | ||
| 60 | /// </summary> | ||
| 61 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> | ||
| 62 | /// <param name="tableName">Name of table to create row in.</param> | ||
| 63 | /// <param name="identifier">Optional identifier for the row.</param> | ||
| 64 | /// <returns>New row.</returns> | ||
| 65 | Row CreateRow(SourceLineNumber sourceLineNumbers, string tableName, Identifier identifier = null); | ||
| 66 | |||
| 67 | /// <summary> | ||
| 68 | /// Creates directories using the inline directory syntax. | ||
| 69 | /// </summary> | ||
| 70 | /// <param name="sourceLineNumbers">Source line information.</param> | ||
| 71 | /// <param name="attribute">The attribute to parse.</param> | ||
| 72 | /// <param name="parentId">Optional identifier of parent directory.</param> | ||
| 73 | /// <returns>Identifier of the leaf directory created.</returns> | ||
| 74 | string CreateDirectoryReferenceFromInlineSyntax(SourceLineNumber sourceLineNumbers, XAttribute attribute, string parentId); | ||
| 75 | |||
| 76 | /// <summary> | ||
| 77 | /// Creates a Registry row in the active section. | ||
| 78 | /// </summary> | ||
| 79 | /// <param name="sourceLineNumbers">Source and line number of the current row.</param> | ||
| 80 | /// <param name="root">The registry entry root.</param> | ||
| 81 | /// <param name="key">The registry entry key.</param> | ||
| 82 | /// <param name="name">The registry entry name.</param> | ||
| 83 | /// <param name="value">The registry entry value.</param> | ||
| 84 | /// <param name="componentId">The component which will control installation/uninstallation of the registry entry.</param> | ||
| 85 | /// <param name="escapeLeadingHash">If true, "escape" leading '#' characters so the value is written as a REG_SZ.</param> | ||
| 86 | Identifier CreateRegistryRow(SourceLineNumber sourceLineNumbers, int root, string key, string name, string value, string componentId, bool escapeLeadingHash = false); | ||
| 87 | |||
| 88 | /// <summary> | ||
| 89 | /// Creates a short file/directory name using an identifier and long file/directory name as input. | ||
| 90 | /// </summary> | ||
| 91 | /// <param name="longName">The long file/directory name.</param> | ||
| 92 | /// <param name="keepExtension">The option to keep the extension on generated short names.</param> | ||
| 93 | /// <param name="allowWildcards">true if wildcards are allowed in the filename.</param> | ||
| 94 | /// <param name="args">Any additional information to include in the hash for the generated short name.</param> | ||
| 95 | /// <returns>The generated 8.3-compliant short file/directory name.</returns> | ||
| 96 | string CreateShortName(string longName, bool keepExtension, bool allowWildcards, params string[] args); | ||
| 97 | |||
| 98 | /// <summary> | ||
| 99 | /// Create a WixSimpleReference row in the active section. | ||
| 100 | /// </summary> | ||
| 101 | /// <param name="sourceLineNumbers">Source line information for the row.</param> | ||
| 102 | /// <param name="tableName">The table name of the simple reference.</param> | ||
| 103 | /// <param name="primaryKeys">The primary keys of the simple reference.</param> | ||
| 104 | void CreateSimpleReference(SourceLineNumber sourceLineNumbers, string tableName, params string[] primaryKeys); | ||
| 105 | |||
| 106 | /// <summary> | ||
| 107 | /// Creates WixComplexReference and WixGroup rows in the active section. | ||
| 108 | /// </summary> | ||
| 109 | /// <param name="sourceLineNumbers">Source line information.</param> | ||
| 110 | /// <param name="parentType">The parent type.</param> | ||
| 111 | /// <param name="parentId">The parent id.</param> | ||
| 112 | /// <param name="parentLanguage">The parent language.</param> | ||
| 113 | /// <param name="childType">The child type.</param> | ||
| 114 | /// <param name="childId">The child id.</param> | ||
| 115 | /// <param name="isPrimary">Whether the child is primary.</param> | ||
| 116 | void CreateComplexReference(SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, string parentLanguage, ComplexReferenceChildType childType, string childId, bool isPrimary); | ||
| 117 | |||
| 118 | /// <summary> | ||
| 119 | /// Creates a patch resource reference to the list of resoures to be filtered when producing a patch. This method should only be used when processing children of a patch family. | ||
| 120 | /// </summary> | ||
| 121 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> | ||
| 122 | /// <param name="tableName">Name of table to create row in.</param> | ||
| 123 | /// <param name="primaryKeys">Array of keys that make up the primary key of the table.</param> | ||
| 124 | /// <returns>New row.</returns> | ||
| 125 | void CreatePatchFamilyChildReference(SourceLineNumber sourceLineNumbers, string tableName, params string[] primaryKeys); | ||
| 126 | |||
| 127 | /// <summary> | ||
| 128 | /// Checks if the string contains a property (i.e. "foo[Property]bar") | ||
| 129 | /// </summary> | ||
| 130 | /// <param name="possibleProperty">String to evaluate for properties.</param> | ||
| 131 | /// <returns>True if a property is found in the string.</returns> | ||
| 132 | bool ContainsProperty(string possibleProperty); | ||
| 133 | |||
| 134 | /// <summary> | ||
| 135 | /// Add the appropriate rows to make sure that the given table shows up in the resulting output. | ||
| 136 | /// </summary> | ||
| 137 | /// <param name="sourceLineNumbers">Source line numbers.</param> | ||
| 138 | /// <param name="tableName">Name of the table to ensure existance of.</param> | ||
| 139 | void EnsureTable(SourceLineNumber sourceLineNumbers, string tableName); | ||
| 140 | |||
| 141 | /// <summary> | ||
| 142 | /// Get an attribute value and displays an error if the value is empty by default. | ||
| 143 | /// </summary> | ||
| 144 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 145 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 146 | /// <param name="emptyRule">A rule for the contents of the value. If the contents do not follow the rule, an error is thrown.</param> | ||
| 147 | /// <returns>The attribute's value.</returns> | ||
| 148 | string GetAttributeValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, EmptyRule emptyRule = EmptyRule.CanBeWhitespaceOnly); | ||
| 149 | |||
| 150 | /// <summary> | ||
| 151 | /// Gets a Bundle variable value and displays an error for an illegal value. | ||
| 152 | /// </summary> | ||
| 153 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 154 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 155 | /// <returns>The attribute's value.</returns> | ||
| 156 | string GetAttributeBundleVariableValue(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 157 | |||
| 158 | /// <summary> | ||
| 159 | /// Get a guid attribute value and displays an error for an illegal guid value. | ||
| 160 | /// </summary> | ||
| 161 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 162 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 163 | /// <param name="generatable">Determines whether the guid can be automatically generated.</param> | ||
| 164 | /// <param name="canBeEmpty">If true, no error is raised on empty value. If false, an error is raised.</param> | ||
| 165 | /// <returns>The attribute's guid value or a special value if an error occurred.</returns> | ||
| 166 | string GetAttributeGuidValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool generatable = false, bool canBeEmpty = false); | ||
| 167 | |||
| 168 | /// <summary> | ||
| 169 | /// Get an identifier attribute value and displays an error for an illegal identifier value. | ||
| 170 | /// </summary> | ||
| 171 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 172 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 173 | /// <returns>The attribute's identifier value or a special value if an error occurred.</returns> | ||
| 174 | Identifier GetAttributeIdentifier(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 175 | |||
| 176 | /// <summary> | ||
| 177 | /// Get an identifier attribute value and displays an error for an illegal identifier value. | ||
| 178 | /// </summary> | ||
| 179 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 180 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 181 | /// <returns>The attribute's identifier value or a special value if an error occurred.</returns> | ||
| 182 | string GetAttributeIdentifierValue(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 183 | |||
| 184 | /// <summary> | ||
| 185 | /// Get an integer attribute value and displays an error for an illegal integer value. | ||
| 186 | /// </summary> | ||
| 187 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 188 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 189 | /// <param name="minimum">The minimum legal value.</param> | ||
| 190 | /// <param name="maximum">The maximum legal value.</param> | ||
| 191 | /// <returns>The attribute's integer value or a special value if an error occurred during conversion.</returns> | ||
| 192 | int GetAttributeIntegerValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, int minimum, int maximum); | ||
| 193 | |||
| 194 | /// <summary> | ||
| 195 | /// Get a long integral attribute value and displays an error for an illegal long value. | ||
| 196 | /// </summary> | ||
| 197 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 198 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 199 | /// <param name="minimum">The minimum legal value.</param> | ||
| 200 | /// <param name="maximum">The maximum legal value.</param> | ||
| 201 | /// <returns>The attribute's long value or a special value if an error occurred during conversion.</returns> | ||
| 202 | long GetAttributeLongValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, long minimum, long maximum); | ||
| 203 | |||
| 204 | /// <summary> | ||
| 205 | /// Gets a long filename value and displays an error for an illegal long filename value. | ||
| 206 | /// </summary> | ||
| 207 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 208 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 209 | /// <param name="allowWildcards">true if wildcards are allowed in the filename.</param> | ||
| 210 | /// <param name="allowRelative">true if relative paths are allowed in the filename.</param> | ||
| 211 | /// <returns>The attribute's long filename value.</returns> | ||
| 212 | string GetAttributeLongFilename(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool allowWildcards = false, bool allowRelative = false); | ||
| 213 | |||
| 214 | /// <summary> | ||
| 215 | /// Gets a RegistryRoot as a MsiInterop.MsidbRegistryRoot value and displays an error for an illegal value. | ||
| 216 | /// </summary> | ||
| 217 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 218 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 219 | /// <param name="allowHkmu">Whether HKMU is returned as -1 (true), or treated as an error (false).</param> | ||
| 220 | /// <returns>The attribute's RegisitryRootType value.</returns> | ||
| 221 | int GetAttributeMsidbRegistryRootValue(SourceLineNumber sourceLineNumbers, XAttribute attribute, bool allowHkmu); | ||
| 222 | |||
| 223 | /// <summary> | ||
| 224 | /// Gets a version value or possibly a binder variable and displays an error for an illegal version value. | ||
| 225 | /// </summary> | ||
| 226 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 227 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 228 | /// <returns>The attribute's version value.</returns> | ||
| 229 | string GetAttributeVersionValue(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 230 | |||
| 231 | /// <summary> | ||
| 232 | /// Gets a yes/no value and displays an error for an illegal yes/no value. | ||
| 233 | /// </summary> | ||
| 234 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 235 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 236 | /// <returns>The attribute's YesNoType value.</returns> | ||
| 237 | YesNoType GetAttributeYesNoValue(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 238 | |||
| 239 | /// <summary> | ||
| 240 | /// Gets a yes/no/default value and displays an error for an illegal yes/no/default value. | ||
| 241 | /// </summary> | ||
| 242 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 243 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 244 | /// <returns>The attribute's YesNoType value.</returns> | ||
| 245 | YesNoDefaultType GetAttributeYesNoDefaultValue(SourceLineNumber sourceLineNumbers, XAttribute attribute); | ||
| 246 | |||
| 247 | /// <summary> | ||
| 248 | /// Gets node's inner text and ensure's it is safe for use in a condition by trimming any extra whitespace. | ||
| 249 | /// </summary> | ||
| 250 | /// <param name="node">The node to ensure inner text is a condition.</param> | ||
| 251 | /// <returns>The value converted into a safe condition.</returns> | ||
| 252 | string GetConditionInnerText(XElement node); | ||
| 253 | |||
| 254 | /// <summary> | ||
| 255 | /// Get an element's inner text and trims any extra whitespace. | ||
| 256 | /// </summary> | ||
| 257 | /// <param name="element">The element with inner text to be trimmed.</param> | ||
| 258 | /// <returns>The node's inner text trimmed.</returns> | ||
| 259 | string GetTrimmedInnerText(XElement element); | ||
| 260 | |||
| 261 | /// <summary> | ||
| 262 | /// Verifies that a value is a legal identifier. | ||
| 263 | /// </summary> | ||
| 264 | /// <param name="value">The value to verify.</param> | ||
| 265 | /// <returns>true if the value is an identifier; false otherwise.</returns> | ||
| 266 | bool IsValidIdentifier(string value); | ||
| 267 | |||
| 268 | /// <summary> | ||
| 269 | /// Verifies if an identifier is a valid loc identifier. | ||
| 270 | /// </summary> | ||
| 271 | /// <param name="identifier">Identifier to verify.</param> | ||
| 272 | /// <returns>True if the identifier is a valid loc identifier.</returns> | ||
| 273 | bool IsValidLocIdentifier(string identifier); | ||
| 274 | |||
| 275 | /// <summary> | ||
| 276 | /// Verifies if a filename is a valid long filename. | ||
| 277 | /// </summary> | ||
| 278 | /// <param name="filename">Filename to verify.</param> | ||
| 279 | /// <param name="allowWildcards">true if wildcards are allowed in the filename.</param> | ||
| 280 | /// <param name="allowRelative">true if relative paths are allowed in the filename.</param> | ||
| 281 | /// <returns>True if the filename is a valid long filename</returns> | ||
| 282 | bool IsValidLongFilename(string filename, bool allowWildcards = false, bool allowRelative = false); | ||
| 283 | |||
| 284 | /// <summary> | ||
| 285 | /// Verifies if a filename is a valid short filename. | ||
| 286 | /// </summary> | ||
| 287 | /// <param name="filename">Filename to verify.</param> | ||
| 288 | /// <param name="allowWildcards">true if wildcards are allowed in the filename.</param> | ||
| 289 | /// <returns>True if the filename is a valid short filename</returns> | ||
| 290 | bool IsValidShortFilename(string filename, bool allowWildcards = false); | ||
| 291 | |||
| 292 | /// <summary> | ||
| 293 | /// Attempts to use an extension to parse the attribute. | ||
| 294 | /// </summary> | ||
| 295 | /// <param name="element">Element containing attribute to be parsed.</param> | ||
| 296 | /// <param name="attribute">Attribute to be parsed.</param> | ||
| 297 | /// <param name="context">Extra information about the context in which this element is being parsed.</param> | ||
| 298 | void ParseExtensionAttribute(XElement element, XAttribute attribute, IDictionary<string, string> context = null); | ||
| 299 | |||
| 300 | /// <summary> | ||
| 301 | /// Attempts to use an extension to parse the element. | ||
| 302 | /// </summary> | ||
| 303 | /// <param name="parentElement">Element containing element to be parsed.</param> | ||
| 304 | /// <param name="element">Element to be parsed.</param> | ||
| 305 | /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> | ||
| 306 | void ParseExtensionElement(XElement parentElement, XElement element, IDictionary<string, string> context = null); | ||
| 307 | |||
| 308 | /// <summary> | ||
| 309 | /// Process all children of the element looking for extensions and erroring on the unexpected. | ||
| 310 | /// </summary> | ||
| 311 | /// <param name="element">Element to parse children.</param> | ||
| 312 | void ParseForExtensionElements(XElement element); | ||
| 313 | |||
| 314 | /// <summary> | ||
| 315 | /// Sets a bit in a bit array based on the index at which an attribute name was found in a string array. | ||
| 316 | /// </summary> | ||
| 317 | /// <param name="attributeNames">Array of attributes that map to bits.</param> | ||
| 318 | /// <param name="attributeName">Name of attribute to check.</param> | ||
| 319 | /// <param name="attributeValue">Value of attribute to check.</param> | ||
| 320 | /// <param name="bits">The bit array in which the bit will be set if found.</param> | ||
| 321 | /// <param name="offset">The offset into the bit array.</param> | ||
| 322 | /// <returns>true if the bit was set; false otherwise.</returns> | ||
| 323 | bool TrySetBitFromName(string[] attributeNames, string attributeName, YesNoType attributeValue, BitArray bits, int offset); | ||
| 324 | |||
| 325 | /// <summary> | ||
| 326 | /// Called when the compiler encounters an unexpected attribute. | ||
| 327 | /// </summary> | ||
| 328 | /// <param name="parentElement">Parent element that found unexpected attribute.</param> | ||
| 329 | /// <param name="attribute">Unexpected attribute.</param> | ||
| 330 | void UnexpectedAttribute(XElement element, XAttribute attribute); | ||
| 331 | |||
| 332 | /// <summary> | ||
| 333 | /// Called when the compiler encounters an unexpected child element. | ||
| 334 | /// </summary> | ||
| 335 | /// <param name="parentElement">Parent element that found unexpected child.</param> | ||
| 336 | /// <param name="childElement">Unexpected child element.</param> | ||
| 337 | void UnexpectedElement(XElement parentElement, XElement childElement); | ||
| 338 | } | ||
| 339 | } | ||
diff --git a/src/WixToolset.Extensibility/ICompilerExtension.cs b/src/WixToolset.Extensibility/ICompilerExtension.cs new file mode 100644 index 00000000..edd7aa15 --- /dev/null +++ b/src/WixToolset.Extensibility/ICompilerExtension.cs | |||
| @@ -0,0 +1,59 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using System.Xml.Linq; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Interface all compiler extensions implement. | ||
| 10 | /// </summary> | ||
| 11 | public interface ICompilerExtension | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Gets or sets the compiler core for the extension. | ||
| 15 | /// </summary> | ||
| 16 | /// <value>Compiler core for the extension.</value> | ||
| 17 | ICompilerCore Core { get; set; } | ||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Gets the schema namespace for this extension. | ||
| 21 | /// </summary> | ||
| 22 | /// <value>Schema namespace supported by this extension.</value> | ||
| 23 | XNamespace Namespace { get; } | ||
| 24 | |||
| 25 | /// <summary> | ||
| 26 | /// Called at the beginning of the compilation of a source file. | ||
| 27 | /// </summary> | ||
| 28 | void Initialize(); | ||
| 29 | |||
| 30 | /// <summary> | ||
| 31 | /// Processes an attribute for the Compiler. | ||
| 32 | /// </summary> | ||
| 33 | /// <param name="parentElement">Parent element of attribute.</param> | ||
| 34 | /// <param name="attribute">Attribute to process.</param> | ||
| 35 | /// <param name="context">Extra information about the context in which this element is being parsed.</param> | ||
| 36 | void ParseAttribute(XElement parentElement, XAttribute attribute, IDictionary<string, string> context); | ||
| 37 | |||
| 38 | /// <summary> | ||
| 39 | /// Processes an element for the Compiler. | ||
| 40 | /// </summary> | ||
| 41 | /// <param name="parentElement">Parent element of element to process.</param> | ||
| 42 | /// <param name="element">Element to process.</param> | ||
| 43 | /// <param name="context">Extra information about the context in which this element is being parsed.</param> | ||
| 44 | void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context); | ||
| 45 | |||
| 46 | /// <summary> | ||
| 47 | /// Processes an element for the Compiler, with the ability to supply a component keypath. | ||
| 48 | /// </summary> | ||
| 49 | /// <param name="parentElement">Parent element of element to process.</param> | ||
| 50 | /// <param name="element">Element to process.</param> | ||
| 51 | /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> | ||
| 52 | ComponentKeyPath ParsePossibleKeyPathElement(XElement parentElement, XElement element, IDictionary<string, string> context); | ||
| 53 | |||
| 54 | /// <summary> | ||
| 55 | /// Called at the end of the compilation of a source file. | ||
| 56 | /// </summary> | ||
| 57 | void Finish(); | ||
| 58 | } | ||
| 59 | } | ||
diff --git a/src/WixToolset.Extensibility/IDecompilerCore.cs b/src/WixToolset.Extensibility/IDecompilerCore.cs new file mode 100644 index 00000000..d18d5170 --- /dev/null +++ b/src/WixToolset.Extensibility/IDecompilerCore.cs | |||
| @@ -0,0 +1,73 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.Data; | ||
| 7 | using Wix = WixToolset.Data.Serialize; | ||
| 8 | |||
| 9 | public interface IDecompilerCore : IMessageHandler | ||
| 10 | { | ||
| 11 | |||
| 12 | /// <summary> | ||
| 13 | /// Gets whether the decompiler 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 root element of the decompiled output. | ||
| 20 | /// </summary> | ||
| 21 | /// <value>The root element of the decompiled output.</value> | ||
| 22 | Wix.IParentElement RootElement { get; } | ||
| 23 | |||
| 24 | /// <summary> | ||
| 25 | /// Gets the UI element. | ||
| 26 | /// </summary> | ||
| 27 | /// <value>The UI element.</value> | ||
| 28 | Wix.UI UIElement { get; } | ||
| 29 | |||
| 30 | /// <summary> | ||
| 31 | /// Verifies if a filename is a valid short filename. | ||
| 32 | /// </summary> | ||
| 33 | /// <param name="filename">Filename to verify.</param> | ||
| 34 | /// <param name="allowWildcards">true if wildcards are allowed in the filename.</param> | ||
| 35 | /// <returns>True if the filename is a valid short filename</returns> | ||
| 36 | bool IsValidShortFilename(string filename, bool allowWildcards); | ||
| 37 | |||
| 38 | /// <summary> | ||
| 39 | /// Convert an Int32 into a DateTime. | ||
| 40 | /// </summary> | ||
| 41 | /// <param name="value">The Int32 value.</param> | ||
| 42 | /// <returns>The DateTime.</returns> | ||
| 43 | DateTime ConvertIntegerToDateTime(int value); | ||
| 44 | |||
| 45 | /// <summary> | ||
| 46 | /// Gets the element corresponding to the row it came from. | ||
| 47 | /// </summary> | ||
| 48 | /// <param name="row">The row corresponding to the element.</param> | ||
| 49 | /// <returns>The indexed element.</returns> | ||
| 50 | Wix.ISchemaElement GetIndexedElement(Row row); | ||
| 51 | |||
| 52 | /// <summary> | ||
| 53 | /// Gets the element corresponding to the primary key of the given table. | ||
| 54 | /// </summary> | ||
| 55 | /// <param name="table">The table corresponding to the element.</param> | ||
| 56 | /// <param name="primaryKey">The primary key corresponding to the element.</param> | ||
| 57 | /// <returns>The indexed element.</returns> | ||
| 58 | Wix.ISchemaElement GetIndexedElement(string table, params string[] primaryKey); | ||
| 59 | |||
| 60 | /// <summary> | ||
| 61 | /// Index an element by its corresponding row. | ||
| 62 | /// </summary> | ||
| 63 | /// <param name="row">The row corresponding to the element.</param> | ||
| 64 | /// <param name="element">The element to index.</param> | ||
| 65 | void IndexElement(Row row, Wix.ISchemaElement element); | ||
| 66 | |||
| 67 | /// <summary> | ||
| 68 | /// Indicates the decompiler encountered and unexpected table to decompile. | ||
| 69 | /// </summary> | ||
| 70 | /// <param name="table">Unknown decompiled table.</param> | ||
| 71 | void UnexpectedTable(Table table); | ||
| 72 | } | ||
| 73 | } | ||
diff --git a/src/WixToolset.Extensibility/IDecompilerExtension.cs b/src/WixToolset.Extensibility/IDecompilerExtension.cs new file mode 100644 index 00000000..6124f348 --- /dev/null +++ b/src/WixToolset.Extensibility/IDecompilerExtension.cs | |||
| @@ -0,0 +1,49 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Base class for creating a decompiler extension. | ||
| 9 | /// </summary> | ||
| 10 | public interface IDecompilerExtension | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets or sets the decompiler core for the extension. | ||
| 14 | /// </summary> | ||
| 15 | /// <value>The decompiler core for the extension.</value> | ||
| 16 | IDecompilerCore Core { get; set; } | ||
| 17 | |||
| 18 | /// <summary> | ||
| 19 | /// Gets the table definitions this extension decompiles. | ||
| 20 | /// </summary> | ||
| 21 | /// <value>Table definitions this extension decompiles.</value> | ||
| 22 | TableDefinitionCollection TableDefinitions { get; } | ||
| 23 | |||
| 24 | /// <summary> | ||
| 25 | /// Gets the library that this decompiler wants removed from the decomipiled output. | ||
| 26 | /// </summary> | ||
| 27 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 28 | /// <returns>The library for this extension or null if there is no library to be removed.</returns> | ||
| 29 | Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions); | ||
| 30 | |||
| 31 | /// <summary> | ||
| 32 | /// Called at the beginning of the decompilation of a database. | ||
| 33 | /// </summary> | ||
| 34 | /// <param name="tables">The collection of all tables.</param> | ||
| 35 | void Initialize(TableIndexedCollection tables); | ||
| 36 | |||
| 37 | /// <summary> | ||
| 38 | /// Decompiles an extension table. | ||
| 39 | /// </summary> | ||
| 40 | /// <param name="table">The table to decompile.</param> | ||
| 41 | void DecompileTable(Table table); | ||
| 42 | |||
| 43 | /// <summary> | ||
| 44 | /// Finalize decompilation. | ||
| 45 | /// </summary> | ||
| 46 | /// <param name="tables">The collection of all tables.</param> | ||
| 47 | void Finish(TableIndexedCollection tables); | ||
| 48 | } | ||
| 49 | } | ||
diff --git a/src/WixToolset.Extensibility/IExtensionCommandLine.cs b/src/WixToolset.Extensibility/IExtensionCommandLine.cs new file mode 100644 index 00000000..b6cff5d0 --- /dev/null +++ b/src/WixToolset.Extensibility/IExtensionCommandLine.cs | |||
| @@ -0,0 +1,42 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// A command line option. | ||
| 10 | /// </summary> | ||
| 11 | public struct ExtensionCommandLineSwitch | ||
| 12 | { | ||
| 13 | public string Switch { get; set; } | ||
| 14 | |||
| 15 | public string Description { get; set; } | ||
| 16 | } | ||
| 17 | |||
| 18 | /// <summary> | ||
| 19 | /// Interface extensions implement to be able to parse command-line options. | ||
| 20 | /// </summary> | ||
| 21 | public interface IExtensionCommandLine | ||
| 22 | { | ||
| 23 | /// <summary> | ||
| 24 | /// Sets the message handler for the extension. | ||
| 25 | /// </summary> | ||
| 26 | /// <value>Message handler for the extension.</value> | ||
| 27 | IMessageHandler MessageHandler { set; } | ||
| 28 | |||
| 29 | /// <summary> | ||
| 30 | /// Gets the supported command line types for this extension. | ||
| 31 | /// </summary> | ||
| 32 | /// <value>The supported command line types for this extension.</value> | ||
| 33 | IEnumerable<ExtensionCommandLineSwitch> CommandLineSwitches { get; } | ||
| 34 | |||
| 35 | /// <summary> | ||
| 36 | /// Parse the commandline arguments. | ||
| 37 | /// </summary> | ||
| 38 | /// <param name="args">Commandline arguments.</param> | ||
| 39 | /// <returns>Unparsed commandline arguments.</returns> | ||
| 40 | string[] ParseCommandLine(string[] args); | ||
| 41 | } | ||
| 42 | } | ||
diff --git a/src/WixToolset.Extensibility/IExtensionData.cs b/src/WixToolset.Extensibility/IExtensionData.cs new file mode 100644 index 00000000..19e23590 --- /dev/null +++ b/src/WixToolset.Extensibility/IExtensionData.cs | |||
| @@ -0,0 +1,31 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Interface extensions implement to provide data. | ||
| 9 | /// </summary> | ||
| 10 | public interface IExtensionData | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets the table definitions for this extension. | ||
| 14 | /// </summary> | ||
| 15 | /// <value>Table definisions for this extension or null if there are no table definitions.</value> | ||
| 16 | TableDefinitionCollection TableDefinitions { get; } | ||
| 17 | |||
| 18 | /// <summary> | ||
| 19 | /// Gets the optional default culture. | ||
| 20 | /// </summary> | ||
| 21 | /// <value>The optional default culture.</value> | ||
| 22 | string DefaultCulture { get; } | ||
| 23 | |||
| 24 | /// <summary> | ||
| 25 | /// Gets the library associated with this extension. | ||
| 26 | /// </summary> | ||
| 27 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
| 28 | /// <returns>The library for this extension or null if there is no library.</returns> | ||
| 29 | Library GetLibrary(TableDefinitionCollection tableDefinitions); | ||
| 30 | } | ||
| 31 | } | ||
diff --git a/src/WixToolset.Extensibility/IInspectorCore.cs b/src/WixToolset.Extensibility/IInspectorCore.cs new file mode 100644 index 00000000..06239ce5 --- /dev/null +++ b/src/WixToolset.Extensibility/IInspectorCore.cs | |||
| @@ -0,0 +1,17 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | /// <summary> | ||
| 8 | /// Core facilities for inspector extensions. | ||
| 9 | /// </summary> | ||
| 10 | public interface IInspectorCore : IMessageHandler | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Gets whether an error occured. | ||
| 14 | /// </summary> | ||
| 15 | bool EncounteredError { get; } | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/src/WixToolset.Extensibility/IInspectorExtension.cs b/src/WixToolset.Extensibility/IInspectorExtension.cs new file mode 100644 index 00000000..b2a098b7 --- /dev/null +++ b/src/WixToolset.Extensibility/IInspectorExtension.cs | |||
| @@ -0,0 +1,59 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.IO; | ||
| 7 | using WixToolset.Data; | ||
| 8 | |||
| 9 | /// <summary> | ||
| 10 | /// Interface for inspector extensions. | ||
| 11 | /// </summary> | ||
| 12 | /// <remarks> | ||
| 13 | /// The inspector methods are stateless, but extensions are loaded and last for the lifetime of the | ||
| 14 | /// containing classes like <see cref="Preprocessor"/>, <see cref="Compiler"/>, <see cref="Linker"/>, | ||
| 15 | /// <see cref="Differ"/>, and <see cref="Binder"/>. If you want to maintain state, you should check | ||
| 16 | /// if your data is loaded for each method and, if not, load it. | ||
| 17 | /// </remarks> | ||
| 18 | public interface IInspectorExtension | ||
| 19 | { | ||
| 20 | /// <summary> | ||
| 21 | /// Gets or sets the <see cref="InspectorCore"/> for inspector extensions to use. | ||
| 22 | /// </summary> | ||
| 23 | IInspectorCore Core { get; set; } | ||
| 24 | |||
| 25 | /// <summary> | ||
| 26 | /// Inspect the source before preprocessing. | ||
| 27 | /// </summary> | ||
| 28 | /// <param name="source">The source to preprocess.</param> | ||
| 29 | void InspectSource(Stream source); | ||
| 30 | |||
| 31 | /// <summary> | ||
| 32 | /// Inspect the compiled output. | ||
| 33 | /// </summary> | ||
| 34 | /// <param name="intermediate">The compiled output.</param> | ||
| 35 | void InspectIntermediate(Intermediate intermediate); | ||
| 36 | |||
| 37 | /// <summary> | ||
| 38 | /// Inspect the output. | ||
| 39 | /// </summary> | ||
| 40 | /// <param name="output">The output. May be called after linking or binding.</param> | ||
| 41 | /// <remarks> | ||
| 42 | /// To inspect a patch's filtered transforms, enumerate <see cref="Output.SubStorages"/>. | ||
| 43 | /// Transforms where the <see cref="SubStorage.Name"/> begins with "#" are | ||
| 44 | /// called patch transforms and instruct Windows Installer how to apply the | ||
| 45 | /// authored transforms - those that do not begin with "#". The authored | ||
| 46 | /// transforms are the primary transforms you'll typically want to inspect | ||
| 47 | /// and contain your changes to target products. | ||
| 48 | /// </remarks> | ||
| 49 | void InspectOutput(Output output); | ||
| 50 | |||
| 51 | /// <summary> | ||
| 52 | /// Inspect the final output after binding. | ||
| 53 | /// </summary> | ||
| 54 | /// <param name="filePath">The file path to the final bound output.</param> | ||
| 55 | /// <param name="pdb">The <see cref="Pdb"/> that contains source line numbers | ||
| 56 | /// for the database and all rows.</param> | ||
| 57 | void InspectDatabase(string filePath, Pdb pdb); | ||
| 58 | } | ||
| 59 | } | ||
diff --git a/src/WixToolset.Extensibility/IPreprocessorCore.cs b/src/WixToolset.Extensibility/IPreprocessorCore.cs new file mode 100644 index 00000000..a0449139 --- /dev/null +++ b/src/WixToolset.Extensibility/IPreprocessorCore.cs | |||
| @@ -0,0 +1,21 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | public interface IPreprocessorCore : IMessageHandler | ||
| 8 | { | ||
| 9 | /// <summary> | ||
| 10 | /// Gets or sets the platform which the compiler will use when defaulting 64-bit attributes and elements. | ||
| 11 | /// </summary> | ||
| 12 | /// <value>The platform which the compiler will use when defaulting 64-bit attributes and elements.</value> | ||
| 13 | Platform CurrentPlatform { get; } | ||
| 14 | |||
| 15 | /// <summary> | ||
| 16 | /// Gets whether the core encountered an error while processing. | ||
| 17 | /// </summary> | ||
| 18 | /// <value>Flag if core encountered an error during processing.</value> | ||
| 19 | bool EncounteredError { get; } | ||
| 20 | } | ||
| 21 | } | ||
diff --git a/src/WixToolset.Extensibility/IPreprocessorExtension.cs b/src/WixToolset.Extensibility/IPreprocessorExtension.cs new file mode 100644 index 00000000..de415526 --- /dev/null +++ b/src/WixToolset.Extensibility/IPreprocessorExtension.cs | |||
| @@ -0,0 +1,79 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.Xml.Linq; | ||
| 7 | using WixToolset.Data; | ||
| 8 | |||
| 9 | /// <summary> | ||
| 10 | /// Interface for extending the WiX toolset preprocessor. | ||
| 11 | /// </summary> | ||
| 12 | public interface IPreprocessorExtension | ||
| 13 | { | ||
| 14 | /// <summary> | ||
| 15 | /// Gets or sets the preprocessor core for the extension. | ||
| 16 | /// </summary> | ||
| 17 | /// <value>Preprocessor core for the extension.</value> | ||
| 18 | IPreprocessorCore Core { get; set; } | ||
| 19 | |||
| 20 | /// <summary> | ||
| 21 | /// Gets the variable prefixes for the extension. | ||
| 22 | /// </summary> | ||
| 23 | /// <value>The variable prefixes for the extension.</value> | ||
| 24 | string[] Prefixes { get; } | ||
| 25 | |||
| 26 | /// <summary> | ||
| 27 | /// Called at the beginning of the preprocessing of a source file. | ||
| 28 | /// </summary> | ||
| 29 | void Initialize(); | ||
| 30 | |||
| 31 | /// <summary> | ||
| 32 | /// Gets the value of a variable whose prefix matches the extension. | ||
| 33 | /// </summary> | ||
| 34 | /// <param name="prefix">The prefix of the variable to be processed by the extension.</param> | ||
| 35 | /// <param name="name">The name of the variable.</param> | ||
| 36 | /// <returns>The value of the variable or null if the variable is undefined.</returns> | ||
| 37 | string GetVariableValue(string prefix, string name); | ||
| 38 | |||
| 39 | /// <summary> | ||
| 40 | /// Evaluates a function defined in the extension. | ||
| 41 | /// </summary> | ||
| 42 | /// <param name="prefix">The prefix of the function to be processed by the extension.</param> | ||
| 43 | /// <param name="function">The name of the function.</param> | ||
| 44 | /// <param name="args">The list of arguments.</param> | ||
| 45 | /// <returns>The value of the function or null if the function is not defined.</returns> | ||
| 46 | string EvaluateFunction(string prefix, string function, string[] args); | ||
| 47 | |||
| 48 | /// <summary> | ||
| 49 | /// Processes a pragma defined in the extension. | ||
| 50 | /// </summary> | ||
| 51 | /// <param name="sourceLineNumbers">The location of this pragma's PI.</param> | ||
| 52 | /// <param name="prefix">The prefix of the pragma to be processed by the extension.</param> | ||
| 53 | /// <param name="pragma">The name of the pragma.</param> | ||
| 54 | /// <param name="args">The pragma's arguments.</param> | ||
| 55 | /// <param name="parent">The parent node of the pragma.</param> | ||
| 56 | /// <returns>false if the pragma is not defined.</returns> | ||
| 57 | /// <comments>Don't return false for any condition except for unrecognized pragmas. Use Core.OnMessage for errors, warnings and messages.</comments> | ||
| 58 | bool ProcessPragma(SourceLineNumber sourceLineNumbers, string prefix, string pragma, string args, XContainer parent); | ||
| 59 | |||
| 60 | /// <summary> | ||
| 61 | /// Preprocess a document after normal preprocessing has completed. | ||
| 62 | /// </summary> | ||
| 63 | /// <param name="document">The document to preprocess.</param> | ||
| 64 | void PreprocessDocument(XDocument document); | ||
| 65 | |||
| 66 | /// <summary> | ||
| 67 | /// Preprocesses a parameter. | ||
| 68 | /// </summary> | ||
| 69 | /// <param name="name">Name of parameter that matches extension.</param> | ||
| 70 | /// <returns>The value of the parameter after processing.</returns> | ||
| 71 | /// <remarks>By default this method will cause an error if its called.</remarks> | ||
| 72 | string PreprocessParameter(string name); | ||
| 73 | |||
| 74 | /// <summary> | ||
| 75 | /// Called at the end of the preprocessing of a source file. | ||
| 76 | /// </summary> | ||
| 77 | void Finish(); | ||
| 78 | } | ||
| 79 | } | ||
diff --git a/src/WixToolset.Extensibility/IUnbinderExtension.cs b/src/WixToolset.Extensibility/IUnbinderExtension.cs new file mode 100644 index 00000000..88bf20d9 --- /dev/null +++ b/src/WixToolset.Extensibility/IUnbinderExtension.cs | |||
| @@ -0,0 +1,18 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Base class for creating an unbinder extension. | ||
| 10 | /// </summary> | ||
| 11 | public interface IUnbinderExtension | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Called during the generation of sectionIds for an admin image. | ||
| 15 | /// </summary> | ||
| 16 | void GenerateSectionIds(Output output); | ||
| 17 | } | ||
| 18 | } | ||
diff --git a/src/WixToolset.Extensibility/Identifier.cs b/src/WixToolset.Extensibility/Identifier.cs new file mode 100644 index 00000000..628cd335 --- /dev/null +++ b/src/WixToolset.Extensibility/Identifier.cs | |||
| @@ -0,0 +1,31 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Class to define the identifier and access for a row. | ||
| 10 | /// </summary> | ||
| 11 | public class Identifier | ||
| 12 | { | ||
| 13 | public static Identifier Invalid = new Identifier(null, AccessModifier.Private); | ||
| 14 | |||
| 15 | public Identifier(string id, AccessModifier access) | ||
| 16 | { | ||
| 17 | this.Id = id; | ||
| 18 | this.Access = access; | ||
| 19 | } | ||
| 20 | |||
| 21 | /// <summary> | ||
| 22 | /// Access modifier for a row. | ||
| 23 | /// </summary> | ||
| 24 | public AccessModifier Access { get; private set; } | ||
| 25 | |||
| 26 | /// <summary> | ||
| 27 | /// Identifier for the row. | ||
| 28 | /// </summary> | ||
| 29 | public string Id { get; private set; } | ||
| 30 | } | ||
| 31 | } | ||
diff --git a/src/WixToolset.Extensibility/InspectorExtension.cs b/src/WixToolset.Extensibility/InspectorExtension.cs new file mode 100644 index 00000000..82b1ef02 --- /dev/null +++ b/src/WixToolset.Extensibility/InspectorExtension.cs | |||
| @@ -0,0 +1,61 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.IO; | ||
| 7 | using WixToolset.Data; | ||
| 8 | |||
| 9 | /// <summary> | ||
| 10 | /// Opitonal base class for inspector extensions. | ||
| 11 | /// </summary> | ||
| 12 | public class InspectorExtension : IInspectorExtension | ||
| 13 | { | ||
| 14 | /// <summary> | ||
| 15 | /// Gets the <see cref="InspectorCore"/> for inspector extensions to use. | ||
| 16 | /// </summary> | ||
| 17 | public IInspectorCore Core { get; set; } | ||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Inspect the source before preprocessing. | ||
| 21 | /// </summary> | ||
| 22 | /// <param name="source">The source to preprocess.</param> | ||
| 23 | public virtual void InspectSource(Stream source) | ||
| 24 | { | ||
| 25 | } | ||
| 26 | |||
| 27 | /// <summary> | ||
| 28 | /// Inspect the compiled output. | ||
| 29 | /// </summary> | ||
| 30 | /// <param name="intermediate">The compiled output.</param> | ||
| 31 | public virtual void InspectIntermediate(Intermediate intermediate) | ||
| 32 | { | ||
| 33 | } | ||
| 34 | |||
| 35 | /// <summary> | ||
| 36 | /// Inspect the output. | ||
| 37 | /// </summary> | ||
| 38 | /// <param name="output">The output. May be called after linking or binding.</param> | ||
| 39 | /// <remarks> | ||
| 40 | /// To inspect a patch's filtered transforms, enumerate <see cref="Output.SubStorages"/>. | ||
| 41 | /// Transforms where the <see cref="SubStorage.Name"/> begins with "#" are | ||
| 42 | /// called patch transforms and instruct Windows Installer how to apply the | ||
| 43 | /// authored transforms - those that do not begin with "#". The authored | ||
| 44 | /// transforms are the primary transforms you'll typically want to inspect | ||
| 45 | /// and contain your changes to target products. | ||
| 46 | /// </remarks> | ||
| 47 | public virtual void InspectOutput(Output output) | ||
| 48 | { | ||
| 49 | } | ||
| 50 | |||
| 51 | /// <summary> | ||
| 52 | /// Inspect the final output after binding. | ||
| 53 | /// </summary> | ||
| 54 | /// <param name="filePath">The file path to the final bound output.</param> | ||
| 55 | /// <param name="pdb">The <see cref="Pdb"/> that contains source line numbers | ||
| 56 | /// for the database and all rows.</param> | ||
| 57 | public virtual void InspectDatabase(string filePath, Pdb pdb) | ||
| 58 | { | ||
| 59 | } | ||
| 60 | } | ||
| 61 | } | ||
diff --git a/src/WixToolset.Extensibility/PreprocessorExtension.cs b/src/WixToolset.Extensibility/PreprocessorExtension.cs new file mode 100644 index 00000000..2af30a95 --- /dev/null +++ b/src/WixToolset.Extensibility/PreprocessorExtension.cs | |||
| @@ -0,0 +1,99 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System.Xml.Linq; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Base class for creating a preprocessor extension. | ||
| 10 | /// </summary> | ||
| 11 | public abstract class PreprocessorExtension : IPreprocessorExtension | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Gets or sets the preprocessor core for the extension. | ||
| 15 | /// </summary> | ||
| 16 | /// <value>Preprocessor core for the extension.</value> | ||
| 17 | public IPreprocessorCore Core { get; set; } | ||
| 18 | |||
| 19 | /// <summary> | ||
| 20 | /// Gets or sets the variable prefixes for the extension. | ||
| 21 | /// </summary> | ||
| 22 | /// <value>The variable prefixes for the extension.</value> | ||
| 23 | public virtual string[] Prefixes | ||
| 24 | { | ||
| 25 | get { return null; } | ||
| 26 | } | ||
| 27 | |||
| 28 | /// <summary> | ||
| 29 | /// Called at the beginning of the preprocessing of a source file. | ||
| 30 | /// </summary> | ||
| 31 | public virtual void Initialize() | ||
| 32 | { | ||
| 33 | } | ||
| 34 | |||
| 35 | /// <summary> | ||
| 36 | /// Gets the value of a variable whose prefix matches the extension. | ||
| 37 | /// </summary> | ||
| 38 | /// <param name="prefix">The prefix of the variable to be processed by the extension.</param> | ||
| 39 | /// <param name="name">The name of the variable.</param> | ||
| 40 | /// <returns>The value of the variable or null if the variable is undefined.</returns> | ||
| 41 | public virtual string GetVariableValue(string prefix, string name) | ||
| 42 | { | ||
| 43 | return null; | ||
| 44 | } | ||
| 45 | |||
| 46 | /// <summary> | ||
| 47 | /// Evaluates a function defined in the extension. | ||
| 48 | /// </summary> | ||
| 49 | /// <param name="prefix">The prefix of the function to be processed by the extension.</param> | ||
| 50 | /// <param name="function">The name of the function.</param> | ||
| 51 | /// <param name="args">The list of arguments.</param> | ||
| 52 | /// <returns>The value of the function or null if the function is not defined.</returns> | ||
| 53 | public virtual string EvaluateFunction(string prefix, string function, string[] args) | ||
| 54 | { | ||
| 55 | return null; | ||
| 56 | } | ||
| 57 | |||
| 58 | /// <summary> | ||
| 59 | /// Processes a pragma defined in the extension. | ||
| 60 | /// </summary> | ||
| 61 | /// <param name="sourceLineNumbers">The location of this pragma's PI.</param> | ||
| 62 | /// <param name="prefix">The prefix of the pragma to be processed by the extension.</param> | ||
| 63 | /// <param name="pragma">The name of the pragma.</param> | ||
| 64 | /// <param name="args">The pragma's arguments.</param> | ||
| 65 | /// <param name="parent">The parent node of the pragma.</param> | ||
| 66 | /// <returns>false if the pragma is not defined.</returns> | ||
| 67 | /// <comments>Don't return false for any condition except for unrecognized pragmas. Throw errors that are fatal to the compile. use core.OnMessage for warnings and messages.</comments> | ||
| 68 | public virtual bool ProcessPragma(SourceLineNumber sourceLineNumbers, string prefix, string pragma, string args, XContainer parent) | ||
| 69 | { | ||
| 70 | return false; | ||
| 71 | } | ||
| 72 | |||
| 73 | /// <summary> | ||
| 74 | /// Preprocess a document after normal preprocessing has completed. | ||
| 75 | /// </summary> | ||
| 76 | /// <param name="document">The document to preprocess.</param> | ||
| 77 | public virtual void PreprocessDocument(XDocument document) | ||
| 78 | { | ||
| 79 | } | ||
| 80 | |||
| 81 | /// <summary> | ||
| 82 | /// Preprocesses a parameter. | ||
| 83 | /// </summary> | ||
| 84 | /// <param name="name">Name of parameter that matches extension.</param> | ||
| 85 | /// <returns>The value of the parameter after processing.</returns> | ||
| 86 | /// <remarks>By default this method will cause an error if its called.</remarks> | ||
| 87 | public virtual string PreprocessParameter(string name) | ||
| 88 | { | ||
| 89 | return null; | ||
| 90 | } | ||
| 91 | |||
| 92 | /// <summary> | ||
| 93 | /// Called at the end of the preprocessing of a source file. | ||
| 94 | /// </summary> | ||
| 95 | public virtual void Finish() | ||
| 96 | { | ||
| 97 | } | ||
| 98 | } | ||
| 99 | } | ||
diff --git a/src/WixToolset.Extensibility/ResolvedCabinet.cs b/src/WixToolset.Extensibility/ResolvedCabinet.cs new file mode 100644 index 00000000..e98d6d96 --- /dev/null +++ b/src/WixToolset.Extensibility/ResolvedCabinet.cs | |||
| @@ -0,0 +1,20 @@ | |||
| 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 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | /// <summary> | ||
| 6 | /// Data returned from build file manager ResolveCabinet callback. | ||
| 7 | /// </summary> | ||
| 8 | public class ResolvedCabinet | ||
| 9 | { | ||
| 10 | /// <summary> | ||
| 11 | /// Gets or sets the build option for the resolved cabinet. | ||
| 12 | /// </summary> | ||
| 13 | public CabinetBuildOption BuildOption { get; set; } | ||
| 14 | |||
| 15 | /// <summary> | ||
| 16 | /// Gets or sets the path for the resolved cabinet. | ||
| 17 | /// </summary> | ||
| 18 | public string Path { get; set; } | ||
| 19 | } | ||
| 20 | } | ||
diff --git a/src/WixToolset.Extensibility/WixToolset.Extensibility.csproj b/src/WixToolset.Extensibility/WixToolset.Extensibility.csproj new file mode 100644 index 00000000..8efae769 --- /dev/null +++ b/src/WixToolset.Extensibility/WixToolset.Extensibility.csproj | |||
| @@ -0,0 +1,17 @@ | |||
| 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 | <Project Sdk="Microsoft.NET.Sdk"> | ||
| 5 | <PropertyGroup> | ||
| 6 | <TargetFramework>netstandard2.0</TargetFramework> | ||
| 7 | <Description></Description> | ||
| 8 | <Title>WiX Toolset Extensibility</Title> | ||
| 9 | </PropertyGroup> | ||
| 10 | |||
| 11 | <ItemGroup> | ||
| 12 | <!-- <ProjectOrPackageReference Include="$(WixToolsetRootFolder)Data\src\WixToolset.Data\WixToolset.Data.csproj" Version="4.0.*" /> --> | ||
| 13 | <!--<ProjectOrPackageReference Include="WixToolset.Data" Repo="Data" Version="1.0.*" />--> | ||
| 14 | <ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " /> | ||
| 15 | <PackageReference Include="WixToolset.Data" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " /> | ||
| 16 | </ItemGroup> | ||
| 17 | </Project> | ||
