aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/wix/Custom.Build.props6
-rw-r--r--src/api/wix/Directory.Build.props27
-rw-r--r--src/api/wix/Directory.Build.targets51
-rw-r--r--src/api/wix/Directory.csproj.props13
-rw-r--r--src/api/wix/Directory.csproj.targets25
-rw-r--r--src/api/wix/README.md3
-rw-r--r--src/api/wix/WixToolset.Data.sln61
-rw-r--r--src/api/wix/WixToolset.Data.v3.ncrunchsolution6
-rw-r--r--src/api/wix/WixToolset.Data/AccessModifier.cs99
-rw-r--r--src/api/wix/WixToolset.Data/AssemblyInfo.cs9
-rw-r--r--src/api/wix/WixToolset.Data/Bind/BindVariable.cs62
-rw-r--r--src/api/wix/WixToolset.Data/Burn/BurnConstants.cs26
-rw-r--r--src/api/wix/WixToolset.Data/ComplexReferenceChildType.cs52
-rw-r--r--src/api/wix/WixToolset.Data/ComplexReferenceParentType.cs49
-rw-r--r--src/api/wix/WixToolset.Data/ComponentKeyPathType.cs27
-rw-r--r--src/api/wix/WixToolset.Data/CompressionLevel.cs25
-rw-r--r--src/api/wix/WixToolset.Data/Data/messages.xml4038
-rw-r--r--src/api/wix/WixToolset.Data/DictionaryExtensions.cs14
-rw-r--r--src/api/wix/WixToolset.Data/DisplayEventArgs.cs15
-rw-r--r--src/api/wix/WixToolset.Data/EmptyRule.cs22
-rw-r--r--src/api/wix/WixToolset.Data/ErrorMessages.cs2731
-rw-r--r--src/api/wix/WixToolset.Data/ISymbolDefinitionCreator.cs11
-rw-r--r--src/api/wix/WixToolset.Data/Identifier.cs77
-rw-r--r--src/api/wix/WixToolset.Data/Intermediate.cs484
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateField.cs56
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldContext.cs38
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldDefinition.cs26
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldExtensions.cs481
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldPathValue.cs26
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldValue.cs146
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateFieldValueExtensions.cs161
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateLevels.cs10
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateSection.cs139
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateSymbol.cs300
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateSymbolDefinition.cs270
-rw-r--r--src/api/wix/WixToolset.Data/IntermediateSymbolExtensions.cs121
-rw-r--r--src/api/wix/WixToolset.Data/Json/JsonObjectExtensions.cs79
-rw-r--r--src/api/wix/WixToolset.Data/Json/SimpleJson.cs2127
-rw-r--r--src/api/wix/WixToolset.Data/Localization.cs137
-rw-r--r--src/api/wix/WixToolset.Data/LocalizedControl.cs94
-rw-r--r--src/api/wix/WixToolset.Data/Message.cs97
-rw-r--r--src/api/wix/WixToolset.Data/MessageLevel.cs25
-rw-r--r--src/api/wix/WixToolset.Data/OutputType.cs37
-rw-r--r--src/api/wix/WixToolset.Data/PackagingType.cs11
-rw-r--r--src/api/wix/WixToolset.Data/PdbType.cs16
-rw-r--r--src/api/wix/WixToolset.Data/Platform.cs19
-rw-r--r--src/api/wix/WixToolset.Data/SectionType.cs31
-rw-r--r--src/api/wix/WixToolset.Data/SimpleSymbolDefinitionCreator.cs31
-rw-r--r--src/api/wix/WixToolset.Data/SourceLineNumber.cs275
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ActionTextSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/AppIdSymbol.cs92
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/AppSearchSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/AssemblySymbol.cs96
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/BBControlSymbol.cs180
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/BillboardSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/BinarySymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/CCPSearchSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/CheckBoxSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ClassSymbol.cs140
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ComboBoxSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/CompLocatorSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ComplusSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ComponentSymbol.cs155
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ConditionSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ControlConditionSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ControlEventSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ControlSymbol.cs303
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/CreateFolderSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/CustomActionSymbol.cs168
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/DialogSymbol.cs188
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/DirectorySymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/DrLocatorSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/DuplicateFileSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/EnvironmentSymbol.cs114
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ErrorSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/EventMappingSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ExtensionSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ExternalFilesSymbol.cs100
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/FamilyFileRangesSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/FeatureComponentsSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/FeatureSymbol.cs129
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/FileSFPCatalogSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/FileSymbol.cs256
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/IconSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ImageFamiliesSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/IniFileSymbol.cs100
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/IniLocatorSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/InifFileActionSymbol.cs13
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/IsolatedComponentSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/LaunchConditionSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ListBoxSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ListViewSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/LocatorSymbol.cs12
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/LockPermissionsSymbol.cs157
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MIMESymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MediaSymbol.cs100
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleComponentsSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleConfigurationSymbol.cs116
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleDependencySymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleExclusionSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleIgnoreTableSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ModuleSubstitutionSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MoveFileSymbol.cs92
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiAssemblyNameSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiDigitalCertificateSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiDigitalSignatureSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedChainerSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedUISymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiFileHashSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiLockPermissionsExSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPackageCertificateSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchCertificateSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchHeadersSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchMetadataSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyFileSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyNameSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiPatchSequenceSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigFailureActionsSymbol.cs116
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigSymbol.cs101
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/MsiShortcutPropertySymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ODBCAttributeSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ODBCDataSourceSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ODBCDriverSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ODBCSourceAttributeSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ODBCTranslatorSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PatchMetadataSymbol.cs89
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PatchPackageSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PatchSequenceSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PatchSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ProgIdSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PropertiesSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PropertySymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/PublishComponentSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RadioButtonSymbol.cs108
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RegLocatorSymbol.cs83
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RegistryRootType.cs21
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RegistrySymbol.cs108
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RemoveFileSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/RemoveRegistrySymbol.cs82
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ReserveCostSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/SFPCatalogSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ServiceControlSymbol.cs116
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ServiceInstallSymbol.cs173
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/ShortcutSymbol.cs171
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/SignatureSymbol.cs100
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/SoftwareIdentificationTagSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/SummaryInformationSymbol.cs102
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs776
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/TargetFilesOptionalDataSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/TargetImagesSymbol.cs92
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/TextStyleSymbol.cs114
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/TransformsFlags.cs79
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/TypeLibSymbol.cs100
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/UITextSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/UpgradeSymbol.cs155
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/UpgradedFilesOptionalDataSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/UpgradedFilesToIgnoreSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/UpgradedImagesSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/VerbSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixActionSymbol.cs101
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixApprovedExeForElevationSymbol.cs71
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBindUpdatedFilesSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationDllSymbol.cs53
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBuildInfoSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleContainerSymbol.cs103
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataAttributeSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataCellSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataSymbol.cs71
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleExePackagePayloadSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleExePackageSymbol.cs94
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleExtensionSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsiFeatureSymbol.cs116
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackagePayloadSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackageSymbol.cs105
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPropertySymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackagePayloadSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackageSymbol.cs81
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackagePayloadSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackageSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePackageCommandLineSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs71
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePackageGroupSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePackageSymbol.cs212
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePatchTargetCodeSymbol.cs82
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadGroupSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadSymbol.cs166
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleRelatedPackageSymbol.cs104
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleRollbackBoundarySymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleSlipstreamMspSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs234
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleTagSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleUpdateSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundleVariableSymbol.cs79
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixChainItemSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixChainSymbol.cs61
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixComplexReferenceSymbol.cs86
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixComponentGroupSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixComponentSearchSymbol.cs70
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixCustomTableCellSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixCustomTableColumnSymbol.cs203
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixCustomTableSymbol.cs56
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchFileSymbol.cs84
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchSymbolPathsSymbol.cs73
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixDependencyProviderSymbol.cs90
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixDependencyRefSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixDependencySymbol.cs82
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixEnsureTableSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixFeatureGroupSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixFeatureModulesSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixFileSearchSymbol.cs125
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixFragmentSymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixGroupSymbol.cs71
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixInstanceComponentSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixInstanceTransformsSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixMediaTemplateSymbol.cs86
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixMergeSymbol.cs92
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixModuleSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixOrderingSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPackageSymbol.cs111
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPatchBaselineSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPatchFamilyGroupSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPatchRefSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPatchSymbol.cs98
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPatchTargetSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixProductSearchSymbol.cs64
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixProductTagSymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixPropertySymbol.cs68
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixRegistrySearchSymbol.cs81
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixRelatedBundleSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSearchRelationSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSearchSymbol.cs60
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSetVariableSymbol.cs54
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSimpleReferenceSymbol.cs62
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSuppressActionSymbol.cs54
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixSuppressModularizationSymbol.cs44
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixUISymbol.cs36
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixUpdateRegistrationSymbol.cs76
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixVariableSymbol.cs52
-rw-r--r--src/api/wix/WixToolset.Data/VerboseMessages.cs234
-rw-r--r--src/api/wix/WixToolset.Data/WarningMessages.cs816
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/ColumnCategory.cs91
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/ColumnDefinition.cs702
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/ColumnModularizeType.cs37
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/ColumnType.cs28
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Field.cs304
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/IntermediateLevels.cs8
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/ObjectField.cs183
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Row.cs390
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/RowOperation.cs30
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/BBControlRow.cs118
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs247
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ControlRow.cs148
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs214
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/MediaRow.cs85
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/PropertyRow.cs45
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/SummaryInfoRowCollection.cs41
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Rows/UpgradeRow.cs95
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/SequenceTableExtensions.cs17
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/SubStorage.cs112
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Table.cs190
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinition.cs267
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinitionCollection.cs201
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/TableIndexedCollection.cs105
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/TableOperation.cs25
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs259
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerData.cs323
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs478
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs1907
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/WixMissingTableDefinitionException.cs22
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/data.xsd66
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/libraries.xsd66
-rw-r--r--src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/objects.xsd143
-rw-r--r--src/api/wix/WixToolset.Data/WixCorruptFileException.cs29
-rw-r--r--src/api/wix/WixToolset.Data/WixDataStrings.Designer.cs90
-rw-r--r--src/api/wix/WixToolset.Data/WixDataStrings.resx129
-rw-r--r--src/api/wix/WixToolset.Data/WixException.cs63
-rw-r--r--src/api/wix/WixToolset.Data/WixOutput.cs279
-rw-r--r--src/api/wix/WixToolset.Data/WixToolset.Data.csproj40
-rw-r--r--src/api/wix/WixToolset.Data/WixToolset.Data.v3.ncrunchproject7
-rw-r--r--src/api/wix/WixToolset.Data/WixUnexpectedFileFormatException.cs35
-rw-r--r--src/api/wix/WixToolset.Data/YesNoAlwaysType.cs25
-rw-r--r--src/api/wix/WixToolset.Data/YesNoDefaultType.cs25
-rw-r--r--src/api/wix/WixToolset.Data/YesNoType.cs22
-rw-r--r--src/api/wix/appveyor.cmd19
-rw-r--r--src/api/wix/appveyor.yml42
-rw-r--r--src/api/wix/nuget.config8
-rw-r--r--src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs427
-rw-r--r--src/api/wix/test/WixToolsetTest.Data/TagFixture.cs101
-rw-r--r--src/api/wix/test/WixToolsetTest.Data/TupleDefinitionFixture.cs135
-rw-r--r--src/api/wix/test/WixToolsetTest.Data/WindowsInstallerTableDefinitionsFixture.cs29
-rw-r--r--src/api/wix/test/WixToolsetTest.Data/WixToolsetTest.Data.csproj19
292 files changed, 37738 insertions, 0 deletions
diff --git a/src/api/wix/Custom.Build.props b/src/api/wix/Custom.Build.props
new file mode 100644
index 00000000..889fb62e
--- /dev/null
+++ b/src/api/wix/Custom.Build.props
@@ -0,0 +1,6 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project>
3 <PropertyGroup Condition="'$(Configuration)'=='Release'">
4 <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
5 </PropertyGroup>
6</Project>
diff --git a/src/api/wix/Directory.Build.props b/src/api/wix/Directory.Build.props
new file mode 100644
index 00000000..b3c6287c
--- /dev/null
+++ b/src/api/wix/Directory.Build.props
@@ -0,0 +1,27 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.props
5 then update all of the repos.
6-->
7<Project>
8 <PropertyGroup>
9 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
10 <EnableSourceLink Condition=" '$(NCrunch)' == '1' ">false</EnableSourceLink>
11 <MSBuildWarningsAsMessages>MSB3246</MSBuildWarningsAsMessages>
12
13 <ProjectName Condition=" '$(ProjectName)' == '' ">$(MSBuildProjectName)</ProjectName>
14 <BaseOutputPath>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\build\))</BaseOutputPath>
15 <BaseIntermediateOutputPath>$(BaseOutputPath)obj\$(ProjectName)\</BaseIntermediateOutputPath>
16 <OutputPath>$(BaseOutputPath)$(Configuration)\</OutputPath>
17
18 <Authors>WiX Toolset Team</Authors>
19 <Company>WiX Toolset</Company>
20 <Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright>
21 <PackageLicenseExpression>MS-RL</PackageLicenseExpression>
22 <Product>WiX Toolset</Product>
23 </PropertyGroup>
24
25 <Import Project="Directory$(MSBuildProjectExtension).props" Condition=" Exists('Directory$(MSBuildProjectExtension).props') " />
26 <Import Project="Custom.Build.props" Condition=" Exists('Custom.Build.props') " />
27</Project>
diff --git a/src/api/wix/Directory.Build.targets b/src/api/wix/Directory.Build.targets
new file mode 100644
index 00000000..2fcc765a
--- /dev/null
+++ b/src/api/wix/Directory.Build.targets
@@ -0,0 +1,51 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.targets
5 then update all of the repos.
6-->
7<!--
8 Replace PackageReferences with ProjectReferences when the projects can be found in .sln.
9 See the original here: https://github.com/dotnet/sdk/issues/1151#issuecomment-385133284
10-->
11<Project>
12 <PropertyGroup>
13 <ReplacePackageReferences>true</ReplacePackageReferences>
14 <TheSolutionPath Condition=" '$(NCrunch)'=='' ">$(SolutionPath)</TheSolutionPath>
15 <TheSolutionPath Condition=" '$(NCrunch)'=='1' ">$(NCrunchOriginalSolutionPath)</TheSolutionPath>
16 </PropertyGroup>
17
18 <Choose>
19 <When Condition="$(ReplacePackageReferences) AND '$(TheSolutionPath)' != '' AND '$(TheSolutionPath)' != '*undefined*' AND Exists('$(TheSolutionPath)')">
20
21 <PropertyGroup>
22 <SolutionFileContent>$([System.IO.File]::ReadAllText($(TheSolutionPath)))</SolutionFileContent>
23 <SmartSolutionDir>$([System.IO.Path]::GetDirectoryName( $(TheSolutionPath) ))</SmartSolutionDir>
24 <RegexPattern>(?&lt;="[PackageName]", ")(.*)(?=", ")</RegexPattern>
25 </PropertyGroup>
26
27 <ItemGroup>
28 <!-- Keep the identity of the PackageReference -->
29 <SmartPackageReference Include="@(PackageReference)">
30 <PackageName>%(Identity)</PackageName>
31 <InSolution>$(SolutionFileContent.Contains('\%(Identity).csproj'))</InSolution>
32 </SmartPackageReference>
33
34 <!-- Filter them by mapping them to another ItemGroup using the WithMetadataValue item function -->
35 <PackageInSolution Include="@(SmartPackageReference->WithMetadataValue('InSolution', True))">
36 <Pattern>$(RegexPattern.Replace('[PackageName]','%(PackageName)') )</Pattern>
37 <SmartPath>$([System.Text.RegularExpressions.Regex]::Match('$(SolutionFileContent)', '%(Pattern)'))</SmartPath>
38 </PackageInSolution>
39
40 <ProjectReference Include="@(PackageInSolution->'$(SmartSolutionDir)\%(SmartPath)' )"/>
41
42 <!-- Remove the package references that are now referenced as projects -->
43 <PackageReference Remove="@(PackageInSolution->'%(PackageName)')"/>
44 </ItemGroup>
45
46 </When>
47 </Choose>
48
49 <Import Project="Directory$(MSBuildProjectExtension).targets" Condition=" Exists('Directory$(MSBuildProjectExtension).targets') " />
50 <Import Project="Custom.Build.targets" Condition=" Exists('Custom.Build.targets') " />
51</Project>
diff --git a/src/api/wix/Directory.csproj.props b/src/api/wix/Directory.csproj.props
new file mode 100644
index 00000000..81d24ad1
--- /dev/null
+++ b/src/api/wix/Directory.csproj.props
@@ -0,0 +1,13 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\CSharp.Build.props
4 then update all of the repos.
5-->
6<Project>
7 <PropertyGroup>
8 <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
9 <SignAssembly>true</SignAssembly>
10 <AssemblyOriginatorKeyFile>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)wix.snk))</AssemblyOriginatorKeyFile>
11 <NBGV_EmitThisAssemblyClass>false</NBGV_EmitThisAssemblyClass>
12 </PropertyGroup>
13</Project>
diff --git a/src/api/wix/Directory.csproj.targets b/src/api/wix/Directory.csproj.targets
new file mode 100644
index 00000000..623228ef
--- /dev/null
+++ b/src/api/wix/Directory.csproj.targets
@@ -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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.csproj.targets
4 then update all of the repos.
5-->
6<Project>
7 <PropertyGroup>
8 <CreateDocumentation Condition=" '$(CreateDocumentationFile)'!='true' ">false</CreateDocumentation>
9 <DocumentationFile Condition=" '$(CreateDocumentationFile)'=='true' ">$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
10 </PropertyGroup>
11
12 <Target Name="SetNuspecProperties" DependsOnTargets="InitializeSourceControlInformation" AfterTargets="GetBuildVersion"
13 Condition=" Exists('$(MSBuildProjectName).nuspec') ">
14 <PropertyGroup>
15 <ProjectUrl Condition=" '$(ProjectUrl)'=='' and '$(PrivateRepositoryUrl)'!='' ">$(PrivateRepositoryUrl.Replace('.git',''))</ProjectUrl>
16
17 <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
18 <NuspecBasePath Condition=" '$(NuspecBasePath)'=='' ">$(OutputPath)..\</NuspecBasePath>
19 <NuspecProperties>$(NuspecProperties);Id=$(PackageId);Authors=$(Authors);Copyright=$(Copyright);Description=$(Description);Title=$(Title)</NuspecProperties>
20 <NuspecProperties>$(NuspecProperties);Version=$(PackageVersion);RepositoryCommit=$(SourceRevisionId);RepositoryType=$(RepositoryType);RepositoryUrl=$(PrivateRepositoryUrl);ProjectFolder=$(MSBuildProjectDirectory)\;ProjectUrl=$(ProjectUrl)</NuspecProperties>
21 <PublishRepositoryUrl>true</PublishRepositoryUrl>
22 </PropertyGroup>
23 </Target>
24
25</Project>
diff --git a/src/api/wix/README.md b/src/api/wix/README.md
new file mode 100644
index 00000000..720632c9
--- /dev/null
+++ b/src/api/wix/README.md
@@ -0,0 +1,3 @@
1# Data
2WixToolset.Data - data model for WiX Toolset tools
3
diff --git a/src/api/wix/WixToolset.Data.sln b/src/api/wix/WixToolset.Data.sln
new file mode 100644
index 00000000..d8c62b1d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data.sln
@@ -0,0 +1,61 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15
4VisualStudioVersion = 15.0.27004.2009
5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Data", "src\WixToolset.Data\WixToolset.Data.csproj", "{73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}"
7EndProject
8Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Data", "src\test\WixToolsetTest.Data\WixToolsetTest.Data.csproj", "{6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}"
9EndProject
10Global
11 GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 Debug|Any CPU = Debug|Any CPU
13 Debug|arm = Debug|arm
14 Debug|x64 = Debug|x64
15 Debug|x86 = Debug|x86
16 Release|Any CPU = Release|Any CPU
17 Release|arm = Release|arm
18 Release|x64 = Release|x64
19 Release|x86 = Release|x86
20 EndGlobalSection
21 GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|arm.ActiveCfg = Debug|Any CPU
25 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|arm.Build.0 = Debug|Any CPU
26 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|x64.ActiveCfg = Debug|Any CPU
27 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|x64.Build.0 = Debug|Any CPU
28 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|x86.ActiveCfg = Debug|Any CPU
29 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Debug|x86.Build.0 = Debug|Any CPU
30 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
31 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|Any CPU.Build.0 = Release|Any CPU
32 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|arm.ActiveCfg = Release|Any CPU
33 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|arm.Build.0 = Release|Any CPU
34 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|x64.ActiveCfg = Release|Any CPU
35 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|x64.Build.0 = Release|Any CPU
36 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|x86.ActiveCfg = Release|Any CPU
37 {73ADBD3A-8FB2-47DB-BC79-9BC61C40F2E0}.Release|x86.Build.0 = Release|Any CPU
38 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
40 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|arm.ActiveCfg = Debug|Any CPU
41 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|arm.Build.0 = Debug|Any CPU
42 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|x64.ActiveCfg = Debug|Any CPU
43 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|x64.Build.0 = Debug|Any CPU
44 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|x86.ActiveCfg = Debug|Any CPU
45 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Debug|x86.Build.0 = Debug|Any CPU
46 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
47 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|Any CPU.Build.0 = Release|Any CPU
48 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|arm.ActiveCfg = Release|Any CPU
49 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|arm.Build.0 = Release|Any CPU
50 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|x64.ActiveCfg = Release|Any CPU
51 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|x64.Build.0 = Release|Any CPU
52 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|x86.ActiveCfg = Release|Any CPU
53 {6C1FA8B7-BF3C-4735-95F8-26DEEFEF00C8}.Release|x86.Build.0 = Release|Any CPU
54 EndGlobalSection
55 GlobalSection(SolutionProperties) = preSolution
56 HideSolutionNode = FALSE
57 EndGlobalSection
58 GlobalSection(ExtensibilityGlobals) = postSolution
59 SolutionGuid = {2C73DAA1-A584-4542-A2C3-951EF6203ED5}
60 EndGlobalSection
61EndGlobal
diff --git a/src/api/wix/WixToolset.Data.v3.ncrunchsolution b/src/api/wix/WixToolset.Data.v3.ncrunchsolution
new file mode 100644
index 00000000..10420ac9
--- /dev/null
+++ b/src/api/wix/WixToolset.Data.v3.ncrunchsolution
@@ -0,0 +1,6 @@
1<SolutionConfiguration>
2 <Settings>
3 <AllowParallelTestExecution>True</AllowParallelTestExecution>
4 <SolutionConfigured>True</SolutionConfigured>
5 </Settings>
6</SolutionConfiguration> \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/AccessModifier.cs b/src/api/wix/WixToolset.Data/AccessModifier.cs
new file mode 100644
index 00000000..191558b5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/AccessModifier.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
3namespace WixToolset.Data
4{
5 using System;
6
7 public enum AccessModifier
8 {
9 /// <summary>
10 /// Indicates the identifier is globally visible to all other sections.
11 /// </summary>
12 Global,
13 [Obsolete]
14 Public = Global,
15
16 /// <summary>
17 /// Indicates the identifier is visible only to sections in the same library.
18 /// </summary>
19 Library,
20 [Obsolete]
21 Internal = Library,
22
23 /// <summary>
24 /// Indicates the identifier is visible only to sections in the same source file.
25 /// </summary>
26 File,
27 [Obsolete]
28 Protected = File,
29
30 /// <summary>
31 /// Indicates the identifiers is visible only to the section where it is defined.
32 /// </summary>
33 Section,
34 [Obsolete]
35 Private = Section,
36 }
37
38 /// <summary>
39 /// Extensions for converting <c>AccessModifier</c> to and from strings optimally.
40 /// </summary>
41 public static class AccessModifierExtensions
42 {
43 /// <summary>
44 /// Converts a string to an <c>AccessModifier</c>.
45 /// </summary>
46 /// <param name="access">String value to convert.</param>
47 /// <returns>Converted <c>AccessModifier</c>.</returns>
48 public static AccessModifier AsAccessModifier(this string access)
49 {
50 switch (access)
51 {
52 case "global":
53 case "public":
54 return AccessModifier.Global;
55
56 case "library":
57 case "internal":
58 return AccessModifier.Library;
59
60 case "file":
61 case "protected":
62 return AccessModifier.File;
63
64 case "section":
65 case "private":
66 return AccessModifier.Section;
67
68 default:
69 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
70 }
71 }
72
73 /// <summary>
74 /// Converts an <c>AccessModifier</c> to a string.
75 /// </summary>
76 /// <param name="access"><c>AccessModifier</c> value to convert.</param>
77 /// <returns>Converted string.</returns>
78 public static string AsString(this AccessModifier access)
79 {
80 switch (access)
81 {
82 case AccessModifier.Global:
83 return "global";
84
85 case AccessModifier.Library:
86 return "library";
87
88 case AccessModifier.File:
89 return "file";
90
91 case AccessModifier.Section:
92 return "section";
93
94 default:
95 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
96 }
97 }
98 }
99}
diff --git a/src/api/wix/WixToolset.Data/AssemblyInfo.cs b/src/api/wix/WixToolset.Data/AssemblyInfo.cs
new file mode 100644
index 00000000..b3740b2a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/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
3using System;
4using System.Reflection;
5using System.Runtime.InteropServices;
6
7[assembly: AssemblyCulture("")]
8[assembly: CLSCompliant(true)]
9[assembly: ComVisible(false)]
diff --git a/src/api/wix/WixToolset.Data/Bind/BindVariable.cs b/src/api/wix/WixToolset.Data/Bind/BindVariable.cs
new file mode 100644
index 00000000..276dae38
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Bind/BindVariable.cs
@@ -0,0 +1,62 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.Bind
4{
5 using SimpleJson;
6
7 /// <summary>
8 /// Bind variable.
9 /// </summary>
10 public sealed class BindVariable
11 {
12 /// <summary>
13 /// Gets or sets the source line number.
14 /// </summary>
15 public SourceLineNumber SourceLineNumbers { get; set; }
16
17 /// <summary>
18 /// Gets or sets the variable identifier.
19 /// </summary>
20 /// <value>The variable identifier.</value>
21 public string Id { get; set; }
22
23 /// <summary>
24 /// Gets or sets the variable's value.
25 /// </summary>
26 /// <value>The variable's value.</value>
27 public string Value { get; set; }
28
29 /// <summary>
30 /// Gets or sets whether this variable is overridable.
31 /// </summary>
32 /// <value>Whether this variable is overridable.</value>
33 public bool Overridable { get; set; }
34
35 internal JsonObject Serialize()
36 {
37 var jsonObject = new JsonObject
38 {
39 { "name", this.Id },
40 };
41
42 jsonObject.AddIsNotNullOrEmpty("value", this.Value);
43 jsonObject.AddNonDefaultValue("overridable", this.Overridable, false);
44 jsonObject.AddNonDefaultValue("ln", this.SourceLineNumbers?.Serialize());
45
46 return jsonObject;
47 }
48
49 internal static BindVariable Deserialize(JsonObject jsonObject)
50 {
51 var variable = new BindVariable()
52 {
53 Id = jsonObject.GetValueOrDefault<string>("name"),
54 Value = jsonObject.GetValueOrDefault<string>("value"),
55 Overridable = jsonObject.GetValueOrDefault("overridable", false),
56 SourceLineNumbers = jsonObject.GetValueOrDefault<SourceLineNumber>("ln")
57 };
58
59 return variable;
60 }
61 }
62}
diff --git a/src/api/wix/WixToolset.Data/Burn/BurnConstants.cs b/src/api/wix/WixToolset.Data/Burn/BurnConstants.cs
new file mode 100644
index 00000000..484b144d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Burn/BurnConstants.cs
@@ -0,0 +1,26 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.Burn
4{
5 public static class BurnConstants
6 {
7 public const string BurnUXContainerName = "WixUXContainer";
8 public const string BurnDefaultAttachedContainerName = "WixAttachedContainer";
9 public const string BundleChainPackageGroupId = "WixChain";
10 public const string BundleDefaultBoundaryId = "WixDefaultBoundary";
11 public const string BundleLayoutOnlyPayloadsName = "BundleLayoutOnlyPayloads";
12
13 public const string BurnManifestWixOutputStreamName = "wix-burndata.xml";
14 public const string BundleExtensionDataWixOutputStreamName = "wix-bextdata";
15 public const string BootstrapperApplicationDataWixOutputStreamName = "wix-badata.xml";
16
17 public const string BootstrapperApplicationDataSymbolDefinitionTag = "WixBootstrapperApplicationData";
18 public const string BundleExtensionSearchSymbolDefinitionTag = "WixBundleExtensionSearch";
19
20 // The following constants must stay in sync with src\burn\engine\core.h
21 public const string BURN_BUNDLE_NAME = "WixBundleName";
22 public const string BURN_BUNDLE_ORIGINAL_SOURCE = "WixBundleOriginalSource";
23 public const string BURN_BUNDLE_ORIGINAL_SOURCE_FOLDER = "WixBundleOriginalSourceFolder";
24 public const string BURN_BUNDLE_LAST_USED_SOURCE = "WixBundleLastUsedSource";
25 }
26}
diff --git a/src/api/wix/WixToolset.Data/ComplexReferenceChildType.cs b/src/api/wix/WixToolset.Data/ComplexReferenceChildType.cs
new file mode 100644
index 00000000..a5d4e7ac
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/ComplexReferenceChildType.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
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Types of children in complex refernece.
7 /// </summary>
8 public enum ComplexReferenceChildType
9 {
10 /// <summary>Unknown complex reference type, default and invalid.</summary>
11 Unknown,
12
13 /// <summary>Component child of complex reference.</summary>
14 Component,
15
16 /// <summary>Feature child of complex reference.</summary>
17 Feature,
18
19 /// <summary>ComponentGroup child of complex reference.</summary>
20 ComponentGroup,
21
22 /// <summary>FeatureGroup child of complex reference.</summary>
23 FeatureGroup,
24
25 /// <summary>Module child of complex reference.</summary>
26 Module,
27
28 /// <summary>Payload child of complex reference.</summary>
29 Payload,
30
31 /// <summary>PayloadGroup child of complex reference.</summary>
32 PayloadGroup,
33
34 /// <summary>Package child of complex reference.</summary>
35 Package,
36
37 /// <summary>PackageGroup child of complex reference.</summary>
38 PackageGroup,
39
40 /// <summary>PackagePayload child of complex reference.</summary>
41 PackagePayload,
42
43 /// <summary>PatchFamily child of complex reference.</summary>
44 PatchFamily,
45
46 /// <summary>PatchFamilyGroup child of complex reference.</summary>
47 PatchFamilyGroup,
48
49 /// <summary>ContainerPackage child of complex reference.</summary>
50 ContainerPackage,
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/ComplexReferenceParentType.cs b/src/api/wix/WixToolset.Data/ComplexReferenceParentType.cs
new file mode 100644
index 00000000..87731b97
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/ComplexReferenceParentType.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
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Types of parents in complex reference.
7 /// </summary>
8 public enum ComplexReferenceParentType
9 {
10 /// <summary>Unknown complex reference type, default and invalid.</summary>
11 Unknown,
12
13 /// <summary>Feature parent of complex reference.</summary>
14 Feature,
15
16 /// <summary>ComponentGroup parent of complex reference.</summary>
17 ComponentGroup,
18
19 /// <summary>FeatureGroup parent of complex reference.</summary>
20 FeatureGroup,
21
22 /// <summary>Module parent of complex reference.</summary>
23 Module,
24
25 /// <summary>Product parent of complex reference.</summary>
26 Product,
27
28 /// <summary>PayloadGroup parent of complex reference.</summary>
29 PayloadGroup,
30
31 /// <summary>Package parent of complex reference.</summary>
32 Package,
33
34 /// <summary>PackageGroup parent of complex reference.</summary>
35 PackageGroup,
36
37 /// <summary>Container parent of complex reference.</summary>
38 Container,
39
40 /// <summary>Layout parent of complex reference.</summary>
41 Layout,
42
43 /// <summary>Patch parent of complex reference.</summary>
44 Patch,
45
46 /// <summary>PatchFamilyGroup parent of complex reference.</summary>
47 PatchFamilyGroup,
48 }
49}
diff --git a/src/api/wix/WixToolset.Data/ComponentKeyPathType.cs b/src/api/wix/WixToolset.Data/ComponentKeyPathType.cs
new file mode 100644
index 00000000..443049d3
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/ComponentKeyPathType.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
3namespace WixToolset.Data
4{
5 public enum ComponentKeyPathType
6 {
7 /// <summary>
8 /// Folder as a key path.
9 /// </summary>
10 Directory,
11
12 /// <summary>
13 /// File resource as a key path.
14 /// </summary>
15 File,
16
17 /// <summary>
18 /// ODBC data source as a key path.
19 /// </summary>
20 OdbcDataSource,
21
22 /// <summary>
23 /// A simple registry key acting as a key path.
24 /// </summary>
25 Registry,
26 }
27}
diff --git a/src/api/wix/WixToolset.Data/CompressionLevel.cs b/src/api/wix/WixToolset.Data/CompressionLevel.cs
new file mode 100644
index 00000000..05aa3816
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/CompressionLevel.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Compression level to use when creating cabinet.
7 /// </summary>
8 public enum CompressionLevel
9 {
10 /// <summary>Use no compression.</summary>
11 None,
12
13 /// <summary>Use low compression.</summary>
14 Low,
15
16 /// <summary>Use medium compression.</summary>
17 Medium,
18
19 /// <summary>Use high compression.</summary>
20 High,
21
22 /// <summary>Use ms-zip compression.</summary>
23 Mszip
24 }
25}
diff --git a/src/api/wix/WixToolset.Data/Data/messages.xml b/src/api/wix/WixToolset.Data/Data/messages.xml
new file mode 100644
index 00000000..5f03fef5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Data/messages.xml
@@ -0,0 +1,4038 @@
1<?xml version='1.0' encoding='utf-8'?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<!--
5
6This file has been kept for easy reference until we are certain we don't want to localize error strings.
7
8-->
9
10<Messages Namespace="WixToolset" Resources="Data.Messages" xmlns="http://schemas.microsoft.com/genmsgs/2004/07/messages">
11 <Class Name="WixErrors" ContainerName="WixErrorEventArgs" BaseContainerName="MessageEventArgs" Level="Error">
12 <Message Id="UnexpectedException" Number="1" SourceLineNumbers="no">
13 <Instance>
14 {0}&#13;&#10;&#13;&#10;Exception Type: {1}&#13;&#10;&#13;&#10;Stack Trace:&#13;&#10;{2}
15 <Parameter Type="System.String" Name="message" />
16 <Parameter Type="System.String" Name="type" />
17 <Parameter Type="System.String" Name="stackTrace" />
18 </Instance>
19 </Message>
20 <Message Id="UnexpectedFileFormat" Number="2" SourceLineNumbers="no">
21 <Instance>
22 Unexpected file format loaded from path: {0}. The file was expected to be a {1} but was actually: {2}. Ensure the correct path was provided.
23 <Parameter Type="System.String" Name="path" />
24 <Parameter Type="System.String" Name="expectedFormat" />
25 <Parameter Type="System.String" Name="actualFormat" />
26 </Instance>
27 </Message>
28 <Message Id="CorruptFileFormat" Number="3" SourceLineNumbers="no">
29 <Instance>
30 Attempted to load corrupt file from path: {0}. The file with format {1} contained unexpected content. Ensure the correct path was provided and that the file has not been incorrectly modified.
31 <Parameter Type="System.String" Name="path" />
32 <Parameter Type="System.String" Name="format" />
33 </Instance>
34 </Message>
35 <Message Id="DuplicateLocalizationIdentifier" Number="100">
36 <Instance>
37 The localization identifier '{0}' has been duplicated in multiple locations. Please resolve the conflict.
38 <Parameter Type="System.String" Name="localizationId" />
39 </Instance>
40 </Message>
41 <Message Id="UnexpectedAttribute" Number="4">
42 <Instance>
43 The {0} element contains an unexpected attribute '{1}'.
44 <Parameter Type="System.String" Name="elementName" />
45 <Parameter Type="System.String" Name="attributeName" />
46 </Instance>
47 </Message>
48 <Message Id="UnexpectedElement" Number="5">
49 <Instance>
50 The {0} element contains an unexpected child element '{1}'.
51 <Parameter Type="System.String" Name="elementName" />
52 <Parameter Type="System.String" Name="childElementName" />
53 </Instance>
54 </Message>
55 <Message Id="IllegalEmptyAttributeValue" Number="6">
56 <Instance>
57 The {0}/@{1} attribute's value cannot be an empty string. If a value is not required, simply remove the entire attribute.
58 <Parameter Type="System.String" Name="elementName" />
59 <Parameter Type="System.String" Name="attributeName" />
60 </Instance>
61 <Instance>
62 The {0}/@{1} attribute's value cannot be an empty string. To use the default value "{2}", simply remove the entire attribute.
63 <Parameter Type="System.String" Name="elementName" />
64 <Parameter Type="System.String" Name="attributeName" />
65 <Parameter Type="System.String" Name="defaultValue" />
66 </Instance>
67 </Message>
68 <Message Id="InsufficientVersion" Number="7">
69 <Instance>
70 The current version of the toolset is {0}, but version {1} is required.
71 <Parameter Type="System.Version" Name="currentVersion" />
72 <Parameter Type="System.Version" Name="requiredVersion" />
73 </Instance>
74 <Instance>
75 The current version of the extension '{2}' is {0}, but version {1} is required.
76 <Parameter Type="System.Version" Name="currentVersion" />
77 <Parameter Type="System.Version" Name="requiredVersion" />
78 <Parameter Type="System.String" Name="extension" />
79 </Instance>
80 </Message>
81 <Message Id="IllegalIntegerValue" Number="8">
82 <Instance>
83 The {0}/@{1} attribute's value, '{2}', is not a legal integer value. Legal integer values are from -2,147,483,648 to 2,147,483,647.
84 <Parameter Type="System.String" Name="elementName" />
85 <Parameter Type="System.String" Name="attributeName" />
86 <Parameter Type="System.String" Name="value" />
87 </Instance>
88 </Message>
89 <Message Id="IllegalGuidValue" Number="9">
90 <Instance>
91 The {0}/@{1} attribute's value, '{2}', is not a legal guid value.
92 <Parameter Type="System.String" Name="elementName" />
93 <Parameter Type="System.String" Name="attributeName" />
94 <Parameter Type="System.String" Name="value" />
95 </Instance>
96 </Message>
97 <Message Id="ExpectedAttribute" Number="10">
98 <Instance>
99 The {0}/@{1} attribute was not found; it is required.
100 <Parameter Type="System.String" Name="elementName" />
101 <Parameter Type="System.String" Name="attributeName" />
102 </Instance>
103 <Instance>
104 The {0} element must have a value for exactly one of the {1} or {2} attributes.
105 <Parameter Type="System.String" Name="elementName" />
106 <Parameter Type="System.String" Name="attribute1Name" />
107 <Parameter Type="System.String" Name="attribute2Name" />
108 <Parameter Type="System.Boolean" Name="eitherOr" />
109 </Instance>
110 <Instance>
111 The {0}/@{1} attribute was not found; it is required when attribute {2} is specified.
112 <Parameter Type="System.String" Name="elementName" />
113 <Parameter Type="System.String" Name="attributeName" />
114 <Parameter Type="System.String" Name="otherAttributeName" />
115 </Instance>
116 <Instance>
117 The {0}/@{1} attribute was not found; it is required when attribute {2} has a value of '{3}'.
118 <Parameter Type="System.String" Name="elementName" />
119 <Parameter Type="System.String" Name="attributeName" />
120 <Parameter Type="System.String" Name="otherAttributeName" />
121 <Parameter Type="System.String" Name="otherAttributeValue" />
122 </Instance>
123 <Instance>
124 The {0}/@{1} attribute was not found; it is required unless the attribute {2} has a value of '{3}'.
125 <Parameter Type="System.String" Name="elementName" />
126 <Parameter Type="System.String" Name="attributeName" />
127 <Parameter Type="System.String" Name="otherAttributeName" />
128 <Parameter Type="System.String" Name="otherAttributeValue" />
129 <Parameter Type="System.Boolean" Name="otherAttributeValueUnless" />
130 </Instance>
131 </Message>
132 <Message Id="SecurePropertyNotUppercase" Number="11">
133 <Instance>
134 The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a secure property, it must also be a public property. This means the Property/@Id value must be completely uppercase.
135 <Parameter Type="System.String" Name="elementName" />
136 <Parameter Type="System.String" Name="attributeName" />
137 <Parameter Type="System.String" Name="propertyId" />
138 </Instance>
139 </Message>
140 <Message Id="SearchPropertyNotUppercase" Number="12">
141 <Instance>
142 The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a search property, it must also be a public property. This means the Property/@Id value must be completely uppercase.
143 <Parameter Type="System.String" Name="elementName" />
144 <Parameter Type="System.String" Name="attributeName" />
145 <Parameter Type="System.String" Name="value" />
146 </Instance>
147 </Message>
148 <Message Id="StreamNameTooLong" Number="13">
149 <Instance>
150 The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long because it will be used to create a stream name. It cannot be more than than {4} characters long.
151 <Parameter Type="System.String" Name="elementName" />
152 <Parameter Type="System.String" Name="attributeName" />
153 <Parameter Type="System.String" Name="value" />
154 <Parameter Type="System.Int32" Name="length" />
155 <Parameter Type="System.Int32" Name="maximumLength" />
156 </Instance>
157 <Instance>
158 The binary value in table '{0}' will be stored with a stream name, '{1}', that is {2} characters long. This is too long because the maximum allowed length for a stream name is 62 characters long. Since the stream name is created by concatenating the table name and values of the primary key for a row (delimited by periods), this error can be resolved by shortening a value that is part of the primary key.
159 <Parameter Type="System.String" Name="tableName" />
160 <Parameter Type="System.String" Name="streamName" />
161 <Parameter Type="System.Int32" Name="streamLength" />
162 </Instance>
163 </Message>
164 <Message Id="IllegalIdentifier" Number="14">
165 <Instance>
166 The {0} element's value, '{1}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
167 <Parameter Type="System.String" Name="elementName" />
168 <Parameter Type="System.String" Name="value" />
169 </Instance>
170 <Instance>
171 The {0}/@{1} attribute's value is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
172 <Parameter Type="System.String" Name="elementName" />
173 <Parameter Type="System.String" Name="attributeName" />
174 <Parameter Type="System.Int32" Name="disambiguator" />
175 </Instance>
176 <Instance>
177 The {0}/@{1} attribute's value, '{2}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
178 <Parameter Type="System.String" Name="elementName" />
179 <Parameter Type="System.String" Name="attributeName" />
180 <Parameter Type="System.String" Name="value" />
181 </Instance>
182 <Instance>
183 The {0}/@{1} attribute's value '{2}' contains an illegal identifier '{3}'. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.
184 <Parameter Type="System.String" Name="elementName" />
185 <Parameter Type="System.String" Name="attributeName" />
186 <Parameter Type="System.String" Name="value" />
187 <Parameter Type="System.String" Name="identifier" />
188 </Instance>
189 </Message>
190 <Message Id="IllegalYesNoValue" Number="15">
191 <Instance>
192 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no value. The only legal values are 'no' and 'yes'.
193 <Parameter Type="System.String" Name="elementName" />
194 <Parameter Type="System.String" Name="attributeName" />
195 <Parameter Type="System.String" Name="value" />
196 </Instance>
197 </Message>
198 <Message Id="CabCreationFailed" Number="16" SourceLineNumbers="no">
199 <Instance>
200 Failed to create cab '{0}' while compressing file '{1}' with error 0x{2:X8}.
201 <Parameter Type="System.String" Name="cabName" />
202 <Parameter Type="System.String" Name="fileName" />
203 <Parameter Type="System.Int32" Name="error" />
204 </Instance>
205 <Instance>
206 Failed to create cab '{0}' with error 0x{1:X8}.
207 <Parameter Type="System.String" Name="cabName" />
208 <Parameter Type="System.Int32" Name="error" />
209 </Instance>
210 </Message>
211 <Message Id="CabExtractionFailed" Number="17" SourceLineNumbers="no">
212 <Instance>
213 Failed to extract cab '{0}' to directory '{1}'. This is most likely due to a lack of available disk space on the destination drive.
214 <Parameter Type="System.String" Name="cabName" />
215 <Parameter Type="System.String" Name="directoryName" />
216 </Instance>
217 <Instance>
218 Failed to extract cab '{0}' from merge module '{1}' to directory '{2}'. This is most likely due to a lack of available disk space on the destination drive.
219 <Parameter Type="System.String" Name="cabName" />
220 <Parameter Type="System.String" Name="mergeModulePath" />
221 <Parameter Type="System.String" Name="directoryName" />
222 </Instance>
223 </Message>
224 <Message Id="AppIdIncompatibleAdvertiseState" Number="18">
225 <Instance>
226 The {0}/@(1) attribute's value, '{2}' does not match the advertise state on its parent element: '{3}'. (Note: AppIds nested under Fragment, Module, or Product elements must be advertised.)
227 <Parameter Type="System.String" Name="elementName" />
228 <Parameter Type="System.String" Name="attributeName" />
229 <Parameter Type="System.String" Name="value" />
230 <Parameter Type="System.String" Name="parentValue" />
231 </Instance>
232 </Message>
233 <Message Id="IllegalAttributeWhenAdvertised" Number="19">
234 <Instance>
235 The {0}/@{1} attribute cannot be specified because the element is advertised.
236 <Parameter Type="System.String" Name="elementName" />
237 <Parameter Type="System.String" Name="attributeName" />
238 </Instance>
239 </Message>
240 <Message Id="ConditionExpected" Number="20">
241 <Instance>
242 The {0} element's inner text cannot be an empty string or completely whitespace. If you don't want a condition, then simply remove the entire {0} element.
243 <Parameter Type="System.String" Name="elementName" />
244 </Instance>
245 </Message>
246 <Message Id="IllegalAttributeValue" Number="21">
247 <Instance>
248 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}'.
249 <Parameter Type="System.String" Name="elementName" />
250 <Parameter Type="System.String" Name="attributeName" />
251 <Parameter Type="System.String" Name="value" />
252 <Parameter Type="System.String" Name="legalValue1" />
253 </Instance>
254 <Instance>
255 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', or '{4}'.
256 <Parameter Type="System.String" Name="elementName" />
257 <Parameter Type="System.String" Name="attributeName" />
258 <Parameter Type="System.String" Name="value" />
259 <Parameter Type="System.String" Name="legalValue1" />
260 <Parameter Type="System.String" Name="legalValue2" />
261 </Instance>
262 <Instance>
263 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', or '{5}'.
264 <Parameter Type="System.String" Name="elementName" />
265 <Parameter Type="System.String" Name="attributeName" />
266 <Parameter Type="System.String" Name="value" />
267 <Parameter Type="System.String" Name="legalValue1" />
268 <Parameter Type="System.String" Name="legalValue2" />
269 <Parameter Type="System.String" Name="legalValue3" />
270 </Instance>
271 <Instance>
272 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', or '{6}'.
273 <Parameter Type="System.String" Name="elementName" />
274 <Parameter Type="System.String" Name="attributeName" />
275 <Parameter Type="System.String" Name="value" />
276 <Parameter Type="System.String" Name="legalValue1" />
277 <Parameter Type="System.String" Name="legalValue2" />
278 <Parameter Type="System.String" Name="legalValue3" />
279 <Parameter Type="System.String" Name="legalValue4" />
280 </Instance>
281 <Instance>
282 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', or '{7}'.
283 <Parameter Type="System.String" Name="elementName" />
284 <Parameter Type="System.String" Name="attributeName" />
285 <Parameter Type="System.String" Name="value" />
286 <Parameter Type="System.String" Name="legalValue1" />
287 <Parameter Type="System.String" Name="legalValue2" />
288 <Parameter Type="System.String" Name="legalValue3" />
289 <Parameter Type="System.String" Name="legalValue4" />
290 <Parameter Type="System.String" Name="legalValue5" />
291 </Instance>
292 <Instance>
293 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', or '{8}'.
294 <Parameter Type="System.String" Name="elementName" />
295 <Parameter Type="System.String" Name="attributeName" />
296 <Parameter Type="System.String" Name="value" />
297 <Parameter Type="System.String" Name="legalValue1" />
298 <Parameter Type="System.String" Name="legalValue2" />
299 <Parameter Type="System.String" Name="legalValue3" />
300 <Parameter Type="System.String" Name="legalValue4" />
301 <Parameter Type="System.String" Name="legalValue5" />
302 <Parameter Type="System.String" Name="legalValue6" />
303 </Instance>
304 <Instance>
305 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', or '{9}'.
306 <Parameter Type="System.String" Name="elementName" />
307 <Parameter Type="System.String" Name="attributeName" />
308 <Parameter Type="System.String" Name="value" />
309 <Parameter Type="System.String" Name="legalValue1" />
310 <Parameter Type="System.String" Name="legalValue2" />
311 <Parameter Type="System.String" Name="legalValue3" />
312 <Parameter Type="System.String" Name="legalValue4" />
313 <Parameter Type="System.String" Name="legalValue5" />
314 <Parameter Type="System.String" Name="legalValue6" />
315 <Parameter Type="System.String" Name="legalValue7" />
316 </Instance>
317 <Instance>
318 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', or '{10}'.
319 <Parameter Type="System.String" Name="elementName" />
320 <Parameter Type="System.String" Name="attributeName" />
321 <Parameter Type="System.String" Name="value" />
322 <Parameter Type="System.String" Name="legalValue1" />
323 <Parameter Type="System.String" Name="legalValue2" />
324 <Parameter Type="System.String" Name="legalValue3" />
325 <Parameter Type="System.String" Name="legalValue4" />
326 <Parameter Type="System.String" Name="legalValue5" />
327 <Parameter Type="System.String" Name="legalValue6" />
328 <Parameter Type="System.String" Name="legalValue7" />
329 <Parameter Type="System.String" Name="legalValue8" />
330 </Instance>
331 <Instance>
332 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}', '{14}', '{15}', '{16}', '{17}', '{18}', '{19}', '{20}', '{21}', '{22}', '{23}', '{24}', '{25}', '{26}', '{27}', or '{28}'.
333 <Parameter Type="System.String" Name="elementName" />
334 <Parameter Type="System.String" Name="attributeName" />
335 <Parameter Type="System.String" Name="value" />
336 <Parameter Type="System.String" Name="legalValue1" />
337 <Parameter Type="System.String" Name="legalValue2" />
338 <Parameter Type="System.String" Name="legalValue3" />
339 <Parameter Type="System.String" Name="legalValue4" />
340 <Parameter Type="System.String" Name="legalValue5" />
341 <Parameter Type="System.String" Name="legalValue6" />
342 <Parameter Type="System.String" Name="legalValue7" />
343 <Parameter Type="System.String" Name="legalValue8" />
344 <Parameter Type="System.String" Name="legalValue9" />
345 <Parameter Type="System.String" Name="legalValue10" />
346 <Parameter Type="System.String" Name="legalValue11" />
347 <Parameter Type="System.String" Name="legalValue12" />
348 <Parameter Type="System.String" Name="legalValue13" />
349 <Parameter Type="System.String" Name="legalValue14" />
350 <Parameter Type="System.String" Name="legalValue15" />
351 <Parameter Type="System.String" Name="legalValue16" />
352 <Parameter Type="System.String" Name="legalValue17" />
353 <Parameter Type="System.String" Name="legalValue18" />
354 <Parameter Type="System.String" Name="legalValue19" />
355 <Parameter Type="System.String" Name="legalValue20" />
356 <Parameter Type="System.String" Name="legalValue21" />
357 <Parameter Type="System.String" Name="legalValue22" />
358 <Parameter Type="System.String" Name="legalValue23" />
359 <Parameter Type="System.String" Name="legalValue24" />
360 <Parameter Type="System.String" Name="legalValue25" />
361 <Parameter Type="System.String" Name="legalValue26" />
362 </Instance>
363 </Message>
364 <Message Id="CustomActionMultipleSources" Number="22">
365 <Instance>
366 The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following source attributes specified at a time: {2}, {3}, {4}, {5}, or {6}.
367 <Parameter Type="System.String" Name="elementName" />
368 <Parameter Type="System.String" Name="attributeName" />
369 <Parameter Type="System.String" Name="attributeName1" />
370 <Parameter Type="System.String" Name="attributeName2" />
371 <Parameter Type="System.String" Name="attributeName3" />
372 <Parameter Type="System.String" Name="attributeName4" />
373 <Parameter Type="System.String" Name="attributeName5" />
374 </Instance>
375 </Message>
376 <Message Id="CustomActionMultipleTargets" Number="23">
377 <Instance>
378 The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following target attributes specified at a time: {2}, {3}, {4}, {5}, {6}, {7}, or {8}.
379 <Parameter Type="System.String" Name="elementName" />
380 <Parameter Type="System.String" Name="attributeName" />
381 <Parameter Type="System.String" Name="attributeName1" />
382 <Parameter Type="System.String" Name="attributeName2" />
383 <Parameter Type="System.String" Name="attributeName3" />
384 <Parameter Type="System.String" Name="attributeName4" />
385 <Parameter Type="System.String" Name="attributeName5" />
386 <Parameter Type="System.String" Name="attributeName6" />
387 <Parameter Type="System.String" Name="attributeName7" />
388 </Instance>
389 </Message>
390 <Message Id="CustomActionIllegalInnerText" Number="24">
391 <Instance>
392 The {0} element contains illegal inner text: '{1}'. It may not contain inner text unless the {2} attribute is specified.
393 <Parameter Type="System.String" Name="elementName" />
394 <Parameter Type="System.String" Name="innerText" />
395 <Parameter Type="System.String" Name="attributeName" />
396 </Instance>
397 </Message>
398 <Message Id="DirectoryRootWithoutName" Number="25">
399 <Instance>
400 The {0} element requires the {1} attribute because there is no parent {0} element.
401 <Parameter Type="System.String" Name="elementName" />
402 <Parameter Type="System.String" Name="attributeName" />
403 </Instance>
404 </Message>
405 <Message Id="IllegalShortFilename" Number="26">
406 <Instance>
407 The {0}/@{1} attribute's value, '{2}', is not a valid 8.3-compliant name. Legal names contain no more than 8 non-period characters followed by an optional period and extension of no more than 3 non-period characters. Any character except for the follow may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space).
408 <Parameter Type="System.String" Name="elementName" />
409 <Parameter Type="System.String" Name="attributeName" />
410 <Parameter Type="System.String" Name="value" />
411 </Instance>
412 </Message>
413 <Message Id="IllegalLongFilename" Number="27">
414 <Instance>
415 The {0}/@{1} attribute's value, '{2}', is not a valid filename because it contains illegal characters. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \ ? | &gt; &lt; : / * ".
416 <Parameter Type="System.String" Name="elementName" />
417 <Parameter Type="System.String" Name="attributeName" />
418 <Parameter Type="System.String" Name="value" />
419 </Instance>
420 <Instance>
421 The {0}/@{1} attribute's value '{2}' contains a invalid filename '{3}'. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \ ? | &gt; &lt; : / * ".
422 <Parameter Type="System.String" Name="elementName" />
423 <Parameter Type="System.String" Name="attributeName" />
424 <Parameter Type="System.String" Name="value" />
425 <Parameter Type="System.String" Name="filename" />
426 </Instance>
427 </Message>
428 <Message Id="TableNameTooLong" Number="28">
429 <Instance>
430 The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.
431 <Parameter Type="System.String" Name="elementName" />
432 <Parameter Type="System.String" Name="attributeName" />
433 <Parameter Type="System.String" Name="value" />
434 </Instance>
435 </Message>
436 <Message Id="FeatureConfigurableDirectoryNotUppercase" Number="29">
437 <Instance>
438 The {0}/@{1} attribute's value, '{2}', contains lowercase characters. Since this directory is user-configurable, it needs to be a public property. This means the value must be completely uppercase.
439 <Parameter Type="System.String" Name="elementName" />
440 <Parameter Type="System.String" Name="attributeName" />
441 <Parameter Type="System.String" Name="value" />
442 </Instance>
443 </Message>
444 <Message Id="FeatureCannotFavorAndDisallowAdvertise" Number="30">
445 <Instance>
446 The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'. These options would ask the installer to disallow the advertised state for this feature while at the same time favoring it.
447 <Parameter Type="System.String" Name="elementName" />
448 <Parameter Type="System.String" Name="attributeName" />
449 <Parameter Type="System.String" Name="value" />
450 <Parameter Type="System.String" Name="otherAttributeName" />
451 <Parameter Type="System.String" Name="otherValue" />
452 </Instance>
453 </Message>
454 <Message Id="FeatureCannotFollowParentAndFavorLocalOrSource" Number="31">
455 <Instance>
456 The {0}/@{1} attribute cannot be specified if the {2} attribute's value is '{3}'. These options would ask the installer to force this feature to follow the parent installation state and simultaneously favor a particular installation state just for this feature.
457 <Parameter Type="System.String" Name="elementName" />
458 <Parameter Type="System.String" Name="attributeName" />
459 <Parameter Type="System.String" Name="otherAttributeName" />
460 <Parameter Type="System.String" Name="otherValue" />
461 </Instance>
462 </Message>
463 <Message Id="MediaEmbeddedCabinetNameTooLong" Number="32">
464 <Instance>
465 The {0}/@{1} attribute's value, '{2}', is {3} characters long. The name is too long for an embedded cabinet. It cannot be more than than 62 characters long.
466 <Parameter Type="System.String" Name="elementName" />
467 <Parameter Type="System.String" Name="attributeName" />
468 <Parameter Type="System.String" Name="value" />
469 <Parameter Type="System.Int32" Name="length" />
470 </Instance>
471 </Message>
472 <Message Id="RegistrySubElementCannotBeRemoved" Number="33">
473 <Instance>
474 The {0}/{1} element cannot be specified if the {2} attribute's value is '{3}' or '{4}'.
475 <Parameter Type="System.String" Name="registryElementName" />
476 <Parameter Type="System.String" Name="registryValueElementName" />
477 <Parameter Type="System.String" Name="actionAttributeName" />
478 <Parameter Type="System.String" Name="removeValue" />
479 <Parameter Type="System.String" Name="removeKeyOnInstallValue" />
480 </Instance>
481 </Message>
482 <Message Id="RegistryMultipleValuesWithoutMultiString" Number="34">
483 <Instance>
484 The {0}/@{1} attribute and a {0}/{2} element cannot both be specified. Only one may be specified if the {3} attribute's value is not 'multiString'.
485 <Parameter Type="System.String" Name="registryElementName" />
486 <Parameter Type="System.String" Name="valueAttributeName" />
487 <Parameter Type="System.String" Name="registryValueElementName" />
488 <Parameter Type="System.String" Name="typeAttributeName" />
489 </Instance>
490 </Message>
491 <Message Id="IllegalAttributeWithOtherAttribute" Number="35">
492 <Instance>
493 The {0}/@{1} attribute cannot be specified when attribute {2} is present.
494 <Parameter Type="System.String" Name="elementName" />
495 <Parameter Type="System.String" Name="attributeName" />
496 <Parameter Type="System.String" Name="otherAttributeName" />
497 </Instance>
498 <Instance>
499 The {0}/@{1} attribute cannot be specified when attribute {2} is present with value '{3}'.
500 <Parameter Type="System.String" Name="elementName" />
501 <Parameter Type="System.String" Name="attributeName" />
502 <Parameter Type="System.String" Name="otherAttributeName" />
503 <Parameter Type="System.String" Name="otherAttributeValue" />
504 </Instance>
505 </Message>
506 <Message Id="IllegalAttributeWithOtherAttributes" Number="36">
507 <Instance>
508 The {0}/@{1} attribute cannot be specified when attribute {2} or {3} is also present.
509 <Parameter Type="System.String" Name="elementName" />
510 <Parameter Type="System.String" Name="attributeName" />
511 <Parameter Type="System.String" Name="otherAttributeName1" />
512 <Parameter Type="System.String" Name="otherAttributeName2" />
513 </Instance>
514 <Instance>
515 The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, or {4} is also present.
516 <Parameter Type="System.String" Name="elementName" />
517 <Parameter Type="System.String" Name="attributeName" />
518 <Parameter Type="System.String" Name="otherAttributeName1" />
519 <Parameter Type="System.String" Name="otherAttributeName2" />
520 <Parameter Type="System.String" Name="otherAttributeName3" />
521 </Instance>
522 <Instance>
523 The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, {4}, or {5} is also present.
524 <Parameter Type="System.String" Name="elementName" />
525 <Parameter Type="System.String" Name="attributeName" />
526 <Parameter Type="System.String" Name="otherAttributeName1" />
527 <Parameter Type="System.String" Name="otherAttributeName2" />
528 <Parameter Type="System.String" Name="otherAttributeName3" />
529 <Parameter Type="System.String" Name="otherAttributeName4" />
530 </Instance>
531 </Message>
532 <Message Id="IllegalAttributeWithoutOtherAttributes" Number="37">
533 <Instance>
534 The {0}/@{1} attribute can only be specified with the following attribute {2} present.
535 <Parameter Type="System.String" Name="elementName" />
536 <Parameter Type="System.String" Name="attributeName" />
537 <Parameter Type="System.String" Name="otherAttributeName" />
538 </Instance>
539 <Instance>
540 The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present.
541 <Parameter Type="System.String" Name="elementName" />
542 <Parameter Type="System.String" Name="attributeName" />
543 <Parameter Type="System.String" Name="otherAttributeName1" />
544 <Parameter Type="System.String" Name="otherAttributeName2" />
545 </Instance>
546 <Instance>
547 The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present with value '{4}'.
548 <Parameter Type="System.String" Name="elementName" />
549 <Parameter Type="System.String" Name="attributeName" />
550 <Parameter Type="System.String" Name="otherAttributeName1" />
551 <Parameter Type="System.String" Name="otherAttributeName2" />
552 <Parameter Type="System.String" Name="otherAttributeValue" />
553 <Parameter Type="System.Boolean" Name="uniquifier" />
554 </Instance>
555 <Instance>
556 The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, or {4} present.
557 <Parameter Type="System.String" Name="elementName" />
558 <Parameter Type="System.String" Name="attributeName" />
559 <Parameter Type="System.String" Name="otherAttributeName1" />
560 <Parameter Type="System.String" Name="otherAttributeName2" />
561 <Parameter Type="System.String" Name="otherAttributeName3" />
562 </Instance>
563 <Instance>
564 The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, {4}, or {5} present.
565 <Parameter Type="System.String" Name="elementName" />
566 <Parameter Type="System.String" Name="attributeName" />
567 <Parameter Type="System.String" Name="otherAttributeName1" />
568 <Parameter Type="System.String" Name="otherAttributeName2" />
569 <Parameter Type="System.String" Name="otherAttributeName3" />
570 <Parameter Type="System.String" Name="otherAttributeName4" />
571 </Instance>
572 </Message>
573 <Message Id="IllegalAttributeValueWithoutOtherAttribute" Number="38">
574 <Instance>
575 The {0}/@{1} attribute's value, '{2}', can only be specified with attribute {3} present with value '{4}'.
576 <Parameter Type="System.String" Name="elementName" />
577 <Parameter Type="System.String" Name="attributeName" />
578 <Parameter Type="System.String" Name="attributeValue" />
579 <Parameter Type="System.String" Name="otherAttributeName" />
580 <Parameter Type="System.String" Name="otherAttributeValue" />
581 </Instance>
582 <Instance>
583 The {0}/@{1} attribute's value, '{2}', cannot be specified without attribute {3} present.
584 <Parameter Type="System.String" Name="elementName" />
585 <Parameter Type="System.String" Name="attributeName" />
586 <Parameter Type="System.String" Name="attributeValue" />
587 <Parameter Type="System.String" Name="otherAttributeName" />
588 </Instance>
589 </Message>
590 <Message Id="IntegralValueSentinelCollision" Number="39">
591 <Instance>
592 The integer value {0} collides with a sentinel value in the compiler code.
593 <Parameter Type="System.Int32" Name="value" />
594 </Instance>
595 <Instance>
596 The long integral value {0} collides with a sentinel value in the compiler code.
597 <Parameter Type="System.Int64" Name="value" />
598 </Instance>
599 </Message>
600 <Message Id="ExampleGuid" Number="40">
601 <Instance>
602 The {0}/@{1} attribute's value, '{2}', is not a legal Guid value. A Guid needs to be generated and put in place of '{2}' in the source file.
603 <Parameter Type="System.String" Name="elementName" />
604 <Parameter Type="System.String" Name="attributeName" />
605 <Parameter Type="System.String" Name="value" />
606 </Instance>
607 </Message>
608 <Message Id="TooManyChildren" Number="41">
609 <Instance>
610 The {0} element contains multiple {1} child elements. There can only be one {1} child element per {0} element.
611 <Parameter Type="System.String" Name="elementName" />
612 <Parameter Type="System.String" Name="childElementName" />
613 </Instance>
614 </Message>
615 <Message Id="ComponentMultipleKeyPaths" Number="42">
616 <Instance>
617 The {0} element has multiple key paths set. The key path may only be set to '{2}' in extension elements that support it or one of the following locations: {0}/@{1}, {3}/@{1}, {4}/@{1}, or {5}/@{1}.
618 <Parameter Type="System.String" Name="elementName" />
619 <Parameter Type="System.String" Name="attributeName" />
620 <Parameter Type="System.String" Name="value" />
621 <Parameter Type="System.String" Name="fileElementName" />
622 <Parameter Type="System.String" Name="registryElementName" />
623 <Parameter Type="System.String" Name="odbcDataSourceElementName" />
624 </Instance>
625 </Message>
626 <Message Id="CabClosureFailed" Number="43" SourceLineNumbers="no">
627 <Instance>
628 Failed to close cab '{0}'.
629 <Parameter Type="System.String" Name="cabinet" />
630 </Instance>
631 <Instance>
632 Failed to close cab '{0}', error: {1}.
633 <Parameter Type="System.String" Name="cabinet" />
634 <Parameter Type="System.Int32" Name="error" />
635 </Instance>
636 </Message>
637 <Message Id="ExpectedAttributes" Number="44">
638 <Instance>
639 The {0} element's {1} or {2} attribute was not found; one of these is required.
640 <Parameter Type="System.String" Name="elementName" />
641 <Parameter Type="System.String" Name="attributeName1" />
642 <Parameter Type="System.String" Name="attributeName2" />
643 </Instance>
644 <Instance>
645 The {0} element's {1}, {2}, or {3} attribute was not found; one of these is required.
646 <Parameter Type="System.String" Name="elementName" />
647 <Parameter Type="System.String" Name="attributeName1" />
648 <Parameter Type="System.String" Name="attributeName2" />
649 <Parameter Type="System.String" Name="attributeName3" />
650 </Instance>
651 <Instance>
652 The {0} element's {1}, {2}, {3}, or {4} attribute was not found; one of these is required.
653 <Parameter Type="System.String" Name="elementName" />
654 <Parameter Type="System.String" Name="attributeName1" />
655 <Parameter Type="System.String" Name="attributeName2" />
656 <Parameter Type="System.String" Name="attributeName3" />
657 <Parameter Type="System.String" Name="attributeName4" />
658 </Instance>
659 <Instance>
660 The {0} element's {1}, {2}, {3}, {4}, or {5} attribute was not found; one of these is required.
661 <Parameter Type="System.String" Name="elementName" />
662 <Parameter Type="System.String" Name="attributeName1" />
663 <Parameter Type="System.String" Name="attributeName2" />
664 <Parameter Type="System.String" Name="attributeName3" />
665 <Parameter Type="System.String" Name="attributeName4" />
666 <Parameter Type="System.String" Name="attributeName5" />
667 </Instance>
668 <Instance>
669 The {0} element's {1}, {2}, {3}, {4}, {5}, or {6} attribute was not found; one of these is required.
670 <Parameter Type="System.String" Name="elementName" />
671 <Parameter Type="System.String" Name="attributeName1" />
672 <Parameter Type="System.String" Name="attributeName2" />
673 <Parameter Type="System.String" Name="attributeName3" />
674 <Parameter Type="System.String" Name="attributeName4" />
675 <Parameter Type="System.String" Name="attributeName5" />
676 <Parameter Type="System.String" Name="attributeName6" />
677 </Instance>
678 <Instance>
679 The {0} element's {1}, {2}, {3}, {4}, {5}, {6}, or {7} attribute was not found; one of these is required.
680 <Parameter Type="System.String" Name="elementName" />
681 <Parameter Type="System.String" Name="attributeName1" />
682 <Parameter Type="System.String" Name="attributeName2" />
683 <Parameter Type="System.String" Name="attributeName3" />
684 <Parameter Type="System.String" Name="attributeName4" />
685 <Parameter Type="System.String" Name="attributeName5" />
686 <Parameter Type="System.String" Name="attributeName6" />
687 <Parameter Type="System.String" Name="attributeName7" />
688 </Instance>
689 </Message>
690 <Message Id="ExpectedAttributesWithOtherAttribute" Number="45">
691 <Instance>
692 The {0} element's {1} or {2} attribute was not found; at least one of these attributes must be specified.
693 <Parameter Type="System.String" Name="elementName" />
694 <Parameter Type="System.String" Name="attributeName1" />
695 <Parameter Type="System.String" Name="attributeName2" />
696 </Instance>
697 <Instance>
698 The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} is present.
699 <Parameter Type="System.String" Name="elementName" />
700 <Parameter Type="System.String" Name="attributeName1" />
701 <Parameter Type="System.String" Name="attributeName2" />
702 <Parameter Type="System.String" Name="otherAttributeName" />
703 </Instance>
704 <Instance>
705 The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} has a value of '{4}'.
706 <Parameter Type="System.String" Name="elementName" />
707 <Parameter Type="System.String" Name="attributeName1" />
708 <Parameter Type="System.String" Name="attributeName2" />
709 <Parameter Type="System.String" Name="otherAttributeName" />
710 <Parameter Type="System.String" Name="otherAttributeValue" />
711 </Instance>
712 </Message>
713 <Message Id="ExpectedAttributesWithoutOtherAttribute" Number="46">
714 <Instance>
715 The {0} element's {1} or {2} attribute was not found; one of these is required without attribute {3} present.
716 <Parameter Type="System.String" Name="elementName" />
717 <Parameter Type="System.String" Name="attributeName1" />
718 <Parameter Type="System.String" Name="attributeName2" />
719 <Parameter Type="System.String" Name="otherAttributeName" />
720 </Instance>
721 </Message>
722 <Message Id="MissingTypeLibFile" Number="47">
723 <Instance>
724 The {0} element is non-advertised and therefore requires a parent {1} element.
725 <Parameter Type="System.String" Name="elementName" />
726 <Parameter Type="System.String" Name="fileElementName" />
727 </Instance>
728 </Message>
729 <Message Id="InvalidDocumentElement" Number="48">
730 <Instance>
731 The document element name '{0}' is invalid. A WiX {1} file must use '{2}' as the document element name.
732 <Parameter Type="System.String" Name="elementName" />
733 <Parameter Type="System.String" Name="fileType" />
734 <Parameter Type="System.String" Name="expectedElementName" />
735 </Instance>
736 </Message>
737 <Message Id="ExpectedAttributeInElementOrParent" Number="49">
738 <Instance>
739 The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2} element.
740 <Parameter Type="System.String" Name="elementName" />
741 <Parameter Type="System.String" Name="attributeName" />
742 <Parameter Type="System.String" Name="parentElementName" />
743 </Instance>
744 <Instance>
745 The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2}/@{3} attribute.
746 <Parameter Type="System.String" Name="elementName" />
747 <Parameter Type="System.String" Name="attributeName" />
748 <Parameter Type="System.String" Name="parentElementName" />
749 <Parameter Type="System.String" Name="parentAttributeName" />
750 </Instance>
751 </Message>
752 <Message Id="UnauthorizedAccess" Number="50" SourceLineNumbers="no">
753 <Instance>
754 Access to the path '{0}' is denied.
755 <Parameter Type="System.String" Name="filePath" />
756 </Instance>
757 </Message>
758 <Message Id="IllegalModuleExclusionLanguageAttributes" Number="51">
759 <Instance>Cannot set both ExcludeLanguage and ExcludeExceptLanguage attributes on a ModuleExclusion element.</Instance>
760 </Message>
761 <Message Id="NoFirstControlSpecified" Number="52">
762 <Instance>
763 The '{0}' dialog element does not have a valid tabbable control. You must either have a tabbable control that is not marked TabSkip='yes', or you must mark a control TabSkip='no'. If you have a page with no tabbable controls (a progress page, for example), you might want to set the first Text control to be TabSkip='no'.
764 <Parameter Type="System.String" Name="dialogName" />
765 </Instance>
766 </Message>
767 <Message Id="NoDataForColumn" Number="53">
768 <Instance>
769 There is no data for column '{0}' in a contained row of custom table '{1}'. A non-null value must be supplied for this column.
770 <Parameter Type="System.String" Name="columnName" />
771 <Parameter Type="System.String" Name="tableName" />
772 </Instance>
773 </Message>
774 <Message Id="ValueAndMaskMustBeSameLength" Number="54">
775 <Instance>
776 The FileTypeMask/@Value and FileTypeMask/@Mask attributes must be the same length.
777 </Instance>
778 </Message>
779 <Message Id="TooManySearchElements" Number="55">
780 <Instance>
781 Only one search element can appear under a '{0}' element.
782 <Parameter Type="System.String" Name="elementName" />
783 </Instance>
784 </Message>
785 <Message Id="IllegalAttributeExceptOnElement" Number="56">
786 <Instance>
787 The {1} attribute can only be specified on the {2} element.
788 <Parameter Type="System.String" Name="elementName" />
789 <Parameter Type="System.String" Name="attributeName" />
790 <Parameter Type="System.String" Name="expectedElementName" />
791 </Instance>
792 </Message>
793 <Message Id="SearchElementRequired" Number="57">
794 <Instance>
795 A '{0}' element must have a search element as a child.
796 <Parameter Type="System.String" Name="elementName" />
797 </Instance>
798 </Message>
799 <Message Id="MultipleIdentifiersFound" Number="58">
800 <Instance>
801 Under a '{0}' element, multiple identifiers were found: '{1}' and '{2}'. All search elements under this element must have the same id.
802 <Parameter Type="System.String" Name="elementName" />
803 <Parameter Type="System.String" Name="identifier" />
804 <Parameter Type="System.String" Name="mismatchIdentifier" />
805 </Instance>
806 </Message>
807 <Message Id="AdvertiseStateMustMatch" Number="59">
808 <Instance>
809 The advertise state of this element: '{0}', does not match the advertise state set on the parent element: '{1}'.
810 <Parameter Type="System.String" Name="advertiseState" />
811 <Parameter Type="System.String" Name="parentAdvertiseState" />
812 </Instance>
813 </Message>
814 <Message Id="DuplicateContextValue" Number="60">
815 <Instance>
816 The context value '{0}' was duplicated. Context values must be distinct.
817 <Parameter Type="System.String" Name="contextValue" />
818 </Instance>
819 </Message>
820 <Message Id="RelativePathForRegistryElement" Number="61">
821 <Instance>
822 Cannot convert RelativePath into Registry elements.
823 </Instance>
824 </Message>
825 <Message Id="IllegalAttributeWhenNested" Number="62">
826 <Instance>
827 The {0}/@{1} attribute cannot be specified when the {0} element is nested underneath a {2} element. If this {0} is a member of a ComponentGroup where ComponentGroup/@{1} is set, then the {0}/@{1} attribute should be removed.
828 <Parameter Type="System.String" Name="elementName" />
829 <Parameter Type="System.String" Name="attributeName" />
830 <Parameter Type="System.String" Name="parentElement" />
831 </Instance>
832 </Message>
833 <Message Id="ExpectedElement" Number="63">
834 <Instance>
835 A {0} element must have at least one child element of type {1}.
836 <Parameter Type="System.String" Name="elementName" />
837 <Parameter Type="System.String" Name="childName" />
838 </Instance>
839 <Instance>
840 A {0} element must have at least one child element of type {1} or {2}.
841 <Parameter Type="System.String" Name="elementName" />
842 <Parameter Type="System.String" Name="childName1" />
843 <Parameter Type="System.String" Name="childName2" />
844 </Instance>
845 <Instance>
846 A {0} element must have at least one child element of type {1}, {2}, or {3}.
847 <Parameter Type="System.String" Name="elementName" />
848 <Parameter Type="System.String" Name="childName1" />
849 <Parameter Type="System.String" Name="childName2" />
850 <Parameter Type="System.String" Name="childName3" />
851 </Instance>
852 <Instance>
853 A {0} element must have at least one child element of type {1}, {2}, {3}, or {4}.
854 <Parameter Type="System.String" Name="elementName" />
855 <Parameter Type="System.String" Name="childName1" />
856 <Parameter Type="System.String" Name="childName2" />
857 <Parameter Type="System.String" Name="childName3" />
858 <Parameter Type="System.String" Name="childName4" />
859 </Instance>
860 </Message>
861 <Message Id="RegistryRootInvalid" Number="64">
862 <Instance>
863 Registry/@Root attribute is invalid on a nested Registry element. Either remove the Root attribute or move the Registry element so it is not nested under another Registry element.
864 </Instance>
865 </Message>
866 <Message Id="IllegalYesNoDefaultValue" Number="65">
867 <Instance>
868 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/default value. The only legal values are 'default', 'no' or 'yes'.
869 <Parameter Type="System.String" Name="elementName" />
870 <Parameter Type="System.String" Name="attributeName" />
871 <Parameter Type="System.String" Name="value" />
872 </Instance>
873 </Message>
874 <Message Id="IllegalAttributeInMergeModule" Number="66">
875 <Instance>
876 The {0}/@{1} attribute cannot be specified in a merge module.
877 <Parameter Type="System.String" Name="elementName" />
878 <Parameter Type="System.String" Name="attributeName" />
879 </Instance>
880 </Message>
881 <Message Id="GenericReadNotAllowed" Number="67">
882 <Instance>Permission elements cannot have GenericRead as the only permission specified. Include at least one other permission.</Instance>
883 </Message>
884 <Message Id="IllegalAttributeWithInnerText" Number="68">
885 <Instance>
886 The {0}/@{1} attribute cannot be specified when the element has body text as well. Specify either the attribute or the body, but not both.
887 <Parameter Type="System.String" Name="elementName" />
888 <Parameter Type="System.String" Name="attributeName" />
889 </Instance>
890 </Message>
891 <Message Id="SearchElementRequiredWithAttribute" Number="69">
892 <Instance>
893 A {0} element must have a search element as a child when the {0}/@{1} attribute has the value '{2}'.
894 <Parameter Type="System.String" Name="elementName" />
895 <Parameter Type="System.String" Name="attributeName" />
896 <Parameter Type="System.String" Name="attributeValue" />
897 </Instance>
898 </Message>
899 <Message Id="CannotAuthorSpecialProperties" Number="70">
900 <Instance>
901 The {0} property was specified. Special MSI properties cannot be authored. Use the attributes on the Property element instead.
902 <Parameter Type="System.String" Name="propertyName" />
903 </Instance>
904 </Message>
905 <Message Id="NeedSequenceBeforeOrAfter" Number="72">
906 <Instance>
907 A {0} element must have a Before attribute, After attribute, or a Sequence attribute.
908 <Parameter Type="System.String" Name="elementName" />
909 </Instance>
910 </Message>
911 <Message Id="ValueNotSupported" Number="73">
912 <Instance>
913 The {0}/@{1} attribute's value, '{2}, is not supported by the Windows Installer.
914 <Parameter Type="System.String" Name="elementName" />
915 <Parameter Type="System.String" Name="attributeName" />
916 <Parameter Type="System.String" Name="attributeValue" />
917 </Instance>
918 </Message>
919 <Message Id="TabbableControlNotAllowedInBillboard" Number="74">
920 <Instance>
921 A {0} element was specified with Type='{1}' and TabSkip='no'. Tabbable controls are not allowed in Billboards.
922 <Parameter Type="System.String" Name="elementName" />
923 <Parameter Type="System.String" Name="controlType" />
924 </Instance>
925 </Message>
926 <Message Id="CheckBoxValueOnlyValidWithCheckBox" Number="75">
927 <Instance>
928 A {0} element was specified with Type='{1}' and a CheckBoxValue. Check box values can only be specified with Type='CheckBox'.
929 <Parameter Type="System.String" Name="elementName" />
930 <Parameter Type="System.String" Name="controlType" />
931 </Instance>
932 </Message>
933 <Message Id="CabFileDoesNotExist" Number="76" SourceLineNumbers="no">
934 <Instance>
935 Attempted to extract cab '{0}' from merge module '{1}' to directory '{2}'. The cab file was not found. This usually means that you have a merge module without a cabinet inside it.
936 <Parameter Type="System.String" Name="cabName" />
937 <Parameter Type="System.String" Name="mergeModulePath" />
938 <Parameter Type="System.String" Name="directoryName" />
939 </Instance>
940 </Message>
941 <Message Id="RadioButtonTypeInconsistent" Number="77">
942 <Instance>All RadioButton elements in a RadioButtonGroup must be consistent with their use of the Bitmap, Icon, and Text attributes. Ensure all of the RadioButton elements in this group have the same attribute specified.</Instance>
943 </Message>
944 <Message Id="RadioButtonBitmapAndIconDisallowed" Number="78">
945 <Instance>RadioButtonGroup elements that contain RadioButton elements with Bitmap or Icon attributes set to "yes" can only be specified under a Control element. Move your RadioButtonGroup element as a child of the appropriate Control element.</Instance>
946 </Message>
947 <Message Id="IllegalSuppressWarningId" Number="79" SourceLineNumbers="no">
948 <Instance>
949 Illegal value '{0}' for the -sw&lt;N&gt; command line option. Specify a particular warning number, like '-sw6' to suppress the warning with ID 6, or '-sw' alone to suppress all warnings.
950 <Parameter Type="System.String" Name="suppressedId" />
951 </Instance>
952 </Message>
953 <Message Id="PreprocessorIllegalForeachVariable" Number="80">
954 <Instance>
955 The variable named '{0}' is not allowed in a foreach expression.
956 <Parameter Type="System.String" Name="variableName" />
957 </Instance>
958 </Message>
959 <Message Id="PreprocessorMissingParameterPrefix" Number="81">
960 <Instance>
961 Could not find the prefix in parameter name: '{0}'.
962 <Parameter Type="System.String" Name="parameterName" />
963 </Instance>
964 </Message>
965 <Message Id="PreprocessorExtensionForParameterMissing" Number="82">
966 <Instance>
967 Could not find the preprocessor extension for parameter '{0}'. A preprocessor extension is expected because the parameter prefix, '{1}', is not one of the standard types: 'env', 'res', 'sys', or 'var'.
968 <Parameter Type="System.String" Name="parameterName" />
969 <Parameter Type="System.String" Name="parameterPrefix" />
970 </Instance>
971 </Message>
972 <Message Id="CannotFindFile" Number="83">
973 <Instance>
974 The file with id '{0}' and name '{1}' could not be found with source path: '{2}'.
975 <Parameter Type="System.String" Name="fileId" />
976 <Parameter Type="System.String" Name="fileName" />
977 <Parameter Type="System.String" Name="filePath" />
978 </Instance>
979 </Message>
980 <Message Id="BinderFileManagerMissingFile" Number="84">
981 <Instance>
982 {0}
983 <Parameter Type="System.String" Name="exceptionMessage" />
984 </Instance>
985 </Message>
986 <Message Id="InvalidFileName" Number="85">
987 <Instance>
988 Invalid file name '{0}'.
989 <Parameter Type="System.String" Name="fileName" />
990 </Instance>
991 </Message>
992 <Message Id="ReferenceLoopDetected" Number="86">
993 <Instance>
994 A circular reference of groups was detected. The infinite loop includes: {0}. Group references must form a directed acyclic graph.
995 <Parameter Type="System.String" Name="loopList" />
996 </Instance>
997 </Message>
998 <Message Id="GuidContainsLowercaseLetters" Number="87">
999 <Instance>
1000 The {0}/@{1} attribute's value, '{2}', is a mixed-case guid. All letters in a guid value should be uppercase.
1001 <Parameter Type="System.String" Name="elementName" />
1002 <Parameter Type="System.String" Name="attributeName" />
1003 <Parameter Type="System.String" Name="value" />
1004 </Instance>
1005 </Message>
1006 <Message Id="InvalidDateTimeFormat" Number="88">
1007 <Instance>
1008 The {0}/@{1} attribute's value '{2}' is not a valid date/time value. A date/time value should follow the format YYYY-MM-DDTHH:mm:ss.
1009 <Parameter Type="System.String" Name="elementName" />
1010 <Parameter Type="System.String" Name="attributeName" />
1011 <Parameter Type="System.String" Name="value" />
1012 </Instance>
1013 </Message>
1014 <Message Id="MultipleEntrySections" Number="89">
1015 <Instance>
1016 Multiple entry sections '{0}' and '{1}' found. Only one entry section may be present in a single target.
1017 <Parameter Type="System.String" Name="sectionName1" />
1018 <Parameter Type="System.String" Name="sectionName2" />
1019 </Instance>
1020 </Message>
1021 <Message Id="MultipleEntrySections2" Number="90">
1022 <Instance>Location of entry section related to previous error.</Instance>
1023 </Message>
1024 <Message Id="DuplicateSymbol" Number="91">
1025 <Instance>
1026 Duplicate symbol '{0}' found. This typically means that an Id is duplicated. Access modifiers (internal, protected, private) cannot prevent these conflicts. Ensure all your identifiers of a given type (File, Component, Feature) are unique.
1027 <Parameter Type="System.String" Name="symbolName" />
1028 </Instance>
1029 <Instance>
1030 Duplicate symbol '{0}' referenced by {1}. This typically means that an Id is duplicated. Ensure all your identifiers of a given type (File, Component, Feature) are unique or use an access modifier to scope the identfier.
1031 <Parameter Type="System.String" Name="symbolName" />
1032 <Parameter Type="System.String" Name="referencingSourceLineNumber" />
1033 </Instance>
1034 </Message>
1035 <Message Id="DuplicateSymbol2" Number="92">
1036 <Instance>Location of symbol related to previous error.</Instance>
1037 </Message>
1038 <Message Id="MissingEntrySection" Number="93" SourceLineNumbers="no">
1039 <Instance>
1040 Could not find entry section in provided list of intermediates. Expected section of type '{0}'.
1041 <Parameter Type="System.String" Name="sectionType" />
1042 </Instance>
1043 </Message>
1044 <Message Id="UnresolvedReference" Number="94">
1045 <Instance>
1046 The identifier '{0}' could not be found. Ensure you have typed the reference correctly and that all the necessary inputs are provided to the linker.
1047 <Parameter Type="System.String" Name="symbolName" />
1048 </Instance>
1049 <Instance>
1050 The identifier '{0}' is inaccessible due to its protection level.
1051 <Parameter Type="System.String" Name="symbolName" />
1052 <Parameter Type="WixToolset.Data.AccessModifier" Name="accessModifier" />
1053 </Instance>
1054 </Message>
1055 <Message Id="MultiplePrimaryReferences" Number="95">
1056 <Instance>
1057 Multiple primary references were found for {0} '{1}' in {2} '{3}' and {4} '{5}'.
1058 <Parameter Type="System.String" Name="crefChildType" />
1059 <Parameter Type="System.String" Name="crefChildId" />
1060 <Parameter Type="System.String" Name="crefParentType" />
1061 <Parameter Type="System.String" Name="crefParentId" />
1062 <Parameter Type="System.String" Name="conflictParentType" />
1063 <Parameter Type="System.String" Name="conflictParentId" />
1064 </Instance>
1065 </Message>
1066 <Message Id="ComponentReferencedTwice" Number="96">
1067 <Instance>
1068 Component {0} cannot be contained in a Module twice.
1069 <Parameter Type="System.String" Name="crefChildId" />
1070 </Instance>
1071 </Message>
1072 <Message Id="DuplicateModuleFileIdentifier" Number="97">
1073 <Instance>
1074 The merge module '{0}' contains a file identifier, '{1}', that is duplicated either in another merge module or in a File/@Id attribute. File identifiers must be unique. Please change one of the file identifiers to a different value.
1075 <Parameter Type="System.String" Name="moduleId" />
1076 <Parameter Type="System.String" Name="fileId" />
1077 </Instance>
1078 </Message>
1079 <Message Id="DuplicateModuleCaseInsensitiveFileIdentifier" Number="98">
1080 <Instance>
1081 The merge module '{0}' contains 2 or more file identifiers that only differ by case: '{1}' and '{2}'. The WiX toolset extracts merge module files to the file system using these identifiers. Since most file systems are not case-sensitive a collision is likely. Please contact the owner of the merge module for a fix.
1082 <Parameter Type="System.String" Name="moduleId" />
1083 <Parameter Type="System.String" Name="fileId1" />
1084 <Parameter Type="System.String" Name="fileId2" />
1085 </Instance>
1086 </Message>
1087 <Message Id="ImplicitComponentKeyPath" Number="99">
1088 <Instance>
1089 The component '{0}' does not have an explicit key path specified. If the ordering of the elements under the Component element changes, the key path will also change. To prevent accidental changes, the key path should be set to 'yes' in one of the following locations: Component/@KeyPath, File/@KeyPath, ODBCDataSource/@KeyPath, or Registry/@KeyPath.
1090 <Parameter Type="System.String" Name="componentId" />
1091 </Instance>
1092 </Message>
1093 <Message Id="LocalizationVariableUnknown" Number="102">
1094 <Instance>
1095 The localization variable !(loc.{0}) is unknown. Please ensure the variable is defined.
1096 <Parameter Type="System.String" Name="variableId" />
1097 </Instance>
1098 </Message>
1099 <Message Id="FileNotFound" Number="103">
1100 <Instance>
1101 The system cannot find the file '{0}'.
1102 <Parameter Type="System.String" Name="file" />
1103 </Instance>
1104 <Instance>
1105 The system cannot find the file '{0}' with type '{1}'.
1106 <Parameter Type="System.String" Name="file" />
1107 <Parameter Type="System.String" Name="fileType" />
1108 </Instance>
1109 </Message>
1110 <Message Id="InvalidXml" Number="104">
1111 <Instance>
1112 Not a valid {0} file; detail: {1}
1113 <Parameter Type="System.String" Name="fileType" />
1114 <Parameter Type="System.String" Name="detail" />
1115 </Instance>
1116 </Message>
1117 <Message Id="ProgIdNestedTooDeep" Number="105">
1118 <Instance>ProgId elements may not be nested more than 1 level deep.</Instance>
1119 </Message>
1120 <Message Id="CanNotHaveTwoParents" Number="106">
1121 <Instance>
1122 The DirectorySearchRef {0} can not have a Parent attribute {1} and also be nested under parent element {2}
1123 <Parameter Type="System.String" Name="directorySearch" />
1124 <Parameter Type="System.String" Name="parentAttribute" />
1125 <Parameter Type="System.String" Name="parentElement" />
1126 </Instance>
1127 </Message>
1128 <Message Id="SchemaValidationFailed" Number="107">
1129 <Instance>
1130 Schema validation failed with the following error at line {1}, column {2}: {0}
1131 <Parameter Type="System.String" Name="validationError" />
1132 <Parameter Type="System.Int32" Name="lineNumber" />
1133 <Parameter Type="System.Int32" Name="linePosition" />
1134 </Instance>
1135 </Message>
1136 <Message Id="IllegalVersionValue" Number="108">
1137 <Instance>
1138 The {0}/@{1} attribute's value, '{2}', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534.
1139 <Parameter Type="System.String" Name="elementName" />
1140 <Parameter Type="System.String" Name="attributeName" />
1141 <Parameter Type="System.String" Name="value" />
1142 </Instance>
1143 </Message>
1144 <Message Id="CustomTableNameTooLong" Number="109">
1145 <Instance>
1146 The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.
1147 <Parameter Type="System.String" Name="elementName" />
1148 <Parameter Type="System.String" Name="attributeName" />
1149 <Parameter Type="System.String" Name="value" />
1150 </Instance>
1151 </Message>
1152 <Message Id="CustomTableIllegalColumnWidth" Number="110">
1153 <Instance>
1154 The {0}/@{1} attribute's value, '{2}', is not a valid column width. Valid column widths are 2 or 4.
1155 <Parameter Type="System.String" Name="elementName" />
1156 <Parameter Type="System.String" Name="attributeName" />
1157 <Parameter Type="System.Int32" Name="value" />
1158 </Instance>
1159 </Message>
1160 <Message Id="CustomTableMissingPrimaryKey" Number="111">
1161 <Instance>The CustomTable is missing a Column element with the PrimaryKey attribute set to 'yes'. At least one column must be marked as the primary key.</Instance>
1162 </Message>
1163 <Message Id="TypeSpecificationForExtensionRequired" Number="113" SourceLineNumbers="no">
1164 <Instance>
1165 The parameter '{0}' must be followed by the extension's type specification. The type specification should be a fully qualified class and assembly identity, for example: "MyNamespace.MyClass,myextension.dll".
1166 <Parameter Type="System.String" Name="parameter" />
1167 </Instance>
1168 </Message>
1169 <Message Id="FilePathRequired" SourceLineNumbers="no" Number="114">
1170 <Instance>
1171 The parameter '{0}' must be followed by a file path.
1172 <Parameter Type="System.String" Name="parameter" />
1173 </Instance>
1174 </Message>
1175 <Message Id="DirectoryPathRequired" Number="115" SourceLineNumbers="no">
1176 <Instance>
1177 The parameter '{0}' must be followed by a directory path.
1178 <Parameter Type="System.String" Name="parameter" />
1179 </Instance>
1180 </Message>
1181 <Message Id="FileOrDirectoryPathRequired" Number="116" SourceLineNumbers="no">
1182 <Instance>
1183 The parameter '{0}' must be followed by a file or directory path. To specify a directory path the string must end with a backslash, for example: "C:\Path\".
1184 <Parameter Type="System.String" Name="parameter" />
1185 </Instance>
1186 </Message>
1187 <Message Id="PathCannotContainQuote" Number="117" SourceLineNumbers="no">
1188 <Instance>
1189 Path '{0}' contains a literal quote character. Quotes are often accidentally introduced when trying to refer to a directory path with spaces in it, such as "C:\Out Directory\" -- the backslash before the quote acts an escape character. The correct representation for that path is: "C:\Out Directory\\".
1190 <Parameter Type="System.String" Name="fileName" />
1191 </Instance>
1192 </Message>
1193 <Message Id="AdditionalArgumentUnexpected" Number="118" SourceLineNumbers="no">
1194 <Instance>
1195 Additional argument '{0}' was unexpected. Remove the argument and add the '-?' switch for more information.
1196 <Parameter Type="System.String" Name="argument" />
1197 </Instance>
1198 </Message>
1199 <Message Id="RegistryNameValueIncorrect" Number="119">
1200 <Instance>
1201 The {0}/@{1} attribute's value, '{2}', is incorrect. It should not contain values of '+', '-', or '*' when the {0}/@Value attribute is empty. Instead, use the proper element and attributes: for Name='+' use RegistryKey/@Action='createKey', for Name='-' use RemoveRegistryKey/@Action='removeOnUninstall', for Name='*' use RegistryKey/@Action='createAndRemoveOnUninstall'.
1202 <Parameter Type="System.String" Name="elementName" />
1203 <Parameter Type="System.String" Name="attributeName" />
1204 <Parameter Type="System.String" Name="value" />
1205 </Instance>
1206 </Message>
1207 <Message Id="FamilyNameTooLong" Number="120">
1208 <Instance>
1209 The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long for a family name because the maximum allowed length is 8 characters long.
1210 <Parameter Type="System.String" Name="elementName" />
1211 <Parameter Type="System.String" Name="attributeName" />
1212 <Parameter Type="System.String" Name="value" />
1213 <Parameter Type="System.Int32" Name="length" />
1214 </Instance>
1215 </Message>
1216 <Message Id="IllegalFamilyName" Number="121">
1217 <Instance>
1218 The {0}/@{1} attribute's value, '{2}', contains illegal characters for a family name. Legal values include letters, numbers, and underscores.
1219 <Parameter Type="System.String" Name="elementName" />
1220 <Parameter Type="System.String" Name="attributeName" />
1221 <Parameter Type="System.String" Name="value" />
1222 </Instance>
1223 </Message>
1224 <Message Id="IllegalLongValue" Number="122">
1225 <Instance>
1226 The {0}/@{1} attribute's value, '{2}', is not a legal long value. Legal long values are from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.
1227 <Parameter Type="System.String" Name="elementName" />
1228 <Parameter Type="System.String" Name="attributeName" />
1229 <Parameter Type="System.String" Name="value" />
1230 </Instance>
1231 </Message>
1232 <Message Id="IntegralValueOutOfRange" Number="123">
1233 <Instance>
1234 The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.
1235 <Parameter Type="System.String" Name="elementName" />
1236 <Parameter Type="System.String" Name="attributeName" />
1237 <Parameter Type="System.Int32" Name="value" />
1238 <Parameter Type="System.Int32" Name="minimum" />
1239 <Parameter Type="System.Int32" Name="maximum" />
1240 </Instance>
1241 <Instance>
1242 The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.
1243 <Parameter Type="System.String" Name="elementName" />
1244 <Parameter Type="System.String" Name="attributeName" />
1245 <Parameter Type="System.Int64" Name="value" />
1246 <Parameter Type="System.Int64" Name="minimum" />
1247 <Parameter Type="System.Int64" Name="maximum" />
1248 </Instance>
1249 </Message>
1250 <Message Id="DuplicateExtensionXmlSchemaNamespace" Number="125" SourceLineNumbers="no">
1251 <Instance>
1252 The extension '{0}' uses the same xml schema namespace, '{1}', as previously loaded extension '{2}'. Please either remove one of the extensions or rename the xml schema namespace to avoid the collision.
1253 <Parameter Type="System.String" Name="extension" />
1254 <Parameter Type="System.String" Name="extensionXmlSchemaNamespace" />
1255 <Parameter Type="System.String" Name="collidingExtension" />
1256 </Instance>
1257 </Message>
1258 <Message Id="DuplicateExtensionTable" Number="126" SourceLineNumbers="no">
1259 <Instance>
1260 The extension '{0}' contains a definition for table '{1}' that collides with a previously loaded table definition. Please remove one of the conflicting extensions or rename one of the tables to avoid the collision.
1261 <Parameter Type="System.String" Name="extension" />
1262 <Parameter Type="System.String" Name="tableName" />
1263 </Instance>
1264 </Message>
1265 <Message Id="DuplicateExtensionPreprocessorType" Number="127" SourceLineNumbers="no">
1266 <Instance>
1267 The extension '{0}' uses the same preprocessor variable prefix, '{1}', as previously loaded extension '{2}'. Please remove one of the extensions or rename the prefix to avoid the collision.
1268 <Parameter Type="System.String" Name="extension" />
1269 <Parameter Type="System.String" Name="variablePrefix" />
1270 <Parameter Type="System.String" Name="collidingExtension" />
1271 </Instance>
1272 </Message>
1273 <Message Id="FileInUse" Number="128">
1274 <Instance>
1275 The process can not access the file '{0}' because it is being used by another process.
1276 <Parameter Type="System.String" Name="file" />
1277 </Instance>
1278 </Message>
1279 <Message Id="CannotOpenMergeModule" Number="129">
1280 <Instance>
1281 Cannot open the merge module '{0}' from file '{1}'.
1282 <Parameter Type="System.String" Name="mergeModuleIdentifier" />
1283 <Parameter Type="System.String" Name="mergeModuleFile" />
1284 </Instance>
1285 </Message>
1286 <Message Id="DuplicatePrimaryKey" Number="130">
1287 <Instance>
1288 The primary key '{0}' is duplicated in table '{1}'. Please remove one of the entries or rename a part of the primary key to avoid the collision.
1289 <Parameter Type="System.String" Name="primaryKey" />
1290 <Parameter Type="System.String" Name="tableName" />
1291 </Instance>
1292 </Message>
1293 <Message Id="FileIdentifierNotFound" Number="131">
1294 <Instance>
1295 The file row with identifier '{0}' could not be found.
1296 <Parameter Type="System.String" Name="fileIdentifier" />
1297 </Instance>
1298 </Message>
1299 <Message Id="InvalidAssemblyFile" Number="132">
1300 <Instance>
1301 The assembly file '{0}' appears to be invalid. Please ensure this is a valid assembly file and that the user has the appropriate access rights to this file. More information: {1}
1302 <Parameter Type="System.String" Name="assemblyFile" />
1303 <Parameter Type="System.String" Name="moreInformation" />
1304 </Instance>
1305 </Message>
1306 <Message Id="ExpectedEndElement" Number="133">
1307 <Instance>
1308 The end element matching the '{0}' start element was not found.
1309 <Parameter Type="System.String" Name="elementName" />
1310 </Instance>
1311 </Message>
1312 <Message Id="IllegalCodepage" Number="134" SourceLineNumbers="no">
1313 <Instance>
1314 The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.
1315 <Parameter Type="System.Int32" Name="codepage" />
1316 </Instance>
1317 </Message>
1318 <Message Id="ExpectedMediaCabinet" Number="135">
1319 <Instance>
1320 The file '{0}' should be compressed but is not part of a compressed media. Files will be compressed if either the File/@Compressed or Package/@Compressed attributes are set to 'yes'. This can be fixed by setting the Media/@Cabinet attribute for media '{1}'.
1321 <Parameter Type="System.String" Name="fileId" />
1322 <Parameter Type="System.Int32" Name="diskId" />
1323 </Instance>
1324 </Message>
1325 <Message Id="InvalidIdt" Number="136">
1326 <Instance>
1327 There was an error importing the file '{0}'.
1328 <Parameter Type="System.String" Name="idtFile" />
1329 </Instance>
1330 <Instance>
1331 There was an error importing table '{1}' from file '{0}'.
1332 <Parameter Type="System.String" Name="idtFile" />
1333 <Parameter Type="System.String" Name="tableName" />
1334 </Instance>
1335 </Message>
1336 <Message Id="InvalidSequenceTable" Number="137" SourceLineNumbers="no">
1337 <Instance>
1338 Found an invalid sequence table '{0}'.
1339 <Parameter Type="System.String" Name="sequenceTableName" />
1340 </Instance>
1341 </Message>
1342 <Message Id="ExpectedDirectory" Number="138" SourceLineNumbers="no">
1343 <Instance>
1344 The directory '{0}' could not be found.
1345 <Parameter Type="System.String" Name="directory" />
1346 </Instance>
1347 </Message>
1348 <Message Id="ComponentExpectedFeature" Number="139">
1349 <Instance>
1350 The component '{0}' is not assigned to a feature. The component's {1} '{2}' requires it to be assigned to at least one feature.
1351 <Parameter Type="System.String" Name="component" />
1352 <Parameter Type="System.String" Name="type" />
1353 <Parameter Type="System.String" Name="target" />
1354 </Instance>
1355 </Message>
1356 <Message Id="RecursiveAction" Number="140" SourceLineNumbers="no">
1357 <Instance>
1358 The action '{0}' is recursively placed in the '{1}' table.
1359 <Parameter Type="System.String" Name="action" />
1360 <Parameter Type="System.String" Name="tableName" />
1361 </Instance>
1362 </Message>
1363 <Message Id="VersionMismatch" Number="141">
1364 <Instance>
1365 The {0} file format version {1} is not compatible with the expected {0} file format version {2}.
1366 <Parameter Type="System.String" Name="fileType" />
1367 <Parameter Type="System.String" Name="version" />
1368 <Parameter Type="System.String" Name="expectedVersion" />
1369 </Instance>
1370 </Message>
1371 <Message Id="UnexpectedContentNode" Number="142">
1372 <Instance>
1373 The {0} element contains an unexpected xml node of type {1}.
1374 <Parameter Type="System.String" Name="elementName" />
1375 <Parameter Type="System.String" Name="unexpectedNodeType" />
1376 </Instance>
1377 </Message>
1378 <Message Id="UnexpectedColumnCount" Number="143">
1379 <Instance>
1380 A parsed row has more fields that contain data for table '{0}' than are defined. This is potentially because a standard table is being redefined as a custom table or is based on an older table schema.
1381 <Parameter Type="System.String" Name="tableName" />
1382 </Instance>
1383 </Message>
1384 <Message Id="InvalidExtension" Number="144" SourceLineNumbers="no">
1385 <Instance>
1386 The extension '{0}' could not be loaded.
1387 <Parameter Type="System.String" Name="extension" />
1388 </Instance>
1389 <Instance>
1390 The extension '{0}' could not be loaded because of the following reason: {1}
1391 <Parameter Type="System.String" Name="extension" />
1392 <Parameter Type="System.String" Name="invalidReason" />
1393 </Instance>
1394 <Instance>
1395 The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}'.
1396 <Parameter Type="System.String" Name="extension" />
1397 <Parameter Type="System.String" Name="extensionType" />
1398 <Parameter Type="System.String" Name="expectedType" />
1399 </Instance>
1400 <Instance>
1401 The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}' or '{3}'.
1402 <Parameter Type="System.String" Name="extension" />
1403 <Parameter Type="System.String" Name="extensionType" />
1404 <Parameter Type="System.String" Name="expectedType1" />
1405 <Parameter Type="System.String" Name="expectedType2" />
1406 </Instance>
1407 </Message>
1408 <Message Id="InvalidSubExpression" Number="145">
1409 <Instance>
1410 Found invalid subexpression '{0}' in expression '{1}'.
1411 <Parameter Type="System.String" Name="subExpression" />
1412 <Parameter Type="System.String" Name="expression" />
1413 </Instance>
1414 </Message>
1415 <Message Id="UnmatchedPreprocessorInstruction" Number="146">
1416 <Instance>
1417 Found a &lt;?{1}?&gt; processing instruction without a matching &lt;?{0}?&gt; before it.
1418 <Parameter Type="System.String" Name="beginInstruction" />
1419 <Parameter Type="System.String" Name="endInstruction" />
1420 </Instance>
1421 </Message>
1422 <Message Id="NonterminatedPreprocessorInstruction" Number="147">
1423 <Instance>
1424 Found a &lt;?{0}?&gt; processing instruction without a matching &lt;?{1}?&gt; after it.
1425 <Parameter Type="System.String" Name="beginInstruction" />
1426 <Parameter Type="System.String" Name="endInstruction" />
1427 </Instance>
1428 </Message>
1429 <Message Id="ExpectedExpressionAfterNot" Number="148">
1430 <Instance>
1431 Expecting an argument for 'NOT' in expression '{0}'.
1432 <Parameter Type="System.String" Name="expression" />
1433 </Instance>
1434 </Message>
1435 <Message Id="InvalidPreprocessorVariable" Number="149">
1436 <Instance>
1437 Ill-formed preprocessor variable '$({0})'. Variables must have a prefix (like 'var.', 'env.', or 'sys.') and a name at least 1 character long. If the literal string '$({0})' is desired, use '$$({0})'.
1438 <Parameter Type="System.String" Name="variable" />
1439 </Instance>
1440 </Message>
1441 <Message Id="UndefinedPreprocessorVariable" Number="150">
1442 <Instance>
1443 Undefined preprocessor variable '$({0})'.
1444 <Parameter Type="System.String" Name="variableName" />
1445 </Instance>
1446 </Message>
1447 <Message Id="IllegalDefineStatement" Number="151">
1448 <Instance>
1449 The define statement '&lt;?define {0}?&gt;' is not well-formed. Define statements should be in the form &lt;?define variableName = "variable value"?&gt;.
1450 <Parameter Type="System.String" Name="defineStatement" />
1451 </Instance>
1452 </Message>
1453 <Message Id="VariableDeclarationCollision" Number="152">
1454 <Instance>
1455 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
1456 <Parameter Type="System.String" Name="variableName" />
1457 <Parameter Type="System.String" Name="variableValue" />
1458 <Parameter Type="System.String" Name="variableCollidingValue" />
1459 </Instance>
1460 </Message>
1461 <Message Id="CannotReundefineVariable" Number="153">
1462 <Instance>
1463 The variable '{0}' cannot be undefined because its already undefined.
1464 <Parameter Type="System.String" Name="variableName" />
1465 </Instance>
1466 </Message>
1467 <Message Id="IllegalForeach" Number="154">
1468 <Instance>
1469 The foreach statement '{0}' is illegal. The proper format for foreach is &lt;?foreach varName in valueList?&gt;.
1470 <Parameter Type="System.String" Name="foreachStatement" />
1471 </Instance>
1472 </Message>
1473 <Message Id="IllegalParentAttributeWhenNested" Number="155">
1474 <Instance>
1475 The {0}/@{1} attribute cannot be specified when a {2} element is nested underneath the {0} element.
1476 <Parameter Type="System.String" Name="parentElementName" />
1477 <Parameter Type="System.String" Name="parentAttributeName" />
1478 <Parameter Type="System.String" Name="childElement" />
1479 </Instance>
1480 </Message>
1481 <Message Id="ExpectedEndforeach" Number="156">
1482 <Instance>A &lt;?foreach?&gt; statement was found that had no matching &lt;?endforeach?&gt;.</Instance>
1483 </Message>
1484 <Message Id="UnmatchedQuotesInExpression" Number="158">
1485 <Instance>
1486 The quotes don't match in the expression '{0}'.
1487 <Parameter Type="System.String" Name="expression" />
1488 </Instance>
1489 </Message>
1490 <Message Id="UnmatchedParenthesisInExpression" Number="159">
1491 <Instance>
1492 The parenthesis don't match in the expression '{0}'.
1493 <Parameter Type="System.String" Name="expression" />
1494 </Instance>
1495 </Message>
1496 <Message Id="ExpectedVariable" Number="160">
1497 <Instance>
1498 A required variable was missing in the expression '{0}'.
1499 <Parameter Type="System.String" Name="expression" />
1500 </Instance>
1501 </Message>
1502 <Message Id="UnexpectedLiteral" Number="161">
1503 <Instance>
1504 An unexpected literal was found in the expression '{0}'.
1505 <Parameter Type="System.String" Name="expression" />
1506 </Instance>
1507 </Message>
1508 <Message Id="IllegalIntegerInExpression" Number="162">
1509 <Instance>
1510 An illegal number was found in the expression '{0}'.
1511 <Parameter Type="System.String" Name="expression" />
1512 </Instance>
1513 </Message>
1514 <Message Id="UnexpectedPreprocessorOperator" Number="163">
1515 <Instance>
1516 The operator '{0}' is unexpected.
1517 <Parameter Type="System.String" Name="op" />
1518 </Instance>
1519 </Message>
1520 <Message Id="UnexpectedEmptySubexpression" Number="164">
1521 <Instance>
1522 The empty subexpression is unexpected in the expression '{0}'.
1523 <Parameter Type="System.String" Name="expression" />
1524 </Instance>
1525 </Message>
1526 <Message Id="UnexpectedCustomTableColumn" Number="165">
1527 <Instance>
1528 The custom table column '{0}' is unknown.
1529 <Parameter Type="System.String" Name="column" />
1530 </Instance>
1531 </Message>
1532 <Message Id="UnknownCustomTableColumnType" Number="166">
1533 <Instance>
1534 Encountered an unknown custom table column type '{0}'.
1535 <Parameter Type="System.String" Name="columnType" />
1536 </Instance>
1537 </Message>
1538 <Message Id="IllegalFileCompressionAttributes" Number="167">
1539 <Instance>Cannot have both the MsidbFileAttributesCompressed and MsidbFileAttributesNoncompressed options set in a file attributes column.</Instance>
1540 </Message>
1541 <Message Id="OverridableActionCollision" Number="168">
1542 <Instance>
1543 The {0} table contains an action '{1}' that is declared overridable in two different locations. Please remove one of the actions or the Overridable='yes' attribute from one of the actions.
1544 <Parameter Type="System.String" Name="sequenceTableName" />
1545 <Parameter Type="System.String" Name="actionName" />
1546 </Instance>
1547 </Message>
1548 <Message Id="OverridableActionCollision2" Number="169">
1549 <Instance>The location of the action related to previous error.</Instance>
1550 </Message>
1551 <Message Id="ActionCollision" Number="170">
1552 <Instance>
1553 The {0} table contains an action '{1}' that is declared in two different locations. Please remove one of the actions or set the Overridable='yes' attribute on one of their elements.
1554 <Parameter Type="System.String" Name="sequenceTableName" />
1555 <Parameter Type="System.String" Name="actionName" />
1556 </Instance>
1557 </Message>
1558 <Message Id="ActionCollision2" Number="171">
1559 <Instance>The location of the action related to previous error.</Instance>
1560 </Message>
1561 <Message Id="SuppressNonoverridableAction" Number="172">
1562 <Instance>
1563 The {0} table contains an action '{1}' that cannot be suppressed because it is not declared overridable in the base definition. Please stop suppressing the action or make it overridable in its base declaration.
1564 <Parameter Type="System.String" Name="sequenceTableName" />
1565 <Parameter Type="System.String" Name="actionName" />
1566 </Instance>
1567 </Message>
1568 <Message Id="SuppressNonoverridableAction2" Number="173">
1569 <Instance>The location of the non-overridable definition of the action related to previous error.</Instance>
1570 </Message>
1571 <Message Id="CustomActionSequencedInModule" Number="174">
1572 <Instance>
1573 The {0} table contains a custom action '{1}' that has a sequence number specified. The Sequence attribute is not allowed for custom actions in a merge module. Please remove the action or use the Before or After attributes to specify where this action should be sequenced relative to another action.
1574 <Parameter Type="System.String" Name="sequenceTableName" />
1575 <Parameter Type="System.String" Name="actionName" />
1576 </Instance>
1577 </Message>
1578 <Message Id="StandardActionRelativelyScheduledInModule" Number="175">
1579 <Instance>
1580 The {0} table contains a standard action '{1}' that does not have a sequence number specified. The Sequence attribute is required for standard actions in a merge module. Please remove the action or use the Sequence attribute.
1581 <Parameter Type="System.String" Name="sequenceTableName" />
1582 <Parameter Type="System.String" Name="actionName" />
1583 </Instance>
1584 </Message>
1585 <Message Id="ActionCircularDependency" Number="176">
1586 <Instance>
1587 The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is also scheduled to come before or after action '{1}'. Please remove this circular dependency by changing the Before or After attribute for one of the actions.
1588 <Parameter Type="System.String" Name="sequenceTableName" />
1589 <Parameter Type="System.String" Name="actionName1" />
1590 <Parameter Type="System.String" Name="actionName2" />
1591 </Instance>
1592 </Message>
1593 <Message Id="ActionScheduledRelativeToTerminationAction" Number="177">
1594 <Instance>
1595 The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is a special action which only occurs when the installer terminates. These special actions can be identified by their negative sequence numbers. Please schedule the action '{1}' to come before or after a different action.
1596 <Parameter Type="System.String" Name="sequenceTableName" />
1597 <Parameter Type="System.String" Name="actionName1" />
1598 <Parameter Type="System.String" Name="actionName2" />
1599 </Instance>
1600 </Message>
1601 <Message Id="ActionScheduledRelativeToTerminationAction2" Number="178">
1602 <Instance>The location of the special termination action related to previous error(s).</Instance>
1603 </Message>
1604 <Message Id="NoUniqueActionSequenceNumber" Number="179">
1605 <Instance>
1606 The {0} table contains an action '{1}' which cannot have a unique sequence number because it is scheduled before or after action '{2}'. There is not enough room before or after this action to assign a unique sequence number. Please schedule one of the actions differently so that it will be in a position with more sequence numbers available. Please note that sequence numbers must be an integer in the range 1 - 32767 (inclusive).
1607 <Parameter Type="System.String" Name="sequenceTableName" />
1608 <Parameter Type="System.String" Name="actionName1" />
1609 <Parameter Type="System.String" Name="actionName2" />
1610 </Instance>
1611 </Message>
1612 <Message Id="NoUniqueActionSequenceNumber2" Number="180">
1613 <Instance>The location of the sequenced action related to previous error.</Instance>
1614 </Message>
1615 <Message Id="ActionScheduledRelativeToItself" Number="181">
1616 <Instance>
1617 The {0}/@{1} attribute's value '{2}' is invalid because it would make this action dependent upon itself. Please change the value to the name of a different action.
1618 <Parameter Type="System.String" Name="elementName" />
1619 <Parameter Type="System.String" Name="attributeName" />
1620 <Parameter Type="System.String" Name="attributeValue" />
1621 </Instance>
1622 </Message>
1623 <Message Id="MissingTableDefinition" Number="182" SourceLineNumbers="no">
1624 <Instance>
1625 Cannot find the table definitions for the '{0}' table. This is likely due to a typing error or missing extension. Please ensure all the necessary extensions are supplied on the command line with the -ext parameter.
1626 <Parameter Type="System.String" Name="tableName" />
1627 </Instance>
1628 </Message>
1629 <Message Id="ExpectedRowInPatchCreationPackage" Number="183" SourceLineNumbers="no">
1630 <Instance>
1631 Could not find a row in the '{0}' table for this patch creation package. Patch creation packages must contain at least one row in the '{0}' table.
1632 <Parameter Type="System.String" Name="tableName" />
1633 </Instance>
1634 </Message>
1635 <Message Id="UnexpectedTableInMergeModule" Number="184">
1636 <Instance>
1637 An unexpected row in the '{0}' table was found in this merge module. Merge modules cannot contain the '{0}' table.
1638 <Parameter Type="System.String" Name="tableName" />
1639 </Instance>
1640 </Message>
1641 <Message Id="UnexpectedTableInPatchCreationPackage" Number="185">
1642 <Instance>
1643 An unexpected row in the '{0}' table was found in this patch creation package. Patch creation packages cannot contain the '{0}' table.
1644 <Parameter Type="System.String" Name="tableName" />
1645 </Instance>
1646 </Message>
1647 <Message Id="MergeExcludedModule" Number="186">
1648 <Instance>
1649 The module '{0}' cannot be merged because it excludes or is excluded by the merge module with signature '{1}'.
1650 <Parameter Type="System.String" Name="mergeId" />
1651 <Parameter Type="System.String" Name="otherMergeId" />
1652 </Instance>
1653 </Message>
1654 <Message Id="MergeFeatureRequired" Number="187">
1655 <Instance>
1656 The {0} table contains a row with primary key(s) '{1}' which requires a feature to properly merge from the merge module '{2}'. Nest a MergeRef element with an Id attribute set to the value '{3}' under a Feature element to fix this error.
1657 <Parameter Type="System.String" Name="tableName" />
1658 <Parameter Type="System.String" Name="primaryKeys" />
1659 <Parameter Type="System.String" Name="mergeModuleFile" />
1660 <Parameter Type="System.String" Name="mergeId" />
1661 </Instance>
1662 </Message>
1663 <Message Id="MergeLanguageFailed" Number="188">
1664 <Instance>
1665 The language '{0}' is supported but uses an invalid language transform in the merge module '{1}'.
1666 <Parameter Type="System.Int16" Name="language" />
1667 <Parameter Type="System.String" Name="mergeModuleFile" />
1668 </Instance>
1669 </Message>
1670 <Message Id="MergeLanguageUnsupported" Number="189">
1671 <Instance>
1672 Could not locate language '{0}' (or a transform for this language) in the merge module '{1}'. This is likely due to an incorrectly authored Merge/@Language attribute.
1673 <Parameter Type="System.Int16" Name="language" />
1674 <Parameter Type="System.String" Name="mergeModuleFile" />
1675 </Instance>
1676 </Message>
1677 <Message Id="TableDecompilationUnimplemented" Number="190" SourceLineNumbers="no">
1678 <Instance>
1679 Decompilation of the {0} table has not been implemented by its extension.
1680 <Parameter Type="System.String" Name="tableName" />
1681 </Instance>
1682 </Message>
1683 <Message Id="CannotDefaultMismatchedAdvertiseStates" Number="191">
1684 <Instance>
1685 MIME element cannot be marked as the default when its advertise state differs from its parent element. Ensure that the advertise state of the MIME element matches its parents element or remove the Mime/@Advertise attribute completely.
1686 </Instance>
1687 </Message>
1688 <Message Id="VersionIndependentProgIdsCannotHaveIcons" Number="192">
1689 <Instance>
1690 Version independent ProgIds cannot have Icons. Remove the Icon and/or IconIndex attributes from your ProgId element.
1691 </Instance>
1692 </Message>
1693 <Message Id="IllegalAttributeValueWithOtherAttribute" Number="193">
1694 <Instance>
1695 The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present.
1696 <Parameter Type="System.String" Name="elementName" />
1697 <Parameter Type="System.String" Name="attributeName" />
1698 <Parameter Type="System.String" Name="attributeValue" />
1699 <Parameter Type="System.String" Name="otherAttributeName" />
1700 </Instance>
1701 <Instance>
1702 The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present with value '{4}'.
1703 <Parameter Type="System.String" Name="elementName" />
1704 <Parameter Type="System.String" Name="attributeName" />
1705 <Parameter Type="System.String" Name="attributeValue" />
1706 <Parameter Type="System.String" Name="otherAttributeName" />
1707 <Parameter Type="System.String" Name="otherAttributeValue" />
1708 </Instance>
1709 </Message>
1710 <Message Id="InvalidMergeLanguage" Number="194">
1711 <Instance>
1712 The Merge element '{0}' specified an invalid language '{1}'. Verify that localization tokens are being properly resolved to a numeric LCID.
1713 <Parameter Type="System.String" Name="mergeId" />
1714 <Parameter Type="System.String" Name="mergeLanguage" />
1715 </Instance>
1716 </Message>
1717 <Message Id="WixVariableCollision" Number="195">
1718 <Instance>
1719 The WiX variable '{0}' is declared in more than one location. Please remove one of the declarations.
1720 <Parameter Type="System.String" Name="variableId" />
1721 </Instance>
1722 </Message>
1723 <Message Id="ExpectedWixVariableValue" Number="196" SourceLineNumbers="no">
1724 <Instance>
1725 The WiX variable '{0}' was declared without a value. Please specify a value for the variable.
1726 <Parameter Type="System.String" Name="variableId" />
1727 </Instance>
1728 </Message>
1729 <Message Id="WixVariableUnknown" Number="197">
1730 <Instance>
1731 The WiX variable !(wix.{0}) is unknown. Please ensure the variable is declared on the command line for light.exe, via a WixVariable element, or inline using the syntax !(wix.{0}=some value which doesn't contain parenthesis).
1732 <Parameter Type="System.String" Name="variableId" />
1733 </Instance>
1734 </Message>
1735 <Message Id="IllegalWixVariablePrefix" Number="198">
1736 <Instance>
1737 The WiX variable $(wix.{0}) uses an illegal prefix '$'. Please use the '!' prefix instead.
1738 <Parameter Type="System.String" Name="variableId" />
1739 </Instance>
1740 </Message>
1741 <Message Id="InvalidWixXmlNamespace" Number="199">
1742 <Instance>
1743 The {0} element has no namespace. Please make the {0} element look like the following: &lt;{0} xmlns="{1}"&gt;.
1744 <Parameter Type="System.String" Name="wixElementName" />
1745 <Parameter Type="System.String" Name="wixNamespace" />
1746 </Instance>
1747 <Instance>
1748 The {0} element has an incorrect namespace of '{1}'. Please make the {0} element look like the following: &lt;{0} xmlns="{2}"&gt;.
1749 <Parameter Type="System.String" Name="wixElementName" />
1750 <Parameter Type="System.String" Name="elementNamespace" />
1751 <Parameter Type="System.String" Name="wixNamespace" />
1752 </Instance>
1753 </Message>
1754 <Message Id="UnhandledExtensionElement" Number="200">
1755 <Instance>
1756 The {0} element contains an unhandled extension element '{1}'. Please ensure that the extension for elements in the '{2}' namespace has been provided.
1757 <Parameter Type="System.String" Name="elementName" />
1758 <Parameter Type="System.String" Name="extensionElementName" />
1759 <Parameter Type="System.String" Name="extensionNamespace" />
1760 </Instance>
1761 </Message>
1762 <Message Id="UnhandledExtensionAttribute" Number="201">
1763 <Instance>
1764 The {0} element contains an unhandled extension attribute '{1}'. Please ensure that the extension for attributes in the '{2}' namespace has been provided.
1765 <Parameter Type="System.String" Name="elementName" />
1766 <Parameter Type="System.String" Name="extensionAttributeName" />
1767 <Parameter Type="System.String" Name="extensionNamespace" />
1768 </Instance>
1769 </Message>
1770 <Message Id="UnsupportedExtensionAttribute" Number="202">
1771 <Instance>
1772 The {0} element contains an unsupported extension attribute '{1}'. The {0} element does not currently support extension attributes. Is the {1} attribute using the correct XML namespace?
1773 <Parameter Type="System.String" Name="elementName" />
1774 <Parameter Type="System.String" Name="extensionElementName" />
1775 </Instance>
1776 </Message>
1777 <Message Id="UnsupportedExtensionElement" Number="203">
1778 <Instance>
1779 The {0} element contains an unsupported extension element '{1}'. The {0} element does not currently support extension elements. Is the {1} element using the correct XML namespace?
1780 <Parameter Type="System.String" Name="elementName" />
1781 <Parameter Type="System.String" Name="extensionElementName" />
1782 </Instance>
1783 </Message>
1784 <Message Id="ValidationError" Number="204">
1785 <Instance>
1786 {0}: {1}
1787 <Parameter Type="System.String" Name="ice" />
1788 <Parameter Type="System.String" Name="message" />
1789 </Instance>
1790 </Message>
1791 <Message Id="IllegalRootDirectory" Number="205">
1792 <Instance>
1793 The Directory with Id '{0}' is not a valid root directory. There may only be a single root directory per product or module and its Id attribute value must be 'TARGETDIR' and its Name attribute value must be 'SourceDir'.
1794 <Parameter Type="System.String" Name="directoryId" />
1795 </Instance>
1796 </Message>
1797 <Message Id="IllegalTargetDirDefaultDir" Number="206">
1798 <Instance>
1799 The 'TARGETDIR' directory has an illegal DefaultDir value of '{0}'. The DefaultDir value is created from the *Name attributes of the Directory element. The TARGETDIR directory is a special directory which must have its Name attribute set to 'SourceDir'.
1800 <Parameter Type="System.String" Name="defaultDir" />
1801 </Instance>
1802 </Message>
1803 <Message Id="TooManyElements" Number="207">
1804 <Instance>
1805 The {0} element contains an unexpected child element '{1}'. The '{1}' element may only occur {2} time(s) under the {0} element.
1806 <Parameter Type="System.String" Name="elementName" />
1807 <Parameter Type="System.String" Name="childElementName" />
1808 <Parameter Type="System.Int32" Name="expectedInstances" />
1809 </Instance>
1810 </Message>
1811 <Message Id="ExpectedBinaryCategory" Number="208">
1812 <Instance>The Column element specifies a binary column but does not have the correct Category specified. Windows Installer requires binary columns to specify their category as binary. Please set the Category attribute's value to 'Binary'.</Instance>
1813 </Message>
1814 <Message Id="RootFeatureCannotFollowParent" Number="209">
1815 <Instance>The Feature element specifies a root feature with an illegal InstallDefault value of 'followParent'. Root features cannot follow their parent feature's install state because they don't have a parent feature. Please remove or change the value of the InstallDefault attribute.</Instance>
1816 </Message>
1817 <Message Id="FeatureNameTooLong" Number="210">
1818 <Instance>
1819 The {0}/@{1} attribute with value '{2}', is too long for a feature name. Due to limitations in the Windows Installer, feature names cannot be longer than 38 characters in length.
1820 <Parameter Type="System.String" Name="elementName" />
1821 <Parameter Type="System.String" Name="attributeName" />
1822 <Parameter Type="System.String" Name="attributeValue" />
1823 </Instance>
1824 </Message>
1825 <Message Id="SignedEmbeddedCabinet" Number="211">
1826 <Instance>The DigitalSignature element cannot be nested under a Media element which specifies EmbedCab='yes'. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or change the value of the Media/@EmbedCab attribute to 'no'.</Instance>
1827 </Message>
1828 <Message Id="ExpectedSignedCabinetName" Number="212">
1829 <Instance>The Media/@Cabinet attribute was not found; it is required when this element contains a DigitalSignature child element. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or specify a valid external cabinet name via the Cabinet attribute.</Instance>
1830 </Message>
1831 <Message Id="IllegalInlineLocVariable" Number="213">
1832 <Instance>
1833 The localization variable '{0}' specifies an illegal inline default value of '{1}'. Localization variables cannot specify default values inline, instead the value should be specified in a WiX localization (.wxl) file.
1834 <Parameter Type="System.String" Name="variableName" />
1835 <Parameter Type="System.String" Name="variableValue" />
1836 </Instance>
1837 </Message>
1838 <Message Id="MergeModuleExpectedFeature" Number="215">
1839 <Instance>
1840 The merge module '{0}' is not assigned to a feature. All merge modules must be assigned to at least one feature.
1841 <Parameter Type="System.String" Name="mergeId" />
1842 </Instance>
1843 </Message>
1844 <Message Id="Win32Exception" Number="216" SourceLineNumbers="no">
1845 <Instance>
1846 An unexpected Win32 exception with error code 0x{0:X} occurred: {1}
1847 <Parameter Type="System.Int32" Name="nativeErrorCode"/>
1848 <Parameter Type="System.String" Name="message" />
1849 </Instance>
1850 <Instance>
1851 An unexpected Win32 exception with error code 0x{0:X} occurred while accessing file '{1}': {2}
1852 <Parameter Type="System.Int32" Name="nativeErrorCode"/>
1853 <Parameter Type="System.String" Name="file"/>
1854 <Parameter Type="System.String" Name="message" />
1855 </Instance>
1856 </Message>
1857 <Message Id="UnexpectedExternalUIMessage" Number="217" SourceLineNumbers="no">
1858 <Instance>
1859 Error executing unknown ICE action. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: &quot;{0}&quot;.
1860 <Parameter Type="System.String" Name="message" />
1861 </Instance>
1862 <Instance>
1863 Error executing ICE action '{1}'. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: &quot;{0}&quot;.
1864 <Parameter Type="System.String" Name="message" />
1865 <Parameter Type="System.String" Name="action" />
1866 </Instance>
1867 </Message>
1868 <Message Id="IllegalCabbingThreadCount" Number="218" SourceLineNumbers="no">
1869 <Instance>
1870 Illegal number of threads to create cabinets: '{0}' for -ct &lt;N&gt; command line option. Specify the number of threads to use like -ct 2.
1871 <Parameter Type="System.String" Name="numThreads" />
1872 </Instance>
1873 </Message>
1874 <Message Id="IllegalEnvironmentVariable" Number="219" SourceLineNumbers="no">
1875 <Instance>
1876 The {0} environment variable is set to an invalid value of '{1}'.
1877 <Parameter Type="System.String" Name="environmentVariable" />
1878 <Parameter Type="System.String" Name="value" />
1879 </Instance>
1880 </Message>
1881 <Message Id="InvalidKeyColumn" Number="220" SourceLineNumbers="no">
1882 <Instance>
1883 The definition for the '{0}' table's '{1}' column is an invalid foreign key relationship to the {2} table's column number {3}. It is not a valid foreign key table column number because it is too small (less than 1) or greater than the count of columns in the foreign table's definition.
1884 <Parameter Type="System.String" Name="tableName" />
1885 <Parameter Type="System.String" Name="columnName" />
1886 <Parameter Type="System.String" Name="foreignTableName" />
1887 <Parameter Type="System.Int32" Name="foreignColumnNumber" />
1888 </Instance>
1889 </Message>
1890 <Message Id="CollidingModularizationTypes" Number="221" SourceLineNumbers="no">
1891 <Instance>
1892 The definition for the '{0}' table's '{1}' column is a foreign key relationship to the '{2}' table's column number {3}. The modularization types of the two column definitions differ: one is {4} and the other is {5}. Change one of the modularization types so that they match.
1893 <Parameter Type="System.String" Name="tableName" />
1894 <Parameter Type="System.String" Name="columnName" />
1895 <Parameter Type="System.String" Name="foreignTableName" />
1896 <Parameter Type="System.Int32" Name="foreignColumnNumber" />
1897 <Parameter Type="System.String" Name="modularizationType" />
1898 <Parameter Type="System.String" Name="foreignModularizationType" />
1899 </Instance>
1900 </Message>
1901 <Message Id="CubeFileNotFound" Number="222" SourceLineNumbers="no">
1902 <Instance>
1903 The cube file '{0}' cannot be found. This file is required for MSI validation.
1904 <Parameter Type="System.String" Name="cubeFile" />
1905 </Instance>
1906 </Message>
1907 <Message Id="OpenDatabaseFailed" Number="223" SourceLineNumbers="no">
1908 <Instance>
1909 Failed to open database '{0}'. Ensure it is a valid database, and it is not open by another process.
1910 <Parameter Type="System.String" Name="databaseFile" />
1911 </Instance>
1912 </Message>
1913 <Message Id="OutputTypeMismatch" Number="224">
1914 <Instance>
1915 The types of the outputs do not match. One output's type is '{0}' while the other is '{1}'.
1916 <Parameter Type="System.String" Name="beforeOutputType" />
1917 <Parameter Type="System.String" Name="afterOutputType" />
1918 </Instance>
1919 </Message>
1920 <Message Id="RealTableMissingPrimaryKeyColumn" Number="225">
1921 <Instance>
1922 The table '{0}' does not contain any primary key columns. At least one column must be marked as the primary key to ensure this table can be patched.
1923 <Parameter Type="System.String" Name="tableName" />
1924 </Instance>
1925 </Message>
1926 <Message Id="IllegalColumnName" Number="226">
1927 <Instance>
1928 The {0}/@{1} attribute's value, '{2}', is not a legal column name. It will collide with the sentinel values used in the _TransformView table.
1929 <Parameter Type="System.String" Name="elementName" />
1930 <Parameter Type="System.String" Name="attributeName" />
1931 <Parameter Type="System.String" Name="value" />
1932 </Instance>
1933 </Message>
1934 <Message Id="NoDifferencesInTransform" Number="227">
1935 <Instance>
1936 The transform being built did not contain any differences so it could not be created.
1937 </Instance>
1938 </Message>
1939 <Message Id="OutputCodepageMismatch" Number="228">
1940 <Instance>
1941 The code pages of the outputs do not match. One output's code page is '{0}' while the other is '{1}'.
1942 <Parameter Type="System.Int32" Name="beforeCodepage" />
1943 <Parameter Type="System.Int32" Name="afterCodepage" />
1944 </Instance>
1945 </Message>
1946 <Message Id="OutputCodepageMismatch2" Number="229">
1947 <Instance>
1948 The location of the mismatched code page related to the previous warning.
1949 </Instance>
1950 </Message>
1951 <Message Id="IllegalComponentWithAutoGeneratedGuid" Number="230">
1952 <Instance>
1953 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components using a Directory as a KeyPath or containing ODBCDataSource child elements cannot use an automatically generated guid. Make sure your component doesn't have a Directory as the KeyPath and move any ODBCDataSource child elements to components with explicit component guids.
1954 </Instance>
1955 <Instance>
1956 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with registry keypaths and files cannot use an automatically generated guid. Create multiple components, each with one file and/or one registry value keypath, to use automatically generated guids.
1957 <Parameter Type="System.Boolean" Name="registryKeyPath" />
1958 </Instance>
1959 </Message>
1960 <Message Id="IllegalPathForGeneratedComponentGuid" Number="231">
1961 <Instance>
1962 The component '{0}' has a key file with path '{1}'. Since this path is not rooted in one of the standard directories (like ProgramFilesFolder), this component does not fit the criteria for having an automatically generated guid. (This error may also occur if a path contains a likely standard directory such as nesting a directory with name "Common Files" under ProgramFilesFolder.)
1963 <Parameter Type="System.String" Name="componentName" />
1964 <Parameter Type="System.String" Name="keyFilePath" />
1965 </Instance>
1966 </Message>
1967 <Message Id="IllegalTerminalServerCustomActionAttributes" Number="232">
1968 <Instance>
1969 The CustomAction/@TerminalServerAware attribute's value is 'yes' but the Execute attribute is not 'deferred,' 'rollback,' or 'commit.' Terminal-Server-aware custom actions must be deferred, rollback, or commit custom actions. For more information, see http://msdn.microsoft.com/library/aa372071.aspx."
1970 </Instance>
1971 </Message>
1972 <Message Id="IllegalPropertyCustomActionAttributes" Number="233">
1973 <Instance>
1974 The CustomAction sets a property but its Execute attribute is not 'immediate' (the default). Property-setting custom actions cannot be deferred."
1975 </Instance>
1976 </Message>
1977 <Message Id="InvalidPreprocessorFunction" Number="234">
1978 <Instance>
1979 Ill-formed preprocessor function '${0}'. Functions must have a prefix (like 'fun.'), a name at least 1 character long, and matching opening and closing parentheses.
1980 <Parameter Type="System.String" Name="variable" />
1981 </Instance>
1982 </Message>
1983 <Message Id="UndefinedPreprocessorFunction" Number="235">
1984 <Instance>
1985 Undefined preprocessor function '$({0})'.
1986 <Parameter Type="System.String" Name="variableName" />
1987 </Instance>
1988 </Message>
1989 <Message Id="PreprocessorExtensionEvaluateFunctionFailed" Number="236">
1990 <Instance>
1991 In the preprocessor extension that handles prefix '{0}' while trying to call function '{1}({2})' and exception has occurred : {3}
1992 <Parameter Type="System.String" Name="prefix" />
1993 <Parameter Type="System.String" Name="function" />
1994 <Parameter Type="System.String" Name="args" />
1995 <Parameter Type="System.String" Name="message" />
1996 </Instance>
1997 </Message>
1998 <Message Id="PreprocessorExtensionGetVariableValueFailed" Number="237">
1999 <Instance>
2000 In the preprocessor extension that handles prefix '{0}' while trying to get the value for variable '{1}' and exception has occured : {2}
2001 <Parameter Type="System.String" Name="prefix" />
2002 <Parameter Type="System.String" Name="variable" />
2003 <Parameter Type="System.String" Name="message" />
2004 </Instance>
2005 </Message>
2006 <Message Id="InvalidManifestContent" Number="238">
2007 <Instance>
2008 The manifest '{0}' does not have the required assembly/assemblyIdentity element.
2009 <Parameter Type="System.String" Name="fileName" />
2010 </Instance>
2011 </Message>
2012 <Message Id="InvalidWixTransform" Number="239" SourceLineNumbers="no">
2013 <Instance>
2014 The file '{0}' is not a valid WiX Transform.
2015 <Parameter Type="System.String" Name="fileName" />
2016 </Instance>
2017 </Message>
2018 <Message Id="UnexpectedFileExtension" Number="240" SourceLineNumbers="no">
2019 <Instance>
2020 The file '{0}' has an unexpected extension. Expected one of the following: '{1}'.
2021 <Parameter Type="System.String" Name="fileName" />
2022 <Parameter Type="System.String" Name="expectedExtensions" />
2023 </Instance>
2024 </Message>
2025 <Message Id="UnexpectedTableInPatch" Number="241">
2026 <Instance>
2027 An unexpected row in the '{0}' table was found in this patch. Patches cannot contain the '{0}' table.
2028 <Parameter Type="System.String" Name="tableName" />
2029 </Instance>
2030 </Message>
2031 <Message Id="InvalidProductVersion" Number="242">
2032 <Instance>
2033 Invalid product version '{0}'. Product version must have a major version less than 256, a minor version less than 256, and a build version less than 65536.
2034 <Parameter Type="System.String" Name="version" />
2035 </Instance>
2036 <Instance>
2037 Invalid product version '{0}' in package '{1}'. When included in a bundle, all product version fields in an MSI package must be less than 65536.
2038 <Parameter Type="System.String" Name="version" />
2039 <Parameter Type="System.String" Name="packagePath" />
2040 </Instance>
2041 </Message>
2042 <Message Id="InvalidKeypathChange" Number="243">
2043 <Instance>
2044 Component '{0}' has a changed keypath in the transform '{1}'. Patches cannot change the keypath of a component.
2045 <Parameter Type="System.String" Name="component" />
2046 <Parameter Type="System.String" Name="transformPath" />
2047 </Instance>
2048 </Message>
2049 <Message Id="MissingValidatorExtension" Number="244" SourceLineNumbers="no">
2050 <Instance>
2051 The validator requires at least one extension. Add "ValidatorExtension, Wix" for the default implementation.
2052 </Instance>
2053 </Message>
2054 <Message Id="InvalidValidatorMessageType" Number="245" SourceLineNumbers="no">
2055 <Instance>
2056 Unknown validation message type '{0}'.
2057 <Parameter Type="System.String" Name="type" />
2058 </Instance>
2059 </Message>
2060 <Message Id="PatchWithoutTransforms" Number="246" SourceLineNumbers="no">
2061 <Instance>
2062 No transforms were provided to attach to the patch.
2063 </Instance>
2064 </Message>
2065 <Message Id="SingleExtensionSupported" Number="247" SourceLineNumbers="no">
2066 <Instance>
2067 Multiple extensions were specified on the command line, only a single extension is supported.
2068 </Instance>
2069 </Message>
2070 <Message Id="DuplicateTransform" Number="248" SourceLineNumbers="no">
2071 <Instance>
2072 The transform {0} was included twice on the command line. Each transform can be applied to a patch only once.
2073 <Parameter Type="System.String" Name="transform" />
2074 </Instance>
2075 </Message>
2076 <Message Id="BaselineRequired" Number="249" SourceLineNumbers="no">
2077 <Instance>
2078 No baseline was specified for one of the transforms specified. A baseline is required for all transforms in a patch.
2079 </Instance>
2080 </Message>
2081 <Message Id="PreprocessorError" Number="250">
2082 <Instance>
2083 {0}
2084 <Parameter Type="System.String" Name="message" />
2085 </Instance>
2086 </Message>
2087 <Message Id="ExpectedArgument" Number="251" SourceLineNumbers="no">
2088 <Instance>
2089 {0} is expected to be followed by a value argument.
2090 <Parameter Type="System.String" Name="argument" />
2091 </Instance>
2092 </Message>
2093 <Message Id="PatchWithoutValidTransforms" Number="252" SourceLineNumbers="no">
2094 <Instance>
2095 No valid transforms were provided to attach to the patch. Check to make sure the transforms you passed on the command line have a matching baseline authored in the patch. Also, make sure there are differences between your target and upgrade.
2096 </Instance>
2097 </Message>
2098 <Message Id="ExpectedDecompiler" Number="253" SourceLineNumbers="no">
2099 <Instance>
2100 No decompiler was provided. {0} requires a decompiler.
2101 <Parameter Type="System.String" Name="identifier" />
2102 </Instance>
2103 </Message>
2104 <Message Id="ExpectedTableInMergeModule" Number="254" SourceLineNumbers="no">
2105 <Instance>
2106 The table '{0}' was expected but was missing.
2107 <Parameter Type="System.String" Name="identifier" />
2108 </Instance>
2109 </Message>
2110 <Message Id="UnexpectedElementWithAttributeValue" Number="255">
2111 <Instance>
2112 The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}'.
2113 <Parameter Type="System.String" Name="elementName" />
2114 <Parameter Type="System.String" Name="childElementName" />
2115 <Parameter Type="System.String" Name="attribute" />
2116 <Parameter Type="System.String" Name="attributeValue" />
2117 </Instance>
2118 <Instance>
2119 The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}' or '{4}'.
2120 <Parameter Type="System.String" Name="elementName" />
2121 <Parameter Type="System.String" Name="childElementName" />
2122 <Parameter Type="System.String" Name="attribute" />
2123 <Parameter Type="System.String" Name="attributeValue1" />
2124 <Parameter Type="System.String" Name="attributeValue2" />
2125 </Instance>
2126 </Message>
2127 <Message Id="ExpectedPatchIdInWixMsp" Number="256" SourceLineNumbers="no">
2128 <Instance>
2129 The WixMsp is missing the patch ID.
2130 </Instance>
2131 </Message>
2132 <Message Id="ExpectedMediaRowsInWixMsp" Number="257" SourceLineNumbers="no">
2133 <Instance>
2134 The WixMsp has no media rows defined.
2135 </Instance>
2136 </Message>
2137 <Message Id="WixFileNotFound" Number="258" SourceLineNumbers="no">
2138 <Instance>
2139 The file '{0}' cannot be found.
2140 <Parameter Type="System.String" Name="file" />
2141 </Instance>
2142 </Message>
2143 <Message Id="ExpectedClientPatchIdInWixMsp" Number="259" SourceLineNumbers="no">
2144 <Instance>
2145 The WixMsp is missing the client patch ID. Recompile the patch source files with the latest WiX toolset.
2146 </Instance>
2147 </Message>
2148 <Message Id="NewRowAddedInTable" Number="260">
2149 <Instance>
2150 Product '{0}': Table '{1}' has a new row '{2}' added. This makes the patch not uninstallable.
2151 <Parameter Type="System.String" Name="productCode" />
2152 <Parameter Type="System.String" Name="tableName" />
2153 <Parameter Type="System.String" Name="rowId" />
2154 </Instance>
2155 </Message>
2156 <Message Id="PatchNotRemovable" Number="261" SourceLineNumbers="no">
2157 <Instance>
2158 This patch is not uninstallable. The 'Patch' element's attribute 'AllowRemoval' should be set to 'no'.
2159 </Instance>
2160 </Message>
2161 <Message Id="PathTooLong" Number="262">
2162 <Instance>
2163 '{0}' is too long, the fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
2164 <Parameter Type="System.String" Name="fileName" />
2165 </Instance>
2166 </Message>
2167 <Message Id="FileTooLarge" Number="263">
2168 <Instance>
2169 '{0}' is too large, file size must be less than 2147483648.
2170 <Parameter Type="System.String" Name="fileName" />
2171 </Instance>
2172 </Message>
2173 <Message Id="InvalidPlatformParameter" Number="264" SourceLineNumbers="no">
2174 <Instance>
2175 The parameter '{0}' is missing or has an invalid value {1}. Possible values are x86, x64, or ia64.
2176 <Parameter Type="System.String" Name="name" />
2177 <Parameter Type="System.String" Name="value" />
2178 </Instance>
2179 </Message>
2180 <Message Id="InvalidPlatformValue" Number="265">
2181 <Instance>
2182 The Platform attribute has an invalid value {0}. Possible values are x86, x64, or ia64.
2183 <Parameter Type="System.String" Name="value" />
2184 </Instance>
2185 </Message>
2186 <Message Id="IllegalValidationArguments" Number="266" SourceLineNumbers="no">
2187 <Instance>
2188 You may only specify a single default type using -t or specify custom validation using -serr and -val.
2189 </Instance>
2190 </Message>
2191 <Message Id="OrphanedComponent" Number="267">
2192 <Instance>
2193 Found orphaned Component '{0}'. If this is a Product, every Component must have at least one parent Feature. To include a Component in a Module, you must include it directly as a Component element of the Module element or indirectly via ComponentRef, ComponentGroup, or ComponentGroupRef elements.
2194 <Parameter Type="System.String" Name="componentName" />
2195 </Instance>
2196 </Message>
2197 <Message Id="IllegalCommandlineArgumentCombination" Number="268" SourceLineNumbers="no">
2198 <Instance>
2199 '-{0}' cannot be specfied in combination with '-{1}'.
2200 <Parameter Type="System.String" Name="arg1" />
2201 <Parameter Type="System.String" Name="arg2" />
2202 </Instance>
2203 </Message>
2204 <Message Id="ProductCodeInvalidForTransform" Number="269">
2205 <Instance>
2206 The value '*' is not valid for the ProductCode when used in a transform or in a patch. Copy the ProductCode from your target product MSI into the Product/@Id attribute value for your product authoring.
2207 </Instance>
2208 </Message>
2209 <Message Id="InsertInvalidSequenceActionOrder" Number="270">
2210 <Instance>
2211 Invalid order of actions {1} and {2} in sequence table {0}. Action {3} must occur after {1} and before {2}, but {2} is currently sequenced after {1}. Please fix the ordering or explicitly supply a location for the action {3}.
2212 <Parameter Type="System.String" Name="sequenceTableName" />
2213 <Parameter Type="System.String" Name="actionNameBefore" />
2214 <Parameter Type="System.String" Name="actionNameAfter" />
2215 <Parameter Type="System.String" Name="actionNameNew" />
2216 </Instance>
2217 </Message>
2218 <Message Id="InsertSequenceNoSpace" Number="271">
2219 <Instance>
2220 Not enough space exists to sequence action {3} in table {0}. It must be sequenced after {1} and before {2}, but those two actions are currently sequenced next to each other. Please move one of those actions to allow {3} to be inserted between them.
2221 <Parameter Type="System.String" Name="sequenceTableName" />
2222 <Parameter Type="System.String" Name="actionNameBefore" />
2223 <Parameter Type="System.String" Name="actionNameAfter" />
2224 <Parameter Type="System.String" Name="actionNameNew" />
2225 </Instance>
2226 </Message>
2227 <Message Id="MissingManifestForWin32Assembly" Number="272">
2228 <Instance>
2229 File '{0}' is marked as a Win32 assembly but it refers to assembly manifest '{1}' that is not present in this product.
2230 <Parameter Type="System.String" Name="file" />
2231 <Parameter Type="System.String" Name="manifest" />
2232 </Instance>
2233 </Message>
2234 <Message Id="UnableToOpenModule" Number="273">
2235 <Instance>
2236 Unable to open merge module '{0}'. Check to make sure the module language is correct. '{1}'
2237 <Parameter Type="System.String" Name="modulePath" />
2238 <Parameter Type="System.String" Name="message" />
2239 </Instance>
2240 </Message>
2241 <Message Id="ExpectedAttributeWhenElementNotUnderElement" Number="274">
2242 <Instance>
2243 The '{0}/@{1}' attribute was not found; it is required when element '{0}' is not nested under a '{2}' element.
2244 <Parameter Type="System.String" Name="elementName" />
2245 <Parameter Type="System.String" Name="attributeName" />
2246 <Parameter Type="System.String" Name="parentElementName" />
2247 </Instance>
2248 </Message>
2249 <Message Id="IllegalIdentifierLooksLikeFormatted" Number="275">
2250 <Instance>
2251 The {0}/@{1} attribute's value, '{2}', is not a legal identifier. The {0}/@{1} attribute does not support formatted string values, such as property names enclosed in brackets ([LIKETHIS]). The value must be the identifier of another element, such as the Directory/@Id attribute value.
2252 <Parameter Type="System.String" Name="elementName" />
2253 <Parameter Type="System.String" Name="attributeName" />
2254 <Parameter Type="System.String" Name="value" />
2255 </Instance>
2256 </Message>
2257 <Message Id="IllegalCodepageAttribute" Number="276">
2258 <Instance>
2259 The code page '{0}' is not a valid Windows code page. Please check the {1}/@{2} attribute value in your source file.
2260 <Parameter Type="System.String" Name="codepage" />
2261 <Parameter Type="System.String" Name="elementName" />
2262 <Parameter Type="System.String" Name="attributeName" />
2263 </Instance>
2264 </Message>
2265 <Message Id="IllegalCompressionLevel" Number="277" SourceLineNumbers="no">
2266 <Instance>
2267 The compression level '{0}' is not valid. Valid values are 'none', 'low', 'medium', 'high', and 'mszip'.
2268 <Parameter Type="System.String" Name="compressionLevel" />
2269 </Instance>
2270 </Message>
2271 <Message Id="TransformSchemaMismatch" Number="278" SourceLineNumbers="no">
2272 <Instance>The transform schema does not match the database schema. The transform may have been generated from a different database.</Instance>
2273 </Message>
2274 <Message Id="DatabaseSchemaMismatch" Number="279">
2275 <Instance>
2276 The table definition of '{0}' in the target database does not match the table definition in the updated database. A transform requires that the target database schema match the updated database schema.
2277 <Parameter Type="System.String" Name="tableName" />
2278 </Instance>
2279 </Message>
2280 <Message Id="ExpectedDirectoryGotFile" Number="280" SourceLineNumbers="no">
2281 <Instance>
2282 The {0} option requires a directory, but the provided path is a file: {1}
2283 <Parameter Type="System.String" Name="option" />
2284 <Parameter Type="System.String" Name="path" />
2285 </Instance>
2286 </Message>
2287 <Message Id="ExpectedFileGotDirectory" Number="281" SourceLineNumbers="no">
2288 <Instance>
2289 The {0} option requires a file, but the provided path is a directory: {1}
2290 <Parameter Type="System.String" Name="option" />
2291 <Parameter Type="System.String" Name="path" />
2292 </Instance>
2293 </Message>
2294 <Message Id="GacAssemblyNoStrongName" Number="282">
2295 <Instance>
2296 Assembly {0} in component {1} has no strong name and has been marked to be placed in the GAC. All assemblies installed to the GAC must have a valid strong name.
2297 <Parameter Type="System.String" Name="assemblyName" />
2298 <Parameter Type="System.String" Name="componentName" />
2299 </Instance>
2300 </Message>
2301 <Message Id="FileWriteError" Number="283" SourceLineNumbers="no">
2302 <Instance>
2303 Error writing to the path: '{0}'. Error message: '{1}'
2304 <Parameter Type="System.String" Name="path" />
2305 <Parameter Type="System.String" Name="error" />
2306 </Instance>
2307 </Message>
2308 <Message Id="InvalidCommandLineFileName" Number="284" SourceLineNumbers="no">
2309 <Instance>
2310 Invalid file name specified on the command line: '{0}'. Error message: '{1}'
2311 <Parameter Type="System.String" Name="fileName" />
2312 <Parameter Type="System.String" Name="error" />
2313 </Instance>
2314 </Message>
2315 <Message Id="ExpectedParentWithAttribute" Number="285">
2316 <Instance>
2317 When the {0}/@{1} attribute is specified, the {0} element must be nested under a {2} element.
2318 <Parameter Type="System.String" Name="parentElement" />
2319 <Parameter Type="System.String" Name="attribute" />
2320 <Parameter Type="System.String" Name="grandparentElement" />
2321 </Instance>
2322 </Message>
2323 <Message Id="IllegalWarningIdAsError" Number="286" SourceLineNumbers="no">
2324 <Instance>
2325 Illegal value '{0}' for the -wx&lt;N&gt; command line option. Specify a particular warning number, like '-wx6' to display the warning with ID 6 as an error, or '-wx' alone to suppress all warnings.
2326 <Parameter Type="System.String" Name="warningId" />
2327 </Instance>
2328 </Message>
2329 <Message Id="ExpectedAttributeOrElement" Number="287">
2330 <Instance>
2331 Element '{0}' missing attribute '{1}' or child element '{2}'. Exactly one of those is required.
2332 <Parameter Type="System.String" Name="parentElement" />
2333 <Parameter Type="System.String" Name="attribute" />
2334 <Parameter Type="System.String" Name="childElement" />
2335 </Instance>
2336 </Message>
2337 <Message Id="DuplicateVariableDefinition" Number="288" SourceLineNumbers="no">
2338 <Instance>
2339 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
2340 <Parameter Type="System.String" Name="variableName" />
2341 <Parameter Type="System.String" Name="variableValue" />
2342 <Parameter Type="System.String" Name="variableCollidingValue" />
2343 </Instance>
2344 </Message>
2345 <Message Id="InvalidVariableDefinition" Number="289" SourceLineNumbers="no">
2346 <Instance>
2347 The variable definition '{0}' is not valid. Variable definitions should be in the form -dname=value where the value is optional.
2348 <Parameter Type="System.String" Name="variableDefinition" />
2349 </Instance>
2350 </Message>
2351 <Message Id="DuplicateCabinetName" Number="290">
2352 <Instance>
2353 Duplicate cabinet name '{0}' found.
2354 <Parameter Type="System.String" Name="cabinetName" />
2355 </Instance>
2356 </Message>
2357 <Message Id="DuplicateCabinetName2" Number="291">
2358 <Instance>
2359 Duplicate cabinet name '{0}' error related to previous error.
2360 <Parameter Type="System.String" Name="cabinetName" />
2361 </Instance>
2362 </Message>
2363 <Message Id="InvalidAddedFileRowWithoutSequence" Number="292">
2364 <Instance>
2365 A row has been added to the File table with id '{1}' that does not have a sequence number assigned to it. Create your transform from a pair of msi's instead of xml outputs to get sequences assigned to your File table's rows.
2366 <Parameter Type="System.String" Name="fileRowId" />
2367 </Instance>
2368 </Message>
2369 <Message Id="DuplicateFileId" Number="293" SourceLineNumbers="no">
2370 <Instance>
2371 Multiple files with ID '{0}' exist. Windows Installer does not support file IDs that differ only by case. Change the file IDs to be unique.
2372 <Parameter Type="System.String" Name="fileId" />
2373 </Instance>
2374 </Message>
2375 <Message Id="FullTempDirectory" Number="294" SourceLineNumbers="no">
2376 <Instance>
2377 Unable to create temporary file. A common cause is that too many files that have names beginning with '{0}' are present. Delete any unneeded files in the '{1}' directory and try again.
2378 <Parameter Type="System.String" Name="prefix" />
2379 <Parameter Type="System.String" Name="directory" />
2380 </Instance>
2381 </Message>
2382 <Message Id="CreateCabAddFileFailed" Number="296" SourceLineNumbers="no">
2383 <Instance>
2384 An error (E_FAIL) was returned while adding files to a CAB file. This most commonly happens when creating a CAB file 2 GB or larger. Either reduce the size of your installation package, raise Media/@CompressionLevel to a higher compression level, or split your installation package's files into more than one CAB file.
2385 </Instance>
2386 </Message>
2387 <Message Id="CreateCabInsufficientDiskSpace" Number="297" SourceLineNumbers="no">
2388 <Instance>
2389 An error (ERROR_DISK_FULL) was returned while creating a CAB file. This means you have insufficient disk space - please clear more disk space and try this operation again.
2390 </Instance>
2391 </Message>
2392 <Message Id="UnresolvedBindReference" Number="298" SourceLineNumbers="yes">
2393 <Instance>
2394 Unresolved bind-time variable {0}.
2395 <Parameter Type="System.String" Name="BindRef" />
2396 </Instance>
2397 </Message>
2398 <Message Id="GACAssemblyIdentityWarning" Number="299" SourceLineNumbers="yes">
2399 <Instance>
2400 The destination name of file '{0}' does not match its assembly name '{1}' in your authoring. This will cause an installation failure for this assembly, because it will be installed to the Global Assembly Cache. To fix this error, update File/@Name of file '{0}' to be the actual name of the assembly.
2401 <Parameter Type="System.String" Name="fileName" />
2402 <Parameter Type="System.String" Name="assemblyName" />
2403 </Instance>
2404 </Message>
2405 <Message Id="IllegalCharactersInPath" Number="300" SourceLineNumbers="no">
2406 <Instance>
2407 Illegal characters in path '{0}'. Ensure you provided a valid path to the file.
2408 <Parameter Type="System.String" Name="pathName" />
2409 </Instance>
2410 </Message>
2411 <Message Id="ValidationFailedToOpenDatabase" Number="301" SourceLineNumbers="no">
2412 <Instance>
2413 Failed to open the database. During validation, this most commonly happens when attempting to open a database using an unsupported code page or a file that is not a valid Windows Installer database. Please use a different code page in Module/@Codepage, Package/@SummaryCodepage, Product/@Codepage, or WixLocalization/@Codepage; or make sure you provide the path to a valid Windows Installer database.
2414 </Instance>
2415 </Message>
2416 <Message Id="MustSpecifyOutputWithMoreThanOneInput" Number="302" SourceLineNumbers="no">
2417 <Instance>
2418 You must specify an output file using the "-o" or "-out" switch when you provide more than one input file.
2419 </Instance>
2420 </Message>
2421 <Message Id="IllegalSearchIdForParentDepth" Number="303">
2422 <Instance>
2423 When the parent DirectorySearch/@Depth attribute is greater than 1 for the DirectorySearch '{1}', the FileSearch/@Id attribute must be absent for FileSearch '{0}' unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'. Remove the FileSearch/@Id attribute for '{0}' to resolve this issue.
2424 <Parameter Type="System.String" Name="id" />
2425 <Parameter Type="System.String" Name="parentId" />
2426 </Instance>
2427 </Message>
2428 <Message Id="IdentifierTooLongError" Number="304">
2429 <Instance>
2430 The {0}/@{1} attribute's value, '{2}', is too long. {0}/@{1} attribute's must be {3} characters long or less.
2431 <Parameter Type="System.String" Name="elementName" />
2432 <Parameter Type="System.String" Name="attributeName" />
2433 <Parameter Type="System.String" Name="value" />
2434 <Parameter Type="System.Int32" Name="maxLength" />
2435 </Instance>
2436 </Message>
2437 <Message Id="InvalidRemoveComponent" Number="305">
2438 <Instance>
2439 Removing component '{0}' from feature '{1}' is not supported. Either the component was removed or the guid changed in the transform '{2}'. Add the component back, undo the change to the component guid, or remove the entire feature.
2440 <Parameter Type="System.String" Name="component" />
2441 <Parameter Type="System.String" Name="feature" />
2442 <Parameter Type="System.String" Name="transformPath" />
2443 </Instance>
2444 </Message>
2445 <Message Id="FinishCabFailed" Number="306" SourceLineNumbers="no">
2446 <Instance>
2447 An error (E_FAIL) was returned while finalizing a CAB file. This most commonly happens when creating a CAB file with more than 65535 files in it. Either reduce the number of files in your installation package or split your installation package's files into more than one CAB file using the Media element.
2448 </Instance>
2449 </Message>
2450 <Message Id="InvalidExtensionType" Number="307" SourceLineNumbers="no">
2451 <Instance>
2452 Either '{1}' was not defined in the assembly or the type defined in extension '{0}' could not be loaded.
2453 <Parameter Type="System.String" Name="extension" />
2454 <Parameter Type="System.String" Name="attributeType" />
2455 </Instance>
2456 <Instance>
2457 The extension type '{1}' in extension '{0}' does not inherit from the expected class '{2}'.
2458 <Parameter Type="System.String" Name="extension" />
2459 <Parameter Type="System.String" Name="className" />
2460 <Parameter Type="System.String" Name="expectedType" />
2461 </Instance>
2462 <Instance>
2463 The type '{1}' in extension '{0}' could not be loaded. Exception type '{2}' returned the following message: {3}
2464 <Parameter Type="System.String" Name="extension" />
2465 <Parameter Type="System.String" Name="className" />
2466 <Parameter Type="System.String" Name="exceptionType" />
2467 <Parameter Type="System.String" Name="exceptionMessage"/>
2468 </Instance>
2469 </Message>
2470 <Message Id="ValidationFailedDueToMultilanguageMergeModule" Number="309" SourceLineNumbers="no">
2471 <Instance>
2472 Failed to open merge module for validation. The most common cause of this error is specifying that the merge module supports multiple languages (using the Package/@Languages attribute) but not including language-specific embedded transforms. To fix this error, make the merge module language-neutral, make it language-specific, embed language transforms as specified in the MSI SDK at http://msdn.microsoft.com/library/aa367799.aspx, or disable validation.
2473 </Instance>
2474 </Message>
2475 <Message Id="ValidationFailedDueToInvalidPackage" Number="310" SourceLineNumbers="no">
2476 <Instance>
2477 Failed to open package for validation. The most common cause of this error is validating an x64 package on an x86 system. To fix this error, run validation on an x64 system or disable validation.
2478 </Instance>
2479 </Message>
2480 <Message Id="InvalidStringForCodepage" Number="311">
2481 <Instance>
2482 A string was provided with characters that are not available in the specified database code page '{0}'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.
2483 <Parameter Type="System.String" Name="codepage" />
2484 </Instance>
2485 </Message>
2486 <Message Id="InvalidEmbeddedUIFileName" Number="312">
2487 <Instance>
2488 The EmbeddedUI/@Name attribute value, '{0}', does not contain an extension. Windows Installer will not load an embedded UI DLL without an extension. Include an extension or just omit the Name attribute so it defaults to the file name portion of the Source attribute value.
2489 <Parameter Type="System.String" Name="codepage" />
2490 </Instance>
2491 </Message>
2492 <Message Id="UniqueFileSearchIdRequired" Number="313">
2493 <Instance>
2494 The DirectorySearch element '{0}' requires that the child {1} element has a unique Id when the DirectorySearch/@AssignToProperty attribute is set to 'yes'.
2495 <Parameter Type="System.String" Name="id" />
2496 <Parameter Type="System.String" Name="elementName" />
2497 </Instance>
2498 </Message>
2499 <Message Id="IllegalAttributeValueWhenNested" Number="314">
2500 <Instance>
2501 The {0}/@{1} attribute value, '{2}', cannot be specified when the {0} element is nested underneath a {3} element.
2502 <Parameter Type="System.String" Name="elementName" />
2503 <Parameter Type="System.String" Name="attributeName" />
2504 <Parameter Type="System.String" Name="attrivuteValue" />
2505 <Parameter Type="System.String" Name="parentElementName" />
2506 </Instance>
2507 </Message>
2508 <Message Id="AdminImageRequired" Number="315" SourceLineNumbers="no">
2509 <Instance>
2510 Source information is required for the product '{0}'. If you ran torch.exe with both target and updated .msi files, you must first perform an administrative installation of both .msi files then pass -a when running torch.exe.
2511 <Parameter Type="System.String" Name="productCode" />
2512 </Instance>
2513 </Message>
2514 <Message Id="SamePatchBaselineId" Number="316">
2515 <Instance>
2516 The PatchBaseline/@Id attribute value '{0}' is a child of multiple Media elements. This prevents transforms from being resolved to distinct media. Change the PatchBaseline/@Id attribute values to be unique.
2517 <Parameter Type="System.String" Name="id" />
2518 </Instance>
2519 </Message>
2520 <Message Id="SameFileIdDifferentSource" Number="317">
2521 <Instance>
2522 Two different source paths '{1}' and '{2}' were detected for the same file identifier '{0}'. You must either author these under Media elements with different Id attribute values or in different patches.
2523 <Parameter Type="System.String" Name="fileId" />
2524 <Parameter Type="System.String" Name="sourcePath1" />
2525 <Parameter Type="System.String" Name="sourcePath2" />
2526 </Instance>
2527 </Message>
2528 <Message Id="HarvestSourceNotSpecified" Number="318" SourceLineNumbers="no">
2529 <Instance>
2530 A harvest source must be specified after the harvest type and can be followed by harvester arguments.
2531 </Instance>
2532 </Message>
2533 <Message Id="OutputTargetNotSpecified" Number="319" SourceLineNumbers="no">
2534 <Instance>
2535 The '-out' or '-o' parameter must specify a file path.
2536 </Instance>
2537 </Message>
2538 <Message Id="DuplicateCommandLineOptionInExtension" Number="320" SourceLineNumbers="no">
2539 <Instance>
2540 The command line option '{0}' has already been loaded by another Heat extension.
2541 <Parameter Type="System.String" Name="arg" />
2542 </Instance>
2543 </Message>
2544 <Message Id="HarvestTypeNotFound" Number="321" SourceLineNumbers="no">
2545 <Instance>
2546 The harvest type was not found in the list of loaded Heat extensions.
2547 </Instance>
2548 <Instance>
2549 The harvest type '{0}' was specified. Harvest types cannot start with a '-'. Remove the '-' to specify a valid harvest type.
2550 <Parameter Type="System.String" Name="harvestType" />
2551 </Instance>
2552 </Message>
2553 <Message Id="BothUpgradeCodesRequired" Number="322" SourceLineNumbers="no">
2554 <Instance>
2555 Both the target and updated product authoring must define the Product/@UpgradeCode attribute if the transform validates the UpgradeCode (default). Either define the Product/@UpgradeCode attribute in both the target and updated authoring, or set the Validate/@UpgradeCode attribute to 'no' in the patch authoring.
2556 </Instance>
2557 </Message>
2558 <Message Id="IllegalBinderClassName" Number="323" SourceLineNumbers="no">
2559 <Instance>
2560 Illegal binder class name specified for -binder command line option.
2561 </Instance>
2562 </Message>
2563 <Message Id="SpecifiedBinderNotFound" Number="324" SourceLineNumbers="no">
2564 <Instance>
2565 The specified binder class '{0}' was not found in any extensions.
2566 <Parameter Type="System.String" Name="binderClass" />
2567 </Instance>
2568 </Message>
2569 <Message Id="CannotLoadBinderFileManager" Number="325" SourceLineNumbers="no">
2570 <Instance>
2571 Cannot load binder file manager: {0}. Light can only load one binder file manager and has already loaded binder file manager: {1}.
2572 <Parameter Type="System.String" Name="binderFileManager" />
2573 <Parameter Type="System.String" Name="currentBinderFileManager" />
2574 </Instance>
2575 </Message>
2576 <Message Id="CannotLoadLinkerExtension" Number="326" SourceLineNumbers="no">
2577 <Instance>
2578 Cannot load linker extension: {0}. Light can only load one link extension and has already loaded link extension: {1}.
2579 <Parameter Type="System.String" Name="linkerExtension" />
2580 <Parameter Type="System.String" Name="currentLinkerExtension" />
2581 </Instance>
2582 </Message>
2583 <Message Id="UnableToGetAuthenticodeCertOfFile" Number="327" SourceLineNumbers="no">
2584 <Instance>
2585 Unable to get the authenticode certificate of '{0}'. More information: {1}
2586 <Parameter Type="System.String" Name="filePath" />
2587 <Parameter Type="System.String" Name="moreInformation" />
2588 </Instance>
2589 </Message>
2590 <Message Id="UnableToGetAuthenticodeCertOfFileDownlevelOS" Number="328" SourceLineNumbers="no">
2591 <Instance>
2592 Unable to get the authenticode certificate of '{0}'. The cryptography API has limitations on Windows XP and Windows Server 2003. More information: {1}
2593 <Parameter Type="System.String" Name="filePath" />
2594 <Parameter Type="System.String" Name="moreInformation" />
2595 </Instance>
2596 </Message>
2597 <Message Id="ReadOnlyOutputFile" Number="329" SourceLineNumbers="no">
2598 <Instance>
2599 Unable to output to file '{0}' because it is marked as read-only.
2600 <Parameter Type="System.String" Name="filePath" />
2601 </Instance>
2602 </Message>
2603 <Message Id="CannotDefaultComponentId" Number="330">
2604 <Instance>
2605 The Component/@Id attribute was not found; it is required when there is no valid keypath to use as the default id value.
2606 </Instance>
2607 </Message>
2608 <Message Id="ParentElementAttributeRequired" Number="331">
2609 <Instance>
2610 The parent {0} element is missing the {1} attribute that is required for the {2} child element.
2611 <Parameter Type="System.String" Name="parentElement" />
2612 <Parameter Type="System.String" Name="parentAttribute" />
2613 <Parameter Type="System.String" Name="childElement" />
2614 </Instance>
2615 </Message>
2616 <Message Id="PreprocessorExtensionPragmaFailed" Number="333">
2617 <Instance>
2618 Exception thrown while processing pragma '{0}'. The exception's message is: {1}
2619 <Parameter Type="System.String" Name="pragma" />
2620 <Parameter Type="System.String" Name="message" />
2621 </Instance>
2622 </Message>
2623 <Message Id="InvalidPreprocessorPragma" Number="334">
2624 <Instance>
2625 Malformed preprocessor pragma '{0}'. Pragmas must have a prefix, a name of at least 1 character long, and be followed by optional arguments.
2626 <Parameter Type="System.String" Name="variable" />
2627 </Instance>
2628 </Message>
2629 <Message Id="SmokeUnknownFileExtension" Number="335" SourceLineNumbers="no">
2630 <Instance>
2631 Unknown input file format - expected a .msi or .msm file.
2632 </Instance>
2633 </Message>
2634 <Message Id="SmokeUnsupportedFileExtension" Number="336" SourceLineNumbers="no">
2635 <Instance>
2636 Files with an extension of .msp are not currently supported.
2637 </Instance>
2638 </Message>
2639 <Message Id="SmokeMalformedPath" Number="337" SourceLineNumbers="no">
2640 <Instance>
2641 Path contains one or more invalid characters.
2642 </Instance>
2643 </Message>
2644 <Message Id="InvalidStubExe" Number="338" SourceLineNumbers="no">
2645 <Instance>
2646 Stub executable '{0}' is not a valid Win32 executable.
2647 <Parameter Type="System.String" Name="filename" />
2648 </Instance>
2649 </Message>
2650 <Message Id="StubMissingWixburnSection" Number="339" SourceLineNumbers="no">
2651 <Instance>
2652 Stub executable '{0}' does not contain a .wixburn data section.
2653 <Parameter Type="System.String" Name="filename" />
2654 </Instance>
2655 </Message>
2656 <Message Id="StubWixburnSectionTooSmall" Number="340" SourceLineNumbers="no">
2657 <Instance>
2658 Stub executable '{0}' .wixburn data section is too small to store the Burn container header.
2659 <Parameter Type="System.String" Name="filename" />
2660 </Instance>
2661 </Message>
2662 <Message Id="MissingBundleInformation" Number="341" SourceLineNumbers="no">
2663 <Instance>
2664 The Bundle is missing '{0}' data, and cannot continue.
2665 <Parameter Type="System.String" Name="data" />
2666 </Instance>
2667 </Message>
2668 <Message Id="UnexpectedGroupChild" Number="342" SourceLineNumbers="no">
2669 <Instance>
2670 A group parent ('{0}'/'{1}') had an unexpected child ('{2}'/'{3}').
2671 <Parameter Type="System.String" Name="parentType" />
2672 <Parameter Type="System.String" Name="parentId" />
2673 <Parameter Type="System.String" Name="childType" />
2674 <Parameter Type="System.String" Name="childId" />
2675 </Instance>
2676 </Message>
2677 <Message Id="OrderingReferenceLoopDetected" Number="343">
2678 <Instance>
2679 A circular reference of ordering dependencies was detected. The infinite loop includes: {0}. Ordering dependency references must form a directed acyclic graph.
2680 <Parameter Type="System.String" Name="loopList" />
2681 </Instance>
2682 </Message>
2683 <Message Id="IdentifierNotFound" Number="344" SourceLineNumbers="no">
2684 <Instance>
2685 An expected identifier ('{1}', of type '{0}') was not found.
2686 <Parameter Type="System.String" Name="type" />
2687 <Parameter Type="System.String" Name="identifier" />
2688 </Instance>
2689 </Message>
2690 <Message Id="MergePlatformMismatch" Number="345">
2691 <Instance>
2692 '{0}' is a 64-bit merge module but the product consuming it is 32-bit. 32-bit products can consume only 32-bit merge modules.
2693 <Parameter Type="System.String" Name="mergeModuleFile" />
2694 </Instance>
2695 </Message>
2696 <Message Id="IllegalRelativeLongFilename" Number="346">
2697 <Instance>
2698 The {0}/@{1} attribute's value, '{2}', is not a valid relative long name because it contains illegal characters. Legal relative long names contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: ? | &gt; &lt; : / * ".
2699 <Parameter Type="System.String" Name="elementName" />
2700 <Parameter Type="System.String" Name="attributeName" />
2701 <Parameter Type="System.String" Name="value" />
2702 </Instance>
2703 </Message>
2704 <Message Id="IllegalAttributeValueWithLegalList" Number="347">
2705 <Instance>
2706 The {0}/@{1} attribute's value, '{2}', is not one of the legal options: {3}.
2707 <Parameter Type="System.String" Name="elementName" />
2708 <Parameter Type="System.String" Name="attributeName" />
2709 <Parameter Type="System.String" Name="value" />
2710 <Parameter Type="System.String" Name="legalValueList" />
2711 </Instance>
2712 </Message>
2713 <Message Id="IllegalAttributeValueWithIllegalList" Number="348">
2714 <Instance>
2715 The {0}/@{1} attribute's value, '{2}', is one of the illegal options: {3}.
2716 <Parameter Type="System.String" Name="elementName" />
2717 <Parameter Type="System.String" Name="attributeName" />
2718 <Parameter Type="System.String" Name="value" />
2719 <Parameter Type="System.String" Name="illegalValueList" />
2720 </Instance>
2721 </Message>
2722
2723 <Message Id="InvalidSummaryInfoCodePage" Number="349">
2724 <Instance>
2725 The code page '{0}' is invalid for summary information. You must specify an ANSI code page.
2726 <Parameter Type="System.Int32" Name="codePage" />
2727 </Instance>
2728 </Message>
2729 <Message Id="ValidationFailedDueToLowMsiEngine" Number="350" SourceLineNumbers="no">
2730 <Instance>
2731 The package being validated requires a higher version of Windows Installer than is installed on this machine. Validation cannot continue.
2732 </Instance>
2733 </Message>
2734 <Message Id="DuplicateSourcesForOutput" Number="351" SourceLineNumbers="no">
2735 <Instance>
2736 Multiple source files ({0}) have resulted in the same output file '{1}'. This is likely because the source files only differ in extension or path. Rename the source files to avoid this problem.
2737 <Parameter Type="System.String" Name="sourceList" />
2738 <Parameter Type="System.String" Name="outputFile" />
2739 </Instance>
2740 </Message>
2741 <Message Id="UnableToReadPackageInformation" Number="352">
2742 <Instance>
2743 Unable to read package '{0}'. {1}
2744 <Parameter Type="System.String" Name="packagePath" />
2745 <Parameter Type="System.String" Name="detailedErrorMessage" />
2746 </Instance>
2747 </Message>
2748 <Message Id="MultipleFilesMatchedWithOutputSpecification" Number="353" SourceLineNumbers="no">
2749 <Instance>
2750 A per-source file output specification has been provided ('{0}'), but multiple source files match the source specification ({1}). Specifying a unique output requires that only a single source file match.
2751 <Parameter Type="System.String" Name="sourceSpecification" />
2752 <Parameter Type="System.String" Name="sourceList" />
2753 </Instance>
2754 </Message>
2755 <Message Id="InvalidBundle" Number="354" SourceLineNumbers="no">
2756 <Instance>
2757 Unable to read bundle executable '{0}'. This is not a valid WiX bundle.
2758 <Parameter Type="System.String" Name="bundleExecutable" />
2759 </Instance>
2760 </Message>
2761 <Message Id="BundleTooNew" Number="355" SourceLineNumbers="no">
2762 <Instance>
2763 Unable to read bundle executable '{0}', because this bundle was created with a newer version of WiX (bundle version '{1}'). You must use a newer version of WiX in order to read this bundle.
2764 <Parameter Type="System.String" Name="bundleExecutable" />
2765 <!-- we use a 64-bit field here because the field is really a 32-bit UInt,
2766 but UInt gives a non-CLS-compliant warning.
2767 So 64-bit makes sure we don't drop the last bit -->
2768 <Parameter Type="System.Int64" Name="bundleVersion" />
2769 </Instance>
2770 </Message>
2771 <Message Id="WrongFileExtensionForNumberOfInputs" Number="356" SourceLineNumbers="no">
2772 <Instance>
2773 The extension '{0}' on the input specified '{1}' does not match the number of inputs required to handle an input with this extension. Check if you are missing an input or have too many.
2774 <Parameter Type="System.String" Name="inputExtension" />
2775 <Parameter Type="System.String" Name="input" />
2776 </Instance>
2777 </Message>
2778 <Message Id="MediaTableCollision" Number="357">
2779 <Instance>
2780 Only one of Media and MediaTemplate tables should be authored.
2781 </Instance>
2782 </Message>
2783 <Message Id="InvalidCabinetTemplate" Number="358">
2784 <Instance>
2785 CabinetTemplate attribute's value '{0}' must contain '{{0}}' and should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the follow may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).
2786 <Parameter Type="System.String" Name="cabinetTemplate" />
2787 </Instance>
2788 </Message>
2789 <Message Id="MaximumUncompressedMediaSizeTooLarge" Number="359">
2790 <Instance>
2791 '{0}' is too large. Reduce the size of maximum uncompressed media size.
2792 <Parameter Type="System.Int32" Name="maximumUncompressedMediaSize" />
2793 </Instance>
2794 </Message>
2795 <Message Id="CatalogVerificationFailed" Number="360" SourceLineNumbers="no">
2796 <Instance>
2797 File '{0}' could not be verified with a catalog file.
2798 <Parameter Type="System.String" Name="fileName" />
2799 </Instance>
2800 </Message>
2801 <Message Id="CatalogFileHashFailed" Number="361" SourceLineNumbers="no">
2802 <Instance>
2803 Could not get hash of file '{0}'. Error: {2}.
2804 <Parameter Type="System.String" Name="fileName" />
2805 <Parameter Type="System.Int32" Name="errorCode" />
2806 </Instance>
2807 </Message>
2808 <Message Id="ReservedNamespaceViolation" Number="362">
2809 <Instance>
2810 The {0}/@{1} attribute's value begins with the reserved prefix '{2}'. Some prefixes are reserved by the Windows Installer and WiX toolset for well-known values. Change your attribute's value to not begin with the same prefix.
2811 <Parameter Type="System.String" Name="element" />
2812 <Parameter Type="System.String" Name="attribute" />
2813 <Parameter Type="System.String" Name="prefix" />
2814 </Instance>
2815 </Message>
2816 <Message Id="PerUserButAllUsersEquals1" Number="363">
2817 <Instance>
2818 The MSI '{0}' is explicitly marked to not elevate so it must be a per-user package but the ALLUSERS Property is set to '1' creating a per-machine package. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute to be explicit instead.
2819 <Parameter Type="System.String" Name="path" />
2820 </Instance>
2821 </Message>
2822 <Message Id="UnsupportedAllUsersValue" Number="364">
2823 <Instance>
2824 The MSI '{0}' set the ALLUSERS Property to '{0}' which is not supported. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.
2825 <Parameter Type="System.String" Name="path" />
2826 <Parameter Type="System.String" Name="value" />
2827 </Instance>
2828 </Message>
2829 <Message Id="DisallowedMsiProperty" Number="365">
2830 <Instance>
2831 The '{0}' MsiProperty is controlled by the bootstrapper and cannot be authored. (Illegal properties are: {1}.) Remove the MsiProperty element.
2832 <Parameter Type="System.String" Name="property" />
2833 <Parameter Type="System.String" Name="illegalValueList" />
2834 </Instance>
2835 </Message>
2836 <Message Id="MissingOrInvalidModuleInstallerVersion" Number="366">
2837 <Instance>
2838 The merge module '{0}' from file '{1}' is either missing or has an invalid installer version. The value read from the installer version in module's summary information was '{2}'. This should be a numeric value representing a valid installer version such as 200 or 301.
2839 <Parameter Type="System.String" Name="moduleId" />
2840 <Parameter Type="System.String" Name="mergeModuleFile" />
2841 <Parameter Type="System.String" Name="productInstallerVersion" />
2842 </Instance>
2843 </Message>
2844 <Message Id="IllegalGeneratedGuidComponentUnversionedKeypath" Number="367">
2845 <Instance>
2846 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component's keypath is not versioned. Create multiple components to use automatically generated guids.
2847 </Instance>
2848 </Message>
2849 <Message Id="IllegalGeneratedGuidComponentVersionedNonkeypath" Number="368">
2850 <Instance>
2851 The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component has a non-keypath file that is versioned. Create multiple components to use automatically generated guids.
2852 </Instance>
2853 </Message>
2854 <Message Id="DuplicateComponentGuids" Number="369">
2855 <Instance>
2856 Component/@Id='{0}' has a @Guid value '{1}' that duplicates another component in this package. It is recommended to give each component its own unique GUID.
2857 <Parameter Type="System.String" Name="componentId" />
2858 <Parameter Type="System.String" Name="guid" />
2859 </Instance>
2860 </Message>
2861 <Message Id="DuplicateProviderDependencyKey" Number="370" SourceLineNumbers="no">
2862 <Instance>
2863 The provider dependency key '{0}' was already imported from the package with Id '{1}'. Please remove the Provides element with the key '{0}' from the package authoring.
2864 <Parameter Type="System.String" Name="providerKey" />
2865 <Parameter Type="System.String" Name="packageId" />
2866 </Instance>
2867 </Message>
2868 <Message Id="MissingDependencyVersion" Number="371" SourceLineNumbers="no">
2869 <Instance>
2870 The provider dependency version was not authored for the package with Id '{0}'. Please author the Provides/@Version attribute for this package.
2871 <Parameter Type="System.String" Name="packageId" />
2872 </Instance>
2873 </Message>
2874
2875 <Message Id="UnexpectedElementWithAttribute" Number="372">
2876 <Instance>
2877 The {0} element cannot have a child element '{1}' when attribute '{2}' is set.
2878 <Parameter Type="System.String" Name="elementName" />
2879 <Parameter Type="System.String" Name="childElementName" />
2880 <Parameter Type="System.String" Name="attribute" />
2881 </Instance>
2882 </Message>
2883 <Message Id="ExpectedAttributeWithElement" Number="373">
2884 <Instance>
2885 The {0} element must have attribute '{1}' when child element '{2}' is present.
2886 <Parameter Type="System.String" Name="elementName" />
2887 <Parameter Type="System.String" Name="attribute" />
2888 <Parameter Type="System.String" Name="childElementName" />
2889 </Instance>
2890 </Message>
2891 <Message Id="DuplicatedUiLocalization" Number="374">
2892 <Instance>
2893 The localization for control {0} in dialog {1} is duplicated. Only one localization per control is allowed.
2894 <Parameter Type="System.String" Name="controlName" />
2895 <Parameter Type="System.String" Name="dialogName" />
2896 </Instance>
2897 <Instance>
2898 The localization for dialog {0} is duplicated. Only one localization per dialog is allowed.
2899 <Parameter Type="System.String" Name="dialogName" />
2900 </Instance>
2901 </Message>
2902 <Message Id="MaximumCabinetSizeForLargeFileSplittingTooLarge" Number="375">
2903 <Instance>
2904 '{0}' is too large. Reduce the size of maximum cabinet size for large file splitting. The maximum permitted value is '{1}' MB.
2905 <Parameter Type="System.Int32" Name="maximumCabinetSizeForLargeFileSplitting" />
2906 <Parameter Type="System.Int32" Name="maxValueOfMaxCabSizeForLargeFileSplitting" />
2907 </Instance>
2908 </Message>
2909 <Message Id="SplitCabinetCopyRegistrationFailed" Number="376" SourceLineNumbers="no">
2910 <Instance>
2911 Failed to register the copy command for cabinet '{0}' formed by splitting cabinet '{1}'.
2912 <Parameter Type="System.String" Name="newCabName" />
2913 <Parameter Type="System.String" Name="firstCabName" />
2914 </Instance>
2915 </Message>
2916 <Message Id="SplitCabinetNameCollision" Number="377" SourceLineNumbers="no">
2917 <Instance>
2918 The cabinet name '{0}' collides with the new cabinet formed by splitting cabinet '{1}', consider renaming cabinet '{0}'.
2919 <Parameter Type="System.String" Name="newCabName" />
2920 <Parameter Type="System.String" Name="firstCabName" />
2921 </Instance>
2922 </Message>
2923 <Message Id="SplitCabinetInsertionFailed" Number="378" SourceLineNumbers="no">
2924 <Instance>
2925 Could not find the last split cabinet '{2}' in the Media Table. So failed to add new cabinet '{0}' formed by splitting cabinet '{1}' to the installer package.
2926 <Parameter Type="System.String" Name="newCabName" />
2927 <Parameter Type="System.String" Name="firstCabName" />
2928 <Parameter Type="System.String" Name="lastCabinetOfThisSequence" />
2929 </Instance>
2930 </Message>
2931 <Message Id="InvalidPreprocessorFunctionAutoVersion" Number="379">
2932 <Instance>
2933 Invalid AutoVersion template specified.
2934 </Instance>
2935 </Message>
2936 <Message Id="InvalidModuleOrBundleVersion" Number="380">
2937 <Instance>
2938 Invalid {0}/@Version '{1}'. {0} version has a max value of "65535.65535.65535.65535" and must be all numeric.
2939 <Parameter Type="System.String" Name="moduleOrBundle" />
2940 <Parameter Type="System.String" Name="version" />
2941 </Instance>
2942 </Message>
2943 <Message Id="UnsupportedPlatformForElement" Number="381">
2944 <Instance>
2945 The element {1} does not support platform '{0}'. Consider removing the element or using the preprocessor to conditionally include the element based on the platform.
2946 <Parameter Type="System.String" Name="platform" />
2947 <Parameter Type="System.String" Name="elementName" />
2948 </Instance>
2949 </Message>
2950 <Message Id="MissingMedia" Number="382">
2951 <Instance>
2952 There is no media defined for disk id '{0}'. You must author either &lt;Media Id='{0}' ...&gt; or &lt;MediaTemplate ...&gt;.
2953 <Parameter Type="System.Int32" Name="diskId" />
2954 </Instance>
2955 </Message>
2956 <Message Id="RemotePayloadUnsupported" Number="383">
2957 <Instance>
2958 The RemotePayload element can only be used for ExePackage and MsuPackage payloads.
2959 </Instance>
2960 </Message>
2961 <Message Id="IllegalYesNoAlwaysValue" Number="384">
2962 <Instance>
2963 The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/always value. The only legal values are 'always', 'no' or 'yes'.
2964 <Parameter Type="System.String" Name="elementName" />
2965 <Parameter Type="System.String" Name="attributeName" />
2966 <Parameter Type="System.String" Name="value" />
2967 </Instance>
2968 </Message>
2969 <Message Id="TooDeeplyIncluded" Number="385">
2970 <Instance>
2971 Include files cannot be nested more deeply than {0} times. Make sure included files don't accidentally include themselves.
2972 <Parameter Type="System.Int32" Name="depth" />
2973 </Instance>
2974 </Message>
2975 <Message Id="TooManyColumnsInRealTable" Number="386" SourceLineNumbers="no">
2976 <Instance>
2977 The table '{0}' contains {1} columns which is not supported by Windows Installer. Windows Installer supports a maximum of {2} columns.
2978 <Parameter Type="System.String" Name="tableName" />
2979 <Parameter Type="System.Int32" Name="columnCount" />
2980 <Parameter Type="System.Int32" Name="supportedColumnCount" />
2981 </Instance>
2982 </Message>
2983 <Message Id="InlineDirectorySyntaxRequiresPath" Number="387">
2984 <Instance>
2985 The {0}/@{1} attribute's value '{2}' only specifies a directory reference. The inline directory syntax requires that at least one directory be specified in addition to the value. For example, use '{3}:\foo\' to add a 'foo' directory.
2986 <Parameter Type="System.String" Name="elementName" />
2987 <Parameter Type="System.String" Name="attributeName" />
2988 <Parameter Type="System.String" Name="value" />
2989 <Parameter Type="System.String" Name="identifier" />
2990 </Instance>
2991 </Message>
2992 <Message Id="InsecureBundleFilename" Number="388" SourceLineNumbers="no">
2993 <Instance>
2994 The file name '{0}' creates an insecure bundle. Windows will load unnecessary compatibility shims into a bundle with that file name. These compatibility shims can be DLL hijacked allowing attackers to compromise your customers' computer. Choose a different bundle file name.
2995 <Parameter Type="System.String" Name="filename" />
2996 </Instance>
2997 </Message>
2998 <Message Id="PayloadMustBeRelativeToCache" Number="389">
2999 <Instance>
3000 The {0}/@{1} attribute's value, '{2}', is not a legal path name: Payload names must be relative to their cache directory and cannot contain '..'.
3001 <Parameter Type="System.String" Name="elementName" />
3002 <Parameter Type="System.String" Name="attributeName" />
3003 <Parameter Type="System.String" Name="attributeValue" />
3004 </Instance>
3005 </Message>
3006 <Message Id="MsiTransactionX86BeforeX64" Number="390">
3007 <Instance>
3008 MSI transactions must install all x64 packages before any x86 package.
3009 </Instance>
3010 </Message>
3011 </Class>
3012
3013 <Class Name="WixWarnings" ContainerName="WixWarningEventArgs" BaseContainerName="MessageEventArgs" Level="Warning">
3014 <Message Id="IdentifierCannotBeModularized" Number="1000">
3015 <Instance>
3016 The {0}/@{1} attribute's value, '{2}', is {3} characters long. It will be too long if modularized. The identifier shouldn't be longer than {4} characters long to allow for modularization (appending a guid for merge modules).
3017 <Parameter Type="System.String" Name="elementName" />
3018 <Parameter Type="System.String" Name="attributeName" />
3019 <Parameter Type="System.String" Name="identifier" />
3020 <Parameter Type="System.Int32" Name="length" />
3021 <Parameter Type="System.Int32" Name="maximumLength" />
3022 </Instance>
3023 </Message>
3024 <Message Id="EmptyAttributeValue" Number="1001">
3025 <Instance>
3026 The {0}/@{1} attribute's value cannot be an empty string. If you want the value to be null or empty, simply remove the entire attribute.
3027 <Parameter Type="System.String" Name="elementName" />
3028 <Parameter Type="System.String" Name="attributeName" />
3029 </Instance>
3030 </Message>
3031 <Message Id="UnableToFindFileFromCabOrImage" Number="1002">
3032 <Instance>
3033 Unable to find existing file {0} to place in src location {1}. Will likely cause a linker break.
3034 <Parameter Type="System.String" Name="existingFileSpec" />
3035 <Parameter Type="System.String" Name="srcFileSpec" />
3036 </Instance>
3037 </Message>
3038 <Message Id="CopyFileFileIdUseless" Number="1003">
3039 <Instance>Since the CopyFile/@FileId attribute was specified but none of the following attributes (DestinationName, DestinationDirectory, DestinationProperty) were specified, this authoring will not do anything.</Instance>
3040 </Message>
3041 <Message Id="NestedInstall" Number="1004">
3042 <Instance>
3043 The {0}.{1} column's value, '{2}', indicates a nested install. Nested installations are not supported by the WiX team. This action will be left out of the decompiled output.
3044 <Parameter Type="System.String" Name="tableName" />
3045 <Parameter Type="System.String" Name="columnName" />
3046 <Parameter Type="System.Object" Name="value" />
3047 </Instance>
3048 </Message>
3049 <Message Id="OrphanedProgId" Number="1005">
3050 <Instance>
3051 ProgId '{0}' is orphaned. It has no associated component, so it will never install. Every ProgId should have either a parent Class element or child Extension element (at any distance).
3052 <Parameter Type="System.String" Name="progId" />
3053 </Instance>
3054 </Message>
3055 <Message Id="PropertyUseless" Number="1006">
3056 <Instance>
3057 Property '{0}' does not contain a Value attribute and is not marked as Admin, Secure, or Hidden. The Property element is being ignored.
3058 <Parameter Type="System.String" Name="id" />
3059 </Instance>
3060 </Message>
3061 <Message Id="RemoveFileNameRequired" Number="1007">
3062 <Instance>The RemoveFile/@Name attribute will soon become required. In order to match the old functionality of not specifying this attribute, please use the new RemoveFolder element instead.</Instance>
3063 </Message>
3064 <Message Id="SuppressAction" Number="1008">
3065 <Instance>
3066 The action '{0}' in the {1} table is being suppressed.
3067 <Parameter Type="System.String" Name="action" />
3068 <Parameter Type="System.String" Name="sequenceName" />
3069 </Instance>
3070 </Message>
3071 <Message Id="SuppressMergedAction" Number="1009" SourceLineNumbers="no">
3072 <Instance>
3073 The merged action '{0}' in the {1} table is being suppressed.
3074 <Parameter Type="System.String" Name="action" />
3075 <Parameter Type="System.String" Name="sequenceName" />
3076 </Instance>
3077 </Message>
3078 <Message Id="TargetDirCorrectedDefaultDir" Number="1010" SourceLineNumbers="no">
3079 <Instance>
3080 The Directory with Id 'TARGETDIR' must have the value 'SourceDir' in its 'DefaultDir' column. This has been automatically corrected for you in the decompiled output.
3081 </Instance>
3082 </Message>
3083 <Message Id="AccessDeniedForDeletion" Number="1011">
3084 <Instance>
3085 Access denied; cannot delete '{0}'.
3086 <Parameter Type="System.String" Name="tempFilesBasePath" />
3087 </Instance>
3088 </Message>
3089 <Message Id="DirectoryInUse" Number="1012">
3090 <Instance>
3091 The directory '{0}' is in use and cannot be deleted.
3092 <Parameter Type="System.String" Name="filePath" />
3093 </Instance>
3094 </Message>
3095 <Message Id="AccessDeniedForSettingAttributes" Number="1013">
3096 <Instance>
3097 Access denied; cannot set attributes on '{0}'.
3098 <Parameter Type="System.String" Name="filePath" />
3099 </Instance>
3100 </Message>
3101 <Message Id="UnknownAction" Number="1024">
3102 <Instance>
3103 The {0} table contains an action '{1}' which is not a known custom action, dialog, or standard action. This action will be left out of the decompiled output.
3104 <Parameter Type="System.String" Name="sequenceTableName" />
3105 <Parameter Type="System.String" Name="actionName" />
3106 </Instance>
3107 </Message>
3108 <Message Id="IdentifierTooLong" Number="1026">
3109 <Instance>
3110 The {0}/@{1} attribute's value, '{2}', is too long for an identifier. Standard identifiers are 72 characters long or less.
3111 <Parameter Type="System.String" Name="elementName" />
3112 <Parameter Type="System.String" Name="attributeName" />
3113 <Parameter Type="System.String" Name="value" />
3114 </Instance>
3115 </Message>
3116 <Message Id="UnknownPermission" Number="1030">
3117 <Instance>
3118 The {0} table contains a row with primary key '{1}' which has an unknown permission at bit {2}.
3119 <Parameter Type="System.String" Name="tableName" />
3120 <Parameter Type="System.String" Name="primaryKey" />
3121 <Parameter Type="System.Int32" Name="bitPosition" />
3122 </Instance>
3123 </Message>
3124 <Message Id="DirectoryRedundantNames" Number="1031">
3125 <Instance>
3126 The {0} element's {1} and {2} values are both '{3}'. This is redundant; the {2} attribute should be removed.
3127 <Parameter Type="System.String" Name="elementName" />
3128 <Parameter Type="System.String" Name="shortNameAttributeName" />
3129 <Parameter Type="System.String" Name="longNameAttributeName" />
3130 <Parameter Type="System.String" Name="attributeValue" />
3131 </Instance>
3132 <Instance>
3133 The {0} element's source and destination names are identical. This is redundant; the {1} and {2} attributes should be removed if present.
3134 <Parameter Type="System.String" Name="elementName" />
3135 <Parameter Type="System.String" Name="sourceNameAttributeName" />
3136 <Parameter Type="System.String" Name="longSourceAttributeName" />
3137 </Instance>
3138 </Message>
3139 <Message Id="UnableToResetAcls" Number="1032" SourceLineNumbers="no">
3140 <Instance>Unable to reset acls on destination files.</Instance>
3141 </Message>
3142 <Message Id="MediaExternalCabinetFilenameIllegal" Number="1033">
3143 <Instance>
3144 The {0}/@{1} attribute's value, '{2}', is not a valid external cabinet name. Legal cabinet names should follow 8.3 format: they should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the following may be used: \ ? | &gt; &lt; : / * " + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).
3145 <Parameter Type="System.String" Name="elementName" />
3146 <Parameter Type="System.String" Name="attributeName" />
3147 <Parameter Type="System.String" Name="value" />
3148 </Instance>
3149 </Message>
3150 <Message Id="DeprecatedPreProcVariable" Number="1034">
3151 <Instance>
3152 The built-in preprocessor variable '{0}' is deprecated. Please correct your authoring to use the new '{1}' preprocessor variable instead.
3153 <Parameter Type="System.String" Name="oldName" />
3154 <Parameter Type="System.String" Name="newName" />
3155 </Instance>
3156 </Message>
3157 <Message Id="FileSearchFileNameIssue" Number="1043">
3158 <Instance>
3159 The {0} element's {1} and {2} attributes were found. Due to a bug with the Windows Installer, only the Name or LongName attribute should be used. Use the Name attribute for 8.3 compliant file names and the LongName attribute for longer ones. When using only the LongName attribute, ICE03 should be ignored for the Signature table's FileName column.
3160 <Parameter Type="System.String" Name="elementName" />
3161 <Parameter Type="System.String" Name="attributeName1" />
3162 <Parameter Type="System.String" Name="attributeName2" />
3163 </Instance>
3164 </Message>
3165 <Message Id="AmbiguousFileOrDirectoryName" Number="1044">
3166 <Instance>
3167 The {0}/@{1} attribute's value '{2}' is an ambiguous short name because it ends with a '~' character followed by a number. Under some circumstances, this name could resolve to more than one file or directory name and lead to unpredictable results (for example 'MICROS~1' may correspond to 'Microsoft Shared' or 'Microsoft Foo' or literally 'Micros~1').
3168 <Parameter Type="System.String" Name="elementName" />
3169 <Parameter Type="System.String" Name="attributeName" />
3170 <Parameter Type="System.String" Name="value" />
3171 </Instance>
3172 </Message>
3173 <Message Id="PossiblyIncorrectTypelibVersion" Number="1048">
3174 <Instance>
3175 The Typelib table entry with Id '{0}' could have an incorrect version of '256.0'. InstallShield has a bug relating to the Typelib Version column: it will incorrectly set the value '65536' in to represent version '1.0'. However, this number actually corresponds to version '256.0'. This bug will not affect the typelib version that is registered during installation, however, it will prevent the Windows Installer from correctly identifying whether a typelib is already installed and lead to unnecessary reinstallations of the typelib.
3176 <Parameter Type="System.String" Name="id" />
3177 </Instance>
3178 </Message>
3179 <Message Id="ImplicitComponentPrimaryFeature" Number="1049" SourceLineNumbers="no">
3180 <Instance>
3181 The component '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the ComponentRef/@Primary, ComponentGroupRef/@Primary, or FeatureGroupRef/@Primary locations for this component.
3182 <Parameter Type="System.String" Name="componentId" />
3183 </Instance>
3184 </Message>
3185 <Message Id="ActionSequenceCollision" Number="1050">
3186 <Instance>
3187 The {0} table contains actions '{1}' and '{2}' which both have the same sequence number {3}. Please change the sequence number for one of these actions to avoid an ICE warning.
3188 <Parameter Type="System.String" Name="sequenceTableName" />
3189 <Parameter Type="System.String" Name="actionName1" />
3190 <Parameter Type="System.String" Name="actionName2" />
3191 <Parameter Type="System.Int32" Name="sequenceNumber" />
3192 </Instance>
3193 </Message>
3194 <Message Id="ActionSequenceCollision2" Number="1051">
3195 <Instance>The location of the action related to previous warning.</Instance>
3196 </Message>
3197 <Message Id="SuppressAction2" Number="1052">
3198 <Instance>The location of the suppressed action related to previous warning.</Instance>
3199 </Message>
3200 <Message Id="UnexpectedTableInProduct" Number="1053">
3201 <Instance>
3202 An unexpected row in the '{0}' table was found in this product. Products should not contain the '{0}' table.
3203 <Parameter Type="System.String" Name="tableName" />
3204 </Instance>
3205 </Message>
3206 <Message Id="DeprecatedAttribute" Number="1054">
3207 <Instance>
3208 The {0}/@{1} attribute has been deprecated.
3209 <Parameter Type="System.String" Name="elementName" />
3210 <Parameter Type="System.String" Name="attributeName" />
3211 </Instance>
3212 <Instance>
3213 The {0}/@{1} attribute has been deprecated. Please use the {2} attribute instead.
3214 <Parameter Type="System.String" Name="elementName" />
3215 <Parameter Type="System.String" Name="attributeName" />
3216 <Parameter Type="System.String" Name="newAttributeName" />
3217 </Instance>
3218 <Instance>
3219 The {0}/@{1} attribute has been deprecated. Please use the {2} or {3} attribute instead.
3220 <Parameter Type="System.String" Name="elementName" />
3221 <Parameter Type="System.String" Name="attributeName" />
3222 <Parameter Type="System.String" Name="newAttributeName1" />
3223 <Parameter Type="System.String" Name="newAttributeName2" />
3224 </Instance>
3225 </Message>
3226 <Message Id="MergeRescheduledAction" Number="1055">
3227 <Instance>
3228 The {0} table contains an action '{1}' which cannot be merged from the merge module '{2}'. This action is likely colliding with an action in the database that is being created. The colliding action may have been authored in the database or merged in from another merge module. If this is a standard action, it is likely colliding due to a difference in the condition for the action in the database and merge module. If this is a custom action, it should only be declared in the database or one merge module.
3229 <Parameter Type="System.String" Name="tableName" />
3230 <Parameter Type="System.String" Name="actionName" />
3231 <Parameter Type="System.String" Name="mergeModuleFile" />
3232 </Instance>
3233 </Message>
3234 <Message Id="MergeTableFailed" Number="1056">
3235 <Instance>
3236 The {0} table contains a row with primary key(s) '{1}' which cannot be merged from the merge module '{2}'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.
3237 <Parameter Type="System.String" Name="tableName" />
3238 <Parameter Type="System.String" Name="primaryKeys" />
3239 <Parameter Type="System.String" Name="mergeModuleFile" />
3240 </Instance>
3241 </Message>
3242 <Message Id="DecompiledStandardActionRelativelyScheduledInModule" Number="1057">
3243 <Instance>
3244 The {0} table contains a standard action '{1}' that does not have a sequence number specified. A value in the Sequence column is required for standard actions in a merge module. Remove the action from the decompiled authoring to have WiX automatically sequence it.
3245 <Parameter Type="System.String" Name="sequenceTableName" />
3246 <Parameter Type="System.String" Name="actionName" />
3247 </Instance>
3248 </Message>
3249 <Message Id="IllegalActionInSequence" Number="1058">
3250 <Instance>
3251 The {0} table contains an action '{1}' which is not allowed in this table. If this is a standard action then it is not valid for this table, if it is a custom action or dialog then this table does not accept actions of that type. This action will be left out of the decompiled output.
3252 <Parameter Type="System.String" Name="sequenceTableName" />
3253 <Parameter Type="System.String" Name="actionName" />
3254 </Instance>
3255 </Message>
3256 <Message Id="ExpectedForeignRow" Number="1059">
3257 <Instance>
3258 The {0} table contains a row with primary key(s) '{1}' whose {2} column contains a value, '{3}', which specifies a foreign key relationship with the {4} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.
3259 <Parameter Type="System.String" Name="tableName" />
3260 <Parameter Type="System.String" Name="primaryKey" />
3261 <Parameter Type="System.String" Name="columnName" />
3262 <Parameter Type="System.String" Name="columnValue" />
3263 <Parameter Type="System.String" Name="foreignTableName" />
3264 </Instance>
3265 <Instance>
3266 The {0} table contains a row with primary key(s) '{1}' whose {2} and {4} columns contain the values, '{3}' and '{5}', which specify a foreign key relationship with the {6} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.
3267 <Parameter Type="System.String" Name="tableName" />
3268 <Parameter Type="System.String" Name="primaryKey" />
3269 <Parameter Type="System.String" Name="columnName1" />
3270 <Parameter Type="System.String" Name="columnValue1" />
3271 <Parameter Type="System.String" Name="columnName2" />
3272 <Parameter Type="System.String" Name="columnValue2" />
3273 <Parameter Type="System.String" Name="foreignTableName" />
3274 </Instance>
3275 </Message>
3276 <Message Id="DecompilingAsCustomTable" Number="1060">
3277 <Instance>
3278 The {0} table is being decompiled as a custom table.
3279 <Parameter Type="System.String" Name="tableName" />
3280 </Instance>
3281 </Message>
3282 <Message Id="IllegalPatchCreationTable" Number="1061">
3283 <Instance>
3284 The {0} table is not legal in a patch creation file. The information in this table will be left out of the decompiled output.
3285 <Parameter Type="System.String" Name="tableName" />
3286 </Instance>
3287 </Message>
3288 <Message Id="SkippingMergeModuleTable" Number="1062">
3289 <Instance>
3290 The {0} table can only be represented in WiX for merge modules. The information in this table will be left out of the decompiled output.
3291 <Parameter Type="System.String" Name="tableName" />
3292 </Instance>
3293 </Message>
3294 <Message Id="SkippingPatchCreationTable" Number="1063">
3295 <Instance>
3296 The {0} table can only be represented in WiX for patch creation files. The information in this table will be left out of the decompiled output.
3297 <Parameter Type="System.String" Name="tableName" />
3298 </Instance>
3299 </Message>
3300 <Message Id="UnrepresentableColumnValue" Number="1064">
3301 <Instance>
3302 The {0}.{1} column's value, '{2}', cannot currently be represented in the WiX schema.
3303 <Parameter Type="System.String" Name="tableName" />
3304 <Parameter Type="System.String" Name="columnName" />
3305 <Parameter Type="System.Object" Name="value" />
3306 </Instance>
3307 </Message>
3308 <Message Id="DeprecatedTable" Number="1065" SourceLineNumbers="no">
3309 <Instance>
3310 The {0} table is not supported by the WiX toolset because it has been deprecated by the Windows Installer team. Any information in this table will be left out of the decompiled output.
3311 <Parameter Type="System.String" Name="tableName" />
3312 </Instance>
3313 </Message>
3314 <Message Id="PatchTable" Number="1066">
3315 <Instance>
3316 The {0} table is added to the install package by a transform from a patch package (.msp) and not authored directly into an install package (.msi). The information in this table will be left out of the decompiled output.
3317 <Parameter Type="System.String" Name="tableName" />
3318 </Instance>
3319 </Message>
3320 <Message Id="IllegalColumnValue" Number="1067">
3321 <Instance>
3322 The {0}.{1} column's value, '{2}', is not a recognized legal value. This information will be left out of the decompiled output.
3323 <Parameter Type="System.String" Name="tableName" />
3324 <Parameter Type="System.String" Name="columnName" />
3325 <Parameter Type="System.Object" Name="value" />
3326 </Instance>
3327 </Message>
3328 <Message Id="DeprecatedLongNameAttribute" Number="1069">
3329 <Instance>
3330 The {0}/@{1} attribute has been deprecated. Since WiX now has the ability to generate short file/directory names, the desired name should be specified in the {2} attribute instead. If the name specified in the {2} attribute is a short name, then WiX will not generate a short name. If the name specified in the {2} attribute is a long name and you want to manually specify the short name, please set the short name value in the {3} attribute.
3331 <Parameter Type="System.String" Name="elementName" />
3332 <Parameter Type="System.String" Name="longNameAttributeName" />
3333 <Parameter Type="System.String" Name="nameAttributeName" />
3334 <Parameter Type="System.String" Name="shortNameAttributeName" />
3335 </Instance>
3336 </Message>
3337 <Message Id="GeneratedShortFileNameConflict" Number="1070">
3338 <Instance>
3339 The short file name '{0}' was generated for multiple files that may be installed to the same directory. This could be due to conflicting long file names specified by the File/@Name attribute. If that is the case, please resolve the conflict in those attributes. Otherwise, please manually set the File/@ShortName attribute on the conflicting row to fix the collision. If one of the colliding files was added via a patch, that short file name should be specified manually to avoid disturbing the original short file name.
3340 <Parameter Type="System.String" Name="shortFileName" />
3341 </Instance>
3342 </Message>
3343 <Message Id="GeneratedShortFileNameConflict2" Number="1071">
3344 <Instance>
3345 The location of a conflicting generated short file name related to the previous warning.
3346 </Instance>
3347 </Message>
3348 <Message Id="DangerousTableInMergeModule" Number="1072">
3349 <Instance>
3350 Merge modules should not contain the '{0}' table because all merge conflicts cannot avoided. However, this warning can be suppressed if all of the consumers of the Merge Module agree to not duplicate identifiers in the '{0}' table.
3351 <Parameter Type="System.String" Name="tableName" />
3352 </Instance>
3353 </Message>
3354 <Message Id="DeprecatedLocalizationVariablePrefix" Number="1073">
3355 <Instance>
3356 The localization variable $(loc.{0}) uses a deprecated prefix '$'. Please use the '!' prefix instead. Since the prefix '$' is also used by the preprocessor, it has been deprecated to avoid namespace collisions.
3357 <Parameter Type="System.String" Name="variableId" />
3358 </Instance>
3359 </Message>
3360 <Message Id="PlaceholderValue" Number="1074">
3361 <Instance>
3362 The {0}/@{1} attribute's value, '{2}', is a placeholder value used in example files. Please replace this placeholder with the appropriate value.
3363 <Parameter Type="System.String" Name="elementName" />
3364 <Parameter Type="System.String" Name="attributeName" />
3365 <Parameter Type="System.String" Name="value" />
3366 </Instance>
3367 </Message>
3368 <Message Id="MissingUpgradeCode" Number="1075">
3369 <Instance>The Product/@UpgradeCode attribute was not found; it is strongly recommended to ensure that this product can be upgraded.</Instance>
3370 </Message>
3371 <Message Id="ValidationWarning" Number="1076">
3372 <Instance>
3373 {0}: {1}
3374 <Parameter Type="System.String" Name="ice" />
3375 <Parameter Type="System.String" Name="message" />
3376 </Instance>
3377 </Message>
3378 <Message Id="PropertyValueContainsPropertyReference" Number="1077">
3379 <Instance>
3380 The '{0}' Property contains '[{1}]' in its value which is an illegal reference to another property. If this value is a string literal, not a property reference, please ignore this warning. To set a property with the value of another property, use a CustomAction with Property and Value attributes.
3381 <Parameter Type="System.String" Name="propertyId" />
3382 <Parameter Type="System.String" Name="otherProperty" />
3383 </Instance>
3384 </Message>
3385 <Message Id="DeprecatedUpgradeProperty" Number="1078">
3386 <Instance>Specifying a Property element as a child of an Upgrade element has been deprecated. Please specify this Property element as a child of a different element such as Product or Fragment.</Instance>
3387 </Message>
3388 <Message Id="EmptyCabinet" Number="1079">
3389 <Instance>
3390 The cabinet '{0}' does not contain any files. If this installation contains no files, this warning can likely be safely ignored. Otherwise, please add files to the cabinet or remove it.
3391 <Parameter Type="System.String" Name="cabinetName" />
3392 </Instance>
3393 <Instance>
3394 The cabinet '{0}' does not contain any files. If this patch contains no files, this warning can likely be safely ignored. Otherwise, try passing -p to torch.exe when first building the transforms, or add a ComponentRef to your PatchFamily authoring to pull changed files into the cabinet.
3395 <Parameter Type="System.String" Name="cabinetName" />
3396 <Parameter Type="System.Boolean" Name="isPatch" />
3397 </Instance>
3398 </Message>
3399 <Message Id="DeprecatedRegistryElement" Number="1080">
3400 <Instance>The Registry element has been deprecated. Please use one of the new elements which replaces its functionality: RegistryKey for creating registry keys, RegistryValue for writing registry values, RemoveRegistryKey for removing registry keys, and RemoveRegistryValue for removing registry values.</Instance>
3401 </Message>
3402 <Message Id="IllegalRegistryKeyPath" Number="1081">
3403 <Instance>
3404 Component '{0}' specifies an illegal registry keypath of '{1}'. Since this entry actually represents a registry key, not a registry value, it cannot be the keypath.
3405 <Parameter Type="System.String" Name="componentName" />
3406 <Parameter Type="System.String" Name="registryId" />
3407 </Instance>
3408 </Message>
3409 <Message Id="DeprecatedPatchSequenceTargetAttribute" Number="1082">
3410 <Instance>
3411 The {0}/@{1} attribute has been deprecated in favor of the more strongly-typed ProductCode or TargetImage attributes. Please use the ProductCode attribute for indicating the ProductCode of a patch family directly, or the TargetImage attribute to specify the TargetImage which in turn will retrieve the ProductCode of the patch family.
3412 <Parameter Type="System.String" Name="elementName" />
3413 <Parameter Type="System.String" Name="attributeName" />
3414 </Instance>
3415 </Message>
3416 <Message Id="ProductIdAuthored" Number="1083">
3417 <Instance>
3418 The 'ProductID' property should not be directly authored because it will prevent the ValidateProductID standard action from performing any validation during the installation. This property will be set by the ValidateProductID standard action or control event.
3419 </Instance>
3420 </Message>
3421 <Message Id="ImplicitMergeModulePrimaryFeature" Number="1084" SourceLineNumbers="no">
3422 <Instance>
3423 The merge module '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the MergeRef/@Primary or FeatureGroupRef/@Primary locations for this component.
3424 <Parameter Type="System.String" Name="componentId" />
3425 </Instance>
3426 </Message>
3427 <Message Id="DeprecatedIgnoreModularizationElement" Number="1085">
3428 <Instance>
3429 The IgnoreModularization element has been deprecated. Use the Binary/@SuppressModularization, CustomAction/@SuppressModularization, or Property/@SuppressModularization attribute instead.
3430 </Instance>
3431 </Message>
3432 <Message Id="PropertyModularizationSuppressed" Number="1086">
3433 <Instance>
3434 The Property/@SuppressModularization attribute has been set to 'yes'. Using this functionality is strongly discouraged; it should only be necessary as a workaround of last resort in rare scenarios.
3435 </Instance>
3436 </Message>
3437 <Message Id="DeprecatedPackageCompressedAttribute" Number="1087">
3438 <Instance>
3439 The Package/@Compressed attribute is deprecated under the Module element because merge modules must always be compressed.
3440 </Instance>
3441 </Message>
3442 <Message Id="DeprecatedModuleGuidAttribute" Number="1088">
3443 <Instance>
3444 The Module/@Guid attribute is deprecated merge modules use their package code as the modularization guid. Use the Package/@Id attribute instead.
3445 </Instance>
3446 </Message>
3447 <Message Id="DeprecatedQuestionMarksGuid" Number="1090">
3448 <Instance>
3449 The {0}/@{1} attribute's value '????????-????-????-????-????????????' has been deprecated. Use '*' instead.
3450 <Parameter Type="System.String" Name="elementName" />
3451 <Parameter Type="System.String" Name="attributeName" />
3452 </Instance>
3453 </Message>
3454 <Message Id="PackageCodeSet" Number="1091">
3455 <Instance>
3456 The Package/@Id attribute has been set. Setting this attribute will allow nonidentical .msi files to have the same package code. This may be a problem because the package code is the primary identifier used by the installer to search for and validate the correct package for a given installation. If a package is changed without changing the package code, the installer may not use the newer package if both are still accessible to the installer. Please remove the Id attribute in order to automatically generate a new package code for each new .msi file.
3457 </Instance>
3458 </Message>
3459 <Message Id="InvalidModuleOrBundleVersion" Number="1093">
3460 <Instance>
3461 Invalid {0}/@Version '{1}'. {0} version has a max value of "65535.65535.65535.65535" and must be all numeric.
3462 <Parameter Type="System.String" Name="moduleOrBundle" />
3463 <Parameter Type="System.String" Name="version" />
3464 </Instance>
3465 </Message>
3466 <Message Id="InvalidRemoveFile" Number="1095">
3467 <Instance>
3468 File '{0}' was removed from component '{1}'. Removing a file from a component will not result in the file being removed by a patch. You should author a RemoveFile element in your component to remove the file from the installation if you want the file to be removed.
3469 <Parameter Type="System.String" Name="file" />
3470 <Parameter Type="System.String" Name="component" />
3471 </Instance>
3472 </Message>
3473 <Message Id="PreprocessorWarning" Number="1096">
3474 <Instance>
3475 {0}
3476 <Parameter Type="System.String" Name="message" />
3477 </Instance>
3478 </Message>
3479 <Message Id="UpdateOfNonKeyPathFile" Number="1097" SourceLineNumbers="no">
3480 <Instance>
3481 File '{0}' in Component '{1}' was changed, but the KeyPath file '{2}' was not. This file will not be patched on the target system if the REINSTALLMODE does not contain 'A'. The KeyPath file should also be changed and included in your patch.
3482 <Parameter Type="System.String" Name="nonKeyPathFileId" />
3483 <Parameter Type="System.String" Name="componentId" />
3484 <Parameter Type="System.String" Name="keyPathFileId" />
3485 </Instance>
3486 </Message>
3487 <Message Id="UnsupportedCommandLineArgument" Number="1098" SourceLineNumbers="no">
3488 <Instance>
3489 '{0}' is not a valid command line argument.
3490 <Parameter Type="System.String" Name="arg" />
3491 </Instance>
3492 </Message>
3493 <Message Id="MajorUpgradePatchNotRecommended" Number="1099" SourceLineNumbers="no">
3494 <Instance>
3495 Changing the ProductCode in a patch is not recommended because the patch cannot be uninstalled nor can it be sequenced along with other patches for the target product. See http://msdn2.microsoft.com/library/aa367571.aspx for more information.
3496 </Instance>
3497 </Message>
3498 <Message Id="RetainRangeMismatch" Number="1100">
3499 <Instance>
3500 Mismatch in RetainRangeCounts for the file '{0}' - ignoring the retain ranges.
3501 <Parameter Type="System.String" Name="fileId"/>
3502 </Instance>
3503 </Message>
3504 <Message Id="DefaultLanguageUsedForVersionedFile" Number="1101">
3505 <Instance>
3506 The DefaultLanguage '{0}' was used for file '{1}' which has no language. Specifying a language that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Either specify a value for DefaultLanguage or put the language in the version information resource to eliminate this warning.
3507 <Parameter Type="System.String" Name="language"/>
3508 <Parameter Type="System.String" Name="fileId"/>
3509 </Instance>
3510 </Message>
3511 <Message Id="DefaultLanguageUsedForUnversionedFile" Number="1102">
3512 <Instance>
3513 The DefaultLanguage '{0}' was used for file '{1}' which has no language or version. For unversioned files, specifying a value for DefaultLanguage is not neccessary and it will not be used when determining file versions. Remove the DefaultLanguage attribute to eliminate this warning.
3514 <Parameter Type="System.String" Name="language"/>
3515 <Parameter Type="System.String" Name="fileId"/>
3516 </Instance>
3517 </Message>
3518 <Message Id="DefaultVersionUsedForUnversionedFile" Number="1103">
3519 <Instance>
3520 The DefaultVersion '{0}' was used for file '{1}' which has no version. No entry for this file will be placed in the MsiFileHash table. For unversioned files, specifying a version that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Version the resource to eliminate this warning.
3521 <Parameter Type="System.String" Name="version"/>
3522 <Parameter Type="System.String" Name="fileId"/>
3523 </Instance>
3524 </Message>
3525 <Message Id="InvalidHigherInstallerVersionInModule" Number="1104">
3526 <Instance>
3527 Merge module '{0}' has an installer version of {1} which is greater than the product's installer version of {2}. Merging a module with a higher installer version than the product it is being merged into can result in invalid values in the resulting msi. You must set the Package/@InstallerVersion attribute to {1} or greater to merge this merge module into your product.
3528 <Parameter Type="System.String" Name="moduleId" />
3529 <Parameter Type="System.Int32" Name="moduleInstallerVersion" />
3530 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3531 </Instance>
3532 </Message>
3533 <Message Id="ValidationFailedDueToSystemPolicy" Number="1105" SourceLineNumbers="no">
3534 <Instance>
3535 Validation could not run due to system policy. To eliminate this warning, run the process as admin or suppress ICE validation.
3536 </Instance>
3537 </Message>
3538 <Message Id="ColumnsIncompatibleWithInstallerVersion" Number="1106">
3539 <Instance>
3540 Table '{0}' uses columns that require a version of Windows Installer greater than specified in your package ('{1}').
3541 <Parameter Type="System.String" Name="tableName" />
3542 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3543 </Instance>
3544 </Message>
3545 <Message Id="TableIncompatibleWithInstallerVersion" Number="1107">
3546 <Instance>
3547 Using table '{0}' requires a version of Windows Installer greater than specified in your package ('{1}').
3548 <Parameter Type="System.String" Name="tableName" />
3549 <Parameter Type="System.Int32" Name="productInstallerVersion" />
3550 </Instance>
3551 </Message>
3552 <Message Id="DeprecatedCommandLineSwitch" Number="1108" SourceLineNumbers="no">
3553 <Instance>
3554 The command line switch '{0}' is deprecated.
3555 <Parameter Type="System.String" Name="oldSwitch" />
3556 </Instance>
3557 <Instance>
3558 The command line switch '{0}' is deprecated. Please use '{1}' instead.
3559 <Parameter Type="System.String" Name="oldSwitch" />
3560 <Parameter Type="System.String" Name="newSwitch" />
3561 </Instance>
3562 </Message>
3563 <Message Id="UnexpectedEntrySection" Number="1109">
3564 <Instance>
3565 Found mismatched entry point &lt;{0}&gt;. Expected &lt;{1}&gt; for specified output package type {2}.
3566 <Parameter Type="System.String" Name="sectionType" />
3567 <Parameter Type="System.String" Name="expectedType" />
3568 <Parameter Type="System.String" Name="outputExtension" />
3569 </Instance>
3570 </Message>
3571 <Message Id="NewComponentAddedToExistingFeature" Number="1110">
3572 <Instance>
3573 Component '{0}' was added to feature '{1}' in the transform '{2}'. If you cannot guarantee that this feature will always be installed, you should consider adding new components to new top-level features to prevent prompts for source when installing this patch.
3574 <Parameter Type="System.String" Name="component" />
3575 <Parameter Type="System.String" Name="feature" />
3576 <Parameter Type="System.String" Name="transformPath" />
3577 </Instance>
3578 </Message>
3579 <Message Id="DeprecatedAttributeValue" Number="1111">
3580 <Instance>
3581 The value &quot;{0}&quot; for the {1}/@{2} attribute has been deprecated. Please use &quot;{3}&quot; instead.
3582 <Parameter Type="System.String" Name="attributeValue" />
3583 <Parameter Type="System.String" Name="elementName" />
3584 <Parameter Type="System.String" Name="attributeName" />
3585 <Parameter Type="System.String" Name="newAttributeValue" />
3586 </Instance>
3587 </Message>
3588 <Message Id="InsufficientPermissionHarvestTypeLib" Number="1112" SourceLineNumbers="no">
3589 <Instance>
3590 Not enough permissions to harvest type library. On Windows Vista, you must either run Heat elevated, or install Windows Vista SP1 (or higher).
3591 </Instance>
3592 </Message>
3593 <Message Id="UnclearShortcut" Number="1113">
3594 <Instance>
3595 Because it is an advertised shortcut, the target of shortcut '{0}' will be the keypath of component '{2}' rather than parent file '{1}'. To eliminate this warning, you can (1) make the Shortcut element a child of the File element that is the keypath of component '{2}', (2) make file '{1}' the keypath of component '{2}', or (3) remove the @Advertise attribute so the shortcut is a non-advertised shortcut.
3596 <Parameter Type="System.String" Name="shortcutId" />
3597 <Parameter Type="System.String" Name="fileId" />
3598 <Parameter Type="System.String" Name="componentId" />
3599 </Instance>
3600 </Message>
3601 <Message Id="TooManyProgIds" Number="1114">
3602 <Instance>
3603 Class '{0}' tried to use ProgId '{1}' which has already been associated with class '{2}'. This information will be left out of the decompiled output.
3604 <Parameter Type="System.String" Name="clsId" />
3605 <Parameter Type="System.String" Name="progId" />
3606 <Parameter Type="System.String" Name="otherClsId" />
3607 </Instance>
3608 </Message>
3609 <Message Id="BadColumnDataIgnored" Number="1115">
3610 <Instance>
3611 The value '{0}' in table '{1}', column '{2}' is invalid according to the column's validation information. The decompiled output includes a best-effort representation of this value.
3612 <Parameter Type="System.String" Name="value" />
3613 <Parameter Type="System.String" Name="tableName" />
3614 <Parameter Type="System.String" Name="columnName" />
3615 </Instance>
3616 </Message>
3617 <Message Id="NullMsiAssemblyNameValue" Number="1116">
3618 <Instance>
3619 The assembly in component '{0}' has a null or empty {1} assembly name value.
3620 <Parameter Type="System.String" Name="componentName" />
3621 <Parameter Type="System.String" Name="name" />
3622 </Instance>
3623 </Message>
3624 <Message Id="InvalidAttributeCombination" Number="1117">
3625 <Instance>
3626 It is invalid to combine attributes {0} and {1}. The decompiled output will set attribute {2} to {3}.
3627 <Parameter Type="System.String" Name="attrib1" />
3628 <Parameter Type="System.String" Name="attrib2" />
3629 <Parameter Type="System.String" Name="name" />
3630 <Parameter Type="System.String" Name="value" />
3631 </Instance>
3632 </Message>
3633 <Message Id="VariableDeclarationCollision" Number="1118">
3634 <Instance>
3635 The variable '{0}' with value '{1}' was previously declared with value '{2}'.
3636 <Parameter Type="System.String" Name="variableName" />
3637 <Parameter Type="System.String" Name="variableValue" />
3638 <Parameter Type="System.String" Name="variableCollidingValue" />
3639 </Instance>
3640 </Message>
3641 <Message Id="DuplicatePrimaryKey" Number="1119">
3642 <Instance>
3643 The primary key '{0}' is duplicated in table '{1}' and will be ignored. Please remove one of the entries or rename a part of the primary key to avoid the collision.
3644 <Parameter Type="System.String" Name="primaryKey" />
3645 <Parameter Type="System.String" Name="tableName" />
3646 </Instance>
3647 </Message>
3648 <Message Id="RequiresMsi200for64bitPackage" Number="1121">
3649 <Instance>
3650 Package/@InstallerVersion must be 200 or greater for a 64-bit package. The value will be changed to 200. Please specify a value of 200 or greater in order to eliminate this warning.
3651 </Instance>
3652 </Message>
3653 <Message Id="ExternalCabsAreNotSigned" Number="1122" SourceLineNumbers="no">
3654 <Instance>
3655 The installer database '{0}' has external cabs, but at least one of them is not signed. Please ensure that all external cabs are signed, if you mean to sign them. If you don't mean to sign them, there is no need to run the insignia tool as part of your build.
3656 <Parameter Type="System.String" Name="databaseFile" />
3657 </Instance>
3658 </Message>
3659 <Message Id="FailedToDeleteTempDir" Number="1123" SourceLineNumbers="no">
3660 <Instance>
3661 Failed to delete temporary directory: {0}
3662 <Parameter Type="System.String" Name="directory" />
3663 </Instance>
3664 </Message>
3665 <Message Id="StandardDirectoryConflictInMergeModule" Number="1124">
3666 <Instance>
3667 The Directory '{0}' starts with the same Id as the standard folder in Windows Installer '{1}'. A directory Id that begins with the same Id as a standard folder that is in an MSM may encounter a conflict when merging the MSM into an MSI. This may result in the contents of this merge module being installed to an unexpected location. To eliminate this warning, change your directory Id to not start with the same Id as any standard folders.
3668 <Parameter Type="System.String" Name="directory" />
3669 <Parameter Type="System.String" Name="standardDirectory" />
3670 </Instance>
3671 </Message>
3672 <Message Id="PreprocessorUnknownPragma" Number="1125">
3673 <Instance>
3674 The pragma '{0}' is unknown. Please ensure you have referenced the extension that defines this pragma.
3675 <Parameter Type="System.String" Name="pragmaName" />
3676 </Instance>
3677 </Message>
3678 <Message Id="DeprecatedComponentGroupId" Number="1126">
3679 <Instance>
3680 The {0}/@Id attribute contains invalid characters for an identifier. Being able to use invalid identifier characters for a {0} identifier has been deprecated.
3681 <Parameter Type="System.String" Name="elementName" />
3682 </Instance>
3683 </Message>
3684 <Message Id="UxPayloadsOnlySupportEmbedding" Number="1127">
3685 <Instance>
3686 A UX Payload ('{0}') was marked for something other than embedded packaging, possibly because it included a @DownloadUrl attribute. At present, UX Payloads must be embedded in the Bundle, so the requested packaging is being ignored.
3687 <Parameter Type="System.String" Name="sourceFile" />
3688 </Instance>
3689 </Message>
3690 <Message Id="DiscardedRollbackBoundary" Number="1129">
3691 <Instance>
3692 The RollbackBoundary '{0}' was discarded because it was not followed by a package. Without a package the rollback boundary doesn't do anything. Verify that the RollbackBoundary element is not followed by another RollbackBoundary and that the element is not at the end of the chain.
3693 <Parameter Type="System.String" Name="rollbackBoundaryId" />
3694 </Instance>
3695 </Message>
3696 <Message Id="DeprecatedElement" Number="1130">
3697 <Instance>
3698 The {0} element has been deprecated.
3699 <Parameter Type="System.String" Name="elementName" />
3700 </Instance>
3701 <Instance>
3702 The {0} element has been deprecated. Please use the {1} element instead.
3703 <Parameter Type="System.String" Name="elementName" />
3704 <Parameter Type="System.String" Name="newElementName" />
3705 </Instance>
3706 <Instance>
3707 The {0} element has been deprecated. Please use the {1} or {2} element instead.
3708 <Parameter Type="System.String" Name="elementName" />
3709 <Parameter Type="System.String" Name="newElementName1" />
3710 <Parameter Type="System.String" Name="newElementName2" />
3711 </Instance>
3712 </Message>
3713 <Message Id="CannotUpdateCabCache" Number="1131">
3714 <Instance>
3715 Cannot update the timestamp of cached cabinet: '{0}'. If the timestamp is not updated, the build may rebuild more than is necessary. To fix the issue, ensure that the cabinet file is writable, error: {1}
3716 <Parameter Type="System.String" Name="cabinetPath" />
3717 <Parameter Type="System.String" Name="detail" />
3718 </Instance>
3719 </Message>
3720 <Message Id="DownloadUrlNotSupportedForEmbeddedPayloads" Number="1132">
3721 <Instance>
3722 The Payload '{0}' is embedded but included a @DownloadUrl attribute. Embedded Payloads cannot be downloaded so the download URL is being ignored.
3723 <Parameter Type="System.String" Name="payloadId" />
3724 </Instance>
3725 </Message>
3726 <Message Id="DiscouragedAllUsersValue" Number="1133">
3727 <Instance>
3728 Bundles require a package to be either per-machine or per-user. The MSI '{0}' ALLUSERS Property is set to '2' which may change from per-user to per-machine at install time. The Bundle will assume the package is per-{1} and will not work correctly if that changes. If possible, remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.
3729 <Parameter Type="System.String" Name="path" />
3730 <Parameter Type="System.String" Name="machineOrUser" />
3731 </Instance>
3732 </Message>
3733 <Message Id="ImplicitlyPerUser" Number="1134">
3734 <Instance>
3735 The MSI '{0}' does not explicitly indicate that it is a per-user package even though the ALLUSERS Property is blank. This suggests a per-user package so the Bundle will assume the package is per-user. If possible, use the Package/@InstallScope attribute to be explicit instead.
3736 <Parameter Type="System.String" Name="path" />
3737 </Instance>
3738 </Message>
3739 <Message Id="PerUserButForcingPerMachine" Number="1135">
3740 <Instance>
3741 The MSI '{0}' is a per-user package being forced to per-machine. Verify that the MsiPackage/@ForcePerMachine attribute is expected and that the per-user package works correctly when forced to install per-machine.
3742 <Parameter Type="System.String" Name="path" />
3743 </Instance>
3744 </Message>
3745 <Message Id="AttributeShouldContain" Number="1136">
3746 <Instance>
3747 The {0}/@{1} attribute value '{2}' should contain '{3}' when the {0}/@{4} attribute is set to '{5}'.
3748 <Parameter Type="System.String" Name="elementName" />
3749 <Parameter Type="System.String" Name="attributeName" />
3750 <Parameter Type="System.String" Name="attributeValue" />
3751 <Parameter Type="System.String" Name="expectedContains" />
3752 <Parameter Type="System.String" Name="otherAttributeName" />
3753 <Parameter Type="System.String" Name="otherAttributeValue" />
3754 </Instance>
3755 </Message>
3756 <Message Id="DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions" Number="1137">
3757 <Instance>
3758 Component/@Id='{0}' has a @Guid value '{1}' that duplicates another component in this package. This is not officially supported by Windows Installer but works as long as all components have mutually-exclusive conditions. It is recommended to give each component its own unique GUID.
3759 <Parameter Type="System.String" Name="componentId" />
3760 <Parameter Type="System.String" Name="guid" />
3761 </Instance>
3762 </Message>
3763 <Message Id="DeprecatedRegistryKeyActionAttribute" Number="1138">
3764 <Instance>
3765 The RegistryKey/@Action attribute has been deprecated. In most cases, you can simply omit @Action. If you need to force Windows Installer to create an empty key or recursively delete the key, use the ForceCreateOnInstall or ForceDeleteOnUninstall attributes instead.
3766 </Instance>
3767 </Message>
3768 <Message Id="NotABinaryWixlib" Number="1139" SourceLineNumbers="no">
3769 <Instance>
3770 '{0}' is not a binary Wixlib and has no embedded files.
3771 <Parameter Type="System.String" Name="wixlib" />
3772 </Instance>
3773 </Message>
3774 <Message Id="NoPerMachineDependencies" Number="1140">
3775 <Instance>
3776 Bundle dependencies will not be registered on per-machine package '{0}' for a per-user bundle. Either make sure that all packages are installed per-machine, or author any per-machine dependencies as permanent packages.
3777 <Parameter Type="System.String" Name="packageId" />
3778 </Instance>
3779 </Message>
3780 <Message Id="DownloadUrlNotSupportedForAttachedContainers" Number="1141">
3781 <Instance>
3782 The Container '{0}' is attached but included a @DownloadUrl attribute. Attached Containers cannot be downloaded so the download URL is being ignored.
3783 <Parameter Type="System.String" Name="containerId" />
3784 </Instance>
3785 </Message>
3786 <Message Id="ReservedAttribute" Number="1142">
3787 <Instance>
3788 The {0}/@{1} attribute is reserved for future use and has no effect in this version of the WiX toolset.
3789 <Parameter Type="System.String" Name="elementName" />
3790 <Parameter Type="System.String" Name="attributeName" />
3791 </Instance>
3792 </Message>
3793 <Message Id="RequiresMsi500forArmPackage" Number="1143">
3794 <Instance>
3795 Package/@InstallerVersion must be 500 or greater for an Arm package. The value will be changed to 500. Please specify a value of 500 or greater in order to eliminate this warning.
3796 </Instance>
3797 </Message>
3798 <Message Id="RemotePayloadsMustNotAlsoBeCompressed" Number="1144">
3799 <Instance>
3800 The {0}/@Compressed attribute must have value 'no' when a RemotePayload child element is present. RemotePayload indicates that a package will always be downloaded and cannot be compressed into a bundle. To eliminate this warning, explicitly set the {0}/@Compressed attribute to 'no'.
3801 <Parameter Type="System.String" Name="elementName" />
3802 </Instance>
3803 </Message>
3804 <Message Id="AllChangesIncludedInPatch" Number="1145">
3805 <Instance>
3806 All changes between the baseline and upgraded packages will be included in the patch except for any change to the ProductCode. The 'All' element is supported primarily for testing purposes and negates the benefits of patch families.
3807 </Instance>
3808 </Message>
3809 <Message Id="RelatedAttributeConditionallyIgnored" Number="1146">
3810 <Instance>
3811 Ignoring attribute {0} because attribute {1} is set to {2}.
3812 <Parameter Type="System.String" Name="recessiveAttribute" />
3813 <Parameter Type="System.String" Name="dominantAttribute" />
3814 <Parameter Type="System.String" Name="dominantValue" />
3815 </Instance>
3816 </Message>
3817 <Message Id="BackslashTerminateInlineDirectorySyntax" Number="1147">
3818 <Instance>
3819 Backslash terminate the {0}/@{1} attribute's inline directory value '{2}'. A backslash ensures a directory name will not be mistaken for a directory reference.
3820 <Parameter Type="System.String" Name="elementName" />
3821 <Parameter Type="System.String" Name="attributeName" />
3822 <Parameter Type="System.String" Name="value" />
3823 </Instance>
3824 </Message>
3825 <Message Id="VersionTruncated" Number="1148">
3826 <Instance>
3827 Product version {0} in package '{1}' is not valid per the MSI SDK and cannot be represented in a bundle. It has been truncated to {2}.
3828 <Parameter Type="System.String" Name="originalVersion" />
3829 <Parameter Type="System.String" Name="package" />
3830 <Parameter Type="System.String" Name="truncatedVersion" />
3831 </Instance>
3832 </Message>
3833 <Message Id="ServiceConfigFamilyNotSupported" Number="1149">
3834 <Instance>
3835 {0} functionality is documented in the Windows Installer SDK to "not [work] as expected." Consider replacing {0} with the WixUtilExtension ServiceConfig element.
3836 <Parameter Type="System.String" Name="elementName" />
3837 </Instance>
3838 </Message>
3839 </Class>
3840
3841 <Class Name="WixVerboses" ContainerName="WixVerboseEventArgs" BaseContainerName="MessageEventArgs" Level="Verbose">
3842 <Message Id="ImportBinaryStream" Number="9000" SourceLineNumbers="no">
3843 <Instance>
3844 Importing binary stream from '{0}'.
3845 <Parameter Type="System.String" Name="streamSource" />
3846 </Instance>
3847 </Message>
3848 <Message Id="ImportIconStream" Number="9001" SourceLineNumbers="no">
3849 <Instance>
3850 Importing icon stream from '{0}'.
3851 <Parameter Type="System.String" Name="streamSource" />
3852 </Instance>
3853 </Message>
3854 <Message Id="CopyFile" Number="9002" SourceLineNumbers="no">
3855 <Instance>
3856 Copying file '{0}' to '{1}'.
3857 <Parameter Type="System.String" Name="sourceFile" />
3858 <Parameter Type="System.String" Name="destinationFile" />
3859 </Instance>
3860 </Message>
3861 <Message Id="MoveFile" Number="9003" SourceLineNumbers="no">
3862 <Instance>
3863 Moving file '{0}' to '{1}'.
3864 <Parameter Type="System.String" Name="sourceFile" />
3865 <Parameter Type="System.String" Name="destinationFile" />
3866 </Instance>
3867 </Message>
3868 <Message Id="CreateDirectory" Number="9004" SourceLineNumbers="no">
3869 <Instance>
3870 The directory '{0}' does not exist, creating it now.
3871 <Parameter Type="System.String" Name="directory" />
3872 </Instance>
3873 </Message>
3874 <Message Id="RemoveDestinationFile" Number="9005" SourceLineNumbers="no">
3875 <Instance>
3876 The destination file '{0}' already exists, attempting to remove it.
3877 <Parameter Type="System.String" Name="destinationFile" />
3878 </Instance>
3879 </Message>
3880 <Message Id="CabFile" Number="9006" SourceLineNumbers="no">
3881 <Instance>
3882 Cabbing file {0} from '{1}'.
3883 <Parameter Type="System.String" Name="fileId" />
3884 <Parameter Type="System.String" Name="filePath" />
3885 </Instance>
3886 </Message>
3887 <Message Id="UpdatingFileInformation" Number="9007" SourceLineNumbers="no">
3888 <Instance>Updating file information.</Instance>
3889 </Message>
3890 <Message Id="GeneratingDatabase" Number="9008" SourceLineNumbers="no">
3891 <Instance>Generating database.</Instance>
3892 </Message>
3893 <Message Id="MergingModules" Number="9009" SourceLineNumbers="no">
3894 <Instance>Merging modules.</Instance>
3895 </Message>
3896 <Message Id="CreatingCabinetFiles" Number="9010" SourceLineNumbers="no">
3897 <Instance>Creating cabinet files.</Instance>
3898 </Message>
3899 <Message Id="ImportingStreams" Number="9011" SourceLineNumbers="no">
3900 <Instance>Importing streams.</Instance>
3901 </Message>
3902 <Message Id="LayingOutMedia" Number="9012" SourceLineNumbers="no">
3903 <Instance>Laying out media.</Instance>
3904 </Message>
3905 <Message Id="DecompilingTable" Number="9013" SourceLineNumbers="no">
3906 <Instance>
3907 Decompiling the {0} table.
3908 <Parameter Type="System.String" Name="tableName" />
3909 </Instance>
3910 </Message>
3911 <Message Id="ValidationInfo" Number="9014" SourceLineNumbers="no">
3912 <Instance>
3913 {0}: {1}
3914 <Parameter Type="System.String" Name="ice" />
3915 <Parameter Type="System.String" Name="message" />
3916 </Instance>
3917 </Message>
3918 <Message Id="CreateCabinet" Number="9015" SourceLineNumbers="no">
3919 <Instance>
3920 Creating cabinet '{0}'.
3921 <Parameter Type="System.String" Name="cabinet" />
3922 </Instance>
3923 </Message>
3924 <Message Id="ValidatingDatabase" Number="9016" SourceLineNumbers="no">
3925 <Instance>Validating database.</Instance>
3926 </Message>
3927 <Message Id="OpeningMergeModule" Number="9017" SourceLineNumbers="no">
3928 <Instance>
3929 Opening merge module '{0}' with language '{1}'.
3930 <Parameter Type="System.String" Name="modulePath" />
3931 <Parameter Type="System.Int16" Name="language" />
3932 </Instance>
3933 </Message>
3934 <Message Id="MergingMergeModule" Number="9018" SourceLineNumbers="no">
3935 <Instance>
3936 Merging merge module '{0}'.
3937 <Parameter Type="System.String" Name="modulePath" />
3938 </Instance>
3939 </Message>
3940 <Message Id="ConnectingMergeModule" Number="9019" SourceLineNumbers="no">
3941 <Instance>
3942 Connecting merge module '{0}' to feature '{1}'.
3943 <Parameter Type="System.String" Name="modulePath" />
3944 <Parameter Type="System.String" Name="feature" />
3945 </Instance>
3946 </Message>
3947 <Message Id="ResequencingMergeModuleFiles" Number="9020" SourceLineNumbers="no">
3948 <Instance>Resequencing files from all merge modules.</Instance>
3949 </Message>
3950 <Message Id="BinderTempDirLocatedAt" Number="9021" SourceLineNumbers="no">
3951 <Instance>
3952 Binder temporary directory located at '{0}'.
3953 <Parameter Type="System.String" Name="directory" />
3954 </Instance>
3955 </Message>
3956 <Message Id="ValidatorTempDirLocatedAt" Number="9022" SourceLineNumbers="no">
3957 <Instance>
3958 Validator temporary directory located at '{0}'.
3959 <Parameter Type="System.String" Name="directory" />
3960 </Instance>
3961 </Message>
3962 <Message Id="GeneratingBundle" Number="9023" SourceLineNumbers="no">
3963 <Instance>
3964 Generating Burn bundle '{0}' from stub '{1}'.
3965 <Parameter Type="System.String" Name="bundleFile" />
3966 <Parameter Type="System.String" Name="stubFile" />
3967 </Instance>
3968 </Message>
3969 <Message Id="ResolvingManifest" Number="9024" SourceLineNumbers="no">
3970 <Instance>
3971 Generating resolved manifest '{0}'.
3972 <Parameter Type="System.String" Name="manifestFile" />
3973 </Instance>
3974 </Message>
3975 <Message Id="LoadingPayload" Number="9025" SourceLineNumbers="no">
3976 <Instance>
3977 Loading payload '{0}' into container.
3978 <Parameter Type="System.String" Name="payload" />
3979 </Instance>
3980 </Message>
3981 <Message Id="BundleGuid" Number="9026" SourceLineNumbers="no">
3982 <Instance>
3983 Assigning bundle GUID '{0}'.
3984 <Parameter Type="System.String" Name="bundleGuid" />
3985 </Instance>
3986 </Message>
3987 <Message Id="CopyingExternalPayload" Number="9027" SourceLineNumbers="no">
3988 <Instance>
3989 Copying external payload from '{0}' to '{1}'.
3990 <Parameter Type="System.String" Name="payload" />
3991 <Parameter Type="System.String" Name="outputDirectory" />
3992 </Instance>
3993 </Message>
3994 <Message Id="EmbeddingContainer" Number="9028" SourceLineNumbers="no">
3995 <Instance>
3996 Embedding container '{0}' ({1} bytes) with '{2}' compression.
3997 <Parameter Type="System.String" Name="container" />
3998 <Parameter Type="System.Int64" Name="size" />
3999 <Parameter Type="System.String" Name="compression" />
4000 </Instance>
4001 </Message>
4002 <Message Id="SwitchingToPerUserPackage" Number="9029">
4003 <Instance>
4004 Bundle switching from per-machine to per-user due to addition of per-user package '{0}'.
4005 <Parameter Type="System.String" Name="path" />
4006 </Instance>
4007 </Message>
4008 <Message Id="SetCabbingThreadCount" Number="9030" SourceLineNumbers="no">
4009 <Instance>
4010 There will be '{0}' threads used to produce CAB files.
4011 <Parameter Type="System.String" Name="threads" />
4012 </Instance>
4013 </Message>
4014 <Message Id="ValidationSerialized" Number="9031" SourceLineNumbers="no">
4015 <Instance>
4016 Multiple packages cannot reliably be validated simultaneously. This validation will resume when the other package being validated has completed.
4017 </Instance>
4018 </Message>
4019 <Message Id="ReusingCabCache" Number="9032">
4020 <Instance>
4021 Reusing cabinet '{0}' from cabinet cache path: '{1}'.
4022 <Parameter Type="System.String" Name="cabinetName" />
4023 <Parameter Type="System.String" Name="source" />
4024 </Instance>
4025 </Message>
4026 <Message Id="CabinetsSplitInParallel" Number="9033" SourceLineNumbers="no">
4027 <Instance>
4028 Multiple Cabinets with Large Files are splitting simultaneously. This current cabinet is waiting on a shared resource and splitting will resume when the other splitting has completed.
4029 </Instance>
4030 </Message>
4031 <Message Id="ValidatedDatabase" Number="9034" SourceLineNumbers="no">
4032 <Instance>
4033 Validation complete: {0:N0}ms elapsed.
4034 <Parameter Type="System.Int64" Name="size" />
4035 </Instance>
4036 </Message>
4037 </Class>
4038</Messages>
diff --git a/src/api/wix/WixToolset.Data/DictionaryExtensions.cs b/src/api/wix/WixToolset.Data/DictionaryExtensions.cs
new file mode 100644
index 00000000..cb6647ff
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/DictionaryExtensions.cs
@@ -0,0 +1,14 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System.Collections.Generic;
6
7 internal static class DictionaryExtensions
8 {
9 public static V GetValueOrDefault<K, V>(this IDictionary<K, V> dictionary, K key, V defaultValue = default(V))
10 {
11 return dictionary.TryGetValue(key, out var value) ? value : defaultValue;
12 }
13 }
14}
diff --git a/src/api/wix/WixToolset.Data/DisplayEventArgs.cs b/src/api/wix/WixToolset.Data/DisplayEventArgs.cs
new file mode 100644
index 00000000..baa9b0e2
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/DisplayEventArgs.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
3namespace WixToolset.Data
4{
5 using System;
6
7 public delegate void DisplayEventHandler(object sender, DisplayEventArgs e);
8
9 public class DisplayEventArgs : EventArgs
10 {
11 public MessageLevel Level { get; set; }
12
13 public string Message { get; set; }
14 }
15}
diff --git a/src/api/wix/WixToolset.Data/EmptyRule.cs b/src/api/wix/WixToolset.Data/EmptyRule.cs
new file mode 100644
index 00000000..0170e457
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/EmptyRule.cs
@@ -0,0 +1,22 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 public enum EmptyRule
6 {
7 /// <summary>
8 /// The trimmed value cannot be empty.
9 /// </summary>
10 MustHaveNonWhitespaceCharacters,
11
12 /// <summary>
13 /// The trimmed value can be empty, but the value itself cannot be empty.
14 /// </summary>
15 CanBeWhitespaceOnly,
16
17 /// <summary>
18 /// The value can be empty.
19 /// </summary>
20 CanBeEmpty
21 }
22}
diff --git a/src/api/wix/WixToolset.Data/ErrorMessages.cs b/src/api/wix/WixToolset.Data/ErrorMessages.cs
new file mode 100644
index 00000000..86504f60
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/ErrorMessages.cs
@@ -0,0 +1,2731 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Resources;
8
9 public static class ErrorMessages
10 {
11 public static Message ActionCircularDependency(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
12 {
13 return Message(sourceLineNumbers, Ids.ActionCircularDependency, "The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is also scheduled to come before or after action '{1}'. Please remove this circular dependency by changing the Before or After attribute for one of the actions.", sequenceTableName, actionName1, actionName2);
14 }
15
16 public static Message ActionCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
17 {
18 return Message(sourceLineNumbers, Ids.ActionCollision, "The {0} table contains an action '{1}' that is declared in two different locations. Please remove one of the actions or set the Overridable='yes' attribute on one of their elements.", sequenceTableName, actionName);
19 }
20
21 public static Message ActionCollision2(SourceLineNumber sourceLineNumbers)
22 {
23 return Message(sourceLineNumbers, Ids.ActionCollision2, "The location of the action related to previous error.");
24 }
25
26 public static Message ActionScheduledRelativeToItself(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
27 {
28 return Message(sourceLineNumbers, Ids.ActionScheduledRelativeToItself, "The {0}/@{1} attribute's value '{2}' is invalid because it would make this action dependent upon itself. Please change the value to the name of a different action.", elementName, attributeName, attributeValue);
29 }
30
31 public static Message ActionScheduledRelativeToTerminationAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
32 {
33 return Message(sourceLineNumbers, Ids.ActionScheduledRelativeToTerminationAction, "The {0} table contains an action '{1}' that is scheduled to come before or after action '{2}', which is a special action which only occurs when the installer terminates. These special actions can be identified by their negative sequence numbers. Please schedule the action '{1}' to come before or after a different action.", sequenceTableName, actionName1, actionName2);
34 }
35
36 public static Message ActionScheduledRelativeToTerminationAction2(SourceLineNumber sourceLineNumbers)
37 {
38 return Message(sourceLineNumbers, Ids.ActionScheduledRelativeToTerminationAction2, "The location of the special termination action related to previous error(s).");
39 }
40
41 public static Message AdditionalArgumentUnexpected(string argument)
42 {
43 return Message(null, Ids.AdditionalArgumentUnexpected, "Additional argument '{0}' was unexpected. Remove the argument and add the '-?' switch for more information.", argument);
44 }
45
46 public static Message AdminImageRequired(string productCode)
47 {
48 return Message(null, Ids.AdminImageRequired, "Source information is required for the product '{0}'. If you ran torch.exe with both target and updated .msi files, you must first perform an administrative installation of both .msi files then pass -a when running torch.exe.", productCode);
49 }
50
51 public static Message AdvertiseStateMustMatch(SourceLineNumber sourceLineNumbers, string advertiseState, string parentAdvertiseState)
52 {
53 return Message(sourceLineNumbers, Ids.AdvertiseStateMustMatch, "The advertise state of this element: '{0}', does not match the advertise state set on the parent element: '{1}'.", advertiseState, parentAdvertiseState);
54 }
55
56 public static Message AppIdIncompatibleAdvertiseState(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string parentValue)
57 {
58 return Message(sourceLineNumbers, Ids.AppIdIncompatibleAdvertiseState, "The {0}/@(1) attribute's value, '{2}' does not match the advertise state on its parent element: '{3}'. (Note: AppIds nested under Fragment, Module, or Product elements must be advertised.)", elementName, attributeName, value, parentValue);
59 }
60
61 public static Message BaselineRequired()
62 {
63 return Message(null, Ids.BaselineRequired, "No baseline was specified for one of the transforms specified. A baseline is required for all transforms in a patch.");
64 }
65
66 public static Message BinderFileManagerMissingFile(SourceLineNumber sourceLineNumbers, string exceptionMessage)
67 {
68 return Message(sourceLineNumbers, Ids.BinderFileManagerMissingFile, "{0}", exceptionMessage);
69 }
70
71 public static Message BothUpgradeCodesRequired()
72 {
73 return Message(null, Ids.BothUpgradeCodesRequired, "Both the target and updated product authoring must define the Product/@UpgradeCode attribute if the transform validates the UpgradeCode (default). Either define the Product/@UpgradeCode attribute in both the target and updated authoring, or set the Validate/@UpgradeCode attribute to 'no' in the patch authoring.");
74 }
75
76 public static Message BundleTooNew(string bundleExecutable, long bundleVersion)
77 {
78 return Message(null, Ids.BundleTooNew, "Unable to read bundle executable '{0}', because this bundle was created with a newer version of WiX (bundle version '{1}'). You must use a newer version of WiX in order to read this bundle.", bundleExecutable, bundleVersion);
79 }
80
81 public static Message CabClosureFailed(string cabinet)
82 {
83 return Message(null, Ids.CabClosureFailed, "Failed to close cab '{0}'.", cabinet);
84 }
85
86 public static Message CabClosureFailed(string cabinet, int error)
87 {
88 return Message(null, Ids.CabClosureFailed, "Failed to close cab '{0}', error: {1}.", cabinet, error);
89 }
90
91 public static Message CabCreationFailed(string cabName, string fileName, int error)
92 {
93 return Message(null, Ids.CabCreationFailed, "Failed to create cab '{0}' while compressing file '{1}' with error 0x{2:X8}.", cabName, fileName, error);
94 }
95
96 public static Message CabCreationFailed(string cabName, int error)
97 {
98 return Message(null, Ids.CabCreationFailed, "Failed to create cab '{0}' with error 0x{1:X8}.", cabName, error);
99 }
100
101 public static Message CabExtractionFailed(string cabName, string directoryName)
102 {
103 return Message(null, Ids.CabExtractionFailed, "Failed to extract cab '{0}' to directory '{1}'. This is most likely due to a lack of available disk space on the destination drive.", cabName, directoryName);
104 }
105
106 public static Message CabExtractionFailed(string cabName, string mergeModulePath, string directoryName)
107 {
108 return Message(null, Ids.CabExtractionFailed, "Failed to extract cab '{0}' from merge module '{1}' to directory '{2}'. This is most likely due to a lack of available disk space on the destination drive.", cabName, mergeModulePath, directoryName);
109 }
110
111 public static Message CabFileDoesNotExist(string cabName, string mergeModulePath, string directoryName)
112 {
113 return Message(null, Ids.CabFileDoesNotExist, "Attempted to extract cab '{0}' from merge module '{1}' to directory '{2}'. The cab file was not found. This usually means that you have a merge module without a cabinet inside it.", cabName, mergeModulePath, directoryName);
114 }
115
116 public static Message CannotAuthorSpecialProperties(SourceLineNumber sourceLineNumbers, string propertyName)
117 {
118 return Message(sourceLineNumbers, Ids.CannotAuthorSpecialProperties, "The {0} property was specified. Special MSI properties cannot be authored. Use the attributes on the Property element instead.", propertyName);
119 }
120
121 public static Message CannotDefaultComponentId(SourceLineNumber sourceLineNumbers)
122 {
123 return Message(sourceLineNumbers, Ids.CannotDefaultComponentId, "The Component/@Id attribute was not found; it is required when there is no valid keypath to use as the default id value.");
124 }
125
126 public static Message CannotDefaultMismatchedAdvertiseStates(SourceLineNumber sourceLineNumbers)
127 {
128 return Message(sourceLineNumbers, Ids.CannotDefaultMismatchedAdvertiseStates, "MIME element cannot be marked as the default when its advertise state differs from its parent element. Ensure that the advertise state of the MIME element matches its parents element or remove the Mime/@Advertise attribute completely.");
129 }
130
131 public static Message CannotFindFile(SourceLineNumber sourceLineNumbers, string fileId, string fileName, string filePath)
132 {
133 return Message(sourceLineNumbers, Ids.CannotFindFile, "The file with id '{0}' and name '{1}' could not be found with source path: '{2}'.", fileId, fileName, filePath);
134 }
135
136 public static Message CanNotHaveTwoParents(SourceLineNumber sourceLineNumbers, string directorySearch, string parentAttribute, string parentElement)
137 {
138 return Message(sourceLineNumbers, Ids.CanNotHaveTwoParents, "The DirectorySearchRef {0} can not have a Parent attribute {1} and also be nested under parent element {2}", directorySearch, parentAttribute, parentElement);
139 }
140
141 public static Message CannotLoadBinderFileManager(string binderFileManager, string currentBinderFileManager)
142 {
143 return Message(null, Ids.CannotLoadBinderFileManager, "Cannot load binder file manager: {0}. Light can only load one binder file manager and has already loaded binder file manager: {1}.", binderFileManager, currentBinderFileManager);
144 }
145
146 public static Message CannotLoadLinkerExtension(string linkerExtension, string currentLinkerExtension)
147 {
148 return Message(null, Ids.CannotLoadLinkerExtension, "Cannot load linker extension: {0}. Light can only load one link extension and has already loaded link extension: {1}.", linkerExtension, currentLinkerExtension);
149 }
150
151 public static Message CannotOpenMergeModule(SourceLineNumber sourceLineNumbers, string mergeModuleIdentifier, string mergeModuleFile)
152 {
153 return Message(sourceLineNumbers, Ids.CannotOpenMergeModule, "Cannot open the merge module '{0}' from file '{1}'.", mergeModuleIdentifier, mergeModuleFile);
154 }
155
156 public static Message CannotReundefineVariable(SourceLineNumber sourceLineNumbers, string variableName)
157 {
158 return Message(sourceLineNumbers, Ids.CannotReundefineVariable, "The variable '{0}' cannot be undefined because its already undefined.", variableName);
159 }
160
161 public static Message CheckBoxValueOnlyValidWithCheckBox(SourceLineNumber sourceLineNumbers, string elementName, string controlType)
162 {
163 return Message(sourceLineNumbers, Ids.CheckBoxValueOnlyValidWithCheckBox, "A {0} element was specified with Type='{1}' and a CheckBoxValue. Check box values can only be specified with Type='CheckBox'.", elementName, controlType);
164 }
165
166 public static Message CircularSearchReference(string chain)
167 {
168 return Message(null, Ids.CircularSearchReference, "A circular reference of search ordering constraints was detected: {0}. Search ordering references must form a directed acyclic graph.", chain);
169 }
170
171 public static Message ComponentExpectedFeature(SourceLineNumber sourceLineNumbers, string component, string type, string target)
172 {
173 return Message(sourceLineNumbers, Ids.ComponentExpectedFeature, "The component '{0}' is not assigned to a feature. The component's {1} '{2}' requires it to be assigned to at least one feature.", component, type, target);
174 }
175
176 public static Message ComponentMultipleKeyPaths(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string fileElementName, string registryElementName, string odbcDataSourceElementName)
177 {
178 return Message(sourceLineNumbers, Ids.ComponentMultipleKeyPaths, "The {0} element has multiple key paths set. The key path may only be set to '{2}' in extension elements that support it or one of the following locations: {0}/@{1}, {3}/@{1}, {4}/@{1}, or {5}/@{1}.", elementName, attributeName, value, fileElementName, registryElementName, odbcDataSourceElementName);
179 }
180
181 public static Message ComponentReferencedTwice(SourceLineNumber sourceLineNumbers, string crefChildId)
182 {
183 return Message(sourceLineNumbers, Ids.ComponentReferencedTwice, "Component {0} cannot be contained in a Module twice.", crefChildId);
184 }
185
186 public static Message ConditionExpected(SourceLineNumber sourceLineNumbers, string elementName)
187 {
188 return Message(sourceLineNumbers, Ids.ConditionExpected, "The {0} element's inner text cannot be an empty string or completely whitespace. If you don't want a condition, then simply remove the entire {0} element.", elementName);
189 }
190
191 public static Message CorruptFileFormat(string path, string format)
192 {
193 return Message(null, Ids.CorruptFileFormat, "Attempted to load corrupt file from path: {0}. The file with format {1} contained unexpected content. Ensure the correct path was provided and that the file has not been incorrectly modified.", path, format.ToLowerInvariant());
194 }
195
196 public static Message CouldNotDetermineProductCodeFromTransformSummaryInfo()
197 {
198 return Message(null, Ids.CouldNotDetermineProductCodeFromTransformSummaryInfo, "Could not determine ProductCode from transform summary information.");
199 }
200
201 public static Message CreateCabAddFileFailed()
202 {
203 return Message(null, Ids.CreateCabAddFileFailed, "An error (E_FAIL) was returned while adding files to a CAB file. This most commonly happens when creating a CAB file 2 GB or larger. Either reduce the size of your installation package, raise Media/@CompressionLevel to a higher compression level, or split your installation package's files into more than one CAB file.");
204 }
205
206 public static Message CreateCabInsufficientDiskSpace()
207 {
208 return Message(null, Ids.CreateCabInsufficientDiskSpace, "An error (ERROR_DISK_FULL) was returned while creating a CAB file. This means you have insufficient disk space - please clear more disk space and try this operation again.");
209 }
210
211 public static Message CubeFileNotFound(string cubeFile)
212 {
213 return Message(null, Ids.CubeFileNotFound, "The cube file '{0}' cannot be found. This file is required for MSI validation.", cubeFile);
214 }
215
216 public static Message CustomActionIllegalInnerText(SourceLineNumber sourceLineNumbers, string elementName, string innerText, string attributeName)
217 {
218 return Message(sourceLineNumbers, Ids.CustomActionIllegalInnerText, "The {0} element contains illegal inner text: '{1}'. It may not contain inner text unless the {2} attribute is specified.", elementName, innerText, attributeName);
219 }
220
221 public static Message CustomActionMultipleSources(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5)
222 {
223 return Message(sourceLineNumbers, Ids.CustomActionMultipleSources, "The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following source attributes specified at a time: {2}, {3}, {4}, {5}, or {6}.", elementName, attributeName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5);
224 }
225
226 public static Message CustomActionMultipleTargets(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6, string attributeName7)
227 {
228 return Message(sourceLineNumbers, Ids.CustomActionMultipleTargets, "The {0}/@{1} attribute cannot coexist with a previously specified attribute on this element. The {0} element may only have one of the following target attributes specified at a time: {2}, {3}, {4}, {5}, {6}, {7}, or {8}.", elementName, attributeName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6, attributeName7);
229 }
230
231 public static Message CustomActionSequencedInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
232 {
233 return Message(sourceLineNumbers, Ids.CustomActionSequencedInModule, "The {0} table contains a custom action '{1}' that has a sequence number specified. The Sequence attribute is not allowed for custom actions in a merge module. Please remove the action or use the Before or After attributes to specify where this action should be sequenced relative to another action.", sequenceTableName, actionName);
234 }
235
236 public static Message CustomTableIllegalColumnWidth(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int value)
237 {
238 return Message(sourceLineNumbers, Ids.CustomTableIllegalColumnWidth, "The {0}/@{1} attribute's value, '{2}', is not a valid column width. Valid column widths are 2 or 4.", elementName, attributeName, value);
239 }
240
241 public static Message CustomTableMissingPrimaryKey(SourceLineNumber sourceLineNumbers)
242 {
243 return Message(sourceLineNumbers, Ids.CustomTableMissingPrimaryKey, "The CustomTable is missing a Column element with the PrimaryKey attribute set to 'yes'. At least one column must be marked as the primary key.");
244 }
245
246 public static Message CustomTableNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
247 {
248 return Message(sourceLineNumbers, Ids.CustomTableNameTooLong, "The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.", elementName, attributeName, value);
249 }
250
251 public static Message DatabaseSchemaMismatch(SourceLineNumber sourceLineNumbers, string tableName)
252 {
253 return Message(sourceLineNumbers, Ids.DatabaseSchemaMismatch, "The table definition of '{0}' in the target database does not match the table definition in the updated database. A transform requires that the target database schema match the updated database schema.", tableName);
254 }
255
256 public static Message DirectoryPathRequired(string parameter)
257 {
258 return Message(null, Ids.DirectoryPathRequired, "The parameter '{0}' must be followed by a directory path.", parameter);
259 }
260
261 public static Message DisallowedMsiProperty(SourceLineNumber sourceLineNumbers, string property, string illegalValueList)
262 {
263 return Message(sourceLineNumbers, Ids.DisallowedMsiProperty, "The '{0}' MsiProperty is controlled by the bootstrapper and cannot be authored. (Illegal properties are: {1}.) Remove the MsiProperty element.", property, illegalValueList);
264 }
265
266 public static Message DuplicateCabinetName(SourceLineNumber sourceLineNumbers, string cabinetName)
267 {
268 return Message(sourceLineNumbers, Ids.DuplicateCabinetName, "Duplicate cabinet name '{0}' found.", cabinetName);
269 }
270
271 public static Message DuplicateCabinetName2(SourceLineNumber sourceLineNumbers, string cabinetName)
272 {
273 return Message(sourceLineNumbers, Ids.DuplicateCabinetName2, "Duplicate cabinet name '{0}' error related to previous error.", cabinetName);
274 }
275
276 public static Message DuplicateCommandLineOptionInExtension(string arg)
277 {
278 return Message(null, Ids.DuplicateCommandLineOptionInExtension, "The command line option '{0}' has already been loaded by another Heat extension.", arg);
279 }
280
281 public static Message DuplicateComponentGuids(SourceLineNumber sourceLineNumbers, string componentId, string guid, string type, string keyPath)
282 {
283 return Message(sourceLineNumbers, Ids.DuplicateComponentGuids, "Component/@Id='{0}' with {2} '{3}' has a @Guid value '{1}' that duplicates another component in this package. It is recommended to give each component its own unique GUID.", componentId, guid, type, keyPath);
284 }
285
286 public static Message DuplicateContextValue(SourceLineNumber sourceLineNumbers, string contextValue)
287 {
288 return Message(sourceLineNumbers, Ids.DuplicateContextValue, "The context value '{0}' was duplicated. Context values must be distinct.", contextValue);
289 }
290
291 public static Message DuplicatedUiLocalization(SourceLineNumber sourceLineNumbers, string controlName, string dialogName)
292 {
293 return Message(sourceLineNumbers, Ids.DuplicatedUiLocalization, "The localization for control {0} in dialog {1} is duplicated. Only one localization per control is allowed.", controlName, dialogName);
294 }
295
296 public static Message DuplicatedUiLocalization(SourceLineNumber sourceLineNumbers, string dialogName)
297 {
298 return Message(sourceLineNumbers, Ids.DuplicatedUiLocalization, "The localization for dialog {0} is duplicated. Only one localization per dialog is allowed.", dialogName);
299 }
300
301 public static Message DuplicateExtensionPreprocessorType(string extension, string variablePrefix, string collidingExtension)
302 {
303 return Message(null, Ids.DuplicateExtensionPreprocessorType, "The extension '{0}' uses the same preprocessor variable prefix, '{1}', as previously loaded extension '{2}'. Please remove one of the extensions or rename the prefix to avoid the collision.", extension, variablePrefix, collidingExtension);
304 }
305
306 public static Message DuplicateExtensionTable(string extension, string tableName)
307 {
308 return Message(null, Ids.DuplicateExtensionTable, "The extension '{0}' contains a definition for table '{1}' that collides with a previously loaded table definition. Please remove one of the conflicting extensions or rename one of the tables to avoid the collision.", extension, tableName);
309 }
310
311 public static Message DuplicateExtensionXmlSchemaNamespace(string extension, string extensionXmlSchemaNamespace, string collidingExtension)
312 {
313 return Message(null, Ids.DuplicateExtensionXmlSchemaNamespace, "The extension '{0}' uses the same xml schema namespace, '{1}', as previously loaded extension '{2}'. Please either remove one of the extensions or rename the xml schema namespace to avoid the collision.", extension, extensionXmlSchemaNamespace, collidingExtension);
314 }
315
316 public static Message DuplicateFileId(string fileId)
317 {
318 return Message(null, Ids.DuplicateFileId, "Multiple files with ID '{0}' exist. Windows Installer does not support file IDs that differ only by case. Change the file IDs to be unique.", fileId);
319 }
320
321 public static Message DuplicateLocalizationIdentifier(SourceLineNumber sourceLineNumbers, string localizationId)
322 {
323 return Message(sourceLineNumbers, Ids.DuplicateLocalizationIdentifier, "The localization identifier '{0}' has been duplicated in multiple locations. Please resolve the conflict.", localizationId);
324 }
325
326 public static Message DuplicateModuleCaseInsensitiveFileIdentifier(SourceLineNumber sourceLineNumbers, string moduleId, string fileId1, string fileId2)
327 {
328 return Message(sourceLineNumbers, Ids.DuplicateModuleCaseInsensitiveFileIdentifier, "The merge module '{0}' contains 2 or more file identifiers that only differ by case: '{1}' and '{2}'. The WiX toolset extracts merge module files to the file system using these identifiers. Since most file systems are not case-sensitive a collision is likely. Please contact the owner of the merge module for a fix.", moduleId, fileId1, fileId2);
329 }
330
331 public static Message DuplicateModuleFileIdentifier(SourceLineNumber sourceLineNumbers, string moduleId, string fileId)
332 {
333 return Message(sourceLineNumbers, Ids.DuplicateModuleFileIdentifier, "The merge module '{0}' contains a file identifier, '{1}', that is duplicated either in another merge module or in a File/@Id attribute. File identifiers must be unique. Please change one of the file identifiers to a different value.", moduleId, fileId);
334 }
335
336 public static Message DuplicatePrimaryKey(SourceLineNumber sourceLineNumbers, string primaryKey, string tableName)
337 {
338 return Message(sourceLineNumbers, Ids.DuplicatePrimaryKey, "The primary key '{0}' is duplicated in table '{1}'. Please remove one of the entries or rename a part of the primary key to avoid the collision.", primaryKey, tableName);
339 }
340
341 public static Message DuplicateProviderDependencyKey(string providerKey, string packageId)
342 {
343 return Message(null, Ids.DuplicateProviderDependencyKey, "The provider dependency key '{0}' was already imported from the package with Id '{1}'. Please remove the Provides element with the key '{0}' from the package authoring.", providerKey, packageId);
344 }
345
346 public static Message DuplicateSourcesForOutput(string sourceList, string outputFile)
347 {
348 return Message(null, Ids.DuplicateSourcesForOutput, "Multiple source files ({0}) have resulted in the same output file '{1}'. This is likely because the source files only differ in extension or path. Rename the source files to avoid this problem.", sourceList, outputFile);
349 }
350
351 public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName)
352 {
353 return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' found. This typically means that an Id is duplicated. Access modifiers (internal, protected, private) cannot prevent these conflicts. Ensure all your identifiers of a given type (File, Component, Feature) are unique.", symbolName);
354 }
355
356 public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName, string referencingSourceLineNumber)
357 {
358 return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' referenced by {1}. This typically means that an Id is duplicated. Ensure all your identifiers of a given type (File, Component, Feature) are unique or use an access modifier to scope the identfier.", symbolName, referencingSourceLineNumber);
359 }
360
361 public static Message DuplicateSymbol2(SourceLineNumber sourceLineNumbers)
362 {
363 return Message(sourceLineNumbers, Ids.DuplicateSymbol2, "Location of symbol related to previous error.");
364 }
365
366 public static Message DuplicateTransform(string transform)
367 {
368 return Message(null, Ids.DuplicateTransform, "The transform {0} was included twice on the command line. Each transform can be applied to a patch only once.", transform);
369 }
370
371 public static Message DuplicateVariableDefinition(string variableName, string variableValue, string variableCollidingValue)
372 {
373 return Message(null, Ids.DuplicateVariableDefinition, "The variable '{0}' with value '{1}' was previously declared with value '{2}'.", variableName, variableValue, variableCollidingValue);
374 }
375
376 public static Message ExampleGuid(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
377 {
378 return Message(sourceLineNumbers, Ids.ExampleGuid, "The {0}/@{1} attribute's value, '{2}', is not a legal Guid value. A Guid needs to be generated and put in place of '{2}' in the source file.", elementName, attributeName, value);
379 }
380
381 public static Message ExpectedArgument(string argument)
382 {
383 return Message(null, Ids.ExpectedArgument, "{0} is expected to be followed by a value. See -? for additional detail.", argument);
384 }
385
386 public static Message ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
387 {
388 return Message(sourceLineNumbers, Ids.ExpectedAttribute, "The {0}/@{1} attribute was not found; it is required.", elementName, attributeName);
389 }
390
391 public static Message ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attribute1Name, string attribute2Name, Boolean eitherOr)
392 {
393 return Message(sourceLineNumbers, Ids.ExpectedAttribute, "The {0} element must have a value for exactly one of the {1} or {2} attributes.", elementName, attribute1Name, attribute2Name, eitherOr);
394 }
395
396 public static Message ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
397 {
398 return Message(sourceLineNumbers, Ids.ExpectedAttribute, "The {0}/@{1} attribute was not found; it is required when attribute {2} is specified.", elementName, attributeName, otherAttributeName);
399 }
400
401 public static Message ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue)
402 {
403 return Message(sourceLineNumbers, Ids.ExpectedAttribute, "The {0}/@{1} attribute was not found; it is required when attribute {2} has a value of '{3}'.", elementName, attributeName, otherAttributeName, otherAttributeValue);
404 }
405
406 public static Message ExpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue, Boolean otherAttributeValueUnless)
407 {
408 return Message(sourceLineNumbers, Ids.ExpectedAttribute, "The {0}/@{1} attribute was not found; it is required unless the attribute {2} has a value of '{3}'.", elementName, attributeName, otherAttributeName, otherAttributeValue, otherAttributeValueUnless);
409 }
410
411 public static Message ExpectedAttributeInElementOrParent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName)
412 {
413 return Message(sourceLineNumbers, Ids.ExpectedAttributeInElementOrParent, "The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2} element.", elementName, attributeName, parentElementName);
414 }
415
416 public static Message ExpectedAttributeInElementOrParent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName, string parentAttributeName)
417 {
418 return Message(sourceLineNumbers, Ids.ExpectedAttributeInElementOrParent, "The {0}/@{1} attribute was not found or empty; it is required, or it can be specified in the parent {2}/@{3} attribute.", elementName, attributeName, parentElementName, parentAttributeName);
419 }
420
421 public static Message ExpectedAttributeWithValueWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeName2)
422 {
423 return Message(sourceLineNumbers, Ids.ExpectedAttributeWithValueWithOtherAttribute, "The {0}/@{1} attribute is required to have a value when attribute {2} is present.", elementName, attributeName, attributeName2);
424 }
425
426 public static Message ExpectedAttributeOrElement(SourceLineNumber sourceLineNumbers, string parentElement, string attribute, string childElement)
427 {
428 return Message(sourceLineNumbers, Ids.ExpectedAttributeOrElement, "Element '{0}' missing attribute '{1}' or child element '{2}'. Exactly one of those is required.", parentElement, attribute, childElement);
429 }
430
431 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
432 {
433 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1} or {2} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2);
434 }
435
436 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3)
437 {
438 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1}, {2}, or {3} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2, attributeName3);
439 }
440
441 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4)
442 {
443 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1}, {2}, {3}, or {4} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2, attributeName3, attributeName4);
444 }
445
446 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5)
447 {
448 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1}, {2}, {3}, {4}, or {5} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5);
449 }
450
451 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6)
452 {
453 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1}, {2}, {3}, {4}, {5}, or {6} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6);
454 }
455
456 public static Message ExpectedAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string attributeName3, string attributeName4, string attributeName5, string attributeName6, string attributeName7)
457 {
458 return Message(sourceLineNumbers, Ids.ExpectedAttributes, "The {0} element's {1}, {2}, {3}, {4}, {5}, {6}, or {7} attribute was not found; one of these is required.", elementName, attributeName1, attributeName2, attributeName3, attributeName4, attributeName5, attributeName6, attributeName7);
459 }
460
461 public static Message ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
462 {
463 return Message(sourceLineNumbers, Ids.ExpectedAttributesWithOtherAttribute, "The {0} element's {1} or {2} attribute was not found; at least one of these attributes must be specified.", elementName, attributeName1, attributeName2);
464 }
465
466 public static Message ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName)
467 {
468 return Message(sourceLineNumbers, Ids.ExpectedAttributesWithOtherAttribute, "The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} is present.", elementName, attributeName1, attributeName2, otherAttributeName);
469 }
470
471 public static Message ExpectedAttributesWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName, string otherAttributeValue)
472 {
473 return Message(sourceLineNumbers, Ids.ExpectedAttributesWithOtherAttribute, "The {0} element's {1} or {2} attribute was not found; one of these is required when attribute {3} has a value of '{4}'.", elementName, attributeName1, attributeName2, otherAttributeName, otherAttributeValue);
474 }
475
476 public static Message ExpectedAttributesWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2, string otherAttributeName)
477 {
478 return Message(sourceLineNumbers, Ids.ExpectedAttributesWithoutOtherAttribute, "The {0} element's {1} or {2} attribute was not found; one of these is required without attribute {3} present.", elementName, attributeName1, attributeName2, otherAttributeName);
479 }
480
481 public static Message ExpectedAttributeWhenElementNotUnderElement(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElementName)
482 {
483 return Message(sourceLineNumbers, Ids.ExpectedAttributeWhenElementNotUnderElement, "The '{0}/@{1}' attribute was not found; it is required when element '{0}' is not nested under a '{2}' element.", elementName, attributeName, parentElementName);
484 }
485
486 public static Message ExpectedAttributeWithElement(SourceLineNumber sourceLineNumbers, string elementName, string attribute, string childElementName)
487 {
488 return Message(sourceLineNumbers, Ids.ExpectedAttributeWithElement, "The {0} element must have attribute '{1}' when child element '{2}' is present.", elementName, attribute, childElementName);
489 }
490
491 public static Message ExpectedAttributeWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
492 {
493 return Message(sourceLineNumbers, Ids.ExpectedAttributeWithoutOtherAttributes, "The {0} element's {1} attribute was not found; it is required without attribute {2} present.", elementName, attributeName, otherAttributeName);
494 }
495
496 public static Message ExpectedAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2)
497 {
498 return Message(sourceLineNumbers, Ids.ExpectedAttributeWithoutOtherAttributes, "The {0} element's {1} attribute was not found; it is required without attribute {2} or {3} present.", elementName, attributeName, otherAttributeName1, otherAttributeName2);
499 }
500
501 public static Message ExpectedBinaryCategory(SourceLineNumber sourceLineNumbers)
502 {
503 return Message(sourceLineNumbers, Ids.ExpectedBinaryCategory, "The Column element specifies a binary column but does not have the correct Category specified. Windows Installer requires binary columns to specify their category as binary. Please set the Category attribute's value to 'Binary'.");
504 }
505
506 public static Message ExpectedClientPatchIdInWixMsp()
507 {
508 return Message(null, Ids.ExpectedClientPatchIdInWixMsp, "The WixMsp is missing the client patch ID. Recompile the patch source files with the latest WiX toolset.");
509 }
510
511 public static Message ExpectedDecompiler(string identifier)
512 {
513 return Message(null, Ids.ExpectedDecompiler, "No decompiler was provided. {0} requires a decompiler.", identifier);
514 }
515
516 public static Message ExpectedDirectory(string directory)
517 {
518 return Message(null, Ids.ExpectedDirectory, "The directory '{0}' could not be found.", directory);
519 }
520
521 public static Message ExpectedDirectoryGotFile(string option, string path)
522 {
523 return Message(null, Ids.ExpectedDirectoryGotFile, "The {0} option requires a directory, but the provided path is a file: {1}", option, path);
524 }
525
526 public static Message ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName)
527 {
528 return Message(sourceLineNumbers, Ids.ExpectedElement, "A {0} element must have at least one child element.", elementName);
529 }
530
531 public static Message ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName)
532 {
533 return Message(sourceLineNumbers, Ids.ExpectedElement, "A {0} element must have at least one child element of type {1}.", elementName, childName);
534 }
535
536 public static Message ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2)
537 {
538 return Message(sourceLineNumbers, Ids.ExpectedElement, "A {0} element must have at least one child element of type {1} or {2}.", elementName, childName1, childName2);
539 }
540
541 public static Message ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2, string childName3)
542 {
543 return Message(sourceLineNumbers, Ids.ExpectedElement, "A {0} element must have at least one child element of type {1}, {2}, or {3}.", elementName, childName1, childName2, childName3);
544 }
545
546 public static Message ExpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childName1, string childName2, string childName3, string childName4)
547 {
548 return Message(sourceLineNumbers, Ids.ExpectedElement, "A {0} element must have at least one child element of type {1}, {2}, {3}, or {4}.", elementName, childName1, childName2, childName3, childName4);
549 }
550
551 public static Message ExpectedEndElement(SourceLineNumber sourceLineNumbers, string elementName)
552 {
553 return Message(sourceLineNumbers, Ids.ExpectedEndElement, "The end element matching the '{0}' start element was not found.", elementName);
554 }
555
556 public static Message ExpectedEndforeach(SourceLineNumber sourceLineNumbers)
557 {
558 return Message(sourceLineNumbers, Ids.ExpectedEndforeach, "A <?foreach?> statement was found that had no matching <?endforeach?>.");
559 }
560
561 public static Message ExpectedExpressionAfterNot(SourceLineNumber sourceLineNumbers, string expression)
562 {
563 return Message(sourceLineNumbers, Ids.ExpectedExpressionAfterNot, "Expecting an argument for 'NOT' in expression '{0}'.", expression);
564 }
565
566 public static Message ExpectedFileGotDirectory(string option, string path)
567 {
568 return Message(null, Ids.ExpectedFileGotDirectory, "The {0} option requires a file, but the provided path is a directory: {1}", option, path);
569 }
570
571 public static Message ExpectedMediaCabinet(SourceLineNumber sourceLineNumbers, string fileId, int diskId)
572 {
573 return Message(sourceLineNumbers, Ids.ExpectedMediaCabinet, "The file '{0}' should be compressed but is not part of a compressed media. Files will be compressed if either the File/@Compressed or Package/@Compressed attributes are set to 'yes'. This can be fixed by setting the Media/@Cabinet attribute for media '{1}'.", fileId, diskId);
574 }
575
576 public static Message ExpectedMediaRowsInWixMsp()
577 {
578 return Message(null, Ids.ExpectedMediaRowsInWixMsp, "The WixMsp has no media rows defined.");
579 }
580
581 public static Message ExpectedParentWithAttribute(SourceLineNumber sourceLineNumbers, string parentElement, string attribute, string grandparentElement)
582 {
583 return Message(sourceLineNumbers, Ids.ExpectedParentWithAttribute, "When the {0}/@{1} attribute is specified, the {0} element must be nested under a {2} element.", parentElement, attribute, grandparentElement);
584 }
585
586 public static Message ExpectedPatchIdInWixMsp()
587 {
588 return Message(null, Ids.ExpectedPatchIdInWixMsp, "The WixMsp is missing the patch ID.");
589 }
590
591 public static Message ExpectedRowInPatchCreationPackage(string tableName)
592 {
593 return Message(null, Ids.ExpectedRowInPatchCreationPackage, "Could not find a row in the '{0}' table for this patch creation package. Patch creation packages must contain at least one row in the '{0}' table.", tableName);
594 }
595
596 public static Message ExpectedSignedCabinetName(SourceLineNumber sourceLineNumbers)
597 {
598 return Message(sourceLineNumbers, Ids.ExpectedSignedCabinetName, "The Media/@Cabinet attribute was not found; it is required when this element contains a DigitalSignature child element. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or specify a valid external cabinet name via the Cabinet attribute.");
599 }
600
601 public static Message ExpectedTableInMergeModule(string identifier)
602 {
603 return Message(null, Ids.ExpectedTableInMergeModule, "The table '{0}' was expected but was missing.", identifier);
604 }
605
606 public static Message ExpectedVariable(SourceLineNumber sourceLineNumbers, string expression)
607 {
608 return Message(sourceLineNumbers, Ids.ExpectedVariable, "A required variable was missing in the expression '{0}'.", expression);
609 }
610
611 public static Message ExpectedWixVariableValue(string variableId)
612 {
613 return Message(null, Ids.ExpectedWixVariableValue, "The WiX variable '{0}' was declared without a value. Please specify a value for the variable.", variableId);
614 }
615
616 public static Message FamilyNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length)
617 {
618 return Message(sourceLineNumbers, Ids.FamilyNameTooLong, "The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long for a family name because the maximum allowed length is 8 characters long.", elementName, attributeName, value, length);
619 }
620
621 public static Message FeatureCannotFavorAndDisallowAdvertise(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string otherAttributeName, string otherValue)
622 {
623 return Message(sourceLineNumbers, Ids.FeatureCannotFavorAndDisallowAdvertise, "The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'. These options would ask the installer to disallow the advertised state for this feature while at the same time favoring it.", elementName, attributeName, value, otherAttributeName, otherValue);
624 }
625
626 public static Message FeatureCannotFollowParentAndFavorLocalOrSource(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
627 {
628 return Message(sourceLineNumbers, Ids.FeatureCannotFollowParentAndFavorLocalOrSource, "The {0}/@{1} attribute cannot be specified if the {2} attribute's value is '{3}'. These options would ask the installer to force this feature to follow the parent installation state and simultaneously favor a particular installation state just for this feature.", elementName, attributeName, otherAttributeName, otherValue);
629 }
630
631 public static Message FeatureConfigurableDirectoryNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
632 {
633 return Message(sourceLineNumbers, Ids.FeatureConfigurableDirectoryNotUppercase, "The {0}/@{1} attribute's value, '{2}', contains lowercase characters. Since this directory is user-configurable, it needs to be a public property. This means the value must be completely uppercase.", elementName, attributeName, value);
634 }
635
636 public static Message FeatureNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
637 {
638 return Message(sourceLineNumbers, Ids.FeatureNameTooLong, "The {0}/@{1} attribute with value '{2}', is too long for a feature name. Due to limitations in the Windows Installer, feature names cannot be longer than 38 characters in length.", elementName, attributeName, attributeValue);
639 }
640
641 public static Message FileIdentifierNotFound(SourceLineNumber sourceLineNumbers, string fileIdentifier)
642 {
643 return Message(sourceLineNumbers, Ids.FileIdentifierNotFound, "The file row with identifier '{0}' could not be found.", fileIdentifier);
644 }
645
646 public static Message FileInUse(SourceLineNumber sourceLineNumbers, string file)
647 {
648 return Message(sourceLineNumbers, Ids.FileInUse, "The process can not access the file '{0}' because it is being used by another process.", file);
649 }
650
651 public static Message FileNotFound(SourceLineNumber sourceLineNumbers, string file)
652 {
653 return Message(sourceLineNumbers, Ids.FileNotFound, "The system cannot find the file '{0}'.", file);
654 }
655
656 public static Message FileNotFound(SourceLineNumber sourceLineNumbers, string file, string fileType)
657 {
658 return Message(sourceLineNumbers, Ids.FileNotFound, "The system cannot find the file '{0}' with type '{1}'.", file, fileType);
659 }
660
661 public static Message FileNotFound(SourceLineNumber sourceLineNumbers, string file, string fileType, IEnumerable<string> checkedPaths)
662 {
663 var combinedCheckedPaths = String.Join(", ", checkedPaths);
664 return Message(sourceLineNumbers, Ids.FileNotFound, "The system cannot find the file '{0}' with type '{1}'. The following paths were checked: {2}", file, fileType, combinedCheckedPaths);
665 }
666
667 public static Message FileOrDirectoryPathRequired(string parameter)
668 {
669 return Message(null, Ids.FileOrDirectoryPathRequired, "The parameter '{0}' must be followed by a file or directory path. To specify a directory path the string must end with a backslash, for example: \"C:\\Path\\\".", parameter);
670 }
671
672 public static Message FilePathRequired(string parameter)
673 {
674 return Message(null, Ids.FilePathRequired, "The parameter '{0}' must be followed by a file path.", parameter);
675 }
676
677 public static Message FileTooLarge(SourceLineNumber sourceLineNumbers, string fileName)
678 {
679 return Message(sourceLineNumbers, Ids.FileTooLarge, "'{0}' is too large, file size must be less than 2147483648.", fileName);
680 }
681
682 public static Message FileWriteError(string path, string error)
683 {
684 return Message(null, Ids.FileWriteError, "Error writing to the path: '{0}'. Error message: '{1}'", path, error);
685 }
686
687 public static Message FinishCabFailed()
688 {
689 return Message(null, Ids.FinishCabFailed, "An error (E_FAIL) was returned while finalizing a CAB file. This most commonly happens when creating a CAB file with more than 65535 files in it or a compressed size greater than 2GB. Either reduce the number of files in your installation package or split your installation package's files into more than one CAB file using the Media element.");
690 }
691
692 public static Message FullTempDirectory(string prefix, string directory)
693 {
694 return Message(null, Ids.FullTempDirectory, "Unable to create temporary file. A common cause is that too many files that have names beginning with '{0}' are present. Delete any unneeded files in the '{1}' directory and try again.", prefix, directory);
695 }
696
697 public static Message GACAssemblyIdentityWarning(SourceLineNumber sourceLineNumbers, string fileName, string assemblyName)
698 {
699 return Message(sourceLineNumbers, Ids.GACAssemblyIdentityWarning, "The destination name of file '{0}' does not match its assembly name '{1}' in your authoring. This will cause an installation failure for this assembly, because it will be installed to the Global Assembly Cache. To fix this error, update File/@Name of file '{0}' to be the actual name of the assembly.", fileName, assemblyName);
700 }
701
702 public static Message GacAssemblyNoStrongName(SourceLineNumber sourceLineNumbers, string assemblyName, string componentName)
703 {
704 return Message(sourceLineNumbers, Ids.GacAssemblyNoStrongName, "Assembly {0} in component {1} has no strong name and has been marked to be placed in the GAC. All assemblies installed to the GAC must have a valid strong name.", assemblyName, componentName);
705 }
706
707 public static Message GenericReadNotAllowed(SourceLineNumber sourceLineNumbers)
708 {
709 return Message(sourceLineNumbers, Ids.GenericReadNotAllowed, "Permission elements cannot have GenericRead as the only permission specified. Include at least one other permission.");
710 }
711
712 public static Message GuidContainsLowercaseLetters(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
713 {
714 return Message(sourceLineNumbers, Ids.GuidContainsLowercaseLetters, "The {0}/@{1} attribute's value, '{2}', is a mixed-case guid. All letters in a guid value should be uppercase.", elementName, attributeName, value);
715 }
716
717 public static Message HarvestSourceNotSpecified()
718 {
719 return Message(null, Ids.HarvestSourceNotSpecified, "A harvest source must be specified after the harvest type and can be followed by harvester arguments.");
720 }
721
722 public static Message HarvestTypeNotFound()
723 {
724 return Message(null, Ids.HarvestTypeNotFound, "The harvest type was not found in the list of loaded Heat extensions.");
725 }
726
727 public static Message HarvestTypeNotFound(string harvestType)
728 {
729 return Message(null, Ids.HarvestTypeNotFound, "The harvest type '{0}' was specified. Harvest types cannot start with a '-'. Remove the '-' to specify a valid harvest type.", harvestType);
730 }
731
732 public static Message IdentifierNotFound(string type, string identifier)
733 {
734 return Message(null, Ids.IdentifierNotFound, "An expected identifier ('{1}', of type '{0}') was not found.", type, identifier);
735 }
736
737 public static Message IdentifierTooLongError(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int maxLength)
738 {
739 return Message(sourceLineNumbers, Ids.IdentifierTooLongError, "The {0}/@{1} attribute's value, '{2}', is too long. {0}/@{1} attribute's must be {3} characters long or less.", elementName, attributeName, value, maxLength);
740 }
741
742 public static Message IllegalAttributeExceptOnElement(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string expectedElementName)
743 {
744 return Message(sourceLineNumbers, Ids.IllegalAttributeExceptOnElement, "The {1} attribute can only be specified on the {2} element.", elementName, attributeName, expectedElementName);
745 }
746
747 public static Message IllegalAttributeInMergeModule(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
748 {
749 return Message(sourceLineNumbers, Ids.IllegalAttributeInMergeModule, "The {0}/@{1} attribute cannot be specified in a merge module.", elementName, attributeName);
750 }
751
752 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1)
753 {
754 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}'.", elementName, attributeName, value, legalValue1);
755 }
756
757 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2)
758 {
759 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', or '{4}'.", elementName, attributeName, value, legalValue1, legalValue2);
760 }
761
762 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3)
763 {
764 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', or '{5}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3);
765 }
766
767 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4)
768 {
769 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', or '{6}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4);
770 }
771
772 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5)
773 {
774 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', or '{7}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5);
775 }
776
777 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6)
778 {
779 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', or '{8}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6);
780 }
781
782 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6, string legalValue7)
783 {
784 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', or '{9}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7);
785 }
786
787 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6, string legalValue7, string legalValue8)
788 {
789 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', or '{10}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7, legalValue8);
790 }
791
792 public static Message IllegalAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValue1, string legalValue2, string legalValue3, string legalValue4, string legalValue5, string legalValue6, string legalValue7, string legalValue8, string legalValue9, string legalValue10, string legalValue11, string legalValue12, string legalValue13, string legalValue14, string legalValue15, string legalValue16, string legalValue17, string legalValue18, string legalValue19, string legalValue20, string legalValue21, string legalValue22, string legalValue23, string legalValue24, string legalValue25, string legalValue26)
793 {
794 return Message(sourceLineNumbers, Ids.IllegalAttributeValue, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}', '{14}', '{15}', '{16}', '{17}', '{18}', '{19}', '{20}', '{21}', '{22}', '{23}', '{24}', '{25}', '{26}', '{27}', or '{28}'.", elementName, attributeName, value, legalValue1, legalValue2, legalValue3, legalValue4, legalValue5, legalValue6, legalValue7, legalValue8, legalValue9, legalValue10, legalValue11, legalValue12, legalValue13, legalValue14, legalValue15, legalValue16, legalValue17, legalValue18, legalValue19, legalValue20, legalValue21, legalValue22, legalValue23, legalValue24, legalValue25, legalValue26);
795 }
796
797 public static Message IllegalAttributeValueWhenNested(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attrivuteValue, string parentElementName)
798 {
799 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWhenNested, "The {0}/@{1} attribute value, '{2}', cannot be specified when the {0} element is nested underneath a {3} element.", elementName, attributeName, attrivuteValue, parentElementName);
800 }
801
802 public static Message IllegalAttributeValueWithIllegalList(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string illegalValueList)
803 {
804 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithIllegalList, "The {0}/@{1} attribute's value, '{2}', is one of the illegal options: {3}.", elementName, attributeName, value, illegalValueList);
805 }
806
807 public static Message IllegalAttributeValueWithLegalList(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string legalValueList)
808 {
809 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithLegalList, "The {0}/@{1} attribute's value, '{2}', is not one of the legal options: {3}.", elementName, attributeName, value, legalValueList);
810 }
811
812 public static Message IllegalAttributeValueWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName)
813 {
814 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithOtherAttribute, "The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present.", elementName, attributeName, attributeValue, otherAttributeName);
815 }
816
817 public static Message IllegalAttributeValueWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName, string otherAttributeValue)
818 {
819 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithOtherAttribute, "The {0}/@{1} attribute's value, '{2}', cannot be specified with attribute {3} present with value '{4}'.", elementName, attributeName, attributeValue, otherAttributeName, otherAttributeValue);
820 }
821
822 public static Message IllegalAttributeValueWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName, string otherAttributeValue)
823 {
824 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithoutOtherAttribute, "The {0}/@{1} attribute's value, '{2}', can only be specified with attribute {3} present with value '{4}'.", elementName, attributeName, attributeValue, otherAttributeName, otherAttributeValue);
825 }
826
827 public static Message IllegalAttributeValueWithoutOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string otherAttributeName)
828 {
829 return Message(sourceLineNumbers, Ids.IllegalAttributeValueWithoutOtherAttribute, "The {0}/@{1} attribute's value, '{2}', cannot be specified without attribute {3} present.", elementName, attributeName, attributeValue, otherAttributeName);
830 }
831
832 public static Message IllegalAttributeWhenAdvertised(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
833 {
834 return Message(sourceLineNumbers, Ids.IllegalAttributeWhenAdvertised, "The {0}/@{1} attribute cannot be specified because the element is advertised.", elementName, attributeName);
835 }
836
837 public static Message IllegalAttributeWhenNested(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string parentElement)
838 {
839 return Message(sourceLineNumbers, Ids.IllegalAttributeWhenNested, "The {0}/@{1} attribute cannot be specified when the {0} element is nested underneath a {2} element. If this {0} is a member of a ComponentGroup where ComponentGroup/@{1} is set, then the {0}/@{1} attribute should be removed.", elementName, attributeName, parentElement);
840 }
841
842 public static Message IllegalAttributeWithInnerText(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
843 {
844 return Message(sourceLineNumbers, Ids.IllegalAttributeWithInnerText, "The {0}/@{1} attribute cannot be specified when the element has body text as well. Specify either the attribute or the body, but not both.", elementName, attributeName);
845 }
846
847 public static Message IllegalAttributeWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
848 {
849 return Message(sourceLineNumbers, Ids.IllegalAttributeWithOtherAttribute, "The {0}/@{1} attribute cannot be specified when attribute {2} is present.", elementName, attributeName, otherAttributeName);
850 }
851
852 public static Message IllegalAttributeWithOtherAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherAttributeValue)
853 {
854 return Message(sourceLineNumbers, Ids.IllegalAttributeWithOtherAttribute, "The {0}/@{1} attribute cannot be specified when attribute {2} is present with value '{3}'.", elementName, attributeName, otherAttributeName, otherAttributeValue);
855 }
856
857 public static Message IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2)
858 {
859 return Message(sourceLineNumbers, Ids.IllegalAttributeWithOtherAttributes, "The {0}/@{1} attribute cannot be specified when attribute {2} or {3} is also present.", elementName, attributeName, otherAttributeName1, otherAttributeName2);
860 }
861
862 public static Message IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3)
863 {
864 return Message(sourceLineNumbers, Ids.IllegalAttributeWithOtherAttributes, "The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, or {4} is also present.", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3);
865 }
866
867 public static Message IllegalAttributeWithOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3, string otherAttributeName4)
868 {
869 return Message(sourceLineNumbers, Ids.IllegalAttributeWithOtherAttributes, "The {0}/@{1} attribute cannot be specified when attribute {2}, {3}, {4}, or {5} is also present.", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3, otherAttributeName4);
870 }
871
872 public static Message IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName)
873 {
874 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutOtherAttributes, "The {0}/@{1} attribute can only be specified with the following attribute {2} present.", elementName, attributeName, otherAttributeName);
875 }
876
877 public static Message IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2)
878 {
879 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutOtherAttributes, "The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present.", elementName, attributeName, otherAttributeName1, otherAttributeName2);
880 }
881
882 public static Message IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeValue, Boolean uniquifier)
883 {
884 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutOtherAttributes, "The {0}/@{1} attribute can only be specified with one of the following attributes: {2} or {3} present with value '{4}'.", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeValue, uniquifier);
885 }
886
887 public static Message IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3)
888 {
889 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutOtherAttributes, "The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, or {4} present.", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3);
890 }
891
892 public static Message IllegalAttributeWithoutOtherAttributes(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName1, string otherAttributeName2, string otherAttributeName3, string otherAttributeName4)
893 {
894 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutOtherAttributes, "The {0}/@{1} attribute can only be specified with one of the following attributes: {2}, {3}, {4}, or {5} present.", elementName, attributeName, otherAttributeName1, otherAttributeName2, otherAttributeName3, otherAttributeName4);
895 }
896
897 public static Message IllegalBinderClassName()
898 {
899 return Message(null, Ids.IllegalBinderClassName, "Illegal binder class name specified for -binder command line option.");
900 }
901
902 public static Message IllegalCabbingThreadCount(string numThreads)
903 {
904 return Message(null, Ids.IllegalCabbingThreadCount, "Illegal number of threads to create cabinets: '{0}' for -ct <N> command line option. Specify the number of threads to use like -ct 2.", numThreads);
905 }
906
907 public static Message IllegalCharactersInPath(string pathName)
908 {
909 return Message(null, Ids.IllegalCharactersInPath, "Illegal characters in path '{0}'. Ensure you provided a valid path to the file.", pathName);
910 }
911
912 public static Message IllegalCodepage(int codepage)
913 {
914 return Message(null, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage);
915 }
916
917 public static Message IllegalCodepage(SourceLineNumber sourceLineNumbers, int codepage)
918 {
919 return Message(sourceLineNumbers, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage);
920 }
921
922 public static Message IllegalCodepageAttribute(SourceLineNumber sourceLineNumbers, string codepage, string elementName, string attributeName)
923 {
924 return Message(sourceLineNumbers, Ids.IllegalCodepageAttribute, "The code page '{0}' is not a valid Windows code page. Please check the {1}/@{2} attribute value in your source file.", codepage, elementName, attributeName);
925 }
926
927 public static Message IllegalColumnName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
928 {
929 return Message(sourceLineNumbers, Ids.IllegalColumnName, "The {0}/@{1} attribute's value, '{2}', is not a legal column name. It will collide with the sentinel values used in the _TransformView table.", elementName, attributeName, value);
930 }
931
932 public static Message IllegalCommandlineArgumentCombination(string arg1, string arg2)
933 {
934 return Message(null, Ids.IllegalCommandlineArgumentCombination, "'-{0}' cannot be specfied in combination with '-{1}'.", arg1, arg2);
935 }
936
937 public static Message IllegalComponentWithAutoGeneratedGuid(SourceLineNumber sourceLineNumbers)
938 {
939 return Message(sourceLineNumbers, Ids.IllegalComponentWithAutoGeneratedGuid, "The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components using a Directory as a KeyPath or containing ODBCDataSource child elements cannot use an automatically generated guid. Make sure your component doesn't have a Directory as the KeyPath and move any ODBCDataSource child elements to components with explicit component guids.");
940 }
941
942 public static Message IllegalComponentWithAutoGeneratedGuid(SourceLineNumber sourceLineNumbers, Boolean registryKeyPath)
943 {
944 return Message(sourceLineNumbers, Ids.IllegalComponentWithAutoGeneratedGuid, "The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with registry keypaths and files cannot use an automatically generated guid. Create multiple components, each with one file and/or one registry value keypath, to use automatically generated guids.", registryKeyPath);
945 }
946
947 public static Message IllegalCompressionLevel(SourceLineNumber sourceLineNumbers, string compressionLevel)
948 {
949 return Message(sourceLineNumbers, Ids.IllegalCompressionLevel, "The compression level '{0}' is not valid. Valid values are 'none', 'low', 'medium', 'high', and 'mszip'.", compressionLevel);
950 }
951
952 public static Message IllegalDefineStatement(SourceLineNumber sourceLineNumbers, string defineStatement)
953 {
954 return Message(sourceLineNumbers, Ids.IllegalDefineStatement, "The define statement '<?define {0}?>' is not well-formed. Define statements should be in the form <?define variableName = \"variable value\"?>.", defineStatement);
955 }
956
957 public static Message IllegalEmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
958 {
959 return Message(sourceLineNumbers, Ids.IllegalEmptyAttributeValue, "The {0}/@{1} attribute's value cannot be an empty string. If a value is not required, simply remove the entire attribute.", elementName, attributeName);
960 }
961
962 public static Message IllegalEmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string defaultValue)
963 {
964 return Message(sourceLineNumbers, Ids.IllegalEmptyAttributeValue, "The {0}/@{1} attribute's value cannot be an empty string. To use the default value \"{2}\", simply remove the entire attribute.", elementName, attributeName, defaultValue);
965 }
966
967 public static Message IllegalEnvironmentVariable(string environmentVariable, string value)
968 {
969 return Message(null, Ids.IllegalEnvironmentVariable, "The {0} environment variable is set to an invalid value of '{1}'.", environmentVariable, value);
970 }
971
972 public static Message IllegalFamilyName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
973 {
974 return Message(sourceLineNumbers, Ids.IllegalFamilyName, "The {0}/@{1} attribute's value, '{2}', contains illegal characters for a family name. Legal values include letters, numbers, and underscores.", elementName, attributeName, value);
975 }
976
977 public static Message IllegalFileCompressionAttributes(SourceLineNumber sourceLineNumbers)
978 {
979 return Message(sourceLineNumbers, Ids.IllegalFileCompressionAttributes, "Cannot have both the MsidbFileAttributesCompressed and MsidbFileAttributesNoncompressed options set in a file attributes column.");
980 }
981
982 public static Message IllegalForeach(SourceLineNumber sourceLineNumbers, string foreachStatement)
983 {
984 return Message(sourceLineNumbers, Ids.IllegalForeach, "The foreach statement '{0}' is illegal. The proper format for foreach is <?foreach varName in valueList?>.", foreachStatement);
985 }
986
987 public static Message IllegalGeneratedGuidComponentUnversionedKeypath(SourceLineNumber sourceLineNumbers)
988 {
989 return Message(sourceLineNumbers, Ids.IllegalGeneratedGuidComponentUnversionedKeypath, "The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component's keypath is not versioned. Create multiple components to use automatically generated guids.");
990 }
991
992 public static Message IllegalGeneratedGuidComponentVersionedNonkeypath(SourceLineNumber sourceLineNumbers)
993 {
994 return Message(sourceLineNumbers, Ids.IllegalGeneratedGuidComponentVersionedNonkeypath, "The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with more than one file cannot use an automatically generated guid unless a versioned file is the keypath and the other files are unversioned. This component has a non-keypath file that is versioned. Create multiple components to use automatically generated guids.");
995 }
996
997 public static Message IllegalGuidValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
998 {
999 return Message(sourceLineNumbers, Ids.IllegalGuidValue, "The {0}/@{1} attribute's value, '{2}', is not a legal guid value.", elementName, attributeName, value);
1000 }
1001
1002 public static Message IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string value)
1003 {
1004 return Message(sourceLineNumbers, Ids.IllegalIdentifier, "The {0} element's value, '{1}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.", elementName, value);
1005 }
1006
1007 public static Message IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int disambiguator)
1008 {
1009 return Message(sourceLineNumbers, Ids.IllegalIdentifier, "The {0}/@{1} attribute's value is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.", elementName, attributeName, disambiguator);
1010 }
1011
1012 public static Message IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1013 {
1014 return Message(sourceLineNumbers, Ids.IllegalIdentifier, "The {0}/@{1} attribute's value, '{2}', is not a legal identifier. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.", elementName, attributeName, value);
1015 }
1016
1017 public static Message IllegalIdentifier(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string identifier)
1018 {
1019 return Message(sourceLineNumbers, Ids.IllegalIdentifier, "The {0}/@{1} attribute's value '{2}' contains an illegal identifier '{3}'. Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or periods (.). Every identifier must begin with either a letter or an underscore.", elementName, attributeName, value, identifier);
1020 }
1021
1022 public static Message IllegalIdentifierLooksLikeFormatted(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1023 {
1024 return Message(sourceLineNumbers, Ids.IllegalIdentifierLooksLikeFormatted, "The {0}/@{1} attribute's value, '{2}', is not a legal identifier. The {0}/@{1} attribute does not support formatted string values, such as property names enclosed in brackets ([LIKETHIS]). The value must be the identifier of another element, such as the Directory/@Id attribute value.", elementName, attributeName, value);
1025 }
1026
1027 public static Message IllegalInlineLocVariable(SourceLineNumber sourceLineNumbers, string variableName, string variableValue)
1028 {
1029 return Message(sourceLineNumbers, Ids.IllegalInlineLocVariable, "The localization variable '{0}' specifies an illegal inline default value of '{1}'. Localization variables cannot specify default values inline, instead the value should be specified in a WiX localization (.wxl) file.", variableName, variableValue);
1030 }
1031
1032 public static Message IllegalIntegerInExpression(SourceLineNumber sourceLineNumbers, string expression)
1033 {
1034 return Message(sourceLineNumbers, Ids.IllegalIntegerInExpression, "An illegal number was found in the expression '{0}'.", expression);
1035 }
1036
1037 public static Message IllegalIntegerValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1038 {
1039 return Message(sourceLineNumbers, Ids.IllegalIntegerValue, "The {0}/@{1} attribute's value, '{2}', is not a legal integer value. Legal integer values are from -2,147,483,648 to 2,147,483,647.", elementName, attributeName, value);
1040 }
1041
1042 public static Message IllegalLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1043 {
1044 return Message(sourceLineNumbers, Ids.IllegalLongFilename, "The {0}/@{1} attribute's value, '{2}', is not a valid filename because it contains illegal characters. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \\ ? | > < : / * \".", elementName, attributeName, value);
1045 }
1046
1047 public static Message IllegalLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string filename)
1048 {
1049 return Message(sourceLineNumbers, Ids.IllegalLongFilename, "The {0}/@{1} attribute's value '{2}' contains a invalid filename '{3}'. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \\ ? | > < : / * \".", elementName, attributeName, value, filename);
1050 }
1051
1052 public static Message IllegalLongValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1053 {
1054 return Message(sourceLineNumbers, Ids.IllegalLongValue, "The {0}/@{1} attribute's value, '{2}', is not a legal long value. Legal long values are from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.", elementName, attributeName, value);
1055 }
1056
1057 public static Message IllegalModuleExclusionLanguageAttributes(SourceLineNumber sourceLineNumbers)
1058 {
1059 return Message(sourceLineNumbers, Ids.IllegalModuleExclusionLanguageAttributes, "Cannot set both ExcludeLanguage and ExcludeExceptLanguage attributes on a ModuleExclusion element.");
1060 }
1061
1062 public static Message IllegalParentAttributeWhenNested(SourceLineNumber sourceLineNumbers, string parentElementName, string parentAttributeName, string childElement)
1063 {
1064 return Message(sourceLineNumbers, Ids.IllegalParentAttributeWhenNested, "The {0}/@{1} attribute cannot be specified when a {2} element is nested underneath the {0} element.", parentElementName, parentAttributeName, childElement);
1065 }
1066
1067 public static Message IllegalPathForGeneratedComponentGuid(SourceLineNumber sourceLineNumbers, string componentName, string keyFilePath)
1068 {
1069 return Message(sourceLineNumbers, Ids.IllegalPathForGeneratedComponentGuid, "The component '{0}' has a key file with path '{1}'. Since this path is not rooted in one of the standard directories (like ProgramFilesFolder), this component does not fit the criteria for having an automatically generated guid. (This error may also occur if a path contains a likely standard directory such as nesting a directory with name \"Common Files\" under ProgramFilesFolder.)", componentName, keyFilePath);
1070 }
1071
1072 public static Message IllegalPropertyCustomActionAttributes(SourceLineNumber sourceLineNumbers)
1073 {
1074 return Message(sourceLineNumbers, Ids.IllegalPropertyCustomActionAttributes, "The CustomAction sets a property but its Execute attribute is not 'immediate' (the default). Property-setting custom actions cannot be deferred.\"");
1075 }
1076
1077 public static Message IllegalRelativeLongFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1078 {
1079 return Message(sourceLineNumbers, Ids.IllegalRelativeLongFilename, "The {0}/@{1} attribute's value, '{2}', is not a valid relative long name because it contains illegal characters. Legal relative long names contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: ? | > < : / * \".", elementName, attributeName, value);
1080 }
1081
1082 public static Message IllegalRootDirectory(SourceLineNumber sourceLineNumbers, string directoryId)
1083 {
1084 return Message(sourceLineNumbers, Ids.IllegalRootDirectory, "The Directory with Id '{0}' is not a valid root directory. There may only be a single root directory per product or module and its Id attribute value must be 'TARGETDIR' and its Name attribute value must be 'SourceDir'.", directoryId);
1085 }
1086
1087 public static Message IllegalSearchIdForParentDepth(SourceLineNumber sourceLineNumbers, string id, string parentId)
1088 {
1089 return Message(sourceLineNumbers, Ids.IllegalSearchIdForParentDepth, "When the parent DirectorySearch/@Depth attribute is greater than 1 for the DirectorySearch '{1}', the FileSearch/@Id attribute must be absent for FileSearch '{0}' unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'. Remove the FileSearch/@Id attribute for '{0}' to resolve this issue.", id, parentId);
1090 }
1091
1092 public static Message IllegalShortFilename(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1093 {
1094 return Message(sourceLineNumbers, Ids.IllegalShortFilename, "The {0}/@{1} attribute's value, '{2}', is not a valid 8.3-compliant name. Legal names contain no more than 8 non-period characters followed by an optional period and extension of no more than 3 non-period characters. Any character except for the follow may be used: \\ ? | > < : / * \" + , ; = [ ] (space).", elementName, attributeName, value);
1095 }
1096
1097 public static Message IllegalSuppressWarningId(string suppressedId)
1098 {
1099 return Message(null, Ids.IllegalSuppressWarningId, "Illegal value '{0}' for the -sw<N> command line option. Specify a particular warning number, like '-sw6' to suppress the warning with ID 6, or '-sw' alone to suppress all warnings.", suppressedId);
1100 }
1101
1102 public static Message IllegalTargetDirDefaultDir(SourceLineNumber sourceLineNumbers, string defaultDir)
1103 {
1104 return Message(sourceLineNumbers, Ids.IllegalTargetDirDefaultDir, "The 'TARGETDIR' directory has an illegal DefaultDir value of '{0}'. The DefaultDir value is created from the *Name attributes of the Directory element. The TARGETDIR directory is a special directory which must have its Name attribute set to 'SourceDir'.", defaultDir);
1105 }
1106
1107 public static Message IllegalTerminalServerCustomActionAttributes(SourceLineNumber sourceLineNumbers)
1108 {
1109 return Message(sourceLineNumbers, Ids.IllegalTerminalServerCustomActionAttributes, "The CustomAction/@TerminalServerAware attribute's value is 'yes' but the Execute attribute is not 'deferred,' 'rollback,' or 'commit.' Terminal-Server-aware custom actions must be deferred, rollback, or commit custom actions. For more information, see http://msdn.microsoft.com/library/aa372071.aspx.\"");
1110 }
1111
1112 public static Message IllegalValidationArguments()
1113 {
1114 return Message(null, Ids.IllegalValidationArguments, "You may only specify a single default type using -t or specify custom validation using -serr and -val.");
1115 }
1116
1117 public static Message IllegalVersionValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1118 {
1119 return Message(sourceLineNumbers, Ids.IllegalVersionValue, "The {0}/@{1} attribute's value, '{2}', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534.", elementName, attributeName, value);
1120 }
1121
1122 public static Message IllegalWarningIdAsError(string warningId)
1123 {
1124 return Message(null, Ids.IllegalWarningIdAsError, "Illegal value '{0}' for the -wx<N> command line option. Specify a particular warning number, like '-wx6' to display the warning with ID 6 as an error, or '-wx' alone to suppress all warnings.", warningId);
1125 }
1126
1127 public static Message IllegalWixVariablePrefix(SourceLineNumber sourceLineNumbers, string variableId)
1128 {
1129 return Message(sourceLineNumbers, Ids.IllegalWixVariablePrefix, "The WiX variable $(wix.{0}) uses an illegal prefix '$'. Please use the '!' prefix instead.", variableId);
1130 }
1131
1132 public static Message IllegalYesNoAlwaysValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1133 {
1134 return Message(sourceLineNumbers, Ids.IllegalYesNoAlwaysValue, "The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/always value. The only legal values are 'always', 'no' or 'yes'.", elementName, attributeName, value);
1135 }
1136
1137 public static Message IllegalYesNoDefaultValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1138 {
1139 return Message(sourceLineNumbers, Ids.IllegalYesNoDefaultValue, "The {0}/@{1} attribute's value, '{2}', is not a legal yes/no/default value. The only legal values are 'default', 'no' or 'yes'.", elementName, attributeName, value);
1140 }
1141
1142 public static Message IllegalYesNoValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1143 {
1144 return Message(sourceLineNumbers, Ids.IllegalYesNoValue, "The {0}/@{1} attribute's value, '{2}', is not a legal yes/no value. The only legal values are 'no' and 'yes'.", elementName, attributeName, value);
1145 }
1146
1147 public static Message ImplicitComponentKeyPath(SourceLineNumber sourceLineNumbers, string componentId)
1148 {
1149 return Message(sourceLineNumbers, Ids.ImplicitComponentKeyPath, "The component '{0}' does not have an explicit key path specified. If the ordering of the elements under the Component element changes, the key path will also change. To prevent accidental changes, the key path should be set to 'yes' in one of the following locations: Component/@KeyPath, File/@KeyPath, ODBCDataSource/@KeyPath, or Registry/@KeyPath.", componentId);
1150 }
1151
1152 public static Message InlineDirectorySyntaxRequiresPath(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string identifier)
1153 {
1154 return Message(sourceLineNumbers, Ids.InlineDirectorySyntaxRequiresPath, "The {0}/@{1} attribute's value '{2}' only specifies a directory reference. The inline directory syntax requires that at least one directory be specified in addition to the value. For example, use '{3}:\\foo\\' to add a 'foo' directory.", elementName, attributeName, value, identifier);
1155 }
1156
1157 public static Message InsecureBundleFilename(string filename)
1158 {
1159 return Message(null, Ids.InsecureBundleFilename, "The file name '{0}' creates an insecure bundle. Windows will load unnecessary compatibility shims into a bundle with that file name. These compatibility shims can be DLL hijacked allowing attackers to compromise your customers' computer. Choose a different bundle file name.", filename);
1160 }
1161
1162 public static Message InsertInvalidSequenceActionOrder(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionNameBefore, string actionNameAfter, string actionNameNew)
1163 {
1164 return Message(sourceLineNumbers, Ids.InsertInvalidSequenceActionOrder, "Invalid order of actions {1} and {2} in sequence table {0}. Action {3} must occur after {1} and before {2}, but {2} is currently sequenced after {1}. Please fix the ordering or explicitly supply a location for the action {3}.", sequenceTableName, actionNameBefore, actionNameAfter, actionNameNew);
1165 }
1166
1167 public static Message InsertSequenceNoSpace(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionNameBefore, string actionNameAfter, string actionNameNew)
1168 {
1169 return Message(sourceLineNumbers, Ids.InsertSequenceNoSpace, "Not enough space exists to sequence action {3} in table {0}. It must be sequenced after {1} and before {2}, but those two actions are currently sequenced next to each other. Please move one of those actions to allow {3} to be inserted between them.", sequenceTableName, actionNameBefore, actionNameAfter, actionNameNew);
1170 }
1171
1172 public static Message InsufficientVersion(SourceLineNumber sourceLineNumbers, Version currentVersion, Version requiredVersion)
1173 {
1174 return Message(sourceLineNumbers, Ids.InsufficientVersion, "The current version of the toolset is {0}, but version {1} is required.", currentVersion, requiredVersion);
1175 }
1176
1177 public static Message InsufficientVersion(SourceLineNumber sourceLineNumbers, Version currentVersion, Version requiredVersion, string extension)
1178 {
1179 return Message(sourceLineNumbers, Ids.InsufficientVersion, "The current version of the extension '{2}' is {0}, but version {1} is required.", currentVersion, requiredVersion, extension);
1180 }
1181
1182 public static Message IntegralValueOutOfRange(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, int value, int minimum, int maximum)
1183 {
1184 return Message(sourceLineNumbers, Ids.IntegralValueOutOfRange, "The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.", elementName, attributeName, value, minimum, maximum);
1185 }
1186
1187 public static Message IntegralValueOutOfRange(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, long value, long minimum, long maximum)
1188 {
1189 return Message(sourceLineNumbers, Ids.IntegralValueOutOfRange, "The {0}/@{1} attribute's value, '{2}', is not in the range of legal values. Legal values for this attribute are from {3} to {4}.", elementName, attributeName, value, minimum, maximum);
1190 }
1191
1192 public static Message IntegralValueSentinelCollision(SourceLineNumber sourceLineNumbers, int value)
1193 {
1194 return Message(sourceLineNumbers, Ids.IntegralValueSentinelCollision, "The integer value {0} collides with a sentinel value in the compiler code.", value);
1195 }
1196
1197 public static Message IntegralValueSentinelCollision(SourceLineNumber sourceLineNumbers, long value)
1198 {
1199 return Message(sourceLineNumbers, Ids.IntegralValueSentinelCollision, "The long integral value {0} collides with a sentinel value in the compiler code.", value);
1200 }
1201
1202 public static Message InvalidAddedFileRowWithoutSequence(SourceLineNumber sourceLineNumbers, string fileRowId)
1203 {
1204 return Message(sourceLineNumbers, Ids.InvalidAddedFileRowWithoutSequence, "A row has been added to the File table with id '{1}' that does not have a sequence number assigned to it. Create your transform from a pair of msi's instead of xml outputs to get sequences assigned to your File table's rows.", fileRowId);
1205 }
1206
1207 public static Message InvalidAssemblyFile(SourceLineNumber sourceLineNumbers, string assemblyFile, string moreInformation)
1208 {
1209 return Message(sourceLineNumbers, Ids.InvalidAssemblyFile, "The assembly file '{0}' appears to be invalid. Please ensure this is a valid assembly file and that the user has the appropriate access rights to this file. More information: {1}", assemblyFile, moreInformation);
1210 }
1211
1212 public static Message InvalidBundle(string bundleExecutable)
1213 {
1214 return Message(null, Ids.InvalidBundle, "Unable to read bundle executable '{0}'. This is not a valid WiX bundle.", bundleExecutable);
1215 }
1216
1217 public static Message InvalidCabinetTemplate(SourceLineNumber sourceLineNumbers, string cabinetTemplate)
1218 {
1219 return Message(sourceLineNumbers, Ids.InvalidCabinetTemplate, "CabinetTemplate attribute's value '{0}' must contain '{{0}}' and should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the follow may be used: \\ ? | > < : / * \" + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).", cabinetTemplate);
1220 }
1221
1222 public static Message InvalidCommandLineFileName(string fileName, string error)
1223 {
1224 return Message(null, Ids.InvalidCommandLineFileName, "Invalid file name specified on the command line: '{0}'. Error message: '{1}'", fileName, error);
1225 }
1226
1227 public static Message InvalidDateTimeFormat(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1228 {
1229 return Message(sourceLineNumbers, Ids.InvalidDateTimeFormat, "The {0}/@{1} attribute's value '{2}' is not a valid date/time value. A date/time value should follow the format YYYY-MM-DDTHH:mm:ss.", elementName, attributeName, value);
1230 }
1231
1232 public static Message InvalidDocumentElement(SourceLineNumber sourceLineNumbers, string elementName, string fileType, string expectedElementName)
1233 {
1234 return Message(sourceLineNumbers, Ids.InvalidDocumentElement, "The document element name '{0}' is invalid. A WiX {1} file must use '{2}' as the document element name.", elementName, fileType, expectedElementName);
1235 }
1236
1237 public static Message InvalidEmbeddedUIFileName(SourceLineNumber sourceLineNumbers, string codepage)
1238 {
1239 return Message(sourceLineNumbers, Ids.InvalidEmbeddedUIFileName, "The EmbeddedUI/@Name attribute value, '{0}', does not contain an extension. Windows Installer will not load an embedded UI DLL without an extension. Include an extension or just omit the Name attribute so it defaults to the file name portion of the Source attribute value.", codepage);
1240 }
1241
1242 public static Message CouldNotFindExtensionInPaths(string extensionPath, IEnumerable<string> checkedPaths)
1243 {
1244 return Message(null, Ids.InvalidExtension, "The extension '{0}' could not be found. Checked paths: {1}", extensionPath, String.Join(", ", checkedPaths));
1245 }
1246
1247 public static Message InvalidExtension(string extension)
1248 {
1249 return Message(null, Ids.InvalidExtension, "The extension '{0}' could not be loaded.", extension);
1250 }
1251
1252 public static Message InvalidExtension(string extension, string invalidReason)
1253 {
1254 return Message(null, Ids.InvalidExtension, "The extension '{0}' could not be loaded because of the following reason: {1}", extension, invalidReason);
1255 }
1256
1257 public static Message InvalidExtension(string extension, string extensionType, string expectedType)
1258 {
1259 return Message(null, Ids.InvalidExtension, "The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}'.", extension, extensionType, expectedType);
1260 }
1261
1262 public static Message InvalidExtension(string extension, string extensionType, string expectedType1, string expectedType2)
1263 {
1264 return Message(null, Ids.InvalidExtension, "The extension '{0}' is the wrong type: '{1}'. The expected type was '{2}' or '{3}'.", extension, extensionType, expectedType1, expectedType2);
1265 }
1266
1267 public static Message InvalidExtensionType(string extension, string attributeType)
1268 {
1269 return Message(null, Ids.InvalidExtensionType, "Either '{1}' was not defined in the assembly or the type defined in extension '{0}' could not be loaded.", extension, attributeType);
1270 }
1271
1272 public static Message InvalidExtensionType(string extension, string className, string expectedType)
1273 {
1274 return Message(null, Ids.InvalidExtensionType, "The extension type '{1}' in extension '{0}' does not inherit from the expected class '{2}'.", extension, className, expectedType);
1275 }
1276
1277 public static Message InvalidExtensionType(string extension, string className, string exceptionType, string exceptionMessage)
1278 {
1279 return Message(null, Ids.InvalidExtensionType, "The type '{1}' in extension '{0}' could not be loaded. Exception type '{2}' returned the following message: {3}", extension, className, exceptionType, exceptionMessage);
1280 }
1281
1282 public static Message InvalidFileName(SourceLineNumber sourceLineNumbers, string fileName)
1283 {
1284 return Message(sourceLineNumbers, Ids.InvalidFileName, "Invalid file name '{0}'.", fileName);
1285 }
1286
1287 public static Message InvalidIdt(SourceLineNumber sourceLineNumbers, string idtFile)
1288 {
1289 return Message(sourceLineNumbers, Ids.InvalidIdt, "There was an error importing the file '{0}'.", idtFile);
1290 }
1291
1292 public static Message InvalidIdt(SourceLineNumber sourceLineNumbers, string idtFile, string tableName)
1293 {
1294 return Message(sourceLineNumbers, Ids.InvalidIdt, "There was an error importing table '{1}' from file '{0}'.", idtFile, tableName);
1295 }
1296
1297 public static Message InvalidKeyColumn(string tableName, string columnName, string foreignTableName, int foreignColumnNumber)
1298 {
1299 return Message(null, Ids.InvalidKeyColumn, "The definition for the '{0}' table's '{1}' column is an invalid foreign key relationship to the {2} table's column number {3}. It is not a valid foreign key table column number because it is too small (less than 1) or greater than the count of columns in the foreign table's definition.", tableName, columnName, foreignTableName, foreignColumnNumber);
1300 }
1301
1302 public static Message InvalidKeypathChange(SourceLineNumber sourceLineNumbers, string component, string transformPath)
1303 {
1304 return Message(sourceLineNumbers, Ids.InvalidKeypathChange, "Component '{0}' has a changed keypath in the transform '{1}'. Patches cannot change the keypath of a component.", component, transformPath);
1305 }
1306
1307 public static Message InvalidManifestContent(SourceLineNumber sourceLineNumbers, string fileName)
1308 {
1309 return Message(sourceLineNumbers, Ids.InvalidManifestContent, "The manifest '{0}' does not have the required assembly/assemblyIdentity element.", fileName);
1310 }
1311
1312 public static Message InvalidMergeLanguage(SourceLineNumber sourceLineNumbers, string mergeId, string mergeLanguage)
1313 {
1314 return Message(sourceLineNumbers, Ids.InvalidMergeLanguage, "The Merge element '{0}' specified an invalid language '{1}'. Verify that localization tokens are being properly resolved to a numeric LCID.", mergeId, mergeLanguage);
1315 }
1316
1317 public static Message InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version)
1318 {
1319 return Message(sourceLineNumbers, Ids.InvalidModuleOrBundleVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", moduleOrBundle, version);
1320 }
1321
1322 public static Message InvalidPlatformValue(SourceLineNumber sourceLineNumbers, string value)
1323 {
1324 return Message(sourceLineNumbers, Ids.InvalidPlatformValue, "The Platform attribute has an invalid value {0}. Possible values are x86, x64, or arm64.", value);
1325 }
1326
1327 public static Message InvalidPreprocessorFunction(SourceLineNumber sourceLineNumbers, string variable)
1328 {
1329 return Message(sourceLineNumbers, Ids.InvalidPreprocessorFunction, "Ill-formed preprocessor function '${0}'. Functions must have a prefix (like 'fun.'), a name at least 1 character long, and matching opening and closing parentheses.", variable);
1330 }
1331
1332 public static Message InvalidPreprocessorFunctionAutoVersion(SourceLineNumber sourceLineNumbers)
1333 {
1334 return Message(sourceLineNumbers, Ids.InvalidPreprocessorFunctionAutoVersion, "Invalid AutoVersion template specified.");
1335 }
1336
1337 public static Message InvalidPreprocessorPragma(SourceLineNumber sourceLineNumbers, string variable)
1338 {
1339 return Message(sourceLineNumbers, Ids.InvalidPreprocessorPragma, "Malformed preprocessor pragma '{0}'. Pragmas must have a prefix, a name of at least 1 character long, and be followed by optional arguments.", variable);
1340 }
1341
1342 public static Message InvalidPreprocessorVariable(SourceLineNumber sourceLineNumbers, string variable)
1343 {
1344 return Message(sourceLineNumbers, Ids.InvalidPreprocessorVariable, "Ill-formed preprocessor variable '$({0})'. Variables must have a prefix (like 'var.', 'env.', or 'sys.') and a name at least 1 character long. If the literal string '$({0})' is desired, use '$$({0})'.", variable);
1345 }
1346
1347 public static Message InvalidProductVersion(SourceLineNumber sourceLineNumbers, string version)
1348 {
1349 return Message(sourceLineNumbers, Ids.InvalidProductVersion, "Invalid product version '{0}'. Product version must have a major version less than 256, a minor version less than 256, and a build version less than 65536.", version);
1350 }
1351
1352 public static Message InvalidProductVersion(SourceLineNumber sourceLineNumbers, string version, string packagePath)
1353 {
1354 return Message(sourceLineNumbers, Ids.InvalidProductVersion, "Invalid product version '{0}' in package '{1}'. When included in a bundle, all product version fields in an MSI package must be less than 65536.", version, packagePath);
1355 }
1356
1357 public static Message InvalidRemoveComponent(SourceLineNumber sourceLineNumbers, string component, string feature, string transformPath)
1358 {
1359 return Message(sourceLineNumbers, Ids.InvalidRemoveComponent, "Removing component '{0}' from feature '{1}' is not supported. Either the component was removed or the guid changed in the transform '{2}'. Add the component back, undo the change to the component guid, or remove the entire feature.", component, feature, transformPath);
1360 }
1361
1362 public static Message InvalidSequenceTable(string sequenceTableName)
1363 {
1364 return Message(null, Ids.InvalidSequenceTable, "Found an invalid sequence table '{0}'.", sequenceTableName);
1365 }
1366
1367 public static Message InvalidStringForCodepage(SourceLineNumber sourceLineNumbers, string codepage)
1368 {
1369 return Message(sourceLineNumbers, Ids.InvalidStringForCodepage, "A string was provided with characters that are not available in the specified database code page '{0}'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage);
1370 }
1371
1372 public static Message InvalidStubExe(string filename)
1373 {
1374 return Message(null, Ids.InvalidStubExe, "Stub executable '{0}' is not a valid Win32 executable.", filename);
1375 }
1376
1377 public static Message InvalidSubExpression(SourceLineNumber sourceLineNumbers, string subExpression, string expression)
1378 {
1379 return Message(sourceLineNumbers, Ids.InvalidSubExpression, "Found invalid subexpression '{0}' in expression '{1}'.", subExpression, expression);
1380 }
1381
1382 public static Message InvalidSummaryInfoCodePage(SourceLineNumber sourceLineNumbers, int codePage)
1383 {
1384 return Message(sourceLineNumbers, Ids.InvalidSummaryInfoCodePage, "The code page '{0}' is invalid for summary information. You must specify an ANSI code page.", codePage);
1385 }
1386
1387 public static Message InvalidValidatorMessageType(string type)
1388 {
1389 return Message(null, Ids.InvalidValidatorMessageType, "Unknown validation message type '{0}'.", type);
1390 }
1391
1392 public static Message InvalidVariableDefinition(string variableDefinition)
1393 {
1394 return Message(null, Ids.InvalidVariableDefinition, "The variable definition '{0}' is not valid. Variable definitions should be in the form -dname=value where the value is optional.", variableDefinition);
1395 }
1396
1397 public static Message InvalidWixTransform(string fileName)
1398 {
1399 return Message(null, Ids.InvalidWixTransform, "The file '{0}' is not a valid WiX Transform.", fileName);
1400 }
1401
1402 public static Message InvalidWixXmlNamespace(SourceLineNumber sourceLineNumbers, string wixElementName, string wixNamespace)
1403 {
1404 return Message(sourceLineNumbers, Ids.InvalidWixXmlNamespace, "The {0} element has no namespace. Please make the {0} element look like the following: <{0} xmlns=\"{1}\">.", wixElementName, wixNamespace);
1405 }
1406
1407 public static Message InvalidWixXmlNamespace(SourceLineNumber sourceLineNumbers, string wixElementName, string elementNamespace, string wixNamespace)
1408 {
1409 return Message(sourceLineNumbers, Ids.InvalidWixXmlNamespace, "The {0} element has an incorrect namespace of '{1}'. Please make the {0} element look like the following: <{0} xmlns=\"{2}\">.", wixElementName, elementNamespace, wixNamespace);
1410 }
1411
1412 public static Message InvalidXml(SourceLineNumber sourceLineNumbers, string fileType, string detail)
1413 {
1414 return Message(sourceLineNumbers, Ids.InvalidXml, "Not a valid {0} file; detail: {1}", fileType, detail);
1415 }
1416
1417 public static Message LocalizationVariableUnknown(SourceLineNumber sourceLineNumbers, string variableId)
1418 {
1419 return Message(sourceLineNumbers, Ids.LocalizationVariableUnknown, "The localization variable !(loc.{0}) is unknown. Please ensure the variable is defined.", variableId);
1420 }
1421
1422 public static Message MaximumCabinetSizeForLargeFileSplittingTooLarge(SourceLineNumber sourceLineNumbers, int maximumCabinetSizeForLargeFileSplitting, int maxValueOfMaxCabSizeForLargeFileSplitting)
1423 {
1424 return Message(sourceLineNumbers, Ids.MaximumCabinetSizeForLargeFileSplittingTooLarge, "'{0}' is too large. Reduce the size of maximum cabinet size for large file splitting. The maximum permitted value is '{1}' MB.", maximumCabinetSizeForLargeFileSplitting, maxValueOfMaxCabSizeForLargeFileSplitting);
1425 }
1426
1427 public static Message MaximumUncompressedMediaSizeTooLarge(SourceLineNumber sourceLineNumbers, int maximumUncompressedMediaSize)
1428 {
1429 return Message(sourceLineNumbers, Ids.MaximumUncompressedMediaSizeTooLarge, "'{0}' is too large. Reduce the size of maximum uncompressed media size.", maximumUncompressedMediaSize);
1430 }
1431
1432 public static Message MediaEmbeddedCabinetNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length)
1433 {
1434 return Message(sourceLineNumbers, Ids.MediaEmbeddedCabinetNameTooLong, "The {0}/@{1} attribute's value, '{2}', is {3} characters long. The name is too long for an embedded cabinet. It cannot be more than than 62 characters long.", elementName, attributeName, value, length);
1435 }
1436
1437 public static Message MediaTableCollision(SourceLineNumber sourceLineNumbers)
1438 {
1439 return Message(sourceLineNumbers, Ids.MediaTableCollision, "Only one of Media and MediaTemplate tables should be authored.");
1440 }
1441
1442 public static Message MergeExcludedModule(SourceLineNumber sourceLineNumbers, string mergeId, string otherMergeId)
1443 {
1444 return Message(sourceLineNumbers, Ids.MergeExcludedModule, "The module '{0}' cannot be merged because it excludes or is excluded by the merge module with signature '{1}'.", mergeId, otherMergeId);
1445 }
1446
1447 public static Message MergeFeatureRequired(SourceLineNumber sourceLineNumbers, string tableName, string primaryKeys, string mergeModuleFile, string mergeId)
1448 {
1449 return Message(sourceLineNumbers, Ids.MergeFeatureRequired, "The {0} table contains a row with primary key(s) '{1}' which requires a feature to properly merge from the merge module '{2}'. Nest a MergeRef element with an Id attribute set to the value '{3}' under a Feature element to fix this error.", tableName, primaryKeys, mergeModuleFile, mergeId);
1450 }
1451
1452 public static Message MergeLanguageFailed(SourceLineNumber sourceLineNumbers, Int16 language, string mergeModuleFile)
1453 {
1454 return Message(sourceLineNumbers, Ids.MergeLanguageFailed, "The language '{0}' is supported but uses an invalid language transform in the merge module '{1}'.", language, mergeModuleFile);
1455 }
1456
1457 public static Message MergeLanguageUnsupported(SourceLineNumber sourceLineNumbers, Int16 language, string mergeModuleFile)
1458 {
1459 return Message(sourceLineNumbers, Ids.MergeLanguageUnsupported, "Could not locate language '{0}' (or a transform for this language) in the merge module '{1}'. This is likely due to an incorrectly authored Merge/@Language attribute.", language, mergeModuleFile);
1460 }
1461
1462 public static Message MergeModuleExpectedFeature(SourceLineNumber sourceLineNumbers, string mergeId)
1463 {
1464 return Message(sourceLineNumbers, Ids.MergeModuleExpectedFeature, "The merge module '{0}' is not assigned to a feature. All merge modules must be assigned to at least one feature.", mergeId);
1465 }
1466
1467 public static Message MergePlatformMismatch(SourceLineNumber sourceLineNumbers, string mergeModuleFile)
1468 {
1469 return Message(sourceLineNumbers, Ids.MergePlatformMismatch, "'{0}' is a 64-bit merge module but the product consuming it is 32-bit. 32-bit products can consume only 32-bit merge modules.", mergeModuleFile);
1470 }
1471
1472 public static Message MissingBundleInformation(string data)
1473 {
1474 return Message(null, Ids.MissingBundleInformation, "The Bundle is missing '{0}' data, and cannot continue.", data);
1475 }
1476
1477 public static Message MissingBundleSearch(SourceLineNumber sourceLineNumbers, string searchId)
1478 {
1479 return Message(sourceLineNumbers, Ids.MissingBundleSearch, "Bundle Search with id '{0}' has no corresponding implementation symbol.", searchId);
1480 }
1481
1482 public static Message MissingDependencyVersion(string packageId)
1483 {
1484 return Message(null, Ids.MissingDependencyVersion, "The provider dependency version was not authored for the package with Id '{0}'. Please author the Provides/@Version attribute for this package.", packageId);
1485 }
1486
1487 public static Message MissingEntrySection()
1488 {
1489 return Message(null, Ids.MissingEntrySection, "Could not find entry section in provided list of intermediates. Supported entry section types are: Product, Bundle, Patch, PatchCreation, Module.");
1490 }
1491
1492 public static Message MissingEntrySection(string sectionType)
1493 {
1494 return Message(null, Ids.MissingEntrySection, "Could not find entry section in provided list of intermediates. Expected section of type '{0}'.", sectionType);
1495 }
1496
1497 public static Message MissingManifestForWin32Assembly(SourceLineNumber sourceLineNumbers, string file, string manifest)
1498 {
1499 return Message(sourceLineNumbers, Ids.MissingManifestForWin32Assembly, "File '{0}' is marked as a Win32 assembly but it refers to assembly manifest '{1}' that is not present in this product.", file, manifest);
1500 }
1501
1502 public static Message MissingMedia(SourceLineNumber sourceLineNumbers, int diskId)
1503 {
1504 return Message(sourceLineNumbers, Ids.MissingMedia, "There is no media defined for disk id '{0}'. You must author either <Media Id='{0}' ...> or <MediaTemplate ...>.", diskId);
1505 }
1506
1507 public static Message MissingOrInvalidModuleInstallerVersion(SourceLineNumber sourceLineNumbers, string moduleId, string mergeModuleFile, string productInstallerVersion)
1508 {
1509 return Message(sourceLineNumbers, Ids.MissingOrInvalidModuleInstallerVersion, "The merge module '{0}' from file '{1}' is either missing or has an invalid installer version. The value read from the installer version in module's summary information was '{2}'. This should be a numeric value representing a valid installer version such as 200 or 301.", moduleId, mergeModuleFile, productInstallerVersion);
1510 }
1511
1512 public static Message MissingPackagePayload(SourceLineNumber sourceLineNumbers, string packageId, string packageType)
1513 {
1514 return Message(sourceLineNumbers, Ids.MissingPackagePayload, "There is no payload defined for package '{0}'. This is specified on the {1}Package element or a child {1}PackagePayload element.", packageId, packageType);
1515 }
1516
1517 public static Message MissingTableDefinition(string tableName)
1518 {
1519 return Message(null, Ids.MissingTableDefinition, "Cannot find the table definitions for the '{0}' table. This is likely due to a typing error or missing extension. Please ensure all the necessary extensions are supplied on the command line with the -ext parameter.", tableName);
1520 }
1521
1522 public static Message MissingTypeLibFile(SourceLineNumber sourceLineNumbers, string elementName, string fileElementName)
1523 {
1524 return Message(sourceLineNumbers, Ids.MissingTypeLibFile, "The {0} element is non-advertised and therefore requires a parent {1} element.", elementName, fileElementName);
1525 }
1526
1527 public static Message MissingValidatorExtension()
1528 {
1529 return Message(null, Ids.MissingValidatorExtension, "The validator requires at least one extension. Add \"ValidatorExtension, Wix\" for the default implementation.");
1530 }
1531
1532 public static Message MsiTransactionX86BeforeX64(SourceLineNumber sourceLineNumbers)
1533 {
1534 return Message(sourceLineNumbers, Ids.MsiTransactionX86BeforeX64, "MSI transactions must install all x64 packages before any x86 package.");
1535 }
1536
1537 public static Message MultipleEntrySections(SourceLineNumber sourceLineNumbers, string sectionName1, string sectionName2)
1538 {
1539 return Message(sourceLineNumbers, Ids.MultipleEntrySections, "Multiple entry sections '{0}' and '{1}' found. Only one entry section may be present in a single target.", sectionName1, sectionName2);
1540 }
1541
1542 public static Message MultipleEntrySections2(SourceLineNumber sourceLineNumbers)
1543 {
1544 return Message(sourceLineNumbers, Ids.MultipleEntrySections2, "Location of entry section related to previous error.");
1545 }
1546
1547 public static Message MultipleFilesMatchedWithOutputSpecification(string sourceSpecification, string sourceList)
1548 {
1549 return Message(null, Ids.MultipleFilesMatchedWithOutputSpecification, "A per-source file output specification has been provided ('{0}'), but multiple source files match the source specification ({1}). Specifying a unique output requires that only a single source file match.", sourceSpecification, sourceList);
1550 }
1551
1552 public static Message MultipleIdentifiersFound(SourceLineNumber sourceLineNumbers, string elementName, string identifier, string mismatchIdentifier)
1553 {
1554 return Message(sourceLineNumbers, Ids.MultipleIdentifiersFound, "Under a '{0}' element, multiple identifiers were found: '{1}' and '{2}'. All search elements under this element must have the same id.", elementName, identifier, mismatchIdentifier);
1555 }
1556
1557 public static Message MultiplePackagePayloads(SourceLineNumber sourceLineNumbers, string packageId, string packagePayloadId1, string packagePayloadId2)
1558 {
1559 return Message(sourceLineNumbers, Ids.MultiplePackagePayloads, "The package '{0}' has multiple PackagePayloads: '{1}' and '{2}'. This normally happens when the payload is defined on the package element and a child PackagePayload element.", packageId, packagePayloadId1, packagePayloadId2);
1560 }
1561
1562 public static Message MultiplePackagePayloads2(SourceLineNumber sourceLineNumbers)
1563 {
1564 return Message(sourceLineNumbers, Ids.MultiplePackagePayloads2, "The location of the package payload related to previous error.");
1565 }
1566
1567 public static Message MultiplePackagePayloads3(SourceLineNumber sourceLineNumbers)
1568 {
1569 return Message(sourceLineNumbers, Ids.MultiplePackagePayloads3, "The location of the package related to previous error.");
1570 }
1571
1572 public static Message MultiplePrimaryReferences(SourceLineNumber sourceLineNumbers, string crefChildType, string crefChildId, string crefParentType, string crefParentId, string conflictParentType, string conflictParentId)
1573 {
1574 return Message(sourceLineNumbers, Ids.MultiplePrimaryReferences, "Multiple primary references were found for {0} '{1}' in {2} '{3}' and {4} '{5}'.", crefChildType, crefChildId, crefParentType, crefParentId, conflictParentType, conflictParentId);
1575 }
1576
1577 public static Message MustSpecifyOutputWithMoreThanOneInput()
1578 {
1579 return Message(null, Ids.MustSpecifyOutputWithMoreThanOneInput, "You must specify an output file using the \"-o\" or \"-out\" switch when you provide more than one input file.");
1580 }
1581
1582 public static Message NeedSequenceBeforeOrAfter(SourceLineNumber sourceLineNumbers, string elementName)
1583 {
1584 return Message(sourceLineNumbers, Ids.NeedSequenceBeforeOrAfter, "A {0} element must have a Before attribute, After attribute, or a Sequence attribute.", elementName);
1585 }
1586
1587 public static Message NewRowAddedInTable(SourceLineNumber sourceLineNumbers, string productCode, string tableName, string rowId)
1588 {
1589 return Message(sourceLineNumbers, Ids.NewRowAddedInTable, "Product '{0}': Table '{1}' has a new row '{2}' added. This makes the patch not uninstallable.", productCode, tableName, rowId);
1590 }
1591
1592 public static Message NoDataForColumn(SourceLineNumber sourceLineNumbers, string columnName, string tableName)
1593 {
1594 return Message(sourceLineNumbers, Ids.NoDataForColumn, "There is no data for column '{0}' in a contained row of custom table '{1}'. A non-null value must be supplied for this column.", columnName, tableName);
1595 }
1596
1597 public static Message NoDifferencesInTransform(SourceLineNumber sourceLineNumbers)
1598 {
1599 return Message(sourceLineNumbers, Ids.NoDifferencesInTransform, "The transform being built did not contain any differences so it could not be created.");
1600 }
1601
1602 public static Message NoFirstControlSpecified(SourceLineNumber sourceLineNumbers, string dialogName)
1603 {
1604 return Message(sourceLineNumbers, Ids.NoFirstControlSpecified, "The '{0}' dialog element does not have a valid tabbable control. You must either have a tabbable control that is not marked TabSkip='yes', or you must mark a control TabSkip='no'. If you have a page with no tabbable controls (a progress page, for example), you might want to set the first Text control to be TabSkip='no'.", dialogName);
1605 }
1606
1607 public static Message NonterminatedPreprocessorInstruction(SourceLineNumber sourceLineNumbers, string beginInstruction, string endInstruction)
1608 {
1609 return Message(sourceLineNumbers, Ids.NonterminatedPreprocessorInstruction, "Found a <?{0}?> processing instruction without a matching <?{1}?> after it.", beginInstruction, endInstruction);
1610 }
1611
1612 public static Message NoUniqueActionSequenceNumber(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2)
1613 {
1614 return Message(sourceLineNumbers, Ids.NoUniqueActionSequenceNumber, "The {0} table contains an action '{1}' which cannot have a unique sequence number because it is scheduled before or after action '{2}'. There is not enough room before or after this action to assign a unique sequence number. Please schedule one of the actions differently so that it will be in a position with more sequence numbers available. Please note that sequence numbers must be an integer in the range 1 - 32767 (inclusive).", sequenceTableName, actionName1, actionName2);
1615 }
1616
1617 public static Message NoUniqueActionSequenceNumber2(SourceLineNumber sourceLineNumbers)
1618 {
1619 return Message(sourceLineNumbers, Ids.NoUniqueActionSequenceNumber2, "The location of the sequenced action related to previous error.");
1620 }
1621
1622 public static Message OpenDatabaseFailed(string databaseFile)
1623 {
1624 return Message(null, Ids.OpenDatabaseFailed, "Failed to open database '{0}'. Ensure it is a valid database, and it is not open by another process.", databaseFile);
1625 }
1626
1627 public static Message OrderingReferenceLoopDetected(SourceLineNumber sourceLineNumbers, string loopList)
1628 {
1629 return Message(sourceLineNumbers, Ids.OrderingReferenceLoopDetected, "A circular reference of ordering dependencies was detected. The infinite loop includes: {0}. Ordering dependency references must form a directed acyclic graph.", loopList);
1630 }
1631
1632 public static Message OrphanedComponent(SourceLineNumber sourceLineNumbers, string componentName)
1633 {
1634 return Message(sourceLineNumbers, Ids.OrphanedComponent, "Found orphaned Component '{0}'. If this is a Product, every Component must have at least one parent Feature. To include a Component in a Module, you must include it directly as a Component element of the Module element or indirectly via ComponentRef, ComponentGroup, or ComponentGroupRef elements.", componentName);
1635 }
1636
1637 public static Message OutputCodepageMismatch(SourceLineNumber sourceLineNumbers, int beforeCodepage, int afterCodepage)
1638 {
1639 return Message(sourceLineNumbers, Ids.OutputCodepageMismatch, "The code pages of the outputs do not match. One output's code page is '{0}' while the other is '{1}'.", beforeCodepage, afterCodepage);
1640 }
1641
1642 public static Message OutputCodepageMismatch2(SourceLineNumber sourceLineNumbers)
1643 {
1644 return Message(sourceLineNumbers, Ids.OutputCodepageMismatch2, "The location of the mismatched code page related to the previous warning.");
1645 }
1646
1647 public static Message OutputTargetNotSpecified()
1648 {
1649 return Message(null, Ids.OutputTargetNotSpecified, "The '-out' or '-o' parameter must specify a file path.");
1650 }
1651
1652 public static Message OutputTypeMismatch(SourceLineNumber sourceLineNumbers, string beforeOutputType, string afterOutputType)
1653 {
1654 return Message(sourceLineNumbers, Ids.OutputTypeMismatch, "The types of the outputs do not match. One output's type is '{0}' while the other is '{1}'.", beforeOutputType, afterOutputType);
1655 }
1656
1657 public static Message OverridableActionCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1658 {
1659 return Message(sourceLineNumbers, Ids.OverridableActionCollision, "The {0} table contains an action '{1}' that is declared overridable in two different locations. Please remove one of the actions or the Overridable='yes' attribute from one of the actions.", sequenceTableName, actionName);
1660 }
1661
1662 public static Message OverridableActionCollision2(SourceLineNumber sourceLineNumbers)
1663 {
1664 return Message(sourceLineNumbers, Ids.OverridableActionCollision2, "The location of the action related to previous error.");
1665 }
1666
1667 public static Message PackagePayloadUnsupported(SourceLineNumber sourceLineNumbers, string packageType)
1668 {
1669 return Message(sourceLineNumbers, Ids.PackagePayloadUnsupported, "The {0}PackagePayload element can only be used for {0}Packages.", packageType);
1670 }
1671
1672 public static Message PackagePayloadUnsupported2(SourceLineNumber sourceLineNumbers)
1673 {
1674 return Message(sourceLineNumbers, Ids.PackagePayloadUnsupported2, "The location of the package related to previous error.");
1675 }
1676
1677 public static Message ParentElementAttributeRequired(SourceLineNumber sourceLineNumbers, string parentElement, string parentAttribute, string childElement)
1678 {
1679 return Message(sourceLineNumbers, Ids.ParentElementAttributeRequired, "The parent {0} element is missing the {1} attribute that is required for the {2} child element.", parentElement, parentAttribute, childElement);
1680 }
1681
1682 public static Message PatchNotRemovable()
1683 {
1684 return Message(null, Ids.PatchNotRemovable, "This patch is not uninstallable. The 'Patch' element's attribute 'AllowRemoval' should be set to 'no'.");
1685 }
1686
1687 public static Message PatchWithoutTransforms()
1688 {
1689 return Message(null, Ids.PatchWithoutTransforms, "No transforms were provided to attach to the patch.");
1690 }
1691
1692 public static Message PatchWithoutValidTransforms()
1693 {
1694 return Message(null, Ids.PatchWithoutValidTransforms, "No valid transforms were provided to attach to the patch. Check to make sure the transforms you passed on the command line have a matching baseline authored in the patch. Also, make sure there are differences between your target and upgrade.");
1695 }
1696
1697 public static Message PathCannotContainQuote(string fileName)
1698 {
1699 return Message(null, Ids.PathCannotContainQuote, "Path '{0}' contains a literal quote character. Quotes are often accidentally introduced when trying to refer to a directory path with spaces in it, such as \"C:\\Out Directory\\\" -- the backslash before the quote acts an escape character. The correct representation for that path is: \"C:\\Out Directory\\\\\".", fileName);
1700 }
1701
1702 public static Message PathTooLong(SourceLineNumber sourceLineNumbers, string fileName)
1703 {
1704 return Message(sourceLineNumbers, Ids.PathTooLong, "'{0}' is too long, the fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.", fileName);
1705 }
1706
1707 public static Message PayloadMustBeRelativeToCache(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
1708 {
1709 return Message(sourceLineNumbers, Ids.PayloadMustBeRelativeToCache, "The {0}/@{1} attribute's value, '{2}', is not a relative path.", elementName, attributeName, attributeValue);
1710 }
1711
1712 public static Message PerUserButAllUsersEquals1(SourceLineNumber sourceLineNumbers, string path)
1713 {
1714 return Message(sourceLineNumbers, Ids.PerUserButAllUsersEquals1, "The MSI '{0}' is explicitly marked to not elevate so it must be a per-user package but the ALLUSERS Property is set to '1' creating a per-machine package. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute to be explicit instead.", path);
1715 }
1716
1717 public static Message PreprocessorError(SourceLineNumber sourceLineNumbers, string message)
1718 {
1719 return Message(sourceLineNumbers, Ids.PreprocessorError, "{0}", message);
1720 }
1721
1722 public static Message PreprocessorExtensionEvaluateFunctionFailed(SourceLineNumber sourceLineNumbers, string prefix, string function, string args, string message)
1723 {
1724 return Message(sourceLineNumbers, Ids.PreprocessorExtensionEvaluateFunctionFailed, "In the preprocessor extension that handles prefix '{0}' while trying to call function '{1}({2})' and exception has occurred : {3}", prefix, function, args, message);
1725 }
1726
1727 public static Message PreprocessorExtensionForParameterMissing(SourceLineNumber sourceLineNumbers, string parameterName, string parameterPrefix)
1728 {
1729 return Message(sourceLineNumbers, Ids.PreprocessorExtensionForParameterMissing, "Could not find the preprocessor extension for parameter '{0}'. A preprocessor extension is expected because the parameter prefix, '{1}', is not one of the standard types: 'env', 'res', 'sys', or 'var'.", parameterName, parameterPrefix);
1730 }
1731
1732 public static Message PreprocessorExtensionGetVariableValueFailed(SourceLineNumber sourceLineNumbers, string prefix, string variable, string message)
1733 {
1734 return Message(sourceLineNumbers, Ids.PreprocessorExtensionGetVariableValueFailed, "In the preprocessor extension that handles prefix '{0}' while trying to get the value for variable '{1}' and exception has occured : {2}", prefix, variable, message);
1735 }
1736
1737 public static Message PreprocessorExtensionPragmaFailed(SourceLineNumber sourceLineNumbers, string pragma, string message)
1738 {
1739 return Message(sourceLineNumbers, Ids.PreprocessorExtensionPragmaFailed, "Exception thrown while processing pragma '{0}'. The exception's message is: {1}", pragma, message);
1740 }
1741
1742 public static Message PreprocessorIllegalForeachVariable(SourceLineNumber sourceLineNumbers, string variableName)
1743 {
1744 return Message(sourceLineNumbers, Ids.PreprocessorIllegalForeachVariable, "The variable named '{0}' is not allowed in a foreach expression.", variableName);
1745 }
1746
1747 public static Message PreprocessorMissingParameterPrefix(SourceLineNumber sourceLineNumbers, string parameterName)
1748 {
1749 return Message(sourceLineNumbers, Ids.PreprocessorMissingParameterPrefix, "Could not find the prefix in parameter name: '{0}'.", parameterName);
1750 }
1751
1752 public static Message ProductCodeInvalidForTransform(SourceLineNumber sourceLineNumbers)
1753 {
1754 return Message(sourceLineNumbers, Ids.ProductCodeInvalidForTransform, "The value '*' is not valid for the ProductCode when used in a transform or in a patch. Copy the ProductCode from your target product MSI into the Product/@Id attribute value for your product authoring.");
1755 }
1756
1757 public static Message ProgIdNestedTooDeep(SourceLineNumber sourceLineNumbers)
1758 {
1759 return Message(sourceLineNumbers, Ids.ProgIdNestedTooDeep, "ProgId elements may not be nested more than 1 level deep.");
1760 }
1761
1762 public static Message RadioButtonBitmapAndIconDisallowed(SourceLineNumber sourceLineNumbers)
1763 {
1764 return Message(sourceLineNumbers, Ids.RadioButtonBitmapAndIconDisallowed, "RadioButtonGroup elements that contain RadioButton elements with Bitmap or Icon attributes set to \"yes\" can only be specified under a Control element. Move your RadioButtonGroup element as a child of the appropriate Control element.");
1765 }
1766
1767 public static Message RadioButtonTypeInconsistent(SourceLineNumber sourceLineNumbers)
1768 {
1769 return Message(sourceLineNumbers, Ids.RadioButtonTypeInconsistent, "All RadioButton elements in a RadioButtonGroup must be consistent with their use of the Bitmap, Icon, and Text attributes. Ensure all of the RadioButton elements in this group have the same attribute specified.");
1770 }
1771
1772 public static Message ReadOnlyOutputFile(string filePath)
1773 {
1774 return Message(null, Ids.ReadOnlyOutputFile, "Unable to output to file '{0}' because it is marked as read-only.", filePath);
1775 }
1776
1777 public static Message RealTableMissingPrimaryKeyColumn(SourceLineNumber sourceLineNumbers, string tableName)
1778 {
1779 return Message(sourceLineNumbers, Ids.RealTableMissingPrimaryKeyColumn, "The table '{0}' does not contain any primary key columns. At least one column must be marked as the primary key to ensure this table can be patched.", tableName);
1780 }
1781
1782 public static Message RecursiveAction(string action, string tableName)
1783 {
1784 return Message(null, Ids.RecursiveAction, "The action '{0}' is recursively placed in the '{1}' table.", action, tableName);
1785 }
1786
1787 public static Message ReferenceLoopDetected(SourceLineNumber sourceLineNumbers, string loopList)
1788 {
1789 return Message(sourceLineNumbers, Ids.ReferenceLoopDetected, "A circular reference of groups was detected. The infinite loop includes: {0}. Group references must form a directed acyclic graph.", loopList);
1790 }
1791
1792 public static Message RegistryMultipleValuesWithoutMultiString(SourceLineNumber sourceLineNumbers, string registryElementName, string valueAttributeName, string registryValueElementName, string typeAttributeName)
1793 {
1794 return Message(sourceLineNumbers, Ids.RegistryMultipleValuesWithoutMultiString, "The {0}/@{1} attribute and a {0}/{2} element cannot both be specified. Only one may be specified if the {3} attribute's value is not 'multiString'.", registryElementName, valueAttributeName, registryValueElementName, typeAttributeName);
1795 }
1796
1797 public static Message RegistryNameValueIncorrect(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1798 {
1799 return Message(sourceLineNumbers, Ids.RegistryNameValueIncorrect, "The {0}/@{1} attribute's value, '{2}', is incorrect. It should not contain values of '+', '-', or '*' when the {0}/@Value attribute is empty. Instead, use the proper element and attributes: for Name='+' use RegistryKey/@Action='createKey', for Name='-' use RemoveRegistryKey/@Action='removeOnUninstall', for Name='*' use RegistryKey/@Action='createAndRemoveOnUninstall'.", elementName, attributeName, value);
1800 }
1801
1802 public static Message RegistryRootInvalid(SourceLineNumber sourceLineNumbers)
1803 {
1804 return Message(sourceLineNumbers, Ids.RegistryRootInvalid, "Registry/@Root attribute is invalid on a nested Registry element. Either remove the Root attribute or move the Registry element so it is not nested under another Registry element.");
1805 }
1806
1807 public static Message RegistrySubElementCannotBeRemoved(SourceLineNumber sourceLineNumbers, string registryElementName, string registryValueElementName, string actionAttributeName, string removeValue, string removeKeyOnInstallValue)
1808 {
1809 return Message(sourceLineNumbers, Ids.RegistrySubElementCannotBeRemoved, "The {0}/{1} element cannot be specified if the {2} attribute's value is '{3}' or '{4}'.", registryElementName, registryValueElementName, actionAttributeName, removeValue, removeKeyOnInstallValue);
1810 }
1811
1812 public static Message RelativePathForRegistryElement(SourceLineNumber sourceLineNumbers)
1813 {
1814 return Message(sourceLineNumbers, Ids.RelativePathForRegistryElement, "Cannot convert RelativePath into Registry elements.");
1815 }
1816
1817 public static Message ReservedNamespaceViolation(SourceLineNumber sourceLineNumbers, string element, string attribute, string prefix)
1818 {
1819 return Message(sourceLineNumbers, Ids.ReservedNamespaceViolation, "The {0}/@{1} attribute's value begins with the reserved prefix '{2}'. Some prefixes are reserved by the Windows Installer and WiX toolset for well-known values. Change your attribute's value to not begin with the same prefix.", element, attribute, prefix);
1820 }
1821
1822 public static Message RootFeatureCannotFollowParent(SourceLineNumber sourceLineNumbers)
1823 {
1824 return Message(sourceLineNumbers, Ids.RootFeatureCannotFollowParent, "The Feature element specifies a root feature with an illegal InstallDefault value of 'followParent'. Root features cannot follow their parent feature's install state because they don't have a parent feature. Please remove or change the value of the InstallDefault attribute.");
1825 }
1826
1827 public static Message SameFileIdDifferentSource(SourceLineNumber sourceLineNumbers, string fileId, string sourcePath1, string sourcePath2)
1828 {
1829 return Message(sourceLineNumbers, Ids.SameFileIdDifferentSource, "Two different source paths '{1}' and '{2}' were detected for the same file identifier '{0}'. You must either author these under Media elements with different Id attribute values or in different patches.", fileId, sourcePath1, sourcePath2);
1830 }
1831
1832 public static Message SamePatchBaselineId(SourceLineNumber sourceLineNumbers, string id)
1833 {
1834 return Message(sourceLineNumbers, Ids.SamePatchBaselineId, "The PatchBaseline/@Id attribute value '{0}' is a child of multiple Media elements. This prevents transforms from being resolved to distinct media. Change the PatchBaseline/@Id attribute values to be unique.", id);
1835 }
1836
1837 public static Message SchemaValidationFailed(SourceLineNumber sourceLineNumbers, string validationError, int lineNumber, int linePosition)
1838 {
1839 return Message(sourceLineNumbers, Ids.SchemaValidationFailed, "Schema validation failed with the following error at line {1}, column {2}: {0}", validationError, lineNumber, linePosition);
1840 }
1841
1842 public static Message SearchElementRequired(SourceLineNumber sourceLineNumbers, string elementName)
1843 {
1844 return Message(sourceLineNumbers, Ids.SearchElementRequired, "A '{0}' element must have a search element as a child.", elementName);
1845 }
1846
1847 public static Message SearchElementRequiredWithAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
1848 {
1849 return Message(sourceLineNumbers, Ids.SearchElementRequiredWithAttribute, "A {0} element must have a search element as a child when the {0}/@{1} attribute has the value '{2}'.", elementName, attributeName, attributeValue);
1850 }
1851
1852 public static Message SearchPropertyNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1853 {
1854 return Message(sourceLineNumbers, Ids.SearchPropertyNotUppercase, "The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a search property, it must also be a public property. This means the Property/@Id value must be completely uppercase.", elementName, attributeName, value);
1855 }
1856
1857 public static Message SecurePropertyNotUppercase(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string propertyId)
1858 {
1859 return Message(sourceLineNumbers, Ids.SecurePropertyNotUppercase, "The {0}/@{1} attribute's value, '{2}', cannot contain lowercase characters. Since this is a secure property, it must also be a public property. This means the Property/@Id value must be completely uppercase.", elementName, attributeName, propertyId);
1860 }
1861
1862 public static Message SignedEmbeddedCabinet(SourceLineNumber sourceLineNumbers)
1863 {
1864 return Message(sourceLineNumbers, Ids.SignedEmbeddedCabinet, "The DigitalSignature element cannot be nested under a Media element which specifies EmbedCab='yes'. This is because Windows Installer can only verify the digital signatures of external cabinets. Please either remove the DigitalSignature element or change the value of the Media/@EmbedCab attribute to 'no'.");
1865 }
1866
1867 public static Message SingleExtensionSupported()
1868 {
1869 return Message(null, Ids.SingleExtensionSupported, "Multiple extensions were specified on the command line, only a single extension is supported.");
1870 }
1871
1872 public static Message SmokeMalformedPath()
1873 {
1874 return Message(null, Ids.SmokeMalformedPath, "Path contains one or more invalid characters.");
1875 }
1876
1877 public static Message SmokeUnknownFileExtension()
1878 {
1879 return Message(null, Ids.SmokeUnknownFileExtension, "Unknown input file format - expected a .msi or .msm file.");
1880 }
1881
1882 public static Message SmokeUnsupportedFileExtension()
1883 {
1884 return Message(null, Ids.SmokeUnsupportedFileExtension, "Files with an extension of .msp are not currently supported.");
1885 }
1886
1887 public static Message SpecifiedBinderNotFound(string binderClass)
1888 {
1889 return Message(null, Ids.SpecifiedBinderNotFound, "The specified binder class '{0}' was not found in any extensions.", binderClass);
1890 }
1891
1892 public static Message SplitCabinetCopyRegistrationFailed(string newCabName, string firstCabName)
1893 {
1894 return Message(null, Ids.SplitCabinetCopyRegistrationFailed, "Failed to register the copy command for cabinet '{0}' formed by splitting cabinet '{1}'.", newCabName, firstCabName);
1895 }
1896
1897 public static Message SplitCabinetInsertionFailed(string newCabName, string firstCabName, string lastCabinetOfThisSequence)
1898 {
1899 return Message(null, Ids.SplitCabinetInsertionFailed, "Could not find the last split cabinet '{2}' in the Media Table. So failed to add new cabinet '{0}' formed by splitting cabinet '{1}' to the installer package.", newCabName, firstCabName, lastCabinetOfThisSequence);
1900 }
1901
1902 public static Message SplitCabinetNameCollision(string newCabName, string firstCabName)
1903 {
1904 return Message(null, Ids.SplitCabinetNameCollision, "The cabinet name '{0}' collides with the new cabinet formed by splitting cabinet '{1}', consider renaming cabinet '{0}'.", newCabName, firstCabName);
1905 }
1906
1907 public static Message StandardActionRelativelyScheduledInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1908 {
1909 return Message(sourceLineNumbers, Ids.StandardActionRelativelyScheduledInModule, "The {0} table contains a standard action '{1}' that does not have a sequence number specified. The Sequence attribute is required for standard actions in a merge module. Please remove the action or use the Sequence attribute.", sequenceTableName, actionName);
1910 }
1911
1912 public static Message StreamNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, int length, int maximumLength)
1913 {
1914 return Message(sourceLineNumbers, Ids.StreamNameTooLong, "The {0}/@{1} attribute's value, '{2}', is {3} characters long. This is too long because it will be used to create a stream name. It cannot be more than than {4} characters long.", elementName, attributeName, value, length, maximumLength);
1915 }
1916
1917 public static Message StreamNameTooLong(SourceLineNumber sourceLineNumbers, string tableName, string streamName, int streamLength)
1918 {
1919 return Message(sourceLineNumbers, Ids.StreamNameTooLong, "The binary value in table '{0}' will be stored with a stream name, '{1}', that is {2} characters long. This is too long because the maximum allowed length for a stream name is 62 characters long. Since the stream name is created by concatenating the table name and values of the primary key for a row (delimited by periods), this error can be resolved by shortening a value that is part of the primary key.", tableName, streamName, streamLength);
1920 }
1921
1922 public static Message StubMissingWixburnSection(string filename)
1923 {
1924 return Message(null, Ids.StubMissingWixburnSection, "Stub executable '{0}' does not contain a .wixburn data section.", filename);
1925 }
1926
1927 public static Message StubWixburnSectionTooSmall(string filename)
1928 {
1929 return Message(null, Ids.StubWixburnSectionTooSmall, "Stub executable '{0}' .wixburn data section is too small to store the Burn container header.", filename);
1930 }
1931
1932 public static Message SuppressNonoverridableAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
1933 {
1934 return Message(sourceLineNumbers, Ids.SuppressNonoverridableAction, "The {0} table contains an action '{1}' that cannot be suppressed because it is not declared overridable in the base definition. Please stop suppressing the action or make it overridable in its base declaration.", sequenceTableName, actionName);
1935 }
1936
1937 public static Message SuppressNonoverridableAction2(SourceLineNumber sourceLineNumbers)
1938 {
1939 return Message(sourceLineNumbers, Ids.SuppressNonoverridableAction2, "The location of the non-overridable definition of the action related to previous error.");
1940 }
1941
1942 public static Message TabbableControlNotAllowedInBillboard(SourceLineNumber sourceLineNumbers, string elementName, string controlType)
1943 {
1944 return Message(sourceLineNumbers, Ids.TabbableControlNotAllowedInBillboard, "A {0} element was specified with Type='{1}' and TabSkip='no'. Tabbable controls are not allowed in Billboards.", elementName, controlType);
1945 }
1946
1947 public static Message TableDecompilationUnimplemented(string tableName)
1948 {
1949 return Message(null, Ids.TableDecompilationUnimplemented, "Decompilation of the {0} table has not been implemented by its extension.", tableName);
1950 }
1951
1952 public static Message TableNameTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
1953 {
1954 return Message(sourceLineNumbers, Ids.TableNameTooLong, "The {0}/@{1} attribute's value, '{2}', is too long for a table name. It cannot be more than than 31 characters long.", elementName, attributeName, value);
1955 }
1956
1957 public static Message TooDeeplyIncluded(SourceLineNumber sourceLineNumbers, int depth)
1958 {
1959 return Message(sourceLineNumbers, Ids.TooDeeplyIncluded, "Include files cannot be nested more deeply than {0} times. Make sure included files don't accidentally include themselves.", depth);
1960 }
1961
1962 public static Message TooManyChildren(SourceLineNumber sourceLineNumbers, string elementName, string childElementName)
1963 {
1964 return Message(sourceLineNumbers, Ids.TooManyChildren, "The {0} element contains multiple {1} child elements. There can only be one {1} child element per {0} element.", elementName, childElementName);
1965 }
1966
1967 public static Message TooManyColumnsInRealTable(string tableName, int columnCount, int supportedColumnCount)
1968 {
1969 return Message(null, Ids.TooManyColumnsInRealTable, "The table '{0}' contains {1} columns which is not supported by Windows Installer. Windows Installer supports a maximum of {2} columns.", tableName, columnCount, supportedColumnCount);
1970 }
1971
1972 public static Message TooManyElements(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, int expectedInstances)
1973 {
1974 return Message(sourceLineNumbers, Ids.TooManyElements, "The {0} element contains an unexpected child element '{1}'. The '{1}' element may only occur {2} time(s) under the {0} element.", elementName, childElementName, expectedInstances);
1975 }
1976
1977 public static Message TooManySearchElements(SourceLineNumber sourceLineNumbers, string elementName)
1978 {
1979 return Message(sourceLineNumbers, Ids.TooManySearchElements, "Only one search element can appear under a '{0}' element.", elementName);
1980 }
1981
1982 public static Message TransformSchemaMismatch()
1983 {
1984 return Message(null, Ids.TransformSchemaMismatch, "The transform schema does not match the database schema. The transform may have been generated from a different database.");
1985 }
1986
1987 public static Message TypeSpecificationForExtensionRequired(string parameter)
1988 {
1989 return Message(null, Ids.TypeSpecificationForExtensionRequired, "The parameter '{0}' must be followed by the extension's type specification. The type specification should be a fully qualified class and assembly identity, for example: \"MyNamespace.MyClass,myextension.dll\".", parameter);
1990 }
1991
1992 public static Message UnableToGetAuthenticodeCertOfFile(string filePath, string moreInformation)
1993 {
1994 return Message(null, Ids.UnableToGetAuthenticodeCertOfFile, "Unable to get the authenticode certificate of '{0}'. More information: {1}", filePath, moreInformation);
1995 }
1996
1997 public static Message UnableToGetAuthenticodeCertOfFileDownlevelOS(string filePath, string moreInformation)
1998 {
1999 return Message(null, Ids.UnableToGetAuthenticodeCertOfFileDownlevelOS, "Unable to get the authenticode certificate of '{0}'. The cryptography API has limitations on Windows XP and Windows Server 2003. More information: {1}", filePath, moreInformation);
2000 }
2001
2002 public static Message UnableToConvertFieldToNumber(string value)
2003 {
2004 return Message(null, Ids.UnableToConvertFieldToNumber, "Unable to convert intermediate symbol field value '{0}' to a number. This means the intermediate is corrupt or of an unsupported version.", value);
2005 }
2006
2007 public static Message UnableToOpenModule(SourceLineNumber sourceLineNumbers, string modulePath, string message)
2008 {
2009 return Message(sourceLineNumbers, Ids.UnableToOpenModule, "Unable to open merge module '{0}'. Check to make sure the module language is correct. '{1}'", modulePath, message);
2010 }
2011
2012 public static Message UnableToReadPackageInformation(SourceLineNumber sourceLineNumbers, string packagePath, string detailedErrorMessage)
2013 {
2014 return Message(sourceLineNumbers, Ids.UnableToReadPackageInformation, "Unable to read package '{0}'. {1}", packagePath, detailedErrorMessage);
2015 }
2016
2017 public static Message UnauthorizedAccess(string filePath)
2018 {
2019 return Message(null, Ids.UnauthorizedAccess, "Access to the path '{0}' is denied.", filePath);
2020 }
2021
2022 public static Message UndefinedPreprocessorFunction(SourceLineNumber sourceLineNumbers, string variableName)
2023 {
2024 return Message(sourceLineNumbers, Ids.UndefinedPreprocessorFunction, "Undefined preprocessor function '$({0})'.", variableName);
2025 }
2026
2027 public static Message UndefinedPreprocessorVariable(SourceLineNumber sourceLineNumbers, string variableName)
2028 {
2029 return Message(sourceLineNumbers, Ids.UndefinedPreprocessorVariable, "Undefined preprocessor variable '$({0})'.", variableName);
2030 }
2031
2032 public static Message UnexpectedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
2033 {
2034 return Message(sourceLineNumbers, Ids.UnexpectedAttribute, "The {0} element contains an unexpected attribute '{1}'.", elementName, attributeName);
2035 }
2036
2037 public static Message UnexpectedColumnCount(SourceLineNumber sourceLineNumbers, string tableName)
2038 {
2039 return Message(sourceLineNumbers, Ids.UnexpectedColumnCount, "A parsed row has more fields that contain data for table '{0}' than are defined. This is potentially because a standard table is being redefined as a custom table or is based on an older table schema.", tableName);
2040 }
2041
2042 public static Message UnexpectedContentNode(SourceLineNumber sourceLineNumbers, string elementName, string unexpectedNodeType)
2043 {
2044 return Message(sourceLineNumbers, Ids.UnexpectedContentNode, "The {0} element contains an unexpected xml node of type {1}.", elementName, unexpectedNodeType);
2045 }
2046
2047 public static Message UnexpectedCustomTableColumn(SourceLineNumber sourceLineNumbers, string column)
2048 {
2049 return Message(sourceLineNumbers, Ids.UnexpectedCustomTableColumn, "The custom table column '{0}' is unknown.", column);
2050 }
2051
2052 public static Message UnexpectedElement(SourceLineNumber sourceLineNumbers, string elementName, string childElementName)
2053 {
2054 return Message(sourceLineNumbers, Ids.UnexpectedElement, "The {0} element contains an unexpected child element '{1}'.", elementName, childElementName);
2055 }
2056
2057 public static Message UnexpectedElementWithAttribute(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute)
2058 {
2059 return Message(sourceLineNumbers, Ids.UnexpectedElementWithAttribute, "The {0} element cannot have a child element '{1}' when attribute '{2}' is set.", elementName, childElementName, attribute);
2060 }
2061
2062 public static Message UnexpectedElementWithAttribute(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute1, string attribute2, string attribute3, string attribute4)
2063 {
2064 return Message(sourceLineNumbers, Ids.UnexpectedElementWithAttribute, "The {0} element cannot have a child element '{1}' when any of attributes '{2}', '{3}', '{4}', or '{5}' are set.", elementName, childElementName, attribute1, attribute2, attribute3, attribute4);
2065 }
2066
2067 public static Message UnexpectedElementWithAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute, string attributeValue)
2068 {
2069 return Message(sourceLineNumbers, Ids.UnexpectedElementWithAttributeValue, "The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}'.", elementName, childElementName, attribute, attributeValue);
2070 }
2071
2072 public static Message UnexpectedElementWithAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string childElementName, string attribute, string attributeValue1, string attributeValue2)
2073 {
2074 return Message(sourceLineNumbers, Ids.UnexpectedElementWithAttributeValue, "The {0} element cannot have a child element '{1}' unless attribute '{2}' is set to '{3}' or '{4}'.", elementName, childElementName, attribute, attributeValue1, attributeValue2);
2075 }
2076
2077 public static Message UnexpectedEmptySubexpression(SourceLineNumber sourceLineNumbers, string expression)
2078 {
2079 return Message(sourceLineNumbers, Ids.UnexpectedEmptySubexpression, "The empty subexpression is unexpected in the expression '{0}'.", expression);
2080 }
2081
2082 public static Message UnexpectedException(Exception exception)
2083 {
2084 return Message(null, Ids.UnexpectedException, exception.ToString());
2085 }
2086
2087 public static Message UnexpectedException(string message, string type, string stackTrace)
2088 {
2089 return Message(null, Ids.UnexpectedException, "{0}\r\n\r\nException Type: {1}\r\n\r\nStack Trace:\r\n{2}", message, type, stackTrace);
2090 }
2091
2092 public static Message UnexpectedExternalUIMessage(string message)
2093 {
2094 return Message(null, Ids.UnexpectedExternalUIMessage, "Error executing unknown ICE action. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: \"{0}\".", message);
2095 }
2096
2097 public static Message UnexpectedExternalUIMessage(string message, string action)
2098 {
2099 return Message(null, Ids.UnexpectedExternalUIMessage, "Error executing ICE action '{1}'. The most common cause of this kind of ICE failure is an incorrectly registered scripting engine. See http://wixtoolset.org/documentation/error217/ for details and how to solve this problem. The following string format was not expected by the external UI message logger: \"{0}\".", message, action);
2100 }
2101
2102 public static Message UnexpectedFileExtension(string fileName, string expectedExtensions)
2103 {
2104 return Message(null, Ids.UnexpectedFileExtension, "The file '{0}' has an unexpected extension. Expected one of the following: '{1}'.", fileName, expectedExtensions);
2105 }
2106
2107 public static Message UnexpectedFileFormat(string path, string expectedFormat, string actualFormat)
2108 {
2109 return Message(null, Ids.UnexpectedFileFormat, "Unexpected file format loaded from path: {0}. The file was expected to be a {1} but was actually: {2}. Ensure the correct path was provided.", path, expectedFormat.ToLowerInvariant(), actualFormat.ToLowerInvariant());
2110 }
2111
2112 public static Message UnexpectedGroupChild(string parentType, string parentId, string childType, string childId)
2113 {
2114 return Message(null, Ids.UnexpectedGroupChild, "A group parent ('{0}'/'{1}') had an unexpected child ('{2}'/'{3}').", parentType, parentId, childType, childId);
2115 }
2116
2117 public static Message UnexpectedLiteral(SourceLineNumber sourceLineNumbers, string expression)
2118 {
2119 return Message(sourceLineNumbers, Ids.UnexpectedLiteral, "An unexpected literal was found in the expression '{0}'.", expression);
2120 }
2121
2122 public static Message UnexpectedPreprocessorOperator(SourceLineNumber sourceLineNumbers, string op)
2123 {
2124 return Message(sourceLineNumbers, Ids.UnexpectedPreprocessorOperator, "The operator '{0}' is unexpected.", op);
2125 }
2126
2127 public static Message UnexpectedTableInMergeModule(SourceLineNumber sourceLineNumbers, string tableName)
2128 {
2129 return Message(sourceLineNumbers, Ids.UnexpectedTableInMergeModule, "An unexpected row in the '{0}' table was found in this merge module. Merge modules cannot contain the '{0}' table.", tableName);
2130 }
2131
2132 public static Message UnexpectedTableInPatch(SourceLineNumber sourceLineNumbers, string tableName)
2133 {
2134 return Message(sourceLineNumbers, Ids.UnexpectedTableInPatch, "An unexpected row in the '{0}' table was found in this patch. Patches cannot contain the '{0}' table.", tableName);
2135 }
2136
2137 public static Message UnexpectedTableInPatchCreationPackage(SourceLineNumber sourceLineNumbers, string tableName)
2138 {
2139 return Message(sourceLineNumbers, Ids.UnexpectedTableInPatchCreationPackage, "An unexpected row in the '{0}' table was found in this patch creation package. Patch creation packages cannot contain the '{0}' table.", tableName);
2140 }
2141
2142 public static Message UnhandledExtensionAttribute(SourceLineNumber sourceLineNumbers, string elementName, string extensionAttributeName, string extensionNamespace)
2143 {
2144 return Message(sourceLineNumbers, Ids.UnhandledExtensionAttribute, "The {0} element contains an unhandled extension attribute '{1}'. Please ensure that the extension for attributes in the '{2}' namespace has been provided.", elementName, extensionAttributeName, extensionNamespace);
2145 }
2146
2147 public static Message UnhandledExtensionElement(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName, string extensionNamespace)
2148 {
2149 return Message(sourceLineNumbers, Ids.UnhandledExtensionElement, "The {0} element contains an unhandled extension element '{1}'. Please ensure that the extension for elements in the '{2}' namespace has been provided.", elementName, extensionElementName, extensionNamespace);
2150 }
2151
2152 public static Message UniqueFileSearchIdRequired(SourceLineNumber sourceLineNumbers, string id, string elementName)
2153 {
2154 return Message(sourceLineNumbers, Ids.UniqueFileSearchIdRequired, "The DirectorySearch element '{0}' requires that the child {1} element has a unique Id when the DirectorySearch/@AssignToProperty attribute is set to 'yes'.", id, elementName);
2155 }
2156
2157 public static Message UnknownCustomTableColumnType(SourceLineNumber sourceLineNumbers, string columnType)
2158 {
2159 return Message(sourceLineNumbers, Ids.UnknownCustomTableColumnType, "Encountered an unknown custom table column type '{0}'.", columnType);
2160 }
2161
2162 public static Message UnmatchedParenthesisInExpression(SourceLineNumber sourceLineNumbers, string expression)
2163 {
2164 return Message(sourceLineNumbers, Ids.UnmatchedParenthesisInExpression, "The parenthesis don't match in the expression '{0}'.", expression);
2165 }
2166
2167 public static Message UnmatchedPreprocessorInstruction(SourceLineNumber sourceLineNumbers, string beginInstruction, string endInstruction)
2168 {
2169 return Message(sourceLineNumbers, Ids.UnmatchedPreprocessorInstruction, "Found a <?{1}?> processing instruction without a matching <?{0}?> before it.", beginInstruction, endInstruction);
2170 }
2171
2172 public static Message UnmatchedQuotesInExpression(SourceLineNumber sourceLineNumbers, string expression)
2173 {
2174 return Message(sourceLineNumbers, Ids.UnmatchedQuotesInExpression, "The quotes don't match in the expression '{0}'.", expression);
2175 }
2176
2177 public static Message UnresolvedBindReference(SourceLineNumber sourceLineNumbers, string BindRef)
2178 {
2179 return Message(sourceLineNumbers, Ids.UnresolvedBindReference, "Unresolved bind-time variable {0}.", BindRef);
2180 }
2181
2182 public static Message UnresolvedReference(SourceLineNumber sourceLineNumbers, string symbolName)
2183 {
2184 return Message(sourceLineNumbers, Ids.UnresolvedReference, "The identifier '{0}' could not be found. Ensure you have typed the reference correctly and that all the necessary inputs are provided to the linker.", symbolName);
2185 }
2186
2187 public static Message UnresolvedReference(SourceLineNumber sourceLineNumbers, string symbolName, WixToolset.Data.AccessModifier accessModifier)
2188 {
2189 return Message(sourceLineNumbers, Ids.UnresolvedReference, "The identifier '{0}' is inaccessible due to its protection level.", symbolName, accessModifier);
2190 }
2191
2192 public static Message UnsupportedAllUsersValue(SourceLineNumber sourceLineNumbers, string path, string value)
2193 {
2194 return Message(sourceLineNumbers, Ids.UnsupportedAllUsersValue, "The MSI '{0}' set the ALLUSERS Property to '{0}' which is not supported. Remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.", path, value);
2195 }
2196
2197 public static Message UnsupportedExtensionAttribute(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName)
2198 {
2199 return Message(sourceLineNumbers, Ids.UnsupportedExtensionAttribute, "The {0} element contains an unsupported extension attribute '{1}'. The {0} element does not currently support extension attributes. Is the {1} attribute using the correct XML namespace?", elementName, extensionElementName);
2200 }
2201
2202 public static Message UnsupportedExtensionElement(SourceLineNumber sourceLineNumbers, string elementName, string extensionElementName)
2203 {
2204 return Message(sourceLineNumbers, Ids.UnsupportedExtensionElement, "The {0} element contains an unsupported extension element '{1}'. The {0} element does not currently support extension elements. Is the {1} element using the correct XML namespace?", elementName, extensionElementName);
2205 }
2206
2207 public static Message UnsupportedPlatformForElement(SourceLineNumber sourceLineNumbers, string platform, string elementName)
2208 {
2209 return Message(sourceLineNumbers, Ids.UnsupportedPlatformForElement, "The element {1} does not support platform '{0}'. Consider removing the element or using the preprocessor to conditionally include the element based on the platform.", platform, elementName);
2210 }
2211
2212 public static Message ValidationError(SourceLineNumber sourceLineNumbers, string ice, string message)
2213 {
2214 return Message(sourceLineNumbers, Ids.ValidationError, "{0}: {1}", ice, message);
2215 }
2216
2217 public static Message ValidationFailedDueToInvalidPackage()
2218 {
2219 return Message(null, Ids.ValidationFailedDueToInvalidPackage, "Failed to open package for validation. The most common cause of this error is validating an x64 package on an x86 system. To fix this error, run validation on an x64 system or disable validation.");
2220 }
2221
2222 public static Message ValidationFailedDueToLowMsiEngine()
2223 {
2224 return Message(null, Ids.ValidationFailedDueToLowMsiEngine, "The package being validated requires a higher version of Windows Installer than is installed on this machine. Validation cannot continue.");
2225 }
2226
2227 public static Message ValidationFailedDueToMultilanguageMergeModule()
2228 {
2229 return Message(null, Ids.ValidationFailedDueToMultilanguageMergeModule, "Failed to open merge module for validation. The most common cause of this error is specifying that the merge module supports multiple languages (using the Package/@Languages attribute) but not including language-specific embedded transforms. To fix this error, make the merge module language-neutral, make it language-specific, embed language transforms as specified in the MSI SDK at http://msdn.microsoft.com/library/aa367799.aspx, or disable validation.");
2230 }
2231
2232 public static Message ValidationFailedToOpenDatabase()
2233 {
2234 return Message(null, Ids.ValidationFailedToOpenDatabase, "Failed to open the database. During validation, this most commonly happens when attempting to open a database using an unsupported code page or a file that is not a valid Windows Installer database. Please use a different code page in Module/@Codepage, Package/@SummaryCodepage, Product/@Codepage, or WixLocalization/@Codepage; or make sure you provide the path to a valid Windows Installer database.");
2235 }
2236
2237 public static Message ValueAndMaskMustBeSameLength(SourceLineNumber sourceLineNumbers)
2238 {
2239 return Message(sourceLineNumbers, Ids.ValueAndMaskMustBeSameLength, "The FileTypeMask/@Value and FileTypeMask/@Mask attributes must be the same length.");
2240 }
2241
2242 public static Message ValueNotSupported(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue)
2243 {
2244 return Message(sourceLineNumbers, Ids.ValueNotSupported, "The {0}/@{1} attribute's value, '{2}, is not supported by the Windows Installer.", elementName, attributeName, attributeValue);
2245 }
2246
2247 public static Message VariableDeclarationCollision(SourceLineNumber sourceLineNumbers, string variableName, string variableValue, string variableCollidingValue)
2248 {
2249 return Message(sourceLineNumbers, Ids.VariableDeclarationCollision, "The variable '{0}' with value '{1}' was previously declared with value '{2}'.", variableName, variableValue, variableCollidingValue);
2250 }
2251
2252 public static Message VersionIndependentProgIdsCannotHaveIcons(SourceLineNumber sourceLineNumbers)
2253 {
2254 return Message(sourceLineNumbers, Ids.VersionIndependentProgIdsCannotHaveIcons, "Version independent ProgIds cannot have Icons. Remove the Icon and/or IconIndex attributes from your ProgId element.");
2255 }
2256
2257 public static Message VersionMismatch(SourceLineNumber sourceLineNumbers, string fileType, string version, string expectedVersion)
2258 {
2259 return Message(sourceLineNumbers, Ids.VersionMismatch, "The {0} file format version {1} is not compatible with the expected {0} file format version {2}.", fileType, version, expectedVersion);
2260 }
2261
2262 public static Message Win32Exception(int nativeErrorCode, string message)
2263 {
2264 return Message(null, Ids.Win32Exception, "An unexpected Win32 exception with error code 0x{0:X} occurred: {1}", nativeErrorCode, message);
2265 }
2266
2267 public static Message Win32Exception(int nativeErrorCode, string file, string message)
2268 {
2269 return Message(null, Ids.Win32Exception, "An unexpected Win32 exception with error code 0x{0:X} occurred while accessing file '{1}': {2}", nativeErrorCode, file, message);
2270 }
2271
2272 public static Message WixFileNotFound(string file)
2273 {
2274 return Message(null, Ids.WixFileNotFound, "The file '{0}' cannot be found.", file);
2275 }
2276
2277 public static Message WixVariableCollision(SourceLineNumber sourceLineNumbers, string variableId)
2278 {
2279 return Message(sourceLineNumbers, Ids.WixVariableCollision, "The WiX variable '{0}' is declared in more than one location. Please remove one of the declarations.", variableId);
2280 }
2281
2282 public static Message WixVariableUnknown(SourceLineNumber sourceLineNumbers, string variableId)
2283 {
2284 return Message(sourceLineNumbers, Ids.WixVariableUnknown, "The WiX variable !(wix.{0}) is unknown. Please ensure the variable is declared on the command line for light.exe, via a WixVariable element, or inline using the syntax !(wix.{0}=some value which doesn't contain parenthesis).", variableId);
2285 }
2286
2287 public static Message WrongFileExtensionForNumberOfInputs(string inputExtension, string input)
2288 {
2289 return Message(null, Ids.WrongFileExtensionForNumberOfInputs, "The extension '{0}' on the input specified '{1}' does not match the number of inputs required to handle an input with this extension. Check if you are missing an input or have too many.", inputExtension, input);
2290 }
2291
2292 public static Message NoSourceFiles()
2293 {
2294 return Message(null, Ids.NoSourceFiles, "No source files specified.");
2295 }
2296
2297 public static Message WixiplSourceFileIsExclusive()
2298 {
2299 return Message(null, Ids.WixiplSourceFileIsExclusive, "When an intermediate post link source file is specified, it must be the only source file provided.");
2300 }
2301
2302 public static Message IntermediatesMustBeCompiled(string invalidIntermediates)
2303 {
2304 return Message(null, Ids.IntermediatesMustBeCompiled, "Intermediates being linked must have been compiled. Intermediates with these ids were not compiled: {0}", invalidIntermediates);
2305 }
2306
2307 public static Message IntermediatesMustBeResolved(string invalidIntermediate)
2308 {
2309 return Message(null, Ids.IntermediatesMustBeResolved, "Intermediates being bound must have been resolved. This intermediate was not resolved: {0}", invalidIntermediate);
2310 }
2311
2312 public static Message UnknownSymbolType(string symbolName)
2313 {
2314 return Message(null, Ids.UnknownSymbolType, "Could not deserialize symbol of type type '{0}' because it is not a standard symbol type or one provided by a loaded extension.", symbolName);
2315 }
2316
2317 public static Message IllegalInnerText(SourceLineNumber sourceLineNumbers, string elementName, string innerText)
2318 {
2319 return Message(sourceLineNumbers, Ids.IllegalInnerText, "The {0} element contains illegal inner text: '{1}'.", elementName, innerText);
2320 }
2321
2322 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
2323 {
2324 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args);
2325 }
2326
2327 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
2328 {
2329 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args);
2330 }
2331
2332 public enum Ids
2333 {
2334 UnexpectedException = 1,
2335 UnexpectedFileFormat = 2,
2336 CorruptFileFormat = 3,
2337 UnexpectedAttribute = 4,
2338 UnexpectedElement = 5,
2339 IllegalEmptyAttributeValue = 6,
2340 InsufficientVersion = 7,
2341 IllegalIntegerValue = 8,
2342 IllegalGuidValue = 9,
2343 ExpectedAttribute = 10,
2344 SecurePropertyNotUppercase = 11,
2345 SearchPropertyNotUppercase = 12,
2346 StreamNameTooLong = 13,
2347 IllegalIdentifier = 14,
2348 IllegalYesNoValue = 15,
2349 CabCreationFailed = 16,
2350 CabExtractionFailed = 17,
2351 AppIdIncompatibleAdvertiseState = 18,
2352 IllegalAttributeWhenAdvertised = 19,
2353 ConditionExpected = 20,
2354 IllegalAttributeValue = 21,
2355 CustomActionMultipleSources = 22,
2356 CustomActionMultipleTargets = 23,
2357 CustomActionIllegalInnerText = 24,
2358 IllegalShortFilename = 26,
2359 IllegalLongFilename = 27,
2360 TableNameTooLong = 28,
2361 FeatureConfigurableDirectoryNotUppercase = 29,
2362 FeatureCannotFavorAndDisallowAdvertise = 30,
2363 FeatureCannotFollowParentAndFavorLocalOrSource = 31,
2364 MediaEmbeddedCabinetNameTooLong = 32,
2365 RegistrySubElementCannotBeRemoved = 33,
2366 RegistryMultipleValuesWithoutMultiString = 34,
2367 IllegalAttributeWithOtherAttribute = 35,
2368 IllegalAttributeWithOtherAttributes = 36,
2369 IllegalAttributeWithoutOtherAttributes = 37,
2370 IllegalAttributeValueWithoutOtherAttribute = 38,
2371 IntegralValueSentinelCollision = 39,
2372 ExampleGuid = 40,
2373 TooManyChildren = 41,
2374 ComponentMultipleKeyPaths = 42,
2375 CabClosureFailed = 43,
2376 ExpectedAttributes = 44,
2377 ExpectedAttributesWithOtherAttribute = 45,
2378 ExpectedAttributesWithoutOtherAttribute = 46,
2379 MissingTypeLibFile = 47,
2380 InvalidDocumentElement = 48,
2381 ExpectedAttributeInElementOrParent = 49,
2382 UnauthorizedAccess = 50,
2383 IllegalModuleExclusionLanguageAttributes = 51,
2384 NoFirstControlSpecified = 52,
2385 NoDataForColumn = 53,
2386 ValueAndMaskMustBeSameLength = 54,
2387 TooManySearchElements = 55,
2388 IllegalAttributeExceptOnElement = 56,
2389 SearchElementRequired = 57,
2390 MultipleIdentifiersFound = 58,
2391 AdvertiseStateMustMatch = 59,
2392 DuplicateContextValue = 60,
2393 RelativePathForRegistryElement = 61,
2394 IllegalAttributeWhenNested = 62,
2395 ExpectedElement = 63,
2396 RegistryRootInvalid = 64,
2397 IllegalYesNoDefaultValue = 65,
2398 IllegalAttributeInMergeModule = 66,
2399 GenericReadNotAllowed = 67,
2400 IllegalAttributeWithInnerText = 68,
2401 SearchElementRequiredWithAttribute = 69,
2402 CannotAuthorSpecialProperties = 70,
2403 NeedSequenceBeforeOrAfter = 72,
2404 ValueNotSupported = 73,
2405 TabbableControlNotAllowedInBillboard = 74,
2406 CheckBoxValueOnlyValidWithCheckBox = 75,
2407 CabFileDoesNotExist = 76,
2408 RadioButtonTypeInconsistent = 77,
2409 RadioButtonBitmapAndIconDisallowed = 78,
2410 IllegalSuppressWarningId = 79,
2411 PreprocessorIllegalForeachVariable = 80,
2412 PreprocessorMissingParameterPrefix = 81,
2413 PreprocessorExtensionForParameterMissing = 82,
2414 CannotFindFile = 83,
2415 BinderFileManagerMissingFile = 84,
2416 InvalidFileName = 85,
2417 ReferenceLoopDetected = 86,
2418 GuidContainsLowercaseLetters = 87,
2419 InvalidDateTimeFormat = 88,
2420 MultipleEntrySections = 89,
2421 MultipleEntrySections2 = 90,
2422 DuplicateSymbol = 91,
2423 DuplicateSymbol2 = 92,
2424 MissingEntrySection = 93,
2425 UnresolvedReference = 94,
2426 MultiplePrimaryReferences = 95,
2427 ComponentReferencedTwice = 96,
2428 DuplicateModuleFileIdentifier = 97,
2429 DuplicateModuleCaseInsensitiveFileIdentifier = 98,
2430 ImplicitComponentKeyPath = 99,
2431 DuplicateLocalizationIdentifier = 100,
2432 LocalizationVariableUnknown = 102,
2433 FileNotFound = 103,
2434 InvalidXml = 104,
2435 ProgIdNestedTooDeep = 105,
2436 CanNotHaveTwoParents = 106,
2437 SchemaValidationFailed = 107,
2438 IllegalVersionValue = 108,
2439 CustomTableNameTooLong = 109,
2440 CustomTableIllegalColumnWidth = 110,
2441 CustomTableMissingPrimaryKey = 111,
2442 TypeSpecificationForExtensionRequired = 113,
2443 FilePathRequired = 114,
2444 DirectoryPathRequired = 115,
2445 FileOrDirectoryPathRequired = 116,
2446 PathCannotContainQuote = 117,
2447 AdditionalArgumentUnexpected = 118,
2448 RegistryNameValueIncorrect = 119,
2449 FamilyNameTooLong = 120,
2450 IllegalFamilyName = 121,
2451 IllegalLongValue = 122,
2452 IntegralValueOutOfRange = 123,
2453 DuplicateExtensionXmlSchemaNamespace = 125,
2454 DuplicateExtensionTable = 126,
2455 DuplicateExtensionPreprocessorType = 127,
2456 FileInUse = 128,
2457 CannotOpenMergeModule = 129,
2458 DuplicatePrimaryKey = 130,
2459 FileIdentifierNotFound = 131,
2460 InvalidAssemblyFile = 132,
2461 ExpectedEndElement = 133,
2462 IllegalCodepage = 134,
2463 ExpectedMediaCabinet = 135,
2464 InvalidIdt = 136,
2465 InvalidSequenceTable = 137,
2466 ExpectedDirectory = 138,
2467 ComponentExpectedFeature = 139,
2468 RecursiveAction = 140,
2469 VersionMismatch = 141,
2470 UnexpectedContentNode = 142,
2471 UnexpectedColumnCount = 143,
2472 InvalidExtension = 144,
2473 InvalidSubExpression = 145,
2474 UnmatchedPreprocessorInstruction = 146,
2475 NonterminatedPreprocessorInstruction = 147,
2476 ExpectedExpressionAfterNot = 148,
2477 InvalidPreprocessorVariable = 149,
2478 UndefinedPreprocessorVariable = 150,
2479 IllegalDefineStatement = 151,
2480 VariableDeclarationCollision = 152,
2481 CannotReundefineVariable = 153,
2482 IllegalForeach = 154,
2483 IllegalParentAttributeWhenNested = 155,
2484 ExpectedEndforeach = 156,
2485 UnmatchedQuotesInExpression = 158,
2486 UnmatchedParenthesisInExpression = 159,
2487 ExpectedVariable = 160,
2488 UnexpectedLiteral = 161,
2489 IllegalIntegerInExpression = 162,
2490 UnexpectedPreprocessorOperator = 163,
2491 UnexpectedEmptySubexpression = 164,
2492 UnexpectedCustomTableColumn = 165,
2493 UnknownCustomTableColumnType = 166,
2494 IllegalFileCompressionAttributes = 167,
2495 OverridableActionCollision = 168,
2496 OverridableActionCollision2 = 169,
2497 ActionCollision = 170,
2498 ActionCollision2 = 171,
2499 SuppressNonoverridableAction = 172,
2500 SuppressNonoverridableAction2 = 173,
2501 CustomActionSequencedInModule = 174,
2502 StandardActionRelativelyScheduledInModule = 175,
2503 ActionCircularDependency = 176,
2504 ActionScheduledRelativeToTerminationAction = 177,
2505 ActionScheduledRelativeToTerminationAction2 = 178,
2506 NoUniqueActionSequenceNumber = 179,
2507 NoUniqueActionSequenceNumber2 = 180,
2508 ActionScheduledRelativeToItself = 181,
2509 MissingTableDefinition = 182,
2510 ExpectedRowInPatchCreationPackage = 183,
2511 UnexpectedTableInMergeModule = 184,
2512 UnexpectedTableInPatchCreationPackage = 185,
2513 MergeExcludedModule = 186,
2514 MergeFeatureRequired = 187,
2515 MergeLanguageFailed = 188,
2516 MergeLanguageUnsupported = 189,
2517 TableDecompilationUnimplemented = 190,
2518 CannotDefaultMismatchedAdvertiseStates = 191,
2519 VersionIndependentProgIdsCannotHaveIcons = 192,
2520 IllegalAttributeValueWithOtherAttribute = 193,
2521 InvalidMergeLanguage = 194,
2522 WixVariableCollision = 195,
2523 ExpectedWixVariableValue = 196,
2524 WixVariableUnknown = 197,
2525 IllegalWixVariablePrefix = 198,
2526 InvalidWixXmlNamespace = 199,
2527 UnhandledExtensionElement = 200,
2528 UnhandledExtensionAttribute = 201,
2529 UnsupportedExtensionAttribute = 202,
2530 UnsupportedExtensionElement = 203,
2531 ValidationError = 204,
2532 IllegalRootDirectory = 205,
2533 IllegalTargetDirDefaultDir = 206,
2534 TooManyElements = 207,
2535 ExpectedBinaryCategory = 208,
2536 RootFeatureCannotFollowParent = 209,
2537 FeatureNameTooLong = 210,
2538 SignedEmbeddedCabinet = 211,
2539 ExpectedSignedCabinetName = 212,
2540 IllegalInlineLocVariable = 213,
2541 MergeModuleExpectedFeature = 215,
2542 Win32Exception = 216,
2543 UnexpectedExternalUIMessage = 217,
2544 IllegalCabbingThreadCount = 218,
2545 IllegalEnvironmentVariable = 219,
2546 InvalidKeyColumn = 220,
2547 CollidingModularizationTypes = 221,
2548 CubeFileNotFound = 222,
2549 OpenDatabaseFailed = 223,
2550 OutputTypeMismatch = 224,
2551 RealTableMissingPrimaryKeyColumn = 225,
2552 IllegalColumnName = 226,
2553 NoDifferencesInTransform = 227,
2554 OutputCodepageMismatch = 228,
2555 OutputCodepageMismatch2 = 229,
2556 IllegalComponentWithAutoGeneratedGuid = 230,
2557 IllegalPathForGeneratedComponentGuid = 231,
2558 IllegalTerminalServerCustomActionAttributes = 232,
2559 IllegalPropertyCustomActionAttributes = 233,
2560 InvalidPreprocessorFunction = 234,
2561 UndefinedPreprocessorFunction = 235,
2562 PreprocessorExtensionEvaluateFunctionFailed = 236,
2563 PreprocessorExtensionGetVariableValueFailed = 237,
2564 InvalidManifestContent = 238,
2565 InvalidWixTransform = 239,
2566 UnexpectedFileExtension = 240,
2567 UnexpectedTableInPatch = 241,
2568 InvalidProductVersion = 242,
2569 InvalidKeypathChange = 243,
2570 MissingValidatorExtension = 244,
2571 InvalidValidatorMessageType = 245,
2572 PatchWithoutTransforms = 246,
2573 SingleExtensionSupported = 247,
2574 DuplicateTransform = 248,
2575 BaselineRequired = 249,
2576 PreprocessorError = 250,
2577 ExpectedArgument = 251,
2578 PatchWithoutValidTransforms = 252,
2579 ExpectedDecompiler = 253,
2580 ExpectedTableInMergeModule = 254,
2581 UnexpectedElementWithAttributeValue = 255,
2582 ExpectedPatchIdInWixMsp = 256,
2583 ExpectedMediaRowsInWixMsp = 257,
2584 WixFileNotFound = 258,
2585 ExpectedClientPatchIdInWixMsp = 259,
2586 NewRowAddedInTable = 260,
2587 PatchNotRemovable = 261,
2588 PathTooLong = 262,
2589 FileTooLarge = 263,
2590 InvalidPlatformParameter = 264,
2591 InvalidPlatformValue = 265,
2592 IllegalValidationArguments = 266,
2593 OrphanedComponent = 267,
2594 IllegalCommandlineArgumentCombination = 268,
2595 ProductCodeInvalidForTransform = 269,
2596 InsertInvalidSequenceActionOrder = 270,
2597 InsertSequenceNoSpace = 271,
2598 MissingManifestForWin32Assembly = 272,
2599 UnableToOpenModule = 273,
2600 ExpectedAttributeWhenElementNotUnderElement = 274,
2601 IllegalIdentifierLooksLikeFormatted = 275,
2602 IllegalCodepageAttribute = 276,
2603 IllegalCompressionLevel = 277,
2604 TransformSchemaMismatch = 278,
2605 DatabaseSchemaMismatch = 279,
2606 ExpectedDirectoryGotFile = 280,
2607 ExpectedFileGotDirectory = 281,
2608 GacAssemblyNoStrongName = 282,
2609 FileWriteError = 283,
2610 InvalidCommandLineFileName = 284,
2611 ExpectedParentWithAttribute = 285,
2612 IllegalWarningIdAsError = 286,
2613 ExpectedAttributeOrElement = 287,
2614 DuplicateVariableDefinition = 288,
2615 InvalidVariableDefinition = 289,
2616 DuplicateCabinetName = 290,
2617 DuplicateCabinetName2 = 291,
2618 InvalidAddedFileRowWithoutSequence = 292,
2619 DuplicateFileId = 293,
2620 FullTempDirectory = 294,
2621 CreateCabAddFileFailed = 296,
2622 CreateCabInsufficientDiskSpace = 297,
2623 UnresolvedBindReference = 298,
2624 GACAssemblyIdentityWarning = 299,
2625 IllegalCharactersInPath = 300,
2626 ValidationFailedToOpenDatabase = 301,
2627 MustSpecifyOutputWithMoreThanOneInput = 302,
2628 IllegalSearchIdForParentDepth = 303,
2629 IdentifierTooLongError = 304,
2630 InvalidRemoveComponent = 305,
2631 FinishCabFailed = 306,
2632 InvalidExtensionType = 307,
2633 ValidationFailedDueToMultilanguageMergeModule = 309,
2634 ValidationFailedDueToInvalidPackage = 310,
2635 InvalidStringForCodepage = 311,
2636 InvalidEmbeddedUIFileName = 312,
2637 UniqueFileSearchIdRequired = 313,
2638 IllegalAttributeValueWhenNested = 314,
2639 AdminImageRequired = 315,
2640 SamePatchBaselineId = 316,
2641 SameFileIdDifferentSource = 317,
2642 HarvestSourceNotSpecified = 318,
2643 OutputTargetNotSpecified = 319,
2644 DuplicateCommandLineOptionInExtension = 320,
2645 HarvestTypeNotFound = 321,
2646 BothUpgradeCodesRequired = 322,
2647 IllegalBinderClassName = 323,
2648 SpecifiedBinderNotFound = 324,
2649 CannotLoadBinderFileManager = 325,
2650 CannotLoadLinkerExtension = 326,
2651 UnableToGetAuthenticodeCertOfFile = 327,
2652 UnableToGetAuthenticodeCertOfFileDownlevelOS = 328,
2653 ReadOnlyOutputFile = 329,
2654 CannotDefaultComponentId = 330,
2655 ParentElementAttributeRequired = 331,
2656 PreprocessorExtensionPragmaFailed = 333,
2657 InvalidPreprocessorPragma = 334,
2658 SmokeUnknownFileExtension = 335,
2659 SmokeUnsupportedFileExtension = 336,
2660 SmokeMalformedPath = 337,
2661 InvalidStubExe = 338,
2662 StubMissingWixburnSection = 339,
2663 StubWixburnSectionTooSmall = 340,
2664 MissingBundleInformation = 341,
2665 UnexpectedGroupChild = 342,
2666 OrderingReferenceLoopDetected = 343,
2667 IdentifierNotFound = 344,
2668 MergePlatformMismatch = 345,
2669 IllegalRelativeLongFilename = 346,
2670 IllegalAttributeValueWithLegalList = 347,
2671 IllegalAttributeValueWithIllegalList = 348,
2672 InvalidSummaryInfoCodePage = 349,
2673 ValidationFailedDueToLowMsiEngine = 350,
2674 DuplicateSourcesForOutput = 351,
2675 UnableToReadPackageInformation = 352,
2676 MultipleFilesMatchedWithOutputSpecification = 353,
2677 InvalidBundle = 354,
2678 BundleTooNew = 355,
2679 WrongFileExtensionForNumberOfInputs = 356,
2680 MediaTableCollision = 357,
2681 InvalidCabinetTemplate = 358,
2682 MaximumUncompressedMediaSizeTooLarge = 359,
2683 ReservedNamespaceViolation = 362,
2684 PerUserButAllUsersEquals1 = 363,
2685 UnsupportedAllUsersValue = 364,
2686 DisallowedMsiProperty = 365,
2687 MissingOrInvalidModuleInstallerVersion = 366,
2688 IllegalGeneratedGuidComponentUnversionedKeypath = 367,
2689 IllegalGeneratedGuidComponentVersionedNonkeypath = 368,
2690 DuplicateComponentGuids = 369,
2691 DuplicateProviderDependencyKey = 370,
2692 MissingDependencyVersion = 371,
2693 UnexpectedElementWithAttribute = 372,
2694 ExpectedAttributeWithElement = 373,
2695 DuplicatedUiLocalization = 374,
2696 MaximumCabinetSizeForLargeFileSplittingTooLarge = 375,
2697 SplitCabinetCopyRegistrationFailed = 376,
2698 SplitCabinetNameCollision = 377,
2699 SplitCabinetInsertionFailed = 378,
2700 InvalidPreprocessorFunctionAutoVersion = 379,
2701 InvalidModuleOrBundleVersion = 380,
2702 UnsupportedPlatformForElement = 381,
2703 MissingMedia = 382,
2704 IllegalYesNoAlwaysValue = 384,
2705 TooDeeplyIncluded = 385,
2706 TooManyColumnsInRealTable = 386,
2707 InlineDirectorySyntaxRequiresPath = 387,
2708 InsecureBundleFilename = 388,
2709 PayloadMustBeRelativeToCache = 389,
2710 MsiTransactionX86BeforeX64 = 390,
2711 NoSourceFiles = 391,
2712 WixiplSourceFileIsExclusive = 392,
2713 UnableToConvertFieldToNumber = 393,
2714 CouldNotDetermineProductCodeFromTransformSummaryInfo = 394,
2715 IntermediatesMustBeCompiled = 395,
2716 IntermediatesMustBeResolved = 396,
2717 MissingBundleSearch = 397,
2718 CircularSearchReference = 398,
2719 UnknownSymbolType = 399,
2720 IllegalInnerText = 400,
2721 ExpectedAttributeWithValueWithOtherAttribute = 401,
2722 PackagePayloadUnsupported = 402,
2723 PackagePayloadUnsupported2 = 403,
2724 MultiplePackagePayloads = 404,
2725 MultiplePackagePayloads2 = 405,
2726 MultiplePackagePayloads3 = 406,
2727 MissingPackagePayload = 407,
2728 ExpectedAttributeWithoutOtherAttributes = 408,
2729 }
2730 }
2731}
diff --git a/src/api/wix/WixToolset.Data/ISymbolDefinitionCreator.cs b/src/api/wix/WixToolset.Data/ISymbolDefinitionCreator.cs
new file mode 100644
index 00000000..93b10ce8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/ISymbolDefinitionCreator.cs
@@ -0,0 +1,11 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 public interface ISymbolDefinitionCreator
6 {
7 void AddCustomSymbolDefinition(IntermediateSymbolDefinition definition);
8
9 bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition);
10 }
11}
diff --git a/src/api/wix/WixToolset.Data/Identifier.cs b/src/api/wix/WixToolset.Data/Identifier.cs
new file mode 100644
index 00000000..8333198f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Identifier.cs
@@ -0,0 +1,77 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Diagnostics;
7 using SimpleJson;
8
9 /// <summary>
10 /// Class to define the identifier and access for a symbol.
11 /// </summary>
12 [DebuggerDisplay("{Access} {Id,nq}")]
13 public class Identifier
14 {
15 public static Identifier Invalid = new Identifier(AccessModifier.Section, (string)null);
16
17 [Obsolete]
18 public Identifier(string id, AccessModifier access)
19 {
20 this.Id = id;
21 this.Access = access;
22 }
23
24 public Identifier(AccessModifier access, string id)
25 {
26 this.Access = access;
27 this.Id = id;
28 }
29
30 public Identifier(AccessModifier access, params string[] ids)
31 {
32 this.Access = access;
33 this.Id = String.Join("/", ids);
34 }
35
36 public Identifier(AccessModifier access, params object[] ids)
37 {
38 this.Access = access;
39 this.Id = String.Join("/", ids);
40 }
41
42 public Identifier(AccessModifier access, int id)
43 {
44 this.Access = access;
45 this.Id = id.ToString();
46 }
47
48 /// <summary>
49 /// Access modifier for a symbol.
50 /// </summary>
51 public AccessModifier Access { get; }
52
53 /// <summary>
54 /// Identifier for the symbol.
55 /// </summary>
56 public string Id { get; }
57
58 internal static Identifier Deserialize(JsonObject jsonObject)
59 {
60 var id = jsonObject.GetValueOrDefault<string>("id");
61 var accessValue = jsonObject.GetValueOrDefault("access", "global");
62
63 return new Identifier(accessValue.AsAccessModifier(), id);
64 }
65
66 internal JsonObject Serialize()
67 {
68 var jsonObject = new JsonObject
69 {
70 { "id", this.Id },
71 { "access", this.Access.AsString() }
72 };
73
74 return jsonObject;
75 }
76 }
77}
diff --git a/src/api/wix/WixToolset.Data/Intermediate.cs b/src/api/wix/WixToolset.Data/Intermediate.cs
new file mode 100644
index 00000000..64f9810d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Intermediate.cs
@@ -0,0 +1,484 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Collections.Generic;
7 using System.IO;
8 using System.Linq;
9 using System.Reflection;
10 using SimpleJson;
11
12 /// <summary>
13 /// Container class for an intermediate object.
14 /// </summary>
15 public sealed class Intermediate
16 {
17 private static readonly Version CurrentVersion = new Version("4.0.0.0");
18 private const string WixOutputStreamName = "wix-ir.json";
19
20 private readonly Dictionary<string, Localization> localizationsByCulture;
21 private readonly List<IntermediateSection> sections;
22
23 /// <summary>
24 /// Instantiate a new Intermediate.
25 /// </summary>
26 public Intermediate()
27 {
28 this.Id = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).TrimEnd('=').Replace('+', '.').Replace('/', '_');
29 this.localizationsByCulture = new Dictionary<string, Localization>(StringComparer.OrdinalIgnoreCase);
30 this.sections = new List<IntermediateSection>();
31 }
32
33 public Intermediate(string id, IEnumerable<IntermediateSection> sections, IDictionary<string, Localization> localizationsByCulture) : this(id, level: null, sections, localizationsByCulture)
34 {
35 }
36
37 public Intermediate(string id, string level, IEnumerable<IntermediateSection> sections, IDictionary<string, Localization> localizationsByCulture)
38 {
39 this.Id = id;
40 this.Level = level;
41 this.localizationsByCulture = (localizationsByCulture != null) ? new Dictionary<string, Localization>(localizationsByCulture, StringComparer.OrdinalIgnoreCase) : new Dictionary<string, Localization>(StringComparer.OrdinalIgnoreCase);
42 this.sections = (sections != null) ? new List<IntermediateSection>(sections) : new List<IntermediateSection>();
43 }
44
45 /// <summary>
46 /// Get the id for the intermediate.
47 /// </summary>
48 public string Id { get; }
49
50 /// <summary>
51 /// Get the level of the intermediate.
52 /// </summary>
53 public string Level { get; private set; }
54
55 /// <summary>
56 /// Get the localizations contained in this intermediate.
57 /// </summary>
58 public IReadOnlyCollection<Localization> Localizations => this.localizationsByCulture.Values;
59
60 /// <summary>
61 /// Get the sections contained in this intermediate.
62 /// </summary>
63 public IReadOnlyCollection<IntermediateSection> Sections => this.sections;
64
65 /// <summary>
66 /// Loads an intermediate from a path on disk.
67 /// </summary>
68 /// <param name="path">Path to intermediate file saved on disk.</param>
69 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
70 /// <returns>Returns the loaded intermediate.</returns>
71 public static Intermediate Load(string path, bool suppressVersionCheck = false)
72 {
73 var creator = new SimpleSymbolDefinitionCreator();
74 return Intermediate.Load(path, creator, suppressVersionCheck);
75 }
76
77 /// <summary>
78 /// Loads an intermediate from a stream.
79 /// </summary>
80 /// <param name="assembly">Assembly with intermediate embedded in resource stream.</param>
81 /// <param name="resourceName">Name of resource stream.</param>
82 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
83 /// <returns>Returns the loaded intermediate.</returns>
84 public static Intermediate Load(Assembly assembly, string resourceName, bool suppressVersionCheck = false)
85 {
86 var creator = new SimpleSymbolDefinitionCreator();
87 return Intermediate.Load(assembly, resourceName, creator, suppressVersionCheck);
88 }
89
90 /// <summary>
91 /// Loads an intermediate from a stream.
92 /// </summary>
93 /// <param name="assembly">Assembly with intermediate embedded in resource stream.</param>
94 /// <param name="resourceName">Name of resource stream.</param>
95 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
96 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
97 /// <returns>Returns the loaded intermediate.</returns>
98 public static Intermediate Load(Assembly assembly, string resourceName, ISymbolDefinitionCreator creator, bool suppressVersionCheck = false)
99 {
100 using (var wixout = WixOutput.Read(assembly, resourceName))
101 {
102 return Intermediate.LoadIntermediate(wixout, creator, suppressVersionCheck);
103 }
104 }
105
106 /// <summary>
107 /// Loads an intermediate from a path on disk.
108 /// </summary>
109 /// <param name="path">Path to intermediate file saved on disk.</param>
110 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
111 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
112 /// <returns>Returns the loaded intermediate.</returns>
113 public static Intermediate Load(string path, ISymbolDefinitionCreator creator, bool suppressVersionCheck = false)
114 {
115 using (var wixout = WixOutput.Read(path))
116 {
117 return Intermediate.LoadIntermediate(wixout, creator, suppressVersionCheck);
118 }
119 }
120
121 /// <summary>
122 /// Loads an intermediate from a WixOutput object.
123 /// </summary>
124 /// <param name="wixOutput">WixOutput object.</param>
125 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
126 /// <returns>Returns the loaded intermediate.</returns>
127 public static Intermediate Load(WixOutput wixOutput, bool suppressVersionCheck = false)
128 {
129 var creator = new SimpleSymbolDefinitionCreator();
130 return Intermediate.LoadIntermediate(wixOutput, creator, suppressVersionCheck);
131 }
132
133 /// <summary>
134 /// Loads an intermediate from a WixOutput object.
135 /// </summary>
136 /// <param name="wixOutput">WixOutput object.</param>
137 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
138 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
139 /// <returns>Returns the loaded intermediate.</returns>
140 public static Intermediate Load(WixOutput wixOutput, ISymbolDefinitionCreator creator, bool suppressVersionCheck = false)
141 {
142 return Intermediate.LoadIntermediate(wixOutput, creator, suppressVersionCheck);
143 }
144
145 /// <summary>
146 /// Loads several intermediates from paths on disk using the same definitions.
147 /// </summary>
148 /// <param name="intermediateFiles">Paths to intermediate files saved on disk.</param>
149 /// <returns>Returns the loaded intermediates</returns>
150 public static IReadOnlyList<Intermediate> Load(IEnumerable<string> intermediateFiles)
151 {
152 var creator = new SimpleSymbolDefinitionCreator();
153 return Intermediate.Load(intermediateFiles, creator);
154 }
155
156 /// <summary>
157 /// Loads several intermediates from paths on disk using the same definitions.
158 /// </summary>
159 /// <param name="intermediateFiles">Paths to intermediate files saved on disk.</param>
160 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediates.</param>
161 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
162 /// <returns>Returns the loaded intermediates</returns>
163 public static IReadOnlyList<Intermediate> Load(IEnumerable<string> intermediateFiles, ISymbolDefinitionCreator creator, bool suppressVersionCheck = false)
164 {
165 var jsons = new Queue<JsonWithPath>();
166 var intermediates = new List<Intermediate>();
167
168 foreach (var path in intermediateFiles)
169 {
170 using (var wixout = WixOutput.Read(path))
171 {
172 var data = wixout.GetData(WixOutputStreamName);
173 var json = Intermediate.LoadJson(data, wixout.Uri, suppressVersionCheck);
174
175 Intermediate.LoadDefinitions(json, creator);
176
177 jsons.Enqueue(new JsonWithPath { Json = json, Path = wixout.Uri });
178 }
179 }
180
181 while (jsons.Count > 0)
182 {
183 var jsonWithPath = jsons.Dequeue();
184
185 var intermediate = Intermediate.FinalizeLoad(jsonWithPath.Json, jsonWithPath.Path, creator);
186
187 intermediates.Add(intermediate);
188 }
189
190 return intermediates;
191 }
192
193 /// <summary>
194 /// Adds a section to the intermedaite.
195 /// </summary>
196 /// <param name="section">Section to add to the intermediate.</param>
197 /// <returns>Section added to the intermediate.</returns>
198 public IntermediateSection AddSection(IntermediateSection section)
199 {
200 this.sections.Add(section);
201 return section;
202 }
203
204 /// <summary>
205 /// Removes a section from the intermediate.
206 /// </summary>
207 /// <param name="section">Section to remove.</param>
208 /// <returns>True if the section was removed; otherwise false.</returns>
209 public bool RemoveSection(IntermediateSection section)
210 {
211 return this.sections.Remove(section);
212 }
213
214 /// <summary>
215 /// Updates the intermediate level to the specified level.
216 /// </summary>
217 /// <param name="level">Intermediate level.</param>
218 public void UpdateLevel(string level)
219 {
220 this.Level = String.IsNullOrEmpty(this.Level) ? level : String.Concat(this.Level, ";", level);
221 }
222
223 /// <summary>
224 /// Returns whether a specifed intermediate level has been set for this intermediate.
225 /// </summary>
226 /// <param name="level">Intermediate level.</param>
227 /// <returns>True if the specifed intermediate level has been set for this intermediate.</returns>
228 public bool HasLevel(string level)
229 {
230 return this.Level?.Contains(level) == true;
231 }
232
233 /// <summary>
234 /// Saves an intermediate to a path on disk.
235 /// </summary>
236 /// <param name="path">Path to save intermediate file to disk.</param>
237 public void Save(string path)
238 {
239 Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(path)));
240
241 using (var wixout = WixOutput.Create(path))
242 {
243 this.Save(wixout);
244 }
245 }
246
247 /// <summary>
248 /// Saves an intermediate to a WixOutput.
249 /// </summary>
250 /// <param name="wixout">Destination to save.</param>
251 public void Save(WixOutput wixout)
252 {
253 this.SaveEmbedFiles(wixout);
254
255 this.SaveIR(wixout);
256 }
257
258 /// <summary>
259 /// Loads an intermediate from a WixOutput.
260 /// </summary>
261 /// <param name="wixout">Source to load from.</param>
262 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
263 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
264 /// <returns>Returns the loaded intermediate.</returns>
265 private static Intermediate LoadIntermediate(WixOutput wixout, ISymbolDefinitionCreator creator, bool suppressVersionCheck = false)
266 {
267 var data = wixout.GetData(WixOutputStreamName);
268 var json = Intermediate.LoadJson(data, wixout.Uri, suppressVersionCheck);
269
270 Intermediate.LoadDefinitions(json, creator);
271
272 return Intermediate.FinalizeLoad(json, wixout.Uri, creator);
273 }
274
275 /// <summary>
276 /// Loads json form of intermediate.
277 /// </summary>
278 /// <param name="json">Source to load from.</param>
279 /// <param name="baseUri">Path name of intermediate file.</param>
280 /// <param name="suppressVersionCheck">Suppress checking for wix.dll version mismatches.</param>
281 /// <returns>Returns the loaded json.</returns>
282 private static JsonObject LoadJson(string json, Uri baseUri, bool suppressVersionCheck)
283 {
284 var jsonObject = SimpleJson.DeserializeObject(json) as JsonObject;
285
286 if (!suppressVersionCheck)
287 {
288 var versionJson = jsonObject.GetValueOrDefault<string>("version");
289
290 if (!Version.TryParse(versionJson, out var version) || !Intermediate.CurrentVersion.Equals(version))
291 {
292 throw new WixException(ErrorMessages.VersionMismatch(SourceLineNumber.CreateFromUri(baseUri.AbsoluteUri), "intermediate", versionJson, Intermediate.CurrentVersion.ToString()));
293 }
294 }
295
296 return jsonObject;
297 }
298
299 /// <summary>
300 /// Loads custom definitions in intermediate json into the creator.
301 /// </summary>
302 /// <param name="json">Json version of intermediate.</param>
303 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
304 private static void LoadDefinitions(JsonObject json, ISymbolDefinitionCreator creator)
305 {
306 var definitionsJson = json.GetValueOrDefault<JsonArray>("definitions");
307
308 if (definitionsJson != null)
309 {
310 foreach (JsonObject definitionJson in definitionsJson)
311 {
312 var definition = IntermediateSymbolDefinition.Deserialize(definitionJson);
313 creator.AddCustomSymbolDefinition(definition);
314 }
315 }
316 }
317
318 /// <summary>
319 /// Loads the sections and localization for the intermediate.
320 /// </summary>
321 /// <param name="json">Json version of intermediate.</param>
322 /// <param name="baseUri">Path to the intermediate.</param>
323 /// <param name="creator">ISymbolDefinitionCreator to use when reconstituting the intermediate.</param>
324 /// <returns>The finalized intermediate.</returns>
325 private static Intermediate FinalizeLoad(JsonObject json, Uri baseUri, ISymbolDefinitionCreator creator)
326 {
327 var id = json.GetValueOrDefault<string>("id");
328 var level = json.GetValueOrDefault<string>("level");
329
330 var sections = new List<IntermediateSection>();
331
332 var sectionsJson = json.GetValueOrDefault<JsonArray>("sections");
333 foreach (JsonObject sectionJson in sectionsJson)
334 {
335 var section = IntermediateSection.Deserialize(creator, baseUri, sectionJson);
336 sections.Add(section);
337 }
338
339 var localizations = new Dictionary<string, Localization>(StringComparer.OrdinalIgnoreCase);
340
341 var localizationsJson = json.GetValueOrDefault<JsonArray>("localizations") ?? new JsonArray();
342 foreach (JsonObject localizationJson in localizationsJson)
343 {
344 var localization = Localization.Deserialize(localizationJson);
345 localizations.Add(localization.Culture, localization);
346 }
347
348 return new Intermediate(id, level, sections, localizations);
349 }
350
351 private void SaveEmbedFiles(WixOutput wixout)
352 {
353 var embeddedFields = this.Sections.SelectMany(s => s.Symbols)
354 .SelectMany(t => t.Fields)
355 .Where(f => f?.Type == IntermediateFieldType.Path)
356 .Select(f => f.AsPath())
357 .Where(f => f.Embed)
358 .ToList();
359
360 var savedEmbedFields = new Dictionary<string, IntermediateFieldPathValue>(StringComparer.OrdinalIgnoreCase);
361 var uniqueEntryNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
362
363 foreach (var embeddedField in embeddedFields)
364 {
365 var key = String.Concat(embeddedField.BaseUri?.AbsoluteUri, "?", embeddedField.Path);
366
367 if (savedEmbedFields.TryGetValue(key, out var existing))
368 {
369 embeddedField.Path = existing.Path;
370 }
371 else
372 {
373 var entryName = CalculateUniqueEntryName(uniqueEntryNames, embeddedField.Path);
374
375 if (embeddedField.BaseUri == null)
376 {
377 wixout.ImportDataStream(entryName, embeddedField.Path);
378 }
379 else // open the container specified in baseUri and copy the correct stream out of it.
380 {
381 using (var otherWixout = WixOutput.Read(embeddedField.BaseUri))
382 using (var stream = otherWixout.GetDataStream(embeddedField.Path))
383 using (var target = wixout.CreateDataStream(entryName))
384 {
385 stream.CopyTo(target);
386 }
387 }
388
389 embeddedField.Path = entryName;
390
391 savedEmbedFields.Add(key, embeddedField);
392 }
393 }
394 }
395
396 private void SaveIR(WixOutput wixout)
397 {
398 using (var writer = new StreamWriter(wixout.CreateDataStream(WixOutputStreamName)))
399 {
400 var jsonObject = new JsonObject
401 {
402 { "id", this.Id },
403 { "level", this.Level },
404 { "version", Intermediate.CurrentVersion.ToString() }
405 };
406
407 var sectionsJson = new JsonArray(this.Sections.Count);
408 foreach (var section in this.Sections)
409 {
410 var sectionJson = section.Serialize();
411 sectionsJson.Add(sectionJson);
412 }
413
414 jsonObject.Add("sections", sectionsJson);
415
416 var customDefinitions = this.GetCustomDefinitionsInSections();
417
418 if (customDefinitions.Count > 0)
419 {
420 var customDefinitionsJson = new JsonArray(customDefinitions.Count);
421
422 foreach (var kvp in customDefinitions.OrderBy(d => d.Key))
423 {
424 var customDefinitionJson = kvp.Value.Serialize();
425 customDefinitionsJson.Add(customDefinitionJson);
426 }
427
428 jsonObject.Add("definitions", customDefinitionsJson);
429 }
430
431 if (this.Localizations.Any())
432 {
433 var localizationsJson = new JsonArray();
434 foreach (var localization in this.Localizations)
435 {
436 var localizationJson = localization.Serialize();
437 localizationsJson.Add(localizationJson);
438 }
439
440 jsonObject.Add("localizations", localizationsJson);
441 }
442
443 var json = SimpleJson.SerializeObject(jsonObject);
444 writer.Write(json);
445 }
446 }
447
448 private static string CalculateUniqueEntryName(ISet<string> entryNames, string path)
449 {
450 var filename = Path.GetFileName(path);
451 var entryName = "wix-ir/" + filename;
452 var i = 0;
453
454 while (!entryNames.Add(entryName))
455 {
456 entryName = $"wix-ir/{filename}-{++i}";
457 }
458
459 return entryName;
460 }
461
462 private Dictionary<string, IntermediateSymbolDefinition> GetCustomDefinitionsInSections()
463 {
464 var customDefinitions = new Dictionary<string, IntermediateSymbolDefinition>();
465
466 foreach (var symbol in this.Sections.SelectMany(s => s.Symbols).Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension))
467 {
468 if (!customDefinitions.ContainsKey(symbol.Definition.Name))
469 {
470 customDefinitions.Add(symbol.Definition.Name, symbol.Definition);
471 }
472 }
473
474 return customDefinitions;
475 }
476
477 private struct JsonWithPath
478 {
479 public JsonObject Json { get; set; }
480
481 public Uri Path { get; set; }
482 }
483 }
484}
diff --git a/src/api/wix/WixToolset.Data/IntermediateField.cs b/src/api/wix/WixToolset.Data/IntermediateField.cs
new file mode 100644
index 00000000..2310f447
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateField.cs
@@ -0,0 +1,56 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Diagnostics;
7 using SimpleJson;
8
9 [DebuggerDisplay("Name={Name,nq} Type={Type} Value={Value?.AsString()}")]
10 public class IntermediateField
11 {
12 public IntermediateField(IntermediateFieldDefinition definition) => this.Definition = definition;
13
14 public IntermediateFieldDefinition Definition { get; }
15
16 public string Name => this.Definition.Name;
17
18 public IntermediateFieldType Type => this.Definition.Type;
19
20 public string Context => this.Value?.Context;
21
22 public IntermediateFieldValue PreviousValue => this.Value?.PreviousValue;
23
24 internal IntermediateFieldValue Value { get; set; }
25
26 public static explicit operator bool(IntermediateField field) => field.AsBool();
27
28 public static explicit operator bool? (IntermediateField field) => field.AsNullableBool();
29
30 public static explicit operator long(IntermediateField field) => field.AsLargeNumber();
31
32 public static explicit operator long?(IntermediateField field) => field.AsNullableLargeNumber();
33
34 public static explicit operator int(IntermediateField field) => field.AsNumber();
35
36 public static explicit operator int? (IntermediateField field) => field.AsNullableNumber();
37
38 public static explicit operator string(IntermediateField field) => field.AsString();
39
40 internal static IntermediateField Deserialize(IntermediateFieldDefinition definition, Uri baseUri, JsonObject jsonObject)
41 {
42 IntermediateField field = null;
43
44 if (jsonObject != null)
45 {
46 field = new IntermediateField(definition);
47
48 field.Value = IntermediateFieldValue.Deserialize(jsonObject, baseUri, definition.Type);
49 }
50
51 return field;
52 }
53
54 internal JsonObject Serialize() => this.Value?.Serialize();
55 }
56}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldContext.cs b/src/api/wix/WixToolset.Data/IntermediateFieldContext.cs
new file mode 100644
index 00000000..785a959f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldContext.cs
@@ -0,0 +1,38 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 public class IntermediateFieldContext : IDisposable
8 {
9 private readonly string previous;
10 private bool disposed;
11
12 public IntermediateFieldContext(string context)
13 {
14 this.previous = IntermediateFieldExtensions.valueContext;
15
16 IntermediateFieldExtensions.valueContext = context;
17 }
18
19 public void Dispose()
20 {
21 this.Dispose(true);
22 GC.SuppressFinalize(this);
23 }
24
25 protected virtual void Dispose(bool disposing)
26 {
27 if (!this.disposed)
28 {
29 if (disposing)
30 {
31 IntermediateFieldExtensions.valueContext = this.previous;
32 }
33
34 this.disposed = true;
35 }
36 }
37 }
38}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldDefinition.cs b/src/api/wix/WixToolset.Data/IntermediateFieldDefinition.cs
new file mode 100644
index 00000000..5e1d8f29
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldDefinition.cs
@@ -0,0 +1,26 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 public enum IntermediateFieldType
6 {
7 String,
8 Bool,
9 Number,
10 LargeNumber,
11 Path,
12 }
13
14 public class IntermediateFieldDefinition
15 {
16 public IntermediateFieldDefinition(string name, IntermediateFieldType type)
17 {
18 this.Name = name;
19 this.Type = type;
20 }
21
22 public string Name { get; }
23
24 public IntermediateFieldType Type { get; }
25 }
26}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldExtensions.cs b/src/api/wix/WixToolset.Data/IntermediateFieldExtensions.cs
new file mode 100644
index 00000000..c70eb230
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldExtensions.cs
@@ -0,0 +1,481 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 public static class IntermediateFieldExtensions
8 {
9 [ThreadStatic]
10 internal static string valueContext;
11
12 public static bool IsNull(this IntermediateField field) => field?.Value?.Data == null;
13
14 public static bool AsBool(this IntermediateField field)
15 {
16 if (field == null || field.Value == null || field.Value.Data == null)
17 {
18 return false;
19 }
20
21 switch (field.Definition.Type)
22 {
23 case IntermediateFieldType.Bool:
24 return field.Value.AsBool();
25
26 case IntermediateFieldType.LargeNumber:
27 case IntermediateFieldType.Number:
28 return field.Value.AsLargeNumber() != 0;
29
30 case IntermediateFieldType.String:
31 return !String.IsNullOrEmpty(field.Value.AsString());
32
33 case IntermediateFieldType.Path:
34 return !String.IsNullOrEmpty(field.Value.AsPath()?.Path);
35
36 default:
37 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean");
38 }
39 }
40
41 public static bool? AsNullableBool(this IntermediateField field)
42 {
43 if (field == null || field.Value == null || field.Value.Data == null)
44 {
45 return null;
46 }
47
48 return field.AsBool();
49 }
50
51 public static long AsLargeNumber(this IntermediateField field)
52 {
53 if (field == null || field.Value == null || field.Value.Data == null)
54 {
55 return 0;
56 }
57
58 switch (field.Definition.Type)
59 {
60 case IntermediateFieldType.Bool:
61 return field.Value.AsBool() ? 1 : 0;
62
63 case IntermediateFieldType.LargeNumber:
64 case IntermediateFieldType.Number:
65 return field.Value.AsLargeNumber();
66
67 case IntermediateFieldType.String:
68 return Convert.ToInt64(field.Value.AsString());
69
70 default:
71 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to large number");
72 }
73 }
74
75 public static long? AsNullableLargeNumber(this IntermediateField field)
76 {
77 if (field == null || field.Value == null || field.Value.Data == null)
78 {
79 return null;
80 }
81
82 return field.AsLargeNumber();
83 }
84
85 public static int AsNumber(this IntermediateField field)
86 {
87 if (field == null || field.Value == null || field.Value.Data == null)
88 {
89 return 0;
90 }
91
92 switch (field.Definition.Type)
93 {
94 case IntermediateFieldType.Bool:
95 return field.Value.AsBool() ? 1 : 0;
96
97 case IntermediateFieldType.LargeNumber:
98 case IntermediateFieldType.Number:
99 return field.Value.AsNumber();
100
101 case IntermediateFieldType.String:
102 return Convert.ToInt32(field.Value.AsString());
103
104 default:
105 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number");
106 }
107 }
108
109 public static int? AsNullableNumber(this IntermediateField field)
110 {
111 if (field == null || field.Value == null || field.Value.Data == null)
112 {
113 return null;
114 }
115
116 return field.AsNumber();
117 }
118
119 public static IntermediateFieldPathValue AsPath(this IntermediateField field)
120 {
121 if (field == null || field.Value == null || field.Value.Data == null)
122 {
123 return null;
124 }
125
126 switch (field.Definition.Type)
127 {
128 case IntermediateFieldType.String:
129 return new IntermediateFieldPathValue { Path = field.Value.AsString() };
130
131 case IntermediateFieldType.Path:
132 return field.Value.AsPath();
133
134 default:
135 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string");
136 }
137 }
138
139 public static string AsString(this IntermediateField field)
140 {
141 if (field == null || field.Value == null || field.Value.Data == null)
142 {
143 return null;
144 }
145
146 switch (field.Definition.Type)
147 {
148 case IntermediateFieldType.Bool:
149 return field.Value.AsBool() ? "true" : "false";
150
151 case IntermediateFieldType.LargeNumber:
152 case IntermediateFieldType.Number:
153 return field.Value.AsLargeNumber().ToString();
154
155 case IntermediateFieldType.String:
156 return field.Value.AsString();
157
158 case IntermediateFieldType.Path:
159 return field.Value.AsPath()?.Path;
160
161 default:
162 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string");
163 }
164 }
165
166 public static object AsObject(this IntermediateField field)
167 {
168 return field?.Value.Data;
169 }
170
171 public static IntermediateField Set(this IntermediateField field, bool value)
172 {
173 object data;
174
175 if (field == null)
176 {
177 throw new ArgumentNullException(nameof(field));
178 }
179
180 switch (field.Type)
181 {
182 case IntermediateFieldType.Bool:
183 data = value;
184 break;
185
186 case IntermediateFieldType.LargeNumber:
187 data = value ? (long)1 : (long)0;
188 break;
189
190 case IntermediateFieldType.Number:
191 data = value ? 1 : 0;
192 break;
193
194 case IntermediateFieldType.Path:
195 throw new ArgumentException($"Cannot convert bool '{value}' to a 'Path' field type.", nameof(value));
196
197 case IntermediateFieldType.String:
198 data = value ? "true" : "false";
199 break;
200
201 default:
202 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
203 };
204
205 return AssignFieldValue(field, data);
206 }
207
208 public static IntermediateField Set(this IntermediateField field, bool? value)
209 {
210 if (field == null)
211 {
212 throw new ArgumentNullException(nameof(field));
213 }
214
215 return value.HasValue ? field.Set(value.Value) : AssignFieldValue(field, null);
216 }
217
218 public static IntermediateField Set(this IntermediateField field, long value)
219 {
220 object data;
221
222 if (field == null)
223 {
224 throw new ArgumentNullException(nameof(field));
225 }
226
227 switch (field.Type)
228 {
229 case IntermediateFieldType.Bool:
230 data = (value != 0);
231 break;
232
233 case IntermediateFieldType.LargeNumber:
234 data = value;
235 break;
236
237 case IntermediateFieldType.Number:
238 data = (int)value;
239 break;
240
241 case IntermediateFieldType.Path:
242 throw new ArgumentException($"Cannot convert large number '{value}' to a 'Path' field type.", nameof(value));
243
244 case IntermediateFieldType.String:
245 data = value.ToString();
246 break;
247
248 default:
249 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
250 };
251
252 return AssignFieldValue(field, data);
253 }
254
255 public static IntermediateField Set(this IntermediateField field, long? value)
256 {
257 if (field == null)
258 {
259 throw new ArgumentNullException(nameof(field));
260 }
261
262 return value.HasValue ? field.Set(value.Value) : AssignFieldValue(field, null);
263 }
264
265 public static IntermediateField Set(this IntermediateField field, int value)
266 {
267 object data;
268
269 if (field == null)
270 {
271 throw new ArgumentNullException(nameof(field));
272 }
273
274 switch (field.Type)
275 {
276 case IntermediateFieldType.Bool:
277 data = (value != 0);
278 break;
279
280 case IntermediateFieldType.LargeNumber:
281 data = (long)value;
282 break;
283
284 case IntermediateFieldType.Number:
285 data = value;
286 break;
287
288 case IntermediateFieldType.Path:
289 throw new ArgumentException($"Cannot convert number '{value}' to a 'Path' field type.", nameof(value));
290
291 case IntermediateFieldType.String:
292 data = value.ToString();
293 break;
294
295 default:
296 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
297 };
298
299 return AssignFieldValue(field, data);
300 }
301
302 public static IntermediateField Set(this IntermediateField field, int? value)
303 {
304 if (field == null)
305 {
306 throw new ArgumentNullException(nameof(field));
307 }
308
309 return value.HasValue ? field.Set(value.Value) : AssignFieldValue(field, null);
310 }
311
312 public static IntermediateField Set(this IntermediateField field, IntermediateFieldPathValue value)
313 {
314 object data;
315
316 if (field == null)
317 {
318 throw new ArgumentNullException(nameof(field));
319 }
320 else if (value == null) // null is always allowed.
321 {
322 data = null;
323 }
324 else
325 {
326 switch (field.Type)
327 {
328 case IntermediateFieldType.Bool:
329 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value));
330
331 case IntermediateFieldType.LargeNumber:
332 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value));
333
334 case IntermediateFieldType.Number:
335 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value));
336
337 case IntermediateFieldType.Path:
338 data = value;
339 break;
340
341 case IntermediateFieldType.String:
342 data = value.Path;
343 break;
344
345 default:
346 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
347 }
348 }
349
350 return AssignFieldValue(field, data);
351 }
352
353 public static IntermediateField Set(this IntermediateField field, string value)
354 {
355 object data;
356
357 if (field == null)
358 {
359 throw new ArgumentNullException(nameof(field));
360 }
361 else if (value == null) // Null is always allowed.
362 {
363 data = null;
364 }
365 else
366 {
367 switch (field.Type)
368 {
369 case IntermediateFieldType.Bool:
370 if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase))
371 {
372 data = true;
373 }
374 else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase))
375 {
376 data = false;
377 }
378 else
379 {
380 throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value));
381 }
382 break;
383
384 case IntermediateFieldType.LargeNumber:
385 if (Int64.TryParse(value, out var largeNumber))
386 {
387 data = largeNumber;
388 }
389 else
390 {
391 throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value));
392 }
393 break;
394
395 case IntermediateFieldType.Number:
396 if (Int32.TryParse(value, out var number))
397 {
398 data = number;
399 }
400 else
401 {
402 throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", field.Name);
403 }
404 break;
405
406 case IntermediateFieldType.Path:
407 data = new IntermediateFieldPathValue { Path = value };
408 break;
409
410 case IntermediateFieldType.String:
411 data = value;
412 break;
413
414 default:
415 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
416 }
417 }
418
419 return AssignFieldValue(field, data);
420 }
421
422 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, bool value)
423 {
424 return EnsureField(field, definition).Set(value);
425 }
426
427 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, bool? value)
428 {
429 return EnsureField(field, definition).Set(value);
430 }
431
432 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, long value)
433 {
434 return EnsureField(field, definition).Set(value);
435 }
436
437 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, long? value)
438 {
439 return EnsureField(field, definition).Set(value);
440 }
441
442 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, int value)
443 {
444 return EnsureField(field, definition).Set(value);
445 }
446
447 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, int? value)
448 {
449 return EnsureField(field, definition).Set(value);
450 }
451
452 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, IntermediateFieldPathValue value)
453 {
454 return EnsureField(field, definition).Set(value);
455 }
456
457 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, string value)
458 {
459 return EnsureField(field, definition).Set(value);
460 }
461
462 public static void Overwrite(this IntermediateField field, string value) => field.Value.Data = value;
463
464 private static IntermediateField AssignFieldValue(IntermediateField field, object data)
465 {
466 field.Value = new IntermediateFieldValue
467 {
468 Context = valueContext,
469 Data = data,
470 PreviousValue = field.Value
471 };
472
473 return field;
474 }
475
476 private static IntermediateField EnsureField(IntermediateField field, IntermediateFieldDefinition definition)
477 {
478 return field ?? new IntermediateField(definition);
479 }
480 }
481}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldPathValue.cs b/src/api/wix/WixToolset.Data/IntermediateFieldPathValue.cs
new file mode 100644
index 00000000..a8d2735a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldPathValue.cs
@@ -0,0 +1,26 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 public class IntermediateFieldPathValue
8 {
9 /// <summary>
10 /// Indicates whether to embed the path to the file when the intermediate field is saved.
11 /// </summary>
12 public bool Embed { get; set; }
13
14 /// <summary>
15 /// Gets the base URI of the path field.
16 /// </summary>
17 /// <value>The base URI of the path field.</value>
18 public Uri BaseUri { get; set; }
19
20 /// <summary>
21 /// Gets or sets the data for this field.
22 /// </summary>
23 /// <value>Data in the field.</value>
24 public string Path { get; set; }
25 }
26}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldValue.cs b/src/api/wix/WixToolset.Data/IntermediateFieldValue.cs
new file mode 100644
index 00000000..84a23931
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldValue.cs
@@ -0,0 +1,146 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Diagnostics;
7 using SimpleJson;
8
9 [DebuggerDisplay("{Data}")]
10 public class IntermediateFieldValue
11 {
12 public string Context { get; internal set; }
13
14 internal object Data { get; set; }
15
16 public IntermediateFieldValue PreviousValue { get; internal set; }
17
18 public static explicit operator bool(IntermediateFieldValue value) => value.AsBool();
19
20 public static explicit operator bool?(IntermediateFieldValue value) => value.AsNullableBool();
21
22 public static explicit operator int(IntermediateFieldValue value) => value.AsNumber();
23
24 public static explicit operator int?(IntermediateFieldValue value) => value.AsNullableNumber();
25
26 public static explicit operator IntermediateFieldPathValue(IntermediateFieldValue value) => value.AsPath();
27
28 public static explicit operator string(IntermediateFieldValue value) => value.AsString();
29
30 internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type)
31 {
32 var context = jsonObject.GetValueOrDefault<string>("context");
33 if (!jsonObject.TryGetValue("data", out var data))
34 {
35 throw new ArgumentException();
36 }
37
38 var value = data;
39
40 switch (value)
41 {
42 case int intData:
43 switch (type)
44 {
45 case IntermediateFieldType.Bool:
46 value = intData != 0;
47 break;
48
49 case IntermediateFieldType.LargeNumber:
50 value = Convert.ToInt64(data);
51 break;
52
53 case IntermediateFieldType.Path:
54 case IntermediateFieldType.String:
55 value = intData.ToString();
56 break;
57 }
58 break;
59
60 case long longData:
61 switch (type)
62 {
63 case IntermediateFieldType.Bool:
64 value = longData != 0;
65 break;
66
67 case IntermediateFieldType.Number:
68 value = Convert.ToInt32(longData);
69 break;
70
71 case IntermediateFieldType.Path:
72 case IntermediateFieldType.String:
73 value = longData.ToString();
74 break;
75 }
76 break;
77
78 case JsonObject jsonData:
79 jsonData.TryGetValue("embed", out var embed);
80
81 value = new IntermediateFieldPathValue
82 {
83 BaseUri = (embed != null) ? baseUri : null,
84 Embed = embed != null,
85 Path = jsonData.GetValueOrDefault<string>("path"),
86 };
87 break;
88
89 // Nothing to do for this case, so leave it out.
90 // case string stringData:
91 // break;
92 }
93
94 var previousValueJson = jsonObject.GetValueOrDefault<JsonObject>("prev");
95 var previousValue = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson, baseUri, type);
96
97 return new IntermediateFieldValue
98 {
99 Context = context,
100 Data = value,
101 PreviousValue = previousValue
102 };
103 }
104
105 internal JsonObject Serialize()
106 {
107 var jsonObject = new JsonObject();
108
109 if (!String.IsNullOrEmpty(this.Context))
110 {
111 jsonObject.Add("context", this.Context);
112 }
113
114 if (this.Data is IntermediateFieldPathValue pathField)
115 {
116 var jsonData = new JsonObject();
117
118 // pathField.BaseUri is set during load, not saved.
119
120 if (pathField.Embed)
121 {
122 jsonData.Add("embed", "true");
123 }
124
125 if (!String.IsNullOrEmpty(pathField.Path))
126 {
127 jsonData.Add("path", pathField.Path);
128 }
129
130 jsonObject.Add("data", jsonData);
131 }
132 else
133 {
134 jsonObject.Add("data", this.Data);
135 }
136
137 if (this.PreviousValue != null)
138 {
139 var previousValueJson = this.PreviousValue.Serialize();
140 jsonObject.Add("prev", previousValueJson);
141 }
142
143 return jsonObject;
144 }
145 }
146}
diff --git a/src/api/wix/WixToolset.Data/IntermediateFieldValueExtensions.cs b/src/api/wix/WixToolset.Data/IntermediateFieldValueExtensions.cs
new file mode 100644
index 00000000..8ff923a7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateFieldValueExtensions.cs
@@ -0,0 +1,161 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 public static class IntermediateFieldValueExtensions
8 {
9 public static bool AsBool(this IntermediateFieldValue value)
10 {
11 if (value.Data is bool b)
12 {
13 return b;
14 }
15 else if (value.Data is int n)
16 {
17 return n != 0;
18 }
19 else if (value.Data is long l)
20 {
21 return l != 0;
22 }
23 else if (value.Data is string s)
24 {
25 if (s.Equals("yes", StringComparison.OrdinalIgnoreCase) || s.Equals("true", StringComparison.OrdinalIgnoreCase))
26 {
27 return true;
28 }
29 else if (s.Equals("no", StringComparison.OrdinalIgnoreCase) || s.Equals("false", StringComparison.OrdinalIgnoreCase))
30 {
31 return false;
32 }
33 }
34
35 return (bool)value.Data;
36 }
37
38 public static bool? AsNullableBool(this IntermediateFieldValue value)
39 {
40 if (value?.Data == null)
41 {
42 return null;
43 }
44
45 return value.AsBool();
46 }
47
48 public static long AsLargeNumber(this IntermediateFieldValue value)
49 {
50 if (value.Data is long l)
51 {
52 return l;
53 }
54 else if (value.Data is int n)
55 {
56 return n;
57 }
58 else if (value.Data is bool b)
59 {
60 return b ? 1 : 0;
61 }
62 else if (value.Data is string s)
63 {
64 try
65 {
66 return Convert.ToInt32(s);
67 }
68 catch (FormatException)
69 {
70 throw new WixException(ErrorMessages.UnableToConvertFieldToNumber(s));
71 }
72 }
73
74 return (long)value.Data;
75 }
76
77 public static long? AsNullableLargeNumber(this IntermediateFieldValue value)
78 {
79 if (value?.Data == null)
80 {
81 return null;
82 }
83
84 return value.AsLargeNumber();
85 }
86
87 public static int AsNumber(this IntermediateFieldValue value)
88 {
89 if (value.Data is int n)
90 {
91 return n;
92 }
93 else if (value.Data is long l)
94 {
95 return (int)l;
96 }
97 else if (value.Data is bool b)
98 {
99 return b ? 1 : 0;
100 }
101 else if (value.Data is string s)
102 {
103 try
104 {
105 return Convert.ToInt32(s);
106 }
107 catch (FormatException)
108 {
109 throw new WixException(ErrorMessages.UnableToConvertFieldToNumber(s));
110 }
111 }
112
113 return (int)value.Data;
114 }
115
116 public static int? AsNullableNumber(this IntermediateFieldValue value)
117 {
118 if (value?.Data == null)
119 {
120 return null;
121 }
122
123 return value.AsNumber();
124 }
125
126 public static IntermediateFieldPathValue AsPath(this IntermediateFieldValue value)
127 {
128 return (IntermediateFieldPathValue)value?.Data;
129 }
130
131 public static string AsString(this IntermediateFieldValue value)
132 {
133 if (value?.Data == null)
134 {
135 return null;
136 }
137 else if (value.Data is string s)
138 {
139 return s;
140 }
141 else if (value.Data is int n)
142 {
143 return n.ToString();
144 }
145 else if (value.Data is long l)
146 {
147 return l.ToString();
148 }
149 else if (value.Data is bool b)
150 {
151 return b ? "true" : "false";
152 }
153 else if (value.Data is IntermediateFieldPathValue p)
154 {
155 return p.Path;
156 }
157
158 return (string)value.Data;
159 }
160 }
161}
diff --git a/src/api/wix/WixToolset.Data/IntermediateLevels.cs b/src/api/wix/WixToolset.Data/IntermediateLevels.cs
new file mode 100644
index 00000000..64c19ae1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateLevels.cs
@@ -0,0 +1,10 @@
1namespace WixToolset.Data
2{
3 public static class IntermediateLevels
4 {
5 public const string Compiled = "compiled";
6 public const string Combined = "combined";
7 public const string Linked = "linked";
8 public const string Resolved = "resolved";
9 }
10}
diff --git a/src/api/wix/WixToolset.Data/IntermediateSection.cs b/src/api/wix/WixToolset.Data/IntermediateSection.cs
new file mode 100644
index 00000000..b9157875
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateSection.cs
@@ -0,0 +1,139 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Collections.Generic;
7 using SimpleJson;
8
9 /// <summary>
10 /// Section in an intermediate file.
11 /// </summary>
12 public class IntermediateSection
13 {
14 private readonly List<IntermediateSymbol> symbols;
15
16 /// <summary>
17 /// Creates a new section as part of an intermediate.
18 /// </summary>
19 /// <param name="id">Identifier for section.</param>
20 /// <param name="type">Type of section.</param>
21 /// <param name="compilationId">Optional compilation identifier</param>
22 public IntermediateSection(string id, SectionType type, string compilationId = null)
23 {
24 this.Id = id;
25 this.Type = type;
26 this.CompilationId = compilationId;
27 this.symbols = new List<IntermediateSymbol>();
28 }
29
30 /// <summary>
31 /// Gets the identifier for the section.
32 /// </summary>
33 /// <value>Section identifier.</value>
34 public string Id { get; }
35
36 /// <summary>
37 /// Gets the type of the section.
38 /// </summary>
39 /// <value>Type of section.</value>
40 public SectionType Type { get; }
41
42 /// <summary>
43 /// Gets and sets the identifier of the compilation of the source file containing the section.
44 /// </summary>
45 public string CompilationId { get; }
46
47 /// <summary>
48 /// Gets and sets the identifier of the library that combined the section.
49 /// </summary>
50 public string LibraryId { get; private set; }
51
52 /// <summary>
53 /// Symbols in the section.
54 /// </summary>
55 public IReadOnlyCollection<IntermediateSymbol> Symbols => this.symbols;
56
57 /// <summary>
58 /// Adds a symbol to the section.
59 /// </summary>
60 /// <typeparam name="T">Type of IntermediateSymbol to add to the section.</typeparam>
61 /// <param name="symbol">Symbol to add to the section.</param>
62 /// <returns>Symbol added to the section.</returns>
63 public T AddSymbol<T>(T symbol) where T : IntermediateSymbol
64 {
65 this.symbols.Add(symbol);
66 return symbol;
67 }
68
69 /// <summary>
70 /// Assigns the section to a library.
71 /// </summary>
72 /// <param name="libraryId">Identifier of the library.</param>
73 public void AssignToLibrary(string libraryId)
74 {
75 this.LibraryId = libraryId;
76 }
77
78 /// <summary>
79 /// Removes a symbol from the section.
80 /// </summary>
81 /// <param name="symbol">Symbol to remove.</param>
82 /// <returns>True if the symbol was removed; otherwise false.</returns>
83 public bool RemoveSymbol(IntermediateSymbol symbol)
84 {
85 return this.symbols.Remove(symbol);
86 }
87
88 /// <summary>
89 /// Parse a section from the JSON data.
90 /// </summary>
91 internal static IntermediateSection Deserialize(ISymbolDefinitionCreator creator, Uri baseUri, JsonObject jsonObject)
92 {
93 var id = jsonObject.GetValueOrDefault<string>("id");
94 var type = jsonObject.GetEnumOrDefault("type", SectionType.Unknown);
95
96 if (SectionType.Unknown == type)
97 {
98 throw new ArgumentException("JSON object is not a valid section, unknown section type", nameof(type));
99 }
100
101 var section = new IntermediateSection(id, type);
102
103 var symbolsJson = jsonObject.GetValueOrDefault<JsonArray>("symbols");
104
105 foreach (JsonObject symbolJson in symbolsJson)
106 {
107 var symbol = IntermediateSymbol.Deserialize(creator, baseUri, symbolJson);
108 section.symbols.Add(symbol);
109 }
110
111 return section;
112 }
113
114 internal JsonObject Serialize()
115 {
116 var jsonObject = new JsonObject
117 {
118 { "type", this.Type.ToString().ToLowerInvariant() }
119 };
120
121 if (!String.IsNullOrEmpty(this.Id))
122 {
123 jsonObject.Add("id", this.Id);
124 }
125
126 var symbolsJson = new JsonArray(this.Symbols.Count);
127
128 foreach (var symbol in this.Symbols)
129 {
130 var symbolJson = symbol.Serialize();
131 symbolsJson.Add(symbolJson);
132 }
133
134 jsonObject.Add("symbols", symbolsJson);
135
136 return jsonObject;
137 }
138 }
139}
diff --git a/src/api/wix/WixToolset.Data/IntermediateSymbol.cs b/src/api/wix/WixToolset.Data/IntermediateSymbol.cs
new file mode 100644
index 00000000..4be17094
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateSymbol.cs
@@ -0,0 +1,300 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Diagnostics;
7 using SimpleJson;
8
9 /// <summary>
10 /// Intermediate symbol.
11 /// </summary>
12 [DebuggerDisplay("{DebuggerDisplay,nq}")]
13 public class IntermediateSymbol
14 {
15 private object tags;
16
17 /// <summary>
18 /// Creates an intermediate symbol.
19 /// </summary>
20 /// <param name="definition">Symbol definition.</param>
21 public IntermediateSymbol(IntermediateSymbolDefinition definition) : this(definition, null, null)
22 {
23 }
24
25 /// <summary>
26 /// Creates an intermediate symbol with source line number and identifier.
27 /// </summary>
28 /// <param name="definition">Symbol definition.</param>
29 /// <param name="sourceLineNumber">Source line number.</param>
30 /// <param name="id">Symbol identifier.</param>
31 public IntermediateSymbol(IntermediateSymbolDefinition definition, SourceLineNumber sourceLineNumber, Identifier id = null)
32 {
33 this.Definition = definition;
34 this.Fields = new IntermediateField[definition.FieldDefinitions.Length];
35 this.SourceLineNumbers = sourceLineNumber;
36 this.Id = id;
37 }
38
39 /// <summary>
40 /// Gets the symbol's definition.
41 /// </summary>
42 public IntermediateSymbolDefinition Definition { get; }
43
44 /// <summary>
45 /// Gets the symbol's fields.
46 /// </summary>
47 public IntermediateField[] Fields { get; }
48
49 /// <summary>
50 /// Gets the optional source line number of the symbol.
51 /// </summary>
52 public SourceLineNumber SourceLineNumbers { get; internal set; }
53
54 /// <summary>
55 /// Gets the optional identifier for the symbol.
56 /// </summary>
57 public Identifier Id { get; internal set; }
58
59 /// <summary>
60 /// Direct access by index to the symbol's fields.
61 /// </summary>
62 /// <param name="index">Index of the field to access.</param>
63 /// <returns>Symbol's field.</returns>
64 public IntermediateField this[int index] => this.Fields[index];
65
66 private string DebuggerDisplay => $"{this.Definition?.Name} {this.Id?.Id}";
67
68 /// <summary>
69 /// Add a custom tag to the symbol.
70 /// </summary>
71 /// <param name="add">String tag to add to the symbol.</param>
72 /// <returns>True if the tag was added; otherwise false if th tag was already present.</returns>
73 public bool AddTag(string add)
74 {
75 if (this.tags == null)
76 {
77 this.tags = add;
78 }
79 else if (this.tags is string tag)
80 {
81 if (tag == add)
82 {
83 return false;
84 }
85
86 this.tags = new[] { tag, add };
87 }
88 else
89 {
90 var tagsArray = (string[])this.tags;
91 var array = new string[tagsArray.Length + 1];
92
93 for (var i = 0; i < tagsArray.Length; ++i)
94 {
95 if (tagsArray[i] == add)
96 {
97 return false;
98 }
99
100 array[i] = tagsArray[i];
101 }
102
103 array[tagsArray.Length] = add;
104
105 this.tags = array;
106 }
107
108 return true;
109 }
110
111 /// <summary>
112 /// Tests whether a symbol has a tag.
113 /// </summary>
114 /// <param name="has">String tag to find.</param>
115 /// <returns>True if the symbol has the tag; otherwise false.</returns>
116 public bool HasTag(string has)
117 {
118 if (this.tags == null)
119 {
120 return false;
121 }
122 else if (this.tags is string tag)
123 {
124 return tag == has;
125 }
126 else
127 {
128 foreach (var element in (string[])this.tags)
129 {
130 if (element == has)
131 {
132 return true;
133 }
134 }
135 }
136
137 return false;
138 }
139
140 /// <summary>
141 /// Removes a tag from the symbol.
142 /// </summary>
143 /// <param name="remove">String tag to remove.</param>
144 /// <returns>True if the tag was removed; otherwise false if the tag was not present.</returns>
145 public bool RemoveTag(string remove)
146 {
147 if (this.tags is string tag)
148 {
149 if (tag == remove)
150 {
151 this.tags = null;
152 return true;
153 }
154 }
155 else if (this.tags is string[] tagsArray)
156 {
157 if (tagsArray.Length == 2)
158 {
159 if (tagsArray[0] == remove)
160 {
161 this.tags = tagsArray[1];
162 return true;
163 }
164 else if (tagsArray[1] == remove)
165 {
166 this.tags = tagsArray[0];
167 return true;
168 }
169 }
170 else
171 {
172 var array = new string[tagsArray.Length - 1];
173 var arrayIndex = 0;
174 var found = false;
175
176 for (var i = 0; i < tagsArray.Length; ++i)
177 {
178 if (tagsArray[i] == remove)
179 {
180 found = true;
181 continue;
182 }
183 else if (arrayIndex == array.Length)
184 {
185 break;
186 }
187
188 array[arrayIndex++] = tagsArray[i];
189 }
190
191 if (found)
192 {
193 this.tags = array;
194 return true;
195 }
196 }
197 }
198
199 return false;
200 }
201
202 internal static IntermediateSymbol Deserialize(ISymbolDefinitionCreator creator, Uri baseUri, JsonObject jsonObject)
203 {
204 var definitionName = jsonObject.GetValueOrDefault<string>("type");
205 var idJson = jsonObject.GetValueOrDefault<JsonObject>("id");
206 var sourceLineNumbersJson = jsonObject.GetValueOrDefault<JsonObject>("ln");
207 var fieldsJson = jsonObject.GetValueOrDefault<JsonArray>("fields");
208 var tagsJson = jsonObject.GetValueOrDefault<JsonArray>("tags");
209
210 var id = (idJson == null) ? null : Identifier.Deserialize(idJson);
211 var sourceLineNumbers = (sourceLineNumbersJson == null) ? null : SourceLineNumber.Deserialize(sourceLineNumbersJson);
212
213 if (!creator.TryGetSymbolDefinitionByName(definitionName, out var definition))
214 {
215 throw new WixException(ErrorMessages.UnknownSymbolType(definitionName));
216 }
217
218 var symbol = definition.CreateSymbol(sourceLineNumbers, id);
219
220 for (var i = 0; i < fieldsJson.Count && i < symbol.Fields.Length; ++i)
221 {
222 if (fieldsJson[i] is JsonObject fieldJson)
223 {
224 symbol.Fields[i] = IntermediateField.Deserialize(symbol.Definition.FieldDefinitions[i], baseUri, fieldJson);
225 }
226 }
227
228 if (tagsJson == null || tagsJson.Count == 0)
229 {
230 }
231 else if (tagsJson.Count == 1)
232 {
233 symbol.tags = (string)tagsJson[0];
234 }
235 else
236 {
237 var tags = new string[tagsJson.Count];
238
239 for (var i = 0; i < tagsJson.Count; ++i)
240 {
241 tags[i] = (string)tagsJson[i];
242 }
243
244 symbol.tags = tags;
245 }
246
247 return symbol;
248 }
249
250 internal JsonObject Serialize()
251 {
252 var jsonObject = new JsonObject
253 {
254 { "type", this.Definition.Name }
255 };
256
257 var idJson = this.Id?.Serialize();
258 if (idJson != null)
259 {
260 jsonObject.Add("id", idJson);
261 }
262
263 var lnJson = this.SourceLineNumbers?.Serialize();
264 if (lnJson != null)
265 {
266 jsonObject.Add("ln", lnJson);
267 }
268
269 var fieldsJson = new JsonArray(this.Fields.Length);
270
271 foreach (var field in this.Fields)
272 {
273 var fieldJson = field?.Serialize();
274 fieldsJson.Add(fieldJson);
275 }
276
277 jsonObject.Add("fields", fieldsJson);
278
279 if (this.tags is string || this.tags is string[])
280 {
281 JsonArray tagsJson;
282
283 if (this.tags is string tag)
284 {
285 tagsJson = new JsonArray(1) { tag };
286 }
287 else
288 {
289 var array = (string[])this.tags;
290 tagsJson = new JsonArray(array.Length);
291 tagsJson.AddRange(array);
292 }
293
294 jsonObject.Add("tags", tagsJson);
295 }
296
297 return jsonObject;
298 }
299 }
300}
diff --git a/src/api/wix/WixToolset.Data/IntermediateSymbolDefinition.cs b/src/api/wix/WixToolset.Data/IntermediateSymbolDefinition.cs
new file mode 100644
index 00000000..dc913704
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateSymbolDefinition.cs
@@ -0,0 +1,270 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using SimpleJson;
7
8 public class IntermediateSymbolDefinition
9 {
10 private object tags;
11
12 public IntermediateSymbolDefinition(string name, IntermediateFieldDefinition[] fieldDefinitions, Type strongSymbolType)
13 : this(SymbolDefinitionType.MustBeFromAnExtension, name, 0, fieldDefinitions, strongSymbolType)
14 {
15 }
16
17 public IntermediateSymbolDefinition(string name, int revision, IntermediateFieldDefinition[] fieldDefinitions, Type strongSymbolType)
18 : this(SymbolDefinitionType.MustBeFromAnExtension, name, revision, fieldDefinitions, strongSymbolType)
19 {
20 }
21
22 internal IntermediateSymbolDefinition(SymbolDefinitionType type, IntermediateFieldDefinition[] fieldDefinitions, Type strongSymbolType)
23 : this(type, type.ToString(), 0, fieldDefinitions, strongSymbolType)
24 {
25 }
26
27 private IntermediateSymbolDefinition(SymbolDefinitionType type, string name, int revision, IntermediateFieldDefinition[] fieldDefinitions, Type strongSymbolType)
28 {
29 this.Type = type;
30 this.Name = name;
31 this.Revision = revision;
32 this.FieldDefinitions = fieldDefinitions;
33 this.StrongSymbolType = strongSymbolType ?? typeof(IntermediateSymbol);
34#if DEBUG
35 if (this.StrongSymbolType != typeof(IntermediateSymbol) && !this.StrongSymbolType.IsSubclassOf(typeof(IntermediateSymbol))) { throw new ArgumentException(nameof(strongSymbolType)); }
36#endif
37 }
38
39 public int Revision { get; }
40
41 public SymbolDefinitionType Type { get; }
42
43 public string Name { get; }
44
45 public IntermediateFieldDefinition[] FieldDefinitions { get; }
46
47 private Type StrongSymbolType { get; }
48
49 public IntermediateSymbol CreateSymbol(SourceLineNumber sourceLineNumber = null, Identifier id = null)
50 {
51 var symbol = (this.StrongSymbolType == typeof(IntermediateSymbol)) ? (IntermediateSymbol)Activator.CreateInstance(this.StrongSymbolType, this) : (IntermediateSymbol)Activator.CreateInstance(this.StrongSymbolType);
52 symbol.SourceLineNumbers = sourceLineNumber;
53 symbol.Id = id;
54
55 return symbol;
56 }
57
58 public bool AddTag(string add)
59 {
60 if (this.tags == null)
61 {
62 this.tags = add;
63 }
64 else if (this.tags is string tag)
65 {
66 if (tag == add)
67 {
68 return false;
69 }
70
71 this.tags = new[] { tag, add };
72 }
73 else
74 {
75 var tagsArray = (string[])this.tags;
76 var array = new string[tagsArray.Length + 1];
77
78 for (var i = 0; i < tagsArray.Length; ++i)
79 {
80 if (tagsArray[i] == add)
81 {
82 return false;
83 }
84
85 array[i] = tagsArray[i];
86 }
87
88 array[tagsArray.Length] = add;
89
90 this.tags = array;
91 }
92
93 return true;
94 }
95
96 public bool HasTag(string has)
97 {
98 if (this.tags == null)
99 {
100 return false;
101 }
102 else if (this.tags is string tag)
103 {
104 return tag == has;
105 }
106 else
107 {
108 foreach (var element in (string[])this.tags)
109 {
110 if (element == has)
111 {
112 return true;
113 }
114 }
115 }
116
117 return false;
118 }
119
120 public bool RemoveTag(string remove)
121 {
122 if (this.tags is string tag)
123 {
124 if (tag == remove)
125 {
126 this.tags = null;
127 return true;
128 }
129 }
130 else if (this.tags is string[] tagsArray)
131 {
132 if (tagsArray.Length == 2)
133 {
134 if (tagsArray[0] == remove)
135 {
136 this.tags = tagsArray[1];
137 return true;
138 }
139 else if (tagsArray[1] == remove)
140 {
141 this.tags = tagsArray[0];
142 return true;
143 }
144 }
145 else
146 {
147 var array = new string[tagsArray.Length - 1];
148 var arrayIndex = 0;
149 var found = false;
150
151 for (var i = 0; i < tagsArray.Length; ++i)
152 {
153 if (tagsArray[i] == remove)
154 {
155 found = true;
156 continue;
157 }
158 else if (arrayIndex == array.Length)
159 {
160 break;
161 }
162
163 array[arrayIndex++] = tagsArray[i];
164 }
165
166 if (found)
167 {
168 this.tags = array;
169 return true;
170 }
171 }
172 }
173
174 return false;
175 }
176
177 internal static IntermediateSymbolDefinition Deserialize(JsonObject jsonObject)
178 {
179 var name = jsonObject.GetValueOrDefault<string>("name");
180 var revision = jsonObject.GetValueOrDefault("rev", 0);
181 var definitionsJson = jsonObject.GetValueOrDefault<JsonArray>("fields");
182 var tagsJson = jsonObject.GetValueOrDefault<JsonArray>("tags");
183
184 var fieldDefinitions = new IntermediateFieldDefinition[definitionsJson.Count];
185
186 for (var i = 0; i < definitionsJson.Count; ++i)
187 {
188 var definitionJson = (JsonObject)definitionsJson[i];
189 var fieldName = definitionJson.GetValueOrDefault<string>("name");
190 var fieldType = definitionJson.GetEnumOrDefault("type", IntermediateFieldType.String);
191 fieldDefinitions[i] = new IntermediateFieldDefinition(fieldName, fieldType);
192 }
193
194 var definition = new IntermediateSymbolDefinition(name, revision, fieldDefinitions, null);
195
196 if (tagsJson == null || tagsJson.Count == 0)
197 {
198 }
199 else if (tagsJson.Count == 1)
200 {
201 definition.tags = (string)tagsJson[0];
202 }
203 else
204 {
205 var tags = new string[tagsJson.Count];
206
207 for (var i = 0; i < tagsJson.Count; ++i)
208 {
209 tags[i] = (string)tagsJson[i];
210 }
211
212 definition.tags = tags;
213 }
214
215 return definition;
216 }
217
218 internal JsonObject Serialize()
219 {
220 var jsonObject = new JsonObject
221 {
222 { "name", this.Name }
223 };
224
225 if (this.Revision > 0)
226 {
227 jsonObject.Add("rev", this.Revision);
228 }
229
230 var fieldsJson = new JsonArray(this.FieldDefinitions.Length);
231
232 foreach (var fieldDefinition in this.FieldDefinitions)
233 {
234 var fieldJson = new JsonObject
235 {
236 { "name", fieldDefinition.Name },
237 };
238
239 if (fieldDefinition.Type != IntermediateFieldType.String)
240 {
241 fieldJson.Add("type", fieldDefinition.Type.ToString().ToLowerInvariant());
242 }
243
244 fieldsJson.Add(fieldJson);
245 }
246
247 jsonObject.Add("fields", fieldsJson);
248
249 if (this.tags is string || this.tags is string[])
250 {
251 JsonArray tagsJson;
252
253 if (this.tags is string tag)
254 {
255 tagsJson = new JsonArray(1) { tag };
256 }
257 else
258 {
259 var array = (string[])this.tags;
260 tagsJson = new JsonArray(array.Length);
261 tagsJson.AddRange(array);
262 }
263
264 jsonObject.Add("tags", tagsJson);
265 }
266
267 return jsonObject;
268 }
269 }
270}
diff --git a/src/api/wix/WixToolset.Data/IntermediateSymbolExtensions.cs b/src/api/wix/WixToolset.Data/IntermediateSymbolExtensions.cs
new file mode 100644
index 00000000..10f0d7f0
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/IntermediateSymbolExtensions.cs
@@ -0,0 +1,121 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 public static class IntermediateSymbolExtensions
6 {
7 public static bool AsBool(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsBool() ?? false;
8
9 public static bool? AsNullableBool(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNullableBool();
10
11 public static int AsNumber(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNumber() ?? 0;
12
13 public static int? AsNullableNumber(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNullableNumber();
14
15 public static string AsString(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsString();
16
17 public static IntermediateField Set(this IntermediateSymbol symbol, int index, bool value)
18 {
19 var definition = symbol.Definition.FieldDefinitions[index];
20
21 var field = symbol.Fields[index].Set(definition, value);
22
23 return symbol.Fields[index] = field;
24 }
25
26 public static IntermediateField Set(this IntermediateSymbol symbol, int index, bool? value)
27 {
28 if (value == null && NoFieldMetadata(symbol, index))
29 {
30 return symbol.Fields[index] = null;
31 }
32
33 var definition = symbol.Definition.FieldDefinitions[index];
34
35 var field = symbol.Fields[index].Set(definition, value);
36
37 return symbol.Fields[index] = field;
38 }
39
40 public static IntermediateField Set(this IntermediateSymbol symbol, int index, long value)
41 {
42 var definition = symbol.Definition.FieldDefinitions[index];
43
44 var field = symbol.Fields[index].Set(definition, value);
45
46 return symbol.Fields[index] = field;
47 }
48
49 public static IntermediateField Set(this IntermediateSymbol symbol, int index, long? value)
50 {
51 if (value == null && NoFieldMetadata(symbol, index))
52 {
53 return symbol.Fields[index] = null;
54 }
55
56 var definition = symbol.Definition.FieldDefinitions[index];
57
58 var field = symbol.Fields[index].Set(definition, value);
59
60 return symbol.Fields[index] = field;
61 }
62
63 public static IntermediateField Set(this IntermediateSymbol symbol, int index, int value)
64 {
65 var definition = symbol.Definition.FieldDefinitions[index];
66
67 var field = symbol.Fields[index].Set(definition, value);
68
69 return symbol.Fields[index] = field;
70 }
71
72 public static IntermediateField Set(this IntermediateSymbol symbol, int index, int? value)
73 {
74 if (value == null && NoFieldMetadata(symbol, index))
75 {
76 return symbol.Fields[index] = null;
77 }
78
79 var definition = symbol.Definition.FieldDefinitions[index];
80
81 var field = symbol.Fields[index].Set(definition, value);
82
83 return symbol.Fields[index] = field;
84 }
85
86 public static IntermediateField Set(this IntermediateSymbol symbol, int index, IntermediateFieldPathValue value)
87 {
88 if (value?.Path == null && value?.BaseUri == null && NoFieldMetadata(symbol, index))
89 {
90 return symbol.Fields[index] = null;
91 }
92
93 var definition = symbol.Definition.FieldDefinitions[index];
94
95 var field = symbol.Fields[index].Set(definition, value);
96
97 return symbol.Fields[index] = field;
98 }
99
100 public static IntermediateField Set(this IntermediateSymbol symbol, int index, string value)
101 {
102 if (value == null && NoFieldMetadata(symbol, index))
103 {
104 return symbol.Fields[index] = null;
105 }
106
107 var definition = symbol.Definition.FieldDefinitions[index];
108
109 var field = symbol.Fields[index].Set(definition, value);
110
111 return symbol.Fields[index] = field;
112 }
113
114 private static bool NoFieldMetadata(IntermediateSymbol symbol, int index)
115 {
116 var field = symbol?.Fields[index];
117
118 return field?.Context == null && field?.PreviousValue == null;
119 }
120 }
121}
diff --git a/src/api/wix/WixToolset.Data/Json/JsonObjectExtensions.cs b/src/api/wix/WixToolset.Data/Json/JsonObjectExtensions.cs
new file mode 100644
index 00000000..bc52333c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Json/JsonObjectExtensions.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
3namespace WixToolset.Data
4{
5 using System;
6 using SimpleJson;
7
8 internal static class JsonObjectExtensions
9 {
10 public static JsonObject AddNonDefaultValue(this JsonObject jsonObject, string key, bool value, bool defaultValue = default(bool))
11 {
12 if (value != defaultValue)
13 {
14 jsonObject.Add(key, value);
15 }
16
17 return jsonObject;
18 }
19
20 public static JsonObject AddNonDefaultValue(this JsonObject jsonObject, string key, int value, int defaultValue = default(int))
21 {
22 if (value != defaultValue)
23 {
24 jsonObject.Add(key, value);
25 }
26
27 return jsonObject;
28 }
29
30 public static JsonObject AddNonDefaultValue(this JsonObject jsonObject, string key, object value, object defaultValue = null)
31 {
32 if (value != defaultValue)
33 {
34 jsonObject.Add(key, value);
35 }
36
37 return jsonObject;
38 }
39
40 public static JsonObject AddIsNotNullOrEmpty(this JsonObject jsonObject, string key, string value)
41 {
42 if (!String.IsNullOrEmpty(value))
43 {
44 jsonObject.Add(key, value);
45 }
46
47 return jsonObject;
48 }
49
50 public static bool GetValueOrDefault(this JsonObject jsonObject, string key, bool defaultValue)
51 {
52 return jsonObject.TryGetValue(key, out var value) ? Convert.ToBoolean(value) : defaultValue;
53 }
54
55 public static int GetValueOrDefault(this JsonObject jsonObject, string key, int defaultValue)
56 {
57 return jsonObject.TryGetValue(key, out var value) ? Convert.ToInt32(value) : defaultValue;
58 }
59
60 public static int? GetValueOrDefault(this JsonObject jsonObject, string key, int? defaultValue)
61 {
62 return jsonObject.TryGetValue(key, out var value) ? Convert.ToInt32(value) : defaultValue;
63 }
64
65 public static T GetValueOrDefault<T>(this JsonObject jsonObject, string key, T defaultValue = default(T)) where T : class
66 {
67 return jsonObject.TryGetValue(key, out var value) ? value as T : defaultValue;
68 }
69
70 public static T GetEnumOrDefault<T>(this JsonObject jsonObject, string key, T defaultValue) where T : struct
71 {
72#if DEBUG
73 if (!typeof(T).IsEnum) { throw new ArgumentException("This method only supports enums.", nameof(T)); }
74#endif
75 var value = jsonObject.GetValueOrDefault<string>(key);
76 return Enum.TryParse(value, true, out T e) ? e : defaultValue;
77 }
78 }
79}
diff --git a/src/api/wix/WixToolset.Data/Json/SimpleJson.cs b/src/api/wix/WixToolset.Data/Json/SimpleJson.cs
new file mode 100644
index 00000000..3d956f6e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Json/SimpleJson.cs
@@ -0,0 +1,2127 @@
1//-----------------------------------------------------------------------
2// <copyright file="SimpleJson.cs" company="The Outercurve Foundation">
3// Copyright (c) 2011, The Outercurve Foundation.
4//
5// Licensed under the MIT License (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.opensource.org/licenses/mit-license.php
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15// </copyright>
16// <author>Nathan Totten (ntotten.com), Jim Zimmerman (jimzimmerman.com) and Prabir Shrestha (prabir.me)</author>
17// <website>https://github.com/facebook-csharp-sdk/simple-json</website>
18//-----------------------------------------------------------------------
19
20// VERSION:
21
22// NOTE: uncomment the following line to make SimpleJson class internal.
23#define SIMPLE_JSON_INTERNAL
24
25// NOTE: uncomment the following line to make JsonArray and JsonObject class internal.
26#define SIMPLE_JSON_OBJARRAYINTERNAL
27
28// NOTE: uncomment the following line to enable dynamic support.
29//#define SIMPLE_JSON_DYNAMIC
30
31// NOTE: uncomment the following line to enable DataContract support.
32//#define SIMPLE_JSON_DATACONTRACT
33
34// NOTE: uncomment the following line to enable IReadOnlyCollection<T> and IReadOnlyList<T> support.
35//#define SIMPLE_JSON_READONLY_COLLECTIONS
36
37// NOTE: uncomment the following line to disable linq expressions/compiled lambda (better performance) instead of method.invoke().
38// define if you are using .net framework <= 3.0 or < WP7.5
39//#define SIMPLE_JSON_NO_LINQ_EXPRESSION
40
41// NOTE: uncomment the following line if you are compiling under Window Metro style application/library.
42// usually already defined in properties
43//#define NETFX_CORE;
44
45// If you are targetting WinStore, WP8 and NET4.5+ PCL make sure to #define SIMPLE_JSON_TYPEINFO;
46
47// original json parsing code from http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
48
49#if NETFX_CORE
50#define SIMPLE_JSON_TYPEINFO
51#endif
52
53using System;
54using System.CodeDom.Compiler;
55using System.Collections;
56using System.Collections.Generic;
57#if !SIMPLE_JSON_NO_LINQ_EXPRESSION
58using System.Linq.Expressions;
59#endif
60using System.ComponentModel;
61using System.Diagnostics.CodeAnalysis;
62#if SIMPLE_JSON_DYNAMIC
63using System.Dynamic;
64#endif
65using System.Globalization;
66using System.Reflection;
67using System.Runtime.Serialization;
68using System.Text;
69using SimpleJson.Reflection;
70
71// ReSharper disable LoopCanBeConvertedToQuery
72// ReSharper disable RedundantExplicitArrayCreation
73// ReSharper disable SuggestUseVarKeywordEvident
74namespace SimpleJson
75{
76 /// <summary>
77 /// Represents the json array.
78 /// </summary>
79 [GeneratedCode("simple-json", "1.0.0")]
80 [EditorBrowsable(EditorBrowsableState.Never)]
81 [SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
82#if SIMPLE_JSON_OBJARRAYINTERNAL
83 internal
84#else
85 public
86#endif
87 class JsonArray : List<object>
88 {
89 /// <summary>
90 /// Initializes a new instance of the <see cref="JsonArray"/> class.
91 /// </summary>
92 public JsonArray() { }
93
94 /// <summary>
95 /// Initializes a new instance of the <see cref="JsonArray"/> class.
96 /// </summary>
97 /// <param name="capacity">The capacity of the json array.</param>
98 public JsonArray(int capacity) : base(capacity) { }
99
100 /// <summary>
101 /// The json representation of the array.
102 /// </summary>
103 /// <returns>The json representation of the array.</returns>
104 public override string ToString()
105 {
106 return SimpleJson.SerializeObject(this) ?? string.Empty;
107 }
108 }
109
110 /// <summary>
111 /// Represents the json object.
112 /// </summary>
113 [GeneratedCode("simple-json", "1.0.0")]
114 [EditorBrowsable(EditorBrowsableState.Never)]
115 [SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
116#if SIMPLE_JSON_OBJARRAYINTERNAL
117 internal
118#else
119 public
120#endif
121 class JsonObject :
122#if SIMPLE_JSON_DYNAMIC
123 DynamicObject,
124#endif
125 IDictionary<string, object>
126 {
127 /// <summary>
128 /// The internal member dictionary.
129 /// </summary>
130 private readonly Dictionary<string, object> _members;
131
132 /// <summary>
133 /// Initializes a new instance of <see cref="JsonObject"/>.
134 /// </summary>
135 public JsonObject()
136 {
137 _members = new Dictionary<string, object>();
138 }
139
140 /// <summary>
141 /// Initializes a new instance of <see cref="JsonObject"/>.
142 /// </summary>
143 /// <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> implementation to use when comparing keys, or null to use the default <see cref="T:System.Collections.Generic.EqualityComparer`1"/> for the type of the key.</param>
144 public JsonObject(IEqualityComparer<string> comparer)
145 {
146 _members = new Dictionary<string, object>(comparer);
147 }
148
149 /// <summary>
150 /// Gets the <see cref="System.Object"/> at the specified index.
151 /// </summary>
152 /// <value></value>
153 public object this[int index]
154 {
155 get { return GetAtIndex(_members, index); }
156 }
157
158 internal static object GetAtIndex(IDictionary<string, object> obj, int index)
159 {
160 if (obj == null)
161 throw new ArgumentNullException("obj");
162 if (index >= obj.Count)
163 throw new ArgumentOutOfRangeException("index");
164 int i = 0;
165 foreach (KeyValuePair<string, object> o in obj)
166 if (i++ == index) return o.Value;
167 return null;
168 }
169
170 /// <summary>
171 /// Adds the specified key.
172 /// </summary>
173 /// <param name="key">The key.</param>
174 /// <param name="value">The value.</param>
175 public void Add(string key, object value)
176 {
177 _members.Add(key, value);
178 }
179
180 /// <summary>
181 /// Determines whether the specified key contains key.
182 /// </summary>
183 /// <param name="key">The key.</param>
184 /// <returns>
185 /// <c>true</c> if the specified key contains key; otherwise, <c>false</c>.
186 /// </returns>
187 public bool ContainsKey(string key)
188 {
189 return _members.ContainsKey(key);
190 }
191
192 /// <summary>
193 /// Gets the keys.
194 /// </summary>
195 /// <value>The keys.</value>
196 public ICollection<string> Keys
197 {
198 get { return _members.Keys; }
199 }
200
201 /// <summary>
202 /// Removes the specified key.
203 /// </summary>
204 /// <param name="key">The key.</param>
205 /// <returns></returns>
206 public bool Remove(string key)
207 {
208 return _members.Remove(key);
209 }
210
211 /// <summary>
212 /// Tries the get value.
213 /// </summary>
214 /// <param name="key">The key.</param>
215 /// <param name="value">The value.</param>
216 /// <returns></returns>
217 public bool TryGetValue(string key, out object value)
218 {
219 return _members.TryGetValue(key, out value);
220 }
221
222 /// <summary>
223 /// Gets the values.
224 /// </summary>
225 /// <value>The values.</value>
226 public ICollection<object> Values
227 {
228 get { return _members.Values; }
229 }
230
231 /// <summary>
232 /// Gets or sets the <see cref="System.Object"/> with the specified key.
233 /// </summary>
234 /// <value></value>
235 public object this[string key]
236 {
237 get { return _members[key]; }
238 set { _members[key] = value; }
239 }
240
241 /// <summary>
242 /// Adds the specified item.
243 /// </summary>
244 /// <param name="item">The item.</param>
245 public void Add(KeyValuePair<string, object> item)
246 {
247 _members.Add(item.Key, item.Value);
248 }
249
250 /// <summary>
251 /// Clears this instance.
252 /// </summary>
253 public void Clear()
254 {
255 _members.Clear();
256 }
257
258 /// <summary>
259 /// Determines whether [contains] [the specified item].
260 /// </summary>
261 /// <param name="item">The item.</param>
262 /// <returns>
263 /// <c>true</c> if [contains] [the specified item]; otherwise, <c>false</c>.
264 /// </returns>
265 public bool Contains(KeyValuePair<string, object> item)
266 {
267 return _members.ContainsKey(item.Key) && _members[item.Key] == item.Value;
268 }
269
270 /// <summary>
271 /// Copies to.
272 /// </summary>
273 /// <param name="array">The array.</param>
274 /// <param name="arrayIndex">Index of the array.</param>
275 public void CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
276 {
277 if (array == null) throw new ArgumentNullException("array");
278 int num = Count;
279 foreach (KeyValuePair<string, object> kvp in this)
280 {
281 array[arrayIndex++] = kvp;
282 if (--num <= 0)
283 return;
284 }
285 }
286
287 /// <summary>
288 /// Gets the count.
289 /// </summary>
290 /// <value>The count.</value>
291 public int Count
292 {
293 get { return _members.Count; }
294 }
295
296 /// <summary>
297 /// Gets a value indicating whether this instance is read only.
298 /// </summary>
299 /// <value>
300 /// <c>true</c> if this instance is read only; otherwise, <c>false</c>.
301 /// </value>
302 public bool IsReadOnly
303 {
304 get { return false; }
305 }
306
307 /// <summary>
308 /// Removes the specified item.
309 /// </summary>
310 /// <param name="item">The item.</param>
311 /// <returns></returns>
312 public bool Remove(KeyValuePair<string, object> item)
313 {
314 return _members.Remove(item.Key);
315 }
316
317 /// <summary>
318 /// Gets the enumerator.
319 /// </summary>
320 /// <returns></returns>
321 public IEnumerator<KeyValuePair<string, object>> GetEnumerator()
322 {
323 return _members.GetEnumerator();
324 }
325
326 /// <summary>
327 /// Returns an enumerator that iterates through a collection.
328 /// </summary>
329 /// <returns>
330 /// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
331 /// </returns>
332 IEnumerator IEnumerable.GetEnumerator()
333 {
334 return _members.GetEnumerator();
335 }
336
337 /// <summary>
338 /// Returns a json <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
339 /// </summary>
340 /// <returns>
341 /// A json <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
342 /// </returns>
343 public override string ToString()
344 {
345 return SimpleJson.SerializeObject(this);
346 }
347
348#if SIMPLE_JSON_DYNAMIC
349 /// <summary>
350 /// Provides implementation for type conversion operations. Classes derived from the <see cref="T:System.Dynamic.DynamicObject"/> class can override this method to specify dynamic behavior for operations that convert an object from one type to another.
351 /// </summary>
352 /// <param name="binder">Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, binder.Type returns the <see cref="T:System.String"/> type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion.</param>
353 /// <param name="result">The result of the type conversion operation.</param>
354 /// <returns>
355 /// Alwasy returns true.
356 /// </returns>
357 public override bool TryConvert(ConvertBinder binder, out object result)
358 {
359 // <pex>
360 if (binder == null)
361 throw new ArgumentNullException("binder");
362 // </pex>
363 Type targetType = binder.Type;
364
365 if ((targetType == typeof(IEnumerable)) ||
366 (targetType == typeof(IEnumerable<KeyValuePair<string, object>>)) ||
367 (targetType == typeof(IDictionary<string, object>)) ||
368 (targetType == typeof(IDictionary)))
369 {
370 result = this;
371 return true;
372 }
373
374 return base.TryConvert(binder, out result);
375 }
376
377 /// <summary>
378 /// Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic.
379 /// </summary>
380 /// <param name="binder">Provides information about the deletion.</param>
381 /// <returns>
382 /// Alwasy returns true.
383 /// </returns>
384 public override bool TryDeleteMember(DeleteMemberBinder binder)
385 {
386 // <pex>
387 if (binder == null)
388 throw new ArgumentNullException("binder");
389 // </pex>
390 return _members.Remove(binder.Name);
391 }
392
393 /// <summary>
394 /// Provides the implementation for operations that get a value by index. Classes derived from the <see cref="T:System.Dynamic.DynamicObject"/> class can override this method to specify dynamic behavior for indexing operations.
395 /// </summary>
396 /// <param name="binder">Provides information about the operation.</param>
397 /// <param name="indexes">The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, <paramref name="indexes"/> is equal to 3.</param>
398 /// <param name="result">The result of the index operation.</param>
399 /// <returns>
400 /// Alwasy returns true.
401 /// </returns>
402 public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
403 {
404 if (indexes == null) throw new ArgumentNullException("indexes");
405 if (indexes.Length == 1)
406 {
407 result = ((IDictionary<string, object>)this)[(string)indexes[0]];
408 return true;
409 }
410 result = null;
411 return true;
412 }
413
414 /// <summary>
415 /// Provides the implementation for operations that get member values. Classes derived from the <see cref="T:System.Dynamic.DynamicObject"/> class can override this method to specify dynamic behavior for operations such as getting a value for a property.
416 /// </summary>
417 /// <param name="binder">Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive.</param>
418 /// <param name="result">The result of the get operation. For example, if the method is called for a property, you can assign the property value to <paramref name="result"/>.</param>
419 /// <returns>
420 /// Alwasy returns true.
421 /// </returns>
422 public override bool TryGetMember(GetMemberBinder binder, out object result)
423 {
424 object value;
425 if (_members.TryGetValue(binder.Name, out value))
426 {
427 result = value;
428 return true;
429 }
430 result = null;
431 return true;
432 }
433
434 /// <summary>
435 /// Provides the implementation for operations that set a value by index. Classes derived from the <see cref="T:System.Dynamic.DynamicObject"/> class can override this method to specify dynamic behavior for operations that access objects by a specified index.
436 /// </summary>
437 /// <param name="binder">Provides information about the operation.</param>
438 /// <param name="indexes">The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, <paramref name="indexes"/> is equal to 3.</param>
439 /// <param name="value">The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, <paramref name="value"/> is equal to 10.</param>
440 /// <returns>
441 /// true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.
442 /// </returns>
443 public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value)
444 {
445 if (indexes == null) throw new ArgumentNullException("indexes");
446 if (indexes.Length == 1)
447 {
448 ((IDictionary<string, object>)this)[(string)indexes[0]] = value;
449 return true;
450 }
451 return base.TrySetIndex(binder, indexes, value);
452 }
453
454 /// <summary>
455 /// Provides the implementation for operations that set member values. Classes derived from the <see cref="T:System.Dynamic.DynamicObject"/> class can override this method to specify dynamic behavior for operations such as setting a value for a property.
456 /// </summary>
457 /// <param name="binder">Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive.</param>
458 /// <param name="value">The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the <see cref="T:System.Dynamic.DynamicObject"/> class, the <paramref name="value"/> is "Test".</param>
459 /// <returns>
460 /// true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.)
461 /// </returns>
462 public override bool TrySetMember(SetMemberBinder binder, object value)
463 {
464 // <pex>
465 if (binder == null)
466 throw new ArgumentNullException("binder");
467 // </pex>
468 _members[binder.Name] = value;
469 return true;
470 }
471
472 /// <summary>
473 /// Returns the enumeration of all dynamic member names.
474 /// </summary>
475 /// <returns>
476 /// A sequence that contains dynamic member names.
477 /// </returns>
478 public override IEnumerable<string> GetDynamicMemberNames()
479 {
480 foreach (var key in Keys)
481 yield return key;
482 }
483#endif
484 }
485}
486
487namespace SimpleJson
488{
489 /// <summary>
490 /// This class encodes and decodes JSON strings.
491 /// Spec. details, see http://www.json.org/
492 ///
493 /// JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList&lt;object>) and JsonObject(IDictionary&lt;string,object>).
494 /// All numbers are parsed to doubles.
495 /// </summary>
496 [GeneratedCode("simple-json", "1.0.0")]
497#if SIMPLE_JSON_INTERNAL
498 internal
499#else
500 public
501#endif
502 static class SimpleJson
503 {
504 private const int TOKEN_NONE = 0;
505 private const int TOKEN_CURLY_OPEN = 1;
506 private const int TOKEN_CURLY_CLOSE = 2;
507 private const int TOKEN_SQUARED_OPEN = 3;
508 private const int TOKEN_SQUARED_CLOSE = 4;
509 private const int TOKEN_COLON = 5;
510 private const int TOKEN_COMMA = 6;
511 private const int TOKEN_STRING = 7;
512 private const int TOKEN_NUMBER = 8;
513 private const int TOKEN_TRUE = 9;
514 private const int TOKEN_FALSE = 10;
515 private const int TOKEN_NULL = 11;
516 private const int BUILDER_CAPACITY = 2000;
517
518 private static readonly char[] EscapeTable;
519 private static readonly char[] EscapeCharacters = new char[] { '"', '\\', '\b', '\f', '\n', '\r', '\t' };
520 private static readonly string EscapeCharactersString = new string(EscapeCharacters);
521
522 static SimpleJson()
523 {
524 EscapeTable = new char[93];
525 EscapeTable['"'] = '"';
526 EscapeTable['\\'] = '\\';
527 EscapeTable['\b'] = 'b';
528 EscapeTable['\f'] = 'f';
529 EscapeTable['\n'] = 'n';
530 EscapeTable['\r'] = 'r';
531 EscapeTable['\t'] = 't';
532 }
533
534 /// <summary>
535 /// Parses the string json into a value
536 /// </summary>
537 /// <param name="json">A JSON string.</param>
538 /// <returns>An IList&lt;object>, a IDictionary&lt;string,object>, a double, a string, null, true, or false</returns>
539 public static object DeserializeObject(string json)
540 {
541 object obj;
542 if (TryDeserializeObject(json, out obj))
543 return obj;
544 throw new SerializationException("Invalid JSON string");
545 }
546
547 /// <summary>
548 /// Try parsing the json string into a value.
549 /// </summary>
550 /// <param name="json">
551 /// A JSON string.
552 /// </param>
553 /// <param name="obj">
554 /// The object.
555 /// </param>
556 /// <returns>
557 /// Returns true if successfull otherwise false.
558 /// </returns>
559 [SuppressMessage("Microsoft.Design", "CA1007:UseGenericsWhereAppropriate", Justification = "Need to support .NET 2")]
560 public static bool TryDeserializeObject(string json, out object obj)
561 {
562 bool success = true;
563 if (json != null)
564 {
565 char[] charArray = json.ToCharArray();
566 int index = 0;
567 obj = ParseValue(charArray, ref index, ref success);
568 }
569 else
570 obj = null;
571
572 return success;
573 }
574
575 public static object DeserializeObject(string json, Type type, IJsonSerializerStrategy jsonSerializerStrategy)
576 {
577 object jsonObject = DeserializeObject(json);
578 return type == null || jsonObject != null && ReflectionUtils.IsAssignableFrom(jsonObject.GetType(), type)
579 ? jsonObject
580 : (jsonSerializerStrategy ?? CurrentJsonSerializerStrategy).DeserializeObject(jsonObject, type);
581 }
582
583 public static object DeserializeObject(string json, Type type)
584 {
585 return DeserializeObject(json, type, null);
586 }
587
588 public static T DeserializeObject<T>(string json, IJsonSerializerStrategy jsonSerializerStrategy)
589 {
590 return (T)DeserializeObject(json, typeof(T), jsonSerializerStrategy);
591 }
592
593 public static T DeserializeObject<T>(string json)
594 {
595 return (T)DeserializeObject(json, typeof(T), null);
596 }
597
598 /// <summary>
599 /// Converts a IDictionary&lt;string,object> / IList&lt;object> object into a JSON string
600 /// </summary>
601 /// <param name="json">A IDictionary&lt;string,object> / IList&lt;object></param>
602 /// <param name="jsonSerializerStrategy">Serializer strategy to use</param>
603 /// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
604 public static string SerializeObject(object json, IJsonSerializerStrategy jsonSerializerStrategy)
605 {
606 StringBuilder builder = new StringBuilder(BUILDER_CAPACITY);
607 bool success = SerializeValue(jsonSerializerStrategy, json, builder);
608 return (success ? builder.ToString() : null);
609 }
610
611 public static string SerializeObject(object json)
612 {
613 return SerializeObject(json, CurrentJsonSerializerStrategy);
614 }
615
616 public static string EscapeToJavascriptString(string jsonString)
617 {
618 if (string.IsNullOrEmpty(jsonString))
619 return jsonString;
620
621 StringBuilder sb = new StringBuilder();
622 char c;
623
624 for (int i = 0; i < jsonString.Length;)
625 {
626 c = jsonString[i++];
627
628 if (c == '\\')
629 {
630 int remainingLength = jsonString.Length - i;
631 if (remainingLength >= 2)
632 {
633 char lookahead = jsonString[i];
634 if (lookahead == '\\')
635 {
636 sb.Append('\\');
637 ++i;
638 }
639 else if (lookahead == '"')
640 {
641 sb.Append("\"");
642 ++i;
643 }
644 else if (lookahead == 't')
645 {
646 sb.Append('\t');
647 ++i;
648 }
649 else if (lookahead == 'b')
650 {
651 sb.Append('\b');
652 ++i;
653 }
654 else if (lookahead == 'n')
655 {
656 sb.Append('\n');
657 ++i;
658 }
659 else if (lookahead == 'r')
660 {
661 sb.Append('\r');
662 ++i;
663 }
664 }
665 }
666 else
667 {
668 sb.Append(c);
669 }
670 }
671 return sb.ToString();
672 }
673
674 static IDictionary<string, object> ParseObject(char[] json, ref int index, ref bool success)
675 {
676 IDictionary<string, object> table = new JsonObject();
677 int token;
678
679 // {
680 NextToken(json, ref index);
681
682 bool done = false;
683 while (!done)
684 {
685 token = LookAhead(json, index);
686 if (token == TOKEN_NONE)
687 {
688 success = false;
689 return null;
690 }
691 else if (token == TOKEN_COMMA)
692 NextToken(json, ref index);
693 else if (token == TOKEN_CURLY_CLOSE)
694 {
695 NextToken(json, ref index);
696 return table;
697 }
698 else
699 {
700 // name
701 string name = ParseString(json, ref index, ref success);
702 if (!success)
703 {
704 success = false;
705 return null;
706 }
707 // :
708 token = NextToken(json, ref index);
709 if (token != TOKEN_COLON)
710 {
711 success = false;
712 return null;
713 }
714 // value
715 object value = ParseValue(json, ref index, ref success);
716 if (!success)
717 {
718 success = false;
719 return null;
720 }
721 table[name] = value;
722 }
723 }
724 return table;
725 }
726
727 static JsonArray ParseArray(char[] json, ref int index, ref bool success)
728 {
729 JsonArray array = new JsonArray();
730
731 // [
732 NextToken(json, ref index);
733
734 bool done = false;
735 while (!done)
736 {
737 int token = LookAhead(json, index);
738 if (token == TOKEN_NONE)
739 {
740 success = false;
741 return null;
742 }
743 else if (token == TOKEN_COMMA)
744 NextToken(json, ref index);
745 else if (token == TOKEN_SQUARED_CLOSE)
746 {
747 NextToken(json, ref index);
748 break;
749 }
750 else
751 {
752 object value = ParseValue(json, ref index, ref success);
753 if (!success)
754 return null;
755 array.Add(value);
756 }
757 }
758 return array;
759 }
760
761 static object ParseValue(char[] json, ref int index, ref bool success)
762 {
763 switch (LookAhead(json, index))
764 {
765 case TOKEN_STRING:
766 return ParseString(json, ref index, ref success);
767 case TOKEN_NUMBER:
768 return ParseNumber(json, ref index, ref success);
769 case TOKEN_CURLY_OPEN:
770 return ParseObject(json, ref index, ref success);
771 case TOKEN_SQUARED_OPEN:
772 return ParseArray(json, ref index, ref success);
773 case TOKEN_TRUE:
774 NextToken(json, ref index);
775 return true;
776 case TOKEN_FALSE:
777 NextToken(json, ref index);
778 return false;
779 case TOKEN_NULL:
780 NextToken(json, ref index);
781 return null;
782 case TOKEN_NONE:
783 break;
784 }
785 success = false;
786 return null;
787 }
788
789 static string ParseString(char[] json, ref int index, ref bool success)
790 {
791 StringBuilder s = new StringBuilder(BUILDER_CAPACITY);
792 char c;
793
794 EatWhitespace(json, ref index);
795
796 // "
797 c = json[index++];
798 bool complete = false;
799 while (!complete)
800 {
801 if (index == json.Length)
802 break;
803
804 c = json[index++];
805 if (c == '"')
806 {
807 complete = true;
808 break;
809 }
810 else if (c == '\\')
811 {
812 if (index == json.Length)
813 break;
814 c = json[index++];
815 if (c == '"')
816 s.Append('"');
817 else if (c == '\\')
818 s.Append('\\');
819 else if (c == '/')
820 s.Append('/');
821 else if (c == 'b')
822 s.Append('\b');
823 else if (c == 'f')
824 s.Append('\f');
825 else if (c == 'n')
826 s.Append('\n');
827 else if (c == 'r')
828 s.Append('\r');
829 else if (c == 't')
830 s.Append('\t');
831 else if (c == 'u')
832 {
833 int remainingLength = json.Length - index;
834 if (remainingLength >= 4)
835 {
836 // parse the 32 bit hex into an integer codepoint
837 uint codePoint;
838 if (!(success = UInt32.TryParse(new string(json, index, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out codePoint)))
839 return "";
840
841 // convert the integer codepoint to a unicode char and add to string
842 if (0xD800 <= codePoint && codePoint <= 0xDBFF) // if high surrogate
843 {
844 index += 4; // skip 4 chars
845 remainingLength = json.Length - index;
846 if (remainingLength >= 6)
847 {
848 uint lowCodePoint;
849 if (new string(json, index, 2) == "\\u" && UInt32.TryParse(new string(json, index + 2, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out lowCodePoint))
850 {
851 if (0xDC00 <= lowCodePoint && lowCodePoint <= 0xDFFF) // if low surrogate
852 {
853 s.Append((char)codePoint);
854 s.Append((char)lowCodePoint);
855 index += 6; // skip 6 chars
856 continue;
857 }
858 }
859 }
860 success = false; // invalid surrogate pair
861 return "";
862 }
863 s.Append(ConvertFromUtf32((int)codePoint));
864 // skip 4 chars
865 index += 4;
866 }
867 else
868 break;
869 }
870 }
871 else
872 s.Append(c);
873 }
874 if (!complete)
875 {
876 success = false;
877 return null;
878 }
879 return s.ToString();
880 }
881
882 private static string ConvertFromUtf32(int utf32)
883 {
884 // http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System/System/Char.cs.htm
885 if (utf32 < 0 || utf32 > 0x10FFFF)
886 throw new ArgumentOutOfRangeException("utf32", "The argument must be from 0 to 0x10FFFF.");
887 if (0xD800 <= utf32 && utf32 <= 0xDFFF)
888 throw new ArgumentOutOfRangeException("utf32", "The argument must not be in surrogate pair range.");
889 if (utf32 < 0x10000)
890 return new string((char)utf32, 1);
891 utf32 -= 0x10000;
892 return new string(new char[] { (char)((utf32 >> 10) + 0xD800), (char)(utf32 % 0x0400 + 0xDC00) });
893 }
894
895 static object ParseNumber(char[] json, ref int index, ref bool success)
896 {
897 EatWhitespace(json, ref index);
898 int lastIndex = GetLastIndexOfNumber(json, index);
899 int charLength = (lastIndex - index) + 1;
900 object returnNumber;
901 string str = new string(json, index, charLength);
902 if (str.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1 || str.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1)
903 {
904 double number;
905 success = double.TryParse(new string(json, index, charLength), NumberStyles.Any, CultureInfo.InvariantCulture, out number);
906 returnNumber = number;
907 }
908 else
909 {
910 long number;
911 success = long.TryParse(new string(json, index, charLength), NumberStyles.Any, CultureInfo.InvariantCulture, out number);
912 returnNumber = number;
913 }
914 index = lastIndex + 1;
915 return returnNumber;
916 }
917
918 static int GetLastIndexOfNumber(char[] json, int index)
919 {
920 int lastIndex;
921 for (lastIndex = index; lastIndex < json.Length; lastIndex++)
922 if ("0123456789+-.eE".IndexOf(json[lastIndex]) == -1) break;
923 return lastIndex - 1;
924 }
925
926 static void EatWhitespace(char[] json, ref int index)
927 {
928 for (; index < json.Length; index++)
929 if (" \t\n\r\b\f".IndexOf(json[index]) == -1) break;
930 }
931
932 static int LookAhead(char[] json, int index)
933 {
934 int saveIndex = index;
935 return NextToken(json, ref saveIndex);
936 }
937
938 [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
939 static int NextToken(char[] json, ref int index)
940 {
941 EatWhitespace(json, ref index);
942 if (index == json.Length)
943 return TOKEN_NONE;
944 char c = json[index];
945 index++;
946 switch (c)
947 {
948 case '{':
949 return TOKEN_CURLY_OPEN;
950 case '}':
951 return TOKEN_CURLY_CLOSE;
952 case '[':
953 return TOKEN_SQUARED_OPEN;
954 case ']':
955 return TOKEN_SQUARED_CLOSE;
956 case ',':
957 return TOKEN_COMMA;
958 case '"':
959 return TOKEN_STRING;
960 case '0':
961 case '1':
962 case '2':
963 case '3':
964 case '4':
965 case '5':
966 case '6':
967 case '7':
968 case '8':
969 case '9':
970 case '-':
971 return TOKEN_NUMBER;
972 case ':':
973 return TOKEN_COLON;
974 }
975 index--;
976 int remainingLength = json.Length - index;
977 // false
978 if (remainingLength >= 5)
979 {
980 if (json[index] == 'f' && json[index + 1] == 'a' && json[index + 2] == 'l' && json[index + 3] == 's' && json[index + 4] == 'e')
981 {
982 index += 5;
983 return TOKEN_FALSE;
984 }
985 }
986 // true
987 if (remainingLength >= 4)
988 {
989 if (json[index] == 't' && json[index + 1] == 'r' && json[index + 2] == 'u' && json[index + 3] == 'e')
990 {
991 index += 4;
992 return TOKEN_TRUE;
993 }
994 }
995 // null
996 if (remainingLength >= 4)
997 {
998 if (json[index] == 'n' && json[index + 1] == 'u' && json[index + 2] == 'l' && json[index + 3] == 'l')
999 {
1000 index += 4;
1001 return TOKEN_NULL;
1002 }
1003 }
1004 return TOKEN_NONE;
1005 }
1006
1007 static bool SerializeValue(IJsonSerializerStrategy jsonSerializerStrategy, object value, StringBuilder builder)
1008 {
1009 bool success = true;
1010 string stringValue = value as string;
1011 if (stringValue != null)
1012 success = SerializeString(stringValue, builder);
1013 else
1014 {
1015 IDictionary<string, object> dict = value as IDictionary<string, object>;
1016 if (dict != null)
1017 {
1018 success = SerializeObject(jsonSerializerStrategy, dict.Keys, dict.Values, builder);
1019 }
1020 else
1021 {
1022 IDictionary<string, string> stringDictionary = value as IDictionary<string, string>;
1023 if (stringDictionary != null)
1024 {
1025 success = SerializeObject(jsonSerializerStrategy, stringDictionary.Keys, stringDictionary.Values, builder);
1026 }
1027 else
1028 {
1029 IEnumerable enumerableValue = value as IEnumerable;
1030 if (enumerableValue != null)
1031 success = SerializeArray(jsonSerializerStrategy, enumerableValue, builder);
1032 else if (IsNumeric(value))
1033 success = SerializeNumber(value, builder);
1034 else if (value is bool)
1035 builder.Append((bool)value ? "true" : "false");
1036 else if (value == null)
1037 builder.Append("null");
1038 else
1039 {
1040 object serializedObject;
1041 success = jsonSerializerStrategy.TrySerializeNonPrimitiveObject(value, out serializedObject);
1042 if (success)
1043 SerializeValue(jsonSerializerStrategy, serializedObject, builder);
1044 }
1045 }
1046 }
1047 }
1048 return success;
1049 }
1050
1051 static bool SerializeObject(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable keys, IEnumerable values, StringBuilder builder)
1052 {
1053 builder.Append("{");
1054 IEnumerator ke = keys.GetEnumerator();
1055 IEnumerator ve = values.GetEnumerator();
1056 bool first = true;
1057 while (ke.MoveNext() && ve.MoveNext())
1058 {
1059 object key = ke.Current;
1060 object value = ve.Current;
1061 if (!first)
1062 builder.Append(",");
1063 string stringKey = key as string;
1064 if (stringKey != null)
1065 SerializeString(stringKey, builder);
1066 else
1067 if (!SerializeValue(jsonSerializerStrategy, value, builder)) return false;
1068 builder.Append(":");
1069 if (!SerializeValue(jsonSerializerStrategy, value, builder))
1070 return false;
1071 first = false;
1072 }
1073 builder.Append("}");
1074 return true;
1075 }
1076
1077 static bool SerializeArray(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable anArray, StringBuilder builder)
1078 {
1079 builder.Append("[");
1080 bool first = true;
1081 foreach (object value in anArray)
1082 {
1083 if (!first)
1084 builder.Append(",");
1085 if (!SerializeValue(jsonSerializerStrategy, value, builder))
1086 return false;
1087 first = false;
1088 }
1089 builder.Append("]");
1090 return true;
1091 }
1092
1093 static bool SerializeString(string aString, StringBuilder builder)
1094 {
1095 // Happy path if there's nothing to be escaped. IndexOfAny is highly optimized (and unmanaged)
1096 if (aString.IndexOfAny(EscapeCharacters) == -1)
1097 {
1098 builder.Append('"');
1099 builder.Append(aString);
1100 builder.Append('"');
1101
1102 return true;
1103 }
1104
1105 builder.Append('"');
1106 int safeCharacterCount = 0;
1107 char[] charArray = aString.ToCharArray();
1108
1109 for (int i = 0; i < charArray.Length; i++)
1110 {
1111 char c = charArray[i];
1112
1113 // Non ascii characters are fine, buffer them up and send them to the builder
1114 // in larger chunks if possible. The escape table is a 1:1 translation table
1115 // with \0 [default(char)] denoting a safe character.
1116 if (c >= EscapeTable.Length || EscapeTable[c] == default(char))
1117 {
1118 safeCharacterCount++;
1119 }
1120 else
1121 {
1122 if (safeCharacterCount > 0)
1123 {
1124 builder.Append(charArray, i - safeCharacterCount, safeCharacterCount);
1125 safeCharacterCount = 0;
1126 }
1127
1128 builder.Append('\\');
1129 builder.Append(EscapeTable[c]);
1130 }
1131 }
1132
1133 if (safeCharacterCount > 0)
1134 {
1135 builder.Append(charArray, charArray.Length - safeCharacterCount, safeCharacterCount);
1136 }
1137
1138 builder.Append('"');
1139 return true;
1140 }
1141
1142 static bool SerializeNumber(object number, StringBuilder builder)
1143 {
1144 if (number is long)
1145 builder.Append(((long)number).ToString(CultureInfo.InvariantCulture));
1146 else if (number is ulong)
1147 builder.Append(((ulong)number).ToString(CultureInfo.InvariantCulture));
1148 else if (number is int)
1149 builder.Append(((int)number).ToString(CultureInfo.InvariantCulture));
1150 else if (number is uint)
1151 builder.Append(((uint)number).ToString(CultureInfo.InvariantCulture));
1152 else if (number is decimal)
1153 builder.Append(((decimal)number).ToString(CultureInfo.InvariantCulture));
1154 else if (number is float)
1155 builder.Append(((float)number).ToString(CultureInfo.InvariantCulture));
1156 else
1157 builder.Append(Convert.ToDouble(number, CultureInfo.InvariantCulture).ToString("r", CultureInfo.InvariantCulture));
1158 return true;
1159 }
1160
1161 /// <summary>
1162 /// Determines if a given object is numeric in any way
1163 /// (can be integer, double, null, etc).
1164 /// </summary>
1165 static bool IsNumeric(object value)
1166 {
1167 if (value is sbyte) return true;
1168 if (value is byte) return true;
1169 if (value is short) return true;
1170 if (value is ushort) return true;
1171 if (value is int) return true;
1172 if (value is uint) return true;
1173 if (value is long) return true;
1174 if (value is ulong) return true;
1175 if (value is float) return true;
1176 if (value is double) return true;
1177 if (value is decimal) return true;
1178 return false;
1179 }
1180
1181 private static IJsonSerializerStrategy _currentJsonSerializerStrategy;
1182 public static IJsonSerializerStrategy CurrentJsonSerializerStrategy
1183 {
1184 get
1185 {
1186 return _currentJsonSerializerStrategy ??
1187 (_currentJsonSerializerStrategy =
1188#if SIMPLE_JSON_DATACONTRACT
1189 DataContractJsonSerializerStrategy
1190#else
1191 PocoJsonSerializerStrategy
1192#endif
1193);
1194 }
1195 set
1196 {
1197 _currentJsonSerializerStrategy = value;
1198 }
1199 }
1200
1201 private static PocoJsonSerializerStrategy _pocoJsonSerializerStrategy;
1202 [EditorBrowsable(EditorBrowsableState.Advanced)]
1203 public static PocoJsonSerializerStrategy PocoJsonSerializerStrategy
1204 {
1205 get
1206 {
1207 return _pocoJsonSerializerStrategy ?? (_pocoJsonSerializerStrategy = new PocoJsonSerializerStrategy());
1208 }
1209 }
1210
1211#if SIMPLE_JSON_DATACONTRACT
1212
1213 private static DataContractJsonSerializerStrategy _dataContractJsonSerializerStrategy;
1214 [System.ComponentModel.EditorBrowsable(EditorBrowsableState.Advanced)]
1215 public static DataContractJsonSerializerStrategy DataContractJsonSerializerStrategy
1216 {
1217 get
1218 {
1219 return _dataContractJsonSerializerStrategy ?? (_dataContractJsonSerializerStrategy = new DataContractJsonSerializerStrategy());
1220 }
1221 }
1222
1223#endif
1224 }
1225
1226 [GeneratedCode("simple-json", "1.0.0")]
1227#if SIMPLE_JSON_INTERNAL
1228 internal
1229#else
1230 public
1231#endif
1232 interface IJsonSerializerStrategy
1233 {
1234 [SuppressMessage("Microsoft.Design", "CA1007:UseGenericsWhereAppropriate", Justification = "Need to support .NET 2")]
1235 bool TrySerializeNonPrimitiveObject(object input, out object output);
1236 object DeserializeObject(object value, Type type);
1237 }
1238
1239 [GeneratedCode("simple-json", "1.0.0")]
1240#if SIMPLE_JSON_INTERNAL
1241 internal
1242#else
1243 public
1244#endif
1245 class PocoJsonSerializerStrategy : IJsonSerializerStrategy
1246 {
1247 internal IDictionary<Type, ReflectionUtils.ConstructorDelegate> ConstructorCache;
1248 internal IDictionary<Type, IDictionary<string, ReflectionUtils.GetDelegate>> GetCache;
1249 internal IDictionary<Type, IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>>> SetCache;
1250
1251 internal static readonly Type[] EmptyTypes = new Type[0];
1252 internal static readonly Type[] ArrayConstructorParameterTypes = new Type[] { typeof(int) };
1253
1254 private static readonly string[] Iso8601Format = new string[]
1255 {
1256 @"yyyy-MM-dd\THH:mm:ss.FFFFFFF\Z",
1257 @"yyyy-MM-dd\THH:mm:ss\Z",
1258 @"yyyy-MM-dd\THH:mm:ssK"
1259 };
1260
1261 public PocoJsonSerializerStrategy()
1262 {
1263 ConstructorCache = new ReflectionUtils.ThreadSafeDictionary<Type, ReflectionUtils.ConstructorDelegate>(ContructorDelegateFactory);
1264 GetCache = new ReflectionUtils.ThreadSafeDictionary<Type, IDictionary<string, ReflectionUtils.GetDelegate>>(GetterValueFactory);
1265 SetCache = new ReflectionUtils.ThreadSafeDictionary<Type, IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>>>(SetterValueFactory);
1266 }
1267
1268 protected virtual string MapClrMemberNameToJsonFieldName(string clrPropertyName)
1269 {
1270 return clrPropertyName;
1271 }
1272
1273 internal virtual ReflectionUtils.ConstructorDelegate ContructorDelegateFactory(Type key)
1274 {
1275 return ReflectionUtils.GetContructor(key, key.IsArray ? ArrayConstructorParameterTypes : EmptyTypes);
1276 }
1277
1278 internal virtual IDictionary<string, ReflectionUtils.GetDelegate> GetterValueFactory(Type type)
1279 {
1280 IDictionary<string, ReflectionUtils.GetDelegate> result = new Dictionary<string, ReflectionUtils.GetDelegate>();
1281 foreach (PropertyInfo propertyInfo in ReflectionUtils.GetProperties(type))
1282 {
1283 if (propertyInfo.CanRead)
1284 {
1285 MethodInfo getMethod = ReflectionUtils.GetGetterMethodInfo(propertyInfo);
1286 if (getMethod.IsStatic || !getMethod.IsPublic)
1287 continue;
1288 result[MapClrMemberNameToJsonFieldName(propertyInfo.Name)] = ReflectionUtils.GetGetMethod(propertyInfo);
1289 }
1290 }
1291 foreach (FieldInfo fieldInfo in ReflectionUtils.GetFields(type))
1292 {
1293 if (fieldInfo.IsStatic || !fieldInfo.IsPublic)
1294 continue;
1295 result[MapClrMemberNameToJsonFieldName(fieldInfo.Name)] = ReflectionUtils.GetGetMethod(fieldInfo);
1296 }
1297 return result;
1298 }
1299
1300 internal virtual IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>> SetterValueFactory(Type type)
1301 {
1302 IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>> result = new Dictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>>();
1303 foreach (PropertyInfo propertyInfo in ReflectionUtils.GetProperties(type))
1304 {
1305 if (propertyInfo.CanWrite)
1306 {
1307 MethodInfo setMethod = ReflectionUtils.GetSetterMethodInfo(propertyInfo);
1308 if (setMethod.IsStatic || !setMethod.IsPublic)
1309 continue;
1310 result[MapClrMemberNameToJsonFieldName(propertyInfo.Name)] = new KeyValuePair<Type, ReflectionUtils.SetDelegate>(propertyInfo.PropertyType, ReflectionUtils.GetSetMethod(propertyInfo));
1311 }
1312 }
1313 foreach (FieldInfo fieldInfo in ReflectionUtils.GetFields(type))
1314 {
1315 if (fieldInfo.IsInitOnly || fieldInfo.IsStatic || !fieldInfo.IsPublic)
1316 continue;
1317 result[MapClrMemberNameToJsonFieldName(fieldInfo.Name)] = new KeyValuePair<Type, ReflectionUtils.SetDelegate>(fieldInfo.FieldType, ReflectionUtils.GetSetMethod(fieldInfo));
1318 }
1319 return result;
1320 }
1321
1322 public virtual bool TrySerializeNonPrimitiveObject(object input, out object output)
1323 {
1324 return TrySerializeKnownTypes(input, out output) || TrySerializeUnknownTypes(input, out output);
1325 }
1326
1327 [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
1328 public virtual object DeserializeObject(object value, Type type)
1329 {
1330 if (type == null) throw new ArgumentNullException("type");
1331 string str = value as string;
1332
1333 if (type == typeof(Guid) && string.IsNullOrEmpty(str))
1334 return default(Guid);
1335
1336 if (value == null)
1337 return null;
1338
1339 object obj = null;
1340
1341 if (str != null)
1342 {
1343 if (str.Length != 0) // We know it can't be null now.
1344 {
1345 if (type == typeof(DateTime) || (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(DateTime)))
1346 return DateTime.ParseExact(str, Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
1347 if (type == typeof(DateTimeOffset) || (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(DateTimeOffset)))
1348 return DateTimeOffset.ParseExact(str, Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
1349 if (type == typeof(Guid) || (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid)))
1350 return new Guid(str);
1351 if (type == typeof(Uri))
1352 {
1353 bool isValid = Uri.IsWellFormedUriString(str, UriKind.RelativeOrAbsolute);
1354
1355 Uri result;
1356 if (isValid && Uri.TryCreate(str, UriKind.RelativeOrAbsolute, out result))
1357 return result;
1358
1359 return null;
1360 }
1361
1362 if (type == typeof(string))
1363 return str;
1364
1365 return Convert.ChangeType(str, type, CultureInfo.InvariantCulture);
1366 }
1367 else
1368 {
1369 if (type == typeof(Guid))
1370 obj = default(Guid);
1371 else if (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid))
1372 obj = null;
1373 else
1374 obj = str;
1375 }
1376 // Empty string case
1377 if (!ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid))
1378 return str;
1379 }
1380 else if (value is bool)
1381 return value;
1382
1383 bool valueIsLong = value is long;
1384 bool valueIsDouble = value is double;
1385 if ((valueIsLong && type == typeof(long)) || (valueIsDouble && type == typeof(double)))
1386 return value;
1387 if ((valueIsDouble && type != typeof(double)) || (valueIsLong && type != typeof(long)))
1388 {
1389 obj = type == typeof(int) || type == typeof(long) || type == typeof(double) || type == typeof(float) || type == typeof(bool) || type == typeof(decimal) || type == typeof(byte) || type == typeof(short)
1390 ? Convert.ChangeType(value, type, CultureInfo.InvariantCulture)
1391 : value;
1392 }
1393 else
1394 {
1395 IDictionary<string, object> objects = value as IDictionary<string, object>;
1396 if (objects != null)
1397 {
1398 IDictionary<string, object> jsonObject = objects;
1399
1400 if (ReflectionUtils.IsTypeDictionary(type))
1401 {
1402 // if dictionary then
1403 Type[] types = ReflectionUtils.GetGenericTypeArguments(type);
1404 Type keyType = types[0];
1405 Type valueType = types[1];
1406
1407 Type genericType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType);
1408
1409 IDictionary dict = (IDictionary)ConstructorCache[genericType]();
1410
1411 foreach (KeyValuePair<string, object> kvp in jsonObject)
1412 dict.Add(kvp.Key, DeserializeObject(kvp.Value, valueType));
1413
1414 obj = dict;
1415 }
1416 else
1417 {
1418 if (type == typeof(object))
1419 obj = value;
1420 else
1421 {
1422 obj = ConstructorCache[type]();
1423 foreach (KeyValuePair<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>> setter in SetCache[type])
1424 {
1425 object jsonValue;
1426 if (jsonObject.TryGetValue(setter.Key, out jsonValue))
1427 {
1428 jsonValue = DeserializeObject(jsonValue, setter.Value.Key);
1429 setter.Value.Value(obj, jsonValue);
1430 }
1431 }
1432 }
1433 }
1434 }
1435 else
1436 {
1437 IList<object> valueAsList = value as IList<object>;
1438 if (valueAsList != null)
1439 {
1440 IList<object> jsonObject = valueAsList;
1441 IList list = null;
1442
1443 if (type.IsArray)
1444 {
1445 list = (IList)ConstructorCache[type](jsonObject.Count);
1446 int i = 0;
1447 foreach (object o in jsonObject)
1448 list[i++] = DeserializeObject(o, type.GetElementType());
1449 }
1450 else if (ReflectionUtils.IsTypeGenericeCollectionInterface(type) || ReflectionUtils.IsAssignableFrom(typeof(IList), type))
1451 {
1452 Type innerType = ReflectionUtils.GetGenericListElementType(type);
1453 list = (IList)(ConstructorCache[type] ?? ConstructorCache[typeof(List<>).MakeGenericType(innerType)])(jsonObject.Count);
1454 foreach (object o in jsonObject)
1455 list.Add(DeserializeObject(o, innerType));
1456 }
1457 obj = list;
1458 }
1459 }
1460 return obj;
1461 }
1462 if (ReflectionUtils.IsNullableType(type))
1463 return ReflectionUtils.ToNullableType(obj, type);
1464 return obj;
1465 }
1466
1467 protected virtual object SerializeEnum(Enum p)
1468 {
1469 return Convert.ToDouble(p, CultureInfo.InvariantCulture);
1470 }
1471
1472 [SuppressMessage("Microsoft.Design", "CA1007:UseGenericsWhereAppropriate", Justification = "Need to support .NET 2")]
1473 protected virtual bool TrySerializeKnownTypes(object input, out object output)
1474 {
1475 bool returnValue = true;
1476 if (input is DateTime)
1477 output = ((DateTime)input).ToUniversalTime().ToString(Iso8601Format[0], CultureInfo.InvariantCulture);
1478 else if (input is DateTimeOffset)
1479 output = ((DateTimeOffset)input).ToUniversalTime().ToString(Iso8601Format[0], CultureInfo.InvariantCulture);
1480 else if (input is Guid)
1481 output = ((Guid)input).ToString("D");
1482 else if (input is Uri)
1483 output = input.ToString();
1484 else
1485 {
1486 Enum inputEnum = input as Enum;
1487 if (inputEnum != null)
1488 output = SerializeEnum(inputEnum);
1489 else
1490 {
1491 returnValue = false;
1492 output = null;
1493 }
1494 }
1495 return returnValue;
1496 }
1497 [SuppressMessage("Microsoft.Design", "CA1007:UseGenericsWhereAppropriate", Justification = "Need to support .NET 2")]
1498 protected virtual bool TrySerializeUnknownTypes(object input, out object output)
1499 {
1500 if (input == null) throw new ArgumentNullException("input");
1501 output = null;
1502 Type type = input.GetType();
1503 if (type.FullName == null)
1504 return false;
1505 IDictionary<string, object> obj = new JsonObject();
1506 IDictionary<string, ReflectionUtils.GetDelegate> getters = GetCache[type];
1507 foreach (KeyValuePair<string, ReflectionUtils.GetDelegate> getter in getters)
1508 {
1509 if (getter.Value != null)
1510 obj.Add(MapClrMemberNameToJsonFieldName(getter.Key), getter.Value(input));
1511 }
1512 output = obj;
1513 return true;
1514 }
1515 }
1516
1517#if SIMPLE_JSON_DATACONTRACT
1518 [GeneratedCode("simple-json", "1.0.0")]
1519#if SIMPLE_JSON_INTERNAL
1520 internal
1521#else
1522 public
1523#endif
1524 class DataContractJsonSerializerStrategy : PocoJsonSerializerStrategy
1525 {
1526 public DataContractJsonSerializerStrategy()
1527 {
1528 GetCache = new ReflectionUtils.ThreadSafeDictionary<Type, IDictionary<string, ReflectionUtils.GetDelegate>>(GetterValueFactory);
1529 SetCache = new ReflectionUtils.ThreadSafeDictionary<Type, IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>>>(SetterValueFactory);
1530 }
1531
1532 internal override IDictionary<string, ReflectionUtils.GetDelegate> GetterValueFactory(Type type)
1533 {
1534 bool hasDataContract = ReflectionUtils.GetAttribute(type, typeof(DataContractAttribute)) != null;
1535 if (!hasDataContract)
1536 return base.GetterValueFactory(type);
1537 string jsonKey;
1538 IDictionary<string, ReflectionUtils.GetDelegate> result = new Dictionary<string, ReflectionUtils.GetDelegate>();
1539 foreach (PropertyInfo propertyInfo in ReflectionUtils.GetProperties(type))
1540 {
1541 if (propertyInfo.CanRead)
1542 {
1543 MethodInfo getMethod = ReflectionUtils.GetGetterMethodInfo(propertyInfo);
1544 if (!getMethod.IsStatic && CanAdd(propertyInfo, out jsonKey))
1545 result[jsonKey] = ReflectionUtils.GetGetMethod(propertyInfo);
1546 }
1547 }
1548 foreach (FieldInfo fieldInfo in ReflectionUtils.GetFields(type))
1549 {
1550 if (!fieldInfo.IsStatic && CanAdd(fieldInfo, out jsonKey))
1551 result[jsonKey] = ReflectionUtils.GetGetMethod(fieldInfo);
1552 }
1553 return result;
1554 }
1555
1556 internal override IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>> SetterValueFactory(Type type)
1557 {
1558 bool hasDataContract = ReflectionUtils.GetAttribute(type, typeof(DataContractAttribute)) != null;
1559 if (!hasDataContract)
1560 return base.SetterValueFactory(type);
1561 string jsonKey;
1562 IDictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>> result = new Dictionary<string, KeyValuePair<Type, ReflectionUtils.SetDelegate>>();
1563 foreach (PropertyInfo propertyInfo in ReflectionUtils.GetProperties(type))
1564 {
1565 if (propertyInfo.CanWrite)
1566 {
1567 MethodInfo setMethod = ReflectionUtils.GetSetterMethodInfo(propertyInfo);
1568 if (!setMethod.IsStatic && CanAdd(propertyInfo, out jsonKey))
1569 result[jsonKey] = new KeyValuePair<Type, ReflectionUtils.SetDelegate>(propertyInfo.PropertyType, ReflectionUtils.GetSetMethod(propertyInfo));
1570 }
1571 }
1572 foreach (FieldInfo fieldInfo in ReflectionUtils.GetFields(type))
1573 {
1574 if (!fieldInfo.IsInitOnly && !fieldInfo.IsStatic && CanAdd(fieldInfo, out jsonKey))
1575 result[jsonKey] = new KeyValuePair<Type, ReflectionUtils.SetDelegate>(fieldInfo.FieldType, ReflectionUtils.GetSetMethod(fieldInfo));
1576 }
1577 // todo implement sorting for DATACONTRACT.
1578 return result;
1579 }
1580
1581 private static bool CanAdd(MemberInfo info, out string jsonKey)
1582 {
1583 jsonKey = null;
1584 if (ReflectionUtils.GetAttribute(info, typeof(IgnoreDataMemberAttribute)) != null)
1585 return false;
1586 DataMemberAttribute dataMemberAttribute = (DataMemberAttribute)ReflectionUtils.GetAttribute(info, typeof(DataMemberAttribute));
1587 if (dataMemberAttribute == null)
1588 return false;
1589 jsonKey = string.IsNullOrEmpty(dataMemberAttribute.Name) ? info.Name : dataMemberAttribute.Name;
1590 return true;
1591 }
1592 }
1593
1594#endif
1595
1596 namespace Reflection
1597 {
1598 // This class is meant to be copied into other libraries. So we want to exclude it from Code Analysis rules
1599 // that might be in place in the target project.
1600 [GeneratedCode("reflection-utils", "1.0.0")]
1601#if SIMPLE_JSON_REFLECTION_UTILS_PUBLIC
1602 public
1603#else
1604 internal
1605#endif
1606 class ReflectionUtils
1607 {
1608 private static readonly object[] EmptyObjects = new object[] { };
1609
1610 public delegate object GetDelegate(object source);
1611 public delegate void SetDelegate(object source, object value);
1612 public delegate object ConstructorDelegate(params object[] args);
1613
1614 public delegate TValue ThreadSafeDictionaryValueFactory<TKey, TValue>(TKey key);
1615
1616#if SIMPLE_JSON_TYPEINFO
1617 public static TypeInfo GetTypeInfo(Type type)
1618 {
1619 return type.GetTypeInfo();
1620 }
1621#else
1622 public static Type GetTypeInfo(Type type)
1623 {
1624 return type;
1625 }
1626#endif
1627
1628 public static Attribute GetAttribute(MemberInfo info, Type type)
1629 {
1630#if SIMPLE_JSON_TYPEINFO
1631 if (info == null || type == null || !info.IsDefined(type))
1632 return null;
1633 return info.GetCustomAttribute(type);
1634#else
1635 if (info == null || type == null || !Attribute.IsDefined(info, type))
1636 return null;
1637 return Attribute.GetCustomAttribute(info, type);
1638#endif
1639 }
1640
1641 public static Type GetGenericListElementType(Type type)
1642 {
1643 IEnumerable<Type> interfaces;
1644#if SIMPLE_JSON_TYPEINFO
1645 interfaces = type.GetTypeInfo().ImplementedInterfaces;
1646#else
1647 interfaces = type.GetInterfaces();
1648#endif
1649 foreach (Type implementedInterface in interfaces)
1650 {
1651 if (IsTypeGeneric(implementedInterface) &&
1652 implementedInterface.GetGenericTypeDefinition() == typeof(IList<>))
1653 {
1654 return GetGenericTypeArguments(implementedInterface)[0];
1655 }
1656 }
1657 return GetGenericTypeArguments(type)[0];
1658 }
1659
1660 public static Attribute GetAttribute(Type objectType, Type attributeType)
1661 {
1662
1663#if SIMPLE_JSON_TYPEINFO
1664 if (objectType == null || attributeType == null || !objectType.GetTypeInfo().IsDefined(attributeType))
1665 return null;
1666 return objectType.GetTypeInfo().GetCustomAttribute(attributeType);
1667#else
1668 if (objectType == null || attributeType == null || !Attribute.IsDefined(objectType, attributeType))
1669 return null;
1670 return Attribute.GetCustomAttribute(objectType, attributeType);
1671#endif
1672 }
1673
1674 public static Type[] GetGenericTypeArguments(Type type)
1675 {
1676#if SIMPLE_JSON_TYPEINFO
1677 return type.GetTypeInfo().GenericTypeArguments;
1678#else
1679 return type.GetGenericArguments();
1680#endif
1681 }
1682
1683 public static bool IsTypeGeneric(Type type)
1684 {
1685 return GetTypeInfo(type).IsGenericType;
1686 }
1687
1688 public static bool IsTypeGenericeCollectionInterface(Type type)
1689 {
1690 if (!IsTypeGeneric(type))
1691 return false;
1692
1693 Type genericDefinition = type.GetGenericTypeDefinition();
1694
1695 return (genericDefinition == typeof(IList<>)
1696 || genericDefinition == typeof(ICollection<>)
1697 || genericDefinition == typeof(IEnumerable<>)
1698#if SIMPLE_JSON_READONLY_COLLECTIONS
1699 || genericDefinition == typeof(IReadOnlyCollection<>)
1700 || genericDefinition == typeof(IReadOnlyList<>)
1701#endif
1702 );
1703 }
1704
1705 public static bool IsAssignableFrom(Type type1, Type type2)
1706 {
1707 return GetTypeInfo(type1).IsAssignableFrom(GetTypeInfo(type2));
1708 }
1709
1710 public static bool IsTypeDictionary(Type type)
1711 {
1712#if SIMPLE_JSON_TYPEINFO
1713 if (typeof(IDictionary<,>).GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()))
1714 return true;
1715#else
1716 if (typeof(System.Collections.IDictionary).IsAssignableFrom(type))
1717 return true;
1718#endif
1719 if (!GetTypeInfo(type).IsGenericType)
1720 return false;
1721
1722 Type genericDefinition = type.GetGenericTypeDefinition();
1723 return genericDefinition == typeof(IDictionary<,>);
1724 }
1725
1726 public static bool IsNullableType(Type type)
1727 {
1728 return GetTypeInfo(type).IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
1729 }
1730
1731 public static object ToNullableType(object obj, Type nullableType)
1732 {
1733 return obj == null ? null : Convert.ChangeType(obj, Nullable.GetUnderlyingType(nullableType), CultureInfo.InvariantCulture);
1734 }
1735
1736 public static bool IsValueType(Type type)
1737 {
1738 return GetTypeInfo(type).IsValueType;
1739 }
1740
1741 public static IEnumerable<ConstructorInfo> GetConstructors(Type type)
1742 {
1743#if SIMPLE_JSON_TYPEINFO
1744 return type.GetTypeInfo().DeclaredConstructors;
1745#else
1746 return type.GetConstructors();
1747#endif
1748 }
1749
1750 public static ConstructorInfo GetConstructorInfo(Type type, params Type[] argsType)
1751 {
1752 IEnumerable<ConstructorInfo> constructorInfos = GetConstructors(type);
1753 int i;
1754 bool matches;
1755 foreach (ConstructorInfo constructorInfo in constructorInfos)
1756 {
1757 ParameterInfo[] parameters = constructorInfo.GetParameters();
1758 if (argsType.Length != parameters.Length)
1759 continue;
1760
1761 i = 0;
1762 matches = true;
1763 foreach (ParameterInfo parameterInfo in constructorInfo.GetParameters())
1764 {
1765 if (parameterInfo.ParameterType != argsType[i])
1766 {
1767 matches = false;
1768 break;
1769 }
1770 }
1771
1772 if (matches)
1773 return constructorInfo;
1774 }
1775
1776 return null;
1777 }
1778
1779 public static IEnumerable<PropertyInfo> GetProperties(Type type)
1780 {
1781#if SIMPLE_JSON_TYPEINFO
1782 return type.GetRuntimeProperties();
1783#else
1784 return type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
1785#endif
1786 }
1787
1788 public static IEnumerable<FieldInfo> GetFields(Type type)
1789 {
1790#if SIMPLE_JSON_TYPEINFO
1791 return type.GetRuntimeFields();
1792#else
1793 return type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
1794#endif
1795 }
1796
1797 public static MethodInfo GetGetterMethodInfo(PropertyInfo propertyInfo)
1798 {
1799#if SIMPLE_JSON_TYPEINFO
1800 return propertyInfo.GetMethod;
1801#else
1802 return propertyInfo.GetGetMethod(true);
1803#endif
1804 }
1805
1806 public static MethodInfo GetSetterMethodInfo(PropertyInfo propertyInfo)
1807 {
1808#if SIMPLE_JSON_TYPEINFO
1809 return propertyInfo.SetMethod;
1810#else
1811 return propertyInfo.GetSetMethod(true);
1812#endif
1813 }
1814
1815 public static ConstructorDelegate GetContructor(ConstructorInfo constructorInfo)
1816 {
1817#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1818 return GetConstructorByReflection(constructorInfo);
1819#else
1820 return GetConstructorByExpression(constructorInfo);
1821#endif
1822 }
1823
1824 public static ConstructorDelegate GetContructor(Type type, params Type[] argsType)
1825 {
1826#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1827 return GetConstructorByReflection(type, argsType);
1828#else
1829 return GetConstructorByExpression(type, argsType);
1830#endif
1831 }
1832
1833 public static ConstructorDelegate GetConstructorByReflection(ConstructorInfo constructorInfo)
1834 {
1835 return delegate (object[] args) { return constructorInfo.Invoke(args); };
1836 }
1837
1838 public static ConstructorDelegate GetConstructorByReflection(Type type, params Type[] argsType)
1839 {
1840 ConstructorInfo constructorInfo = GetConstructorInfo(type, argsType);
1841 return constructorInfo == null ? null : GetConstructorByReflection(constructorInfo);
1842 }
1843
1844#if !SIMPLE_JSON_NO_LINQ_EXPRESSION
1845
1846 public static ConstructorDelegate GetConstructorByExpression(ConstructorInfo constructorInfo)
1847 {
1848 ParameterInfo[] paramsInfo = constructorInfo.GetParameters();
1849 ParameterExpression param = Expression.Parameter(typeof(object[]), "args");
1850 Expression[] argsExp = new Expression[paramsInfo.Length];
1851 for (int i = 0; i < paramsInfo.Length; i++)
1852 {
1853 Expression index = Expression.Constant(i);
1854 Type paramType = paramsInfo[i].ParameterType;
1855 Expression paramAccessorExp = Expression.ArrayIndex(param, index);
1856 Expression paramCastExp = Expression.Convert(paramAccessorExp, paramType);
1857 argsExp[i] = paramCastExp;
1858 }
1859 NewExpression newExp = Expression.New(constructorInfo, argsExp);
1860 Expression<Func<object[], object>> lambda = Expression.Lambda<Func<object[], object>>(newExp, param);
1861 Func<object[], object> compiledLambda = lambda.Compile();
1862 return delegate (object[] args) { return compiledLambda(args); };
1863 }
1864
1865 public static ConstructorDelegate GetConstructorByExpression(Type type, params Type[] argsType)
1866 {
1867 ConstructorInfo constructorInfo = GetConstructorInfo(type, argsType);
1868 return constructorInfo == null ? null : GetConstructorByExpression(constructorInfo);
1869 }
1870
1871#endif
1872
1873 public static GetDelegate GetGetMethod(PropertyInfo propertyInfo)
1874 {
1875#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1876 return GetGetMethodByReflection(propertyInfo);
1877#else
1878 return GetGetMethodByExpression(propertyInfo);
1879#endif
1880 }
1881
1882 public static GetDelegate GetGetMethod(FieldInfo fieldInfo)
1883 {
1884#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1885 return GetGetMethodByReflection(fieldInfo);
1886#else
1887 return GetGetMethodByExpression(fieldInfo);
1888#endif
1889 }
1890
1891 public static GetDelegate GetGetMethodByReflection(PropertyInfo propertyInfo)
1892 {
1893 MethodInfo methodInfo = GetGetterMethodInfo(propertyInfo);
1894 return delegate (object source) { return methodInfo.Invoke(source, EmptyObjects); };
1895 }
1896
1897 public static GetDelegate GetGetMethodByReflection(FieldInfo fieldInfo)
1898 {
1899 return delegate (object source) { return fieldInfo.GetValue(source); };
1900 }
1901
1902#if !SIMPLE_JSON_NO_LINQ_EXPRESSION
1903
1904 public static GetDelegate GetGetMethodByExpression(PropertyInfo propertyInfo)
1905 {
1906 MethodInfo getMethodInfo = GetGetterMethodInfo(propertyInfo);
1907 ParameterExpression instance = Expression.Parameter(typeof(object), "instance");
1908 UnaryExpression instanceCast = (!IsValueType(propertyInfo.DeclaringType)) ? Expression.TypeAs(instance, propertyInfo.DeclaringType) : Expression.Convert(instance, propertyInfo.DeclaringType);
1909 Func<object, object> compiled = Expression.Lambda<Func<object, object>>(Expression.TypeAs(Expression.Call(instanceCast, getMethodInfo), typeof(object)), instance).Compile();
1910 return delegate (object source) { return compiled(source); };
1911 }
1912
1913 public static GetDelegate GetGetMethodByExpression(FieldInfo fieldInfo)
1914 {
1915 ParameterExpression instance = Expression.Parameter(typeof(object), "instance");
1916 MemberExpression member = Expression.Field(Expression.Convert(instance, fieldInfo.DeclaringType), fieldInfo);
1917 GetDelegate compiled = Expression.Lambda<GetDelegate>(Expression.Convert(member, typeof(object)), instance).Compile();
1918 return delegate (object source) { return compiled(source); };
1919 }
1920
1921#endif
1922
1923 public static SetDelegate GetSetMethod(PropertyInfo propertyInfo)
1924 {
1925#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1926 return GetSetMethodByReflection(propertyInfo);
1927#else
1928 return GetSetMethodByExpression(propertyInfo);
1929#endif
1930 }
1931
1932 public static SetDelegate GetSetMethod(FieldInfo fieldInfo)
1933 {
1934#if SIMPLE_JSON_NO_LINQ_EXPRESSION
1935 return GetSetMethodByReflection(fieldInfo);
1936#else
1937 return GetSetMethodByExpression(fieldInfo);
1938#endif
1939 }
1940
1941 public static SetDelegate GetSetMethodByReflection(PropertyInfo propertyInfo)
1942 {
1943 MethodInfo methodInfo = GetSetterMethodInfo(propertyInfo);
1944 return delegate (object source, object value) { methodInfo.Invoke(source, new object[] { value }); };
1945 }
1946
1947 public static SetDelegate GetSetMethodByReflection(FieldInfo fieldInfo)
1948 {
1949 return delegate (object source, object value) { fieldInfo.SetValue(source, value); };
1950 }
1951
1952#if !SIMPLE_JSON_NO_LINQ_EXPRESSION
1953
1954 public static SetDelegate GetSetMethodByExpression(PropertyInfo propertyInfo)
1955 {
1956 MethodInfo setMethodInfo = GetSetterMethodInfo(propertyInfo);
1957 ParameterExpression instance = Expression.Parameter(typeof(object), "instance");
1958 ParameterExpression value = Expression.Parameter(typeof(object), "value");
1959 UnaryExpression instanceCast = (!IsValueType(propertyInfo.DeclaringType)) ? Expression.TypeAs(instance, propertyInfo.DeclaringType) : Expression.Convert(instance, propertyInfo.DeclaringType);
1960 UnaryExpression valueCast = (!IsValueType(propertyInfo.PropertyType)) ? Expression.TypeAs(value, propertyInfo.PropertyType) : Expression.Convert(value, propertyInfo.PropertyType);
1961 Action<object, object> compiled = Expression.Lambda<Action<object, object>>(Expression.Call(instanceCast, setMethodInfo, valueCast), new ParameterExpression[] { instance, value }).Compile();
1962 return delegate (object source, object val) { compiled(source, val); };
1963 }
1964
1965 public static SetDelegate GetSetMethodByExpression(FieldInfo fieldInfo)
1966 {
1967 ParameterExpression instance = Expression.Parameter(typeof(object), "instance");
1968 ParameterExpression value = Expression.Parameter(typeof(object), "value");
1969 Action<object, object> compiled = Expression.Lambda<Action<object, object>>(
1970 Assign(Expression.Field(Expression.Convert(instance, fieldInfo.DeclaringType), fieldInfo), Expression.Convert(value, fieldInfo.FieldType)), instance, value).Compile();
1971 return delegate (object source, object val) { compiled(source, val); };
1972 }
1973
1974 public static BinaryExpression Assign(Expression left, Expression right)
1975 {
1976#if SIMPLE_JSON_TYPEINFO
1977 return Expression.Assign(left, right);
1978#else
1979 MethodInfo assign = typeof(Assigner<>).MakeGenericType(left.Type).GetMethod("Assign");
1980 BinaryExpression assignExpr = Expression.Add(left, right, assign);
1981 return assignExpr;
1982#endif
1983 }
1984
1985 private static class Assigner<T>
1986 {
1987 public static T Assign(ref T left, T right)
1988 {
1989 return (left = right);
1990 }
1991 }
1992
1993#endif
1994
1995 public sealed class ThreadSafeDictionary<TKey, TValue> : IDictionary<TKey, TValue>
1996 {
1997 private readonly object _lock = new object();
1998 private readonly ThreadSafeDictionaryValueFactory<TKey, TValue> _valueFactory;
1999 private Dictionary<TKey, TValue> _dictionary;
2000
2001 public ThreadSafeDictionary(ThreadSafeDictionaryValueFactory<TKey, TValue> valueFactory)
2002 {
2003 _valueFactory = valueFactory;
2004 }
2005
2006 private TValue Get(TKey key)
2007 {
2008 if (_dictionary == null)
2009 return AddValue(key);
2010 TValue value;
2011 if (!_dictionary.TryGetValue(key, out value))
2012 return AddValue(key);
2013 return value;
2014 }
2015
2016 private TValue AddValue(TKey key)
2017 {
2018 TValue value = _valueFactory(key);
2019 lock (_lock)
2020 {
2021 if (_dictionary == null)
2022 {
2023 _dictionary = new Dictionary<TKey, TValue>();
2024 _dictionary[key] = value;
2025 }
2026 else
2027 {
2028 TValue val;
2029 if (_dictionary.TryGetValue(key, out val))
2030 return val;
2031 Dictionary<TKey, TValue> dict = new Dictionary<TKey, TValue>(_dictionary);
2032 dict[key] = value;
2033 _dictionary = dict;
2034 }
2035 }
2036 return value;
2037 }
2038
2039 public void Add(TKey key, TValue value)
2040 {
2041 throw new NotImplementedException();
2042 }
2043
2044 public bool ContainsKey(TKey key)
2045 {
2046 return _dictionary.ContainsKey(key);
2047 }
2048
2049 public ICollection<TKey> Keys
2050 {
2051 get { return _dictionary.Keys; }
2052 }
2053
2054 public bool Remove(TKey key)
2055 {
2056 throw new NotImplementedException();
2057 }
2058
2059 public bool TryGetValue(TKey key, out TValue value)
2060 {
2061 value = this[key];
2062 return true;
2063 }
2064
2065 public ICollection<TValue> Values
2066 {
2067 get { return _dictionary.Values; }
2068 }
2069
2070 public TValue this[TKey key]
2071 {
2072 get { return Get(key); }
2073 set { throw new NotImplementedException(); }
2074 }
2075
2076 public void Add(KeyValuePair<TKey, TValue> item)
2077 {
2078 throw new NotImplementedException();
2079 }
2080
2081 public void Clear()
2082 {
2083 throw new NotImplementedException();
2084 }
2085
2086 public bool Contains(KeyValuePair<TKey, TValue> item)
2087 {
2088 throw new NotImplementedException();
2089 }
2090
2091 public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
2092 {
2093 throw new NotImplementedException();
2094 }
2095
2096 public int Count
2097 {
2098 get { return _dictionary.Count; }
2099 }
2100
2101 public bool IsReadOnly
2102 {
2103 get { throw new NotImplementedException(); }
2104 }
2105
2106 public bool Remove(KeyValuePair<TKey, TValue> item)
2107 {
2108 throw new NotImplementedException();
2109 }
2110
2111 public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
2112 {
2113 return _dictionary.GetEnumerator();
2114 }
2115
2116 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
2117 {
2118 return _dictionary.GetEnumerator();
2119 }
2120 }
2121
2122 }
2123 }
2124}
2125// ReSharper restore LoopCanBeConvertedToQuery
2126// ReSharper restore RedundantExplicitArrayCreation
2127// ReSharper restore SuggestUseVarKeywordEvident \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Localization.cs b/src/api/wix/WixToolset.Data/Localization.cs
new file mode 100644
index 00000000..70c096de
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Localization.cs
@@ -0,0 +1,137 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Collections.Generic;
7 using SimpleJson;
8 using WixToolset.Data.Bind;
9
10 /// <summary>
11 /// Object that represents a localization file.
12 /// </summary>
13 public sealed class Localization
14 {
15 private readonly Dictionary<string, BindVariable> variables = new Dictionary<string, BindVariable>();
16 private readonly Dictionary<string, LocalizedControl> localizedControls = new Dictionary<string, LocalizedControl>();
17
18 /// <summary>
19 /// Instantiates a new localization object.
20 /// </summary>
21 public Localization(int? codepage, int? summaryInformationCodepage, string culture, IDictionary<string, BindVariable> variables, IDictionary<string, LocalizedControl> localizedControls)
22 {
23 this.Codepage = codepage;
24 this.SummaryInformationCodepage = summaryInformationCodepage;
25 this.Culture = culture?.ToLowerInvariant() ?? String.Empty;
26 this.variables = new Dictionary<string, BindVariable>(variables);
27 this.localizedControls = new Dictionary<string, LocalizedControl>(localizedControls);
28 }
29
30 /// <summary>
31 /// Gets the codepage.
32 /// </summary>
33 /// <value>The codepage.</value>
34 public int? Codepage { get; private set; }
35
36 /// <summary>
37 /// Gets the summary information codepage.
38 /// </summary>
39 /// <value>The summary information codepage.</value>
40 public int? SummaryInformationCodepage { get; private set; }
41
42 /// <summary>
43 /// Gets the culture.
44 /// </summary>
45 /// <value>The culture.</value>
46 public string Culture { get; private set; }
47
48 /// <summary>
49 /// Gets the variables.
50 /// </summary>
51 /// <value>The variables.</value>
52 public ICollection<BindVariable> Variables => this.variables.Values;
53
54 /// <summary>
55 /// Gets the localized controls.
56 /// </summary>
57 /// <value>The localized controls.</value>
58 public ICollection<KeyValuePair<string, LocalizedControl>> LocalizedControls => this.localizedControls;
59
60 internal JsonObject Serialize()
61 {
62 var jsonObject = new JsonObject();
63
64 if (this.Codepage.HasValue)
65 {
66 jsonObject.Add("codepage", this.Codepage.Value);
67 }
68
69 if (this.SummaryInformationCodepage.HasValue)
70 {
71 jsonObject.Add("summaryCodepage", this.SummaryInformationCodepage.Value);
72 }
73
74 jsonObject.AddIsNotNullOrEmpty("culture", this.Culture);
75
76 // Serialize bind variables.
77 if (this.Variables.Count > 0)
78 {
79 var variablesJson = new JsonArray(this.Variables.Count);
80
81 foreach (var variable in this.Variables)
82 {
83 var variableJson = variable.Serialize();
84
85 variablesJson.Add(variableJson);
86 }
87
88 jsonObject.Add("variables", variablesJson);
89 }
90
91 // Serialize localized control.
92 if (this.LocalizedControls.Count > 0)
93 {
94 var controlsJson = new JsonObject();
95
96 foreach (var controlWithKey in this.LocalizedControls)
97 {
98 var controlJson = controlWithKey.Value.Serialize();
99
100 controlsJson.Add(controlWithKey.Key, controlJson);
101 }
102
103 jsonObject.Add("controls", controlsJson);
104 }
105
106 return jsonObject;
107 }
108
109 internal static Localization Deserialize(JsonObject jsonObject)
110 {
111 var codepage = jsonObject.GetValueOrDefault("codepage", null);
112 var summaryCodepage = jsonObject.GetValueOrDefault("summaryCodepage", null);
113 var culture = jsonObject.GetValueOrDefault<string>("culture");
114
115 var variables = new Dictionary<string, BindVariable>();
116 var variablesJson = jsonObject.GetValueOrDefault("variables", new JsonArray());
117 foreach (JsonObject variableJson in variablesJson)
118 {
119 var bindPath = BindVariable.Deserialize(variableJson);
120 variables.Add(bindPath.Id, bindPath);
121 }
122
123 var controls = new Dictionary<string, LocalizedControl>();
124 var controlsJson = jsonObject.GetValueOrDefault<JsonObject>("controls");
125 if (controlsJson != null)
126 {
127 foreach (var controlJsonWithKey in controlsJson)
128 {
129 var control = LocalizedControl.Deserialize((JsonObject)controlJsonWithKey.Value);
130 controls.Add(controlJsonWithKey.Key, control);
131 }
132 }
133
134 return new Localization(codepage, summaryCodepage, culture, variables, controls);
135 }
136 }
137}
diff --git a/src/api/wix/WixToolset.Data/LocalizedControl.cs b/src/api/wix/WixToolset.Data/LocalizedControl.cs
new file mode 100644
index 00000000..1252842b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/LocalizedControl.cs
@@ -0,0 +1,94 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using SimpleJson;
7
8 public class LocalizedControl
9 {
10 public LocalizedControl(string dialog, string control, int x, int y, int width, int height, bool rightToLeft, bool rightAligned, bool leftScroll, string text)
11 {
12 this.Dialog = dialog;
13 this.Control = control;
14 this.X = x;
15 this.Y = y;
16 this.Width = width;
17 this.Height = height;
18 this.RightToLeft = rightToLeft;
19 this.RightAligned = rightAligned;
20 this.LeftScroll = leftScroll;
21 this.Text = text;
22 }
23
24 public string Dialog { get; }
25
26 public string Control { get; }
27
28 public int X { get; }
29
30 public int Y { get; }
31
32 public int Width { get; }
33
34 public int Height { get; }
35
36 public bool RightToLeft { get; }
37
38 public bool RightAligned { get; }
39
40 public bool LeftScroll { get; }
41
42 public string Text { get; }
43
44 /// <summary>
45 /// Get key for a localized control.
46 /// </summary>
47 /// <returns>The localized control id.</returns>
48 public string GetKey() => LocalizedControl.GetKey(this.Dialog, this.Control);
49
50 /// <summary>
51 /// Get key for a localized control.
52 /// </summary>
53 /// <param name="dialog">The optional id of the control's dialog.</param>
54 /// <param name="control">The id of the control.</param>
55 /// <returns>The localized control id.</returns>
56 public static string GetKey(string dialog, string control) => String.Concat(dialog, "/", control);
57
58 internal JsonObject Serialize()
59 {
60 var jsonObject = new JsonObject
61 {
62 { "dialog", this.Dialog },
63 };
64
65 jsonObject.AddIsNotNullOrEmpty("control", this.Control);
66 jsonObject.AddNonDefaultValue("x", this.X);
67 jsonObject.AddNonDefaultValue("y", this.Y);
68 jsonObject.AddNonDefaultValue("width", this.Width);
69 jsonObject.AddNonDefaultValue("height", this.Height);
70 jsonObject.AddNonDefaultValue("rightToLeft", this.RightToLeft);
71 jsonObject.AddNonDefaultValue("rightAligned", this.RightAligned);
72 jsonObject.AddNonDefaultValue("leftScroll", this.LeftScroll);
73 jsonObject.AddIsNotNullOrEmpty("text", this.Text);
74
75 return jsonObject;
76 }
77
78 internal static LocalizedControl Deserialize(JsonObject jsonObject)
79 {
80 var dialog = jsonObject.GetValueOrDefault<string>("dialog");
81 var control = jsonObject.GetValueOrDefault<string>("control");
82 var x = jsonObject.GetValueOrDefault("x", 0);
83 var y = jsonObject.GetValueOrDefault("y", 0);
84 var width = jsonObject.GetValueOrDefault("width", 0);
85 var height = jsonObject.GetValueOrDefault("height", 0);
86 var rightToLeft = jsonObject.GetValueOrDefault("rightToLeft", false);
87 var rightAligned = jsonObject.GetValueOrDefault("rightAligned", false);
88 var leftScroll = jsonObject.GetValueOrDefault("leftScroll", false);
89 var text = jsonObject.GetValueOrDefault<string>("text");
90
91 return new LocalizedControl(dialog, control, x, y, width, height, rightToLeft, rightAligned, leftScroll, text);
92 }
93 }
94}
diff --git a/src/api/wix/WixToolset.Data/Message.cs b/src/api/wix/WixToolset.Data/Message.cs
new file mode 100644
index 00000000..85a402e5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Message.cs
@@ -0,0 +1,97 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Resources;
7
8 /// <summary>
9 /// Event args for message events.
10 /// </summary>
11 public class Message
12 {
13 /// <summary>
14 /// Creates a new Message using a format string.
15 /// </summary>
16 /// <param name="sourceLineNumbers">Source line numbers for the message.</param>
17 /// <param name="level">Message level.</param>
18 /// <param name="id">Id for the message.</param>
19 /// <param name="format">Format .</param>
20 /// <param name="messageArgs">Arguments for the format string.</param>
21 public Message(SourceLineNumber sourceLineNumbers, MessageLevel level, int id, string format, params object[] messageArgs)
22 {
23 this.SourceLineNumbers = sourceLineNumbers;
24 this.Level = level;
25 this.Id = id;
26 this.ResourceNameOrFormat = format;
27 this.MessageArgs = messageArgs;
28 }
29
30 /// <summary>
31 /// Creates a new Message using a format string from a resource manager.
32 /// </summary>
33 /// <param name="sourceLineNumbers">Source line numbers for the message.</param>
34 /// <param name="level">Message level.</param>
35 /// <param name="id">Id for the message.</param>
36 /// <param name="resourceManager">Resource manager.</param>
37 /// <param name="resourceName">Name of the resource.</param>
38 /// <param name="messageArgs">Arguments for the format string.</param>
39 public Message(SourceLineNumber sourceLineNumbers, MessageLevel level, int id, ResourceManager resourceManager, string resourceName, params object[] messageArgs)
40 {
41 this.SourceLineNumbers = sourceLineNumbers;
42 this.Level = level;
43 this.Id = id;
44 this.ResourceManager = resourceManager;
45 this.ResourceNameOrFormat = resourceName;
46 this.MessageArgs = messageArgs;
47 }
48
49 /// <summary>
50 /// Gets the source line numbers.
51 /// </summary>
52 /// <value>The source line numbers.</value>
53 public SourceLineNumber SourceLineNumbers { get; }
54
55 /// <summary>
56 /// Gets the Id for the message.
57 /// </summary>
58 /// <value>The Id for the message.</value>
59 public int Id { get; }
60
61 /// <summary>
62 /// Gets the resource manager for this event args.
63 /// </summary>
64 /// <value>The resource manager for this event args.</value>
65 public ResourceManager ResourceManager { get; }
66
67 /// <summary>
68 /// Gets the name of the resource or format string if no resource manager was provided.
69 /// </summary>
70 /// <value>The name of the resource or format string.</value>
71 public string ResourceNameOrFormat { get; }
72
73 /// <summary>
74 /// Gets or sets the <see cref="MessageLevel"/> for the message.
75 /// </summary>
76 /// <value>The <see cref="MessageLevel"/> for the message.</value>
77 public MessageLevel Level { get; private set; }
78
79 /// <summary>
80 /// Gets the arguments for the format string.
81 /// </summary>
82 /// <value>The arguments for the format string.</value>
83 public object[] MessageArgs { get; }
84
85 public override string ToString()
86 {
87 if (this.ResourceManager == null)
88 {
89 return String.Format(this.ResourceNameOrFormat, this.MessageArgs);
90 }
91 else
92 {
93 return String.Format(this.ResourceManager.GetString(this.ResourceNameOrFormat), this.MessageArgs);
94 }
95 }
96 }
97}
diff --git a/src/api/wix/WixToolset.Data/MessageLevel.cs b/src/api/wix/WixToolset.Data/MessageLevel.cs
new file mode 100644
index 00000000..d980e371
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/MessageLevel.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Enum for message to display.
7 /// </summary>
8 public enum MessageLevel
9 {
10 /// <summary>Display nothing.</summary>
11 Nothing,
12
13 /// <summary>Display verbose information.</summary>
14 Verbose,
15
16 /// <summary>Display information.</summary>
17 Information,
18
19 /// <summary>Display warning.</summary>
20 Warning,
21
22 /// <summary>Display error.</summary>
23 Error,
24 }
25}
diff --git a/src/api/wix/WixToolset.Data/OutputType.cs b/src/api/wix/WixToolset.Data/OutputType.cs
new file mode 100644
index 00000000..3bbdddcc
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/OutputType.cs
@@ -0,0 +1,37 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Various types of output.
7 /// </summary>
8 public enum OutputType
9 {
10 /// <summary>Unknown output type.</summary>
11 Unknown,
12
13 /// <summary>Bundle output type.</summary>
14 Bundle,
15
16 /// <summary>Library output type.</summary>
17 Library,
18
19 /// <summary>Module output type.</summary>
20 Module,
21
22 /// <summary>Patch output type.</summary>
23 Patch,
24
25 /// <summary>Patch Creation output type.</summary>
26 PatchCreation,
27
28 /// <summary>Product output type.</summary>
29 Product,
30
31 /// <summary>Transform output type.</summary>
32 Transform,
33
34 /// <summary>Intermediate representation post-link output type.</summary>
35 IntermediatePostLink,
36 }
37}
diff --git a/src/api/wix/WixToolset.Data/PackagingType.cs b/src/api/wix/WixToolset.Data/PackagingType.cs
new file mode 100644
index 00000000..a50f1236
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/PackagingType.cs
@@ -0,0 +1,11 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 public enum PackagingType
6 {
7 Unknown,
8 Embedded,
9 External,
10 }
11}
diff --git a/src/api/wix/WixToolset.Data/PdbType.cs b/src/api/wix/WixToolset.Data/PdbType.cs
new file mode 100644
index 00000000..fcbf9cb7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/PdbType.cs
@@ -0,0 +1,16 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Platforms supported by compiler.
7 /// </summary>
8 public enum PdbType
9 {
10 /// <summary>A .wixpdb file matching the generated output (default).</summary>
11 Full,
12
13 /// <summary>No .wixpdb file.</summary>
14 None,
15 }
16}
diff --git a/src/api/wix/WixToolset.Data/Platform.cs b/src/api/wix/WixToolset.Data/Platform.cs
new file mode 100644
index 00000000..f939ac55
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Platform.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
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Platforms supported by compiler.
7 /// </summary>
8 public enum Platform
9 {
10 /// <summary>x86.</summary>
11 X86,
12
13 /// <summary>x64.</summary>
14 X64,
15
16 /// <summary>arm64.</summary>
17 ARM64,
18 }
19}
diff --git a/src/api/wix/WixToolset.Data/SectionType.cs b/src/api/wix/WixToolset.Data/SectionType.cs
new file mode 100644
index 00000000..3322ba1a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/SectionType.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
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Type of section.
7 /// </summary>
8 public enum SectionType
9 {
10 /// <summary>Unknown section type, default and invalid.</summary>
11 Unknown,
12
13 /// <summary>Bundle section type.</summary>
14 Bundle,
15
16 /// <summary>Fragment section type.</summary>
17 Fragment,
18
19 /// <summary>Module section type.</summary>
20 Module,
21
22 /// <summary>Product section type.</summary>
23 Product,
24
25 /// <summary>Patch creation section type.</summary>
26 PatchCreation,
27
28 /// <summary>Patch section type.</summary>
29 Patch
30 }
31}
diff --git a/src/api/wix/WixToolset.Data/SimpleSymbolDefinitionCreator.cs b/src/api/wix/WixToolset.Data/SimpleSymbolDefinitionCreator.cs
new file mode 100644
index 00000000..e22d53e7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/SimpleSymbolDefinitionCreator.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
3namespace WixToolset.Data
4{
5 using System.Collections.Generic;
6
7 internal class SimpleSymbolDefinitionCreator : ISymbolDefinitionCreator
8 {
9 private Dictionary<string, IntermediateSymbolDefinition> CustomDefinitionByName { get; } = new Dictionary<string, IntermediateSymbolDefinition>();
10
11 public void AddCustomSymbolDefinition(IntermediateSymbolDefinition definition)
12 {
13 if (!this.CustomDefinitionByName.TryGetValue(definition.Name, out var existing) || definition.Revision > existing.Revision)
14 {
15 this.CustomDefinitionByName[definition.Name] = definition;
16 }
17 }
18
19 public bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
20 {
21 symbolDefinition = SymbolDefinitions.ByName(name);
22
23 if (symbolDefinition == null)
24 {
25 symbolDefinition = this.CustomDefinitionByName.GetValueOrDefault(name);
26 }
27
28 return symbolDefinition != null;
29 }
30 }
31}
diff --git a/src/api/wix/WixToolset.Data/SourceLineNumber.cs b/src/api/wix/WixToolset.Data/SourceLineNumber.cs
new file mode 100644
index 00000000..970f17e7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/SourceLineNumber.cs
@@ -0,0 +1,275 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.IO;
7 using System.Text;
8 using System.Xml;
9 using System.Xml.Linq;
10 using SimpleJson;
11
12 /// <summary>
13 /// Represents file name and line number for source file
14 /// </summary>
15 public sealed class SourceLineNumber
16 {
17 /// <summary>
18 /// Constructor for a source with no line information.
19 /// </summary>
20 /// <param name="fileName">File name of the source.</param>
21 public SourceLineNumber(string fileName)
22 {
23 this.FileName = fileName;
24 }
25
26 /// <summary>
27 /// Constructor for a source with line information.
28 /// </summary>
29 /// <param name="fileName">File name of the source.</param>
30 /// <param name="lineNumber">Line number of the source.</param>
31 public SourceLineNumber(string fileName, int lineNumber)
32 {
33 this.FileName = fileName;
34 this.LineNumber = lineNumber;
35 }
36
37 /// <summary>
38 /// Constructor for a source with a parent and no line information.
39 /// </summary>
40 /// <param name="fileName">File name of the source.</param>
41 /// <param name="parent">Parent of this source line number</param>
42 public SourceLineNumber(string fileName, SourceLineNumber parent)
43 {
44 this.FileName = fileName;
45 this.Parent = parent;
46 }
47
48 /// <summary>
49 /// Constructor for a source with a parent and line information.
50 /// </summary>
51 /// <param name="fileName">File name of the source.</param>
52 /// <param name="parent">Parent of this source line number</param>
53 /// <param name="lineNumber">Line number of the source.</param>
54 public SourceLineNumber(string fileName, SourceLineNumber parent, int lineNumber)
55 {
56 this.FileName = fileName;
57 this.Parent = parent;
58 this.LineNumber = lineNumber;
59 }
60
61 /// <summary>
62 /// Gets the file name of the source.
63 /// </summary>
64 /// <value>File name for the source.</value>
65 public string FileName { get; }
66
67 /// <summary>
68 /// Gets or sets the line number of the source.
69 /// </summary>
70 /// <value>Line number of the source.</value>
71 public int? LineNumber { get; set; }
72
73 /// <summary>
74 /// Gets or sets the parent source line number that included this source line number.
75 /// </summary>
76 public SourceLineNumber Parent { get; private set; }
77
78 /// <summary>
79 /// Gets the file name and line information.
80 /// </summary>
81 /// <value>File name and line information.</value>
82 public string QualifiedFileName => this.LineNumber.HasValue ? String.Concat(this.FileName, "*", this.LineNumber) : this.FileName;
83
84 internal static SourceLineNumber Deserialize(JsonObject jsonObject)
85 {
86 var fileName = jsonObject.GetValueOrDefault<string>("file");
87 var lineNumber = jsonObject.GetValueOrDefault("line", null);
88
89 var parentJson = jsonObject.GetValueOrDefault<JsonObject>("parent");
90 var parent = (parentJson == null) ? null : SourceLineNumber.Deserialize(parentJson);
91
92 return new SourceLineNumber(fileName)
93 {
94 LineNumber = lineNumber,
95 Parent = parent
96 };
97 }
98
99 internal JsonObject Serialize()
100 {
101 var jsonObject = new JsonObject
102 {
103 { "file", this.FileName },
104 { "line", this.LineNumber }
105 };
106
107 if (this.Parent != null)
108 {
109 var parentJson = this.Parent.Serialize();
110 jsonObject.Add("parent", parentJson);
111 }
112
113 return jsonObject;
114 }
115
116 /// <summary>
117 /// Creates a source line number from an encoded string.
118 /// </summary>
119 /// <param name="encodedSourceLineNumbers">Encoded string to parse.</param>
120 public static SourceLineNumber CreateFromEncoded(string encodedSourceLineNumbers)
121 {
122 var linesSplitIndex = encodedSourceLineNumbers.IndexOf('|');
123
124 // The most common case is that there is a single encoded line,
125 // so optimize for that case.
126 if (linesSplitIndex < 0)
127 {
128 return DecodeSourceLineNumber(encodedSourceLineNumbers, 0, -1);
129 }
130 else // decode the multiple lines.
131 {
132 var startLine = 0;
133
134 SourceLineNumber first = null;
135 SourceLineNumber parent = null;
136 while (startLine < encodedSourceLineNumbers.Length)
137 {
138 var source = DecodeSourceLineNumber(encodedSourceLineNumbers, startLine, linesSplitIndex - 1);
139
140 if (null != parent)
141 {
142 parent.Parent = source;
143 }
144
145 parent = source;
146 if (null == first)
147 {
148 first = parent;
149 }
150
151 if (linesSplitIndex < 0)
152 {
153 break;
154 }
155
156 startLine = linesSplitIndex + 1;
157 linesSplitIndex = encodedSourceLineNumbers.IndexOf('|', startLine);
158 }
159
160 return first;
161 }
162 }
163
164 /// <summary>
165 /// Creates a source line number from a URI.
166 /// </summary>
167 /// <param name="uri">Uri to convert into source line number</param>
168 public static SourceLineNumber CreateFromUri(string uri)
169 {
170 if (String.IsNullOrEmpty(uri))
171 {
172 return null;
173 }
174
175 // make the local path look like a normal local path
176 var localPath = new Uri(uri).LocalPath;
177 localPath = localPath.TrimStart(Path.AltDirectorySeparatorChar).Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
178
179 return new SourceLineNumber(localPath);
180 }
181
182 /// <summary>
183 /// Creates a source line number from an XObject.
184 /// </summary>
185 /// <param name="node">XML node to create source line number from.</param>
186 /// <param name="offset">Optional line number offset into XML file not already included in the line information.</param>
187 public static SourceLineNumber CreateFromXObject(XObject node, int offset = 0)
188 {
189 var result = CreateFromUri(node.BaseUri);
190 if (null != result && node is IXmlLineInfo lineInfo)
191 {
192 result.LineNumber = lineInfo.LineNumber + offset;
193 }
194
195 return result;
196 }
197
198 /// <summary>
199 /// Get the source line information for the current element. Typically this information
200 /// is set by the precompiler for each element that it encounters.
201 /// </summary>
202 /// <param name="node">Element to get source line information for.</param>
203 /// <returns>
204 /// The source line number used to author the element being processed or
205 /// null if the preprocessor did not process the element or the node is
206 /// not an element.
207 /// </returns>
208 public static SourceLineNumber GetFromXAnnotation(XObject node)
209 {
210 return node.Annotation<SourceLineNumber>();
211 }
212
213 /// <summary>
214 /// Returns the SourceLineNumber and parents encoded as a string.
215 /// </summary>
216 public string GetEncoded()
217 {
218 var sb = new StringBuilder(this.QualifiedFileName);
219
220 for (var parent = this.Parent; null != parent; parent = parent.Parent)
221 {
222 sb.Append("|");
223 sb.Append(parent.QualifiedFileName);
224 }
225
226 return sb.ToString();
227 }
228
229 /// <summary>
230 /// Determines if two SourceLineNumbers are equivalent.
231 /// </summary>
232 /// <param name="obj">Object to compare.</param>
233 /// <returns>True if SourceLineNumbers are equivalent.</returns>
234 public override bool Equals(object obj)
235 {
236 return obj is SourceLineNumber other &&
237 this.LineNumber.HasValue == other.LineNumber.HasValue &&
238 (!this.LineNumber.HasValue || this.LineNumber == other.LineNumber) &&
239 this.FileName.Equals(other.FileName, StringComparison.OrdinalIgnoreCase) &&
240 (null == this.Parent && null == other.Parent || this.Parent.Equals(other.Parent));
241 }
242
243 /// <summary>
244 /// Serves as a hash code for a particular type.
245 /// </summary>
246 /// <returns>The hash code.</returns>
247 public override int GetHashCode()
248 {
249 return this.GetEncoded().GetHashCode();
250 }
251
252 /// <summary>
253 /// Shows a string representation of a source line number.
254 /// </summary>
255 /// <returns>String representation of a source line number.</returns>
256 public override string ToString()
257 {
258 return this.LineNumber.HasValue && !String.IsNullOrEmpty(this.FileName) ? String.Concat(this.FileName, "(", this.LineNumber, ")") : this.FileName ?? String.Empty;
259 }
260
261 private static SourceLineNumber DecodeSourceLineNumber(string encoded, int startIndex, int endIndex)
262 {
263 if (endIndex < 0)
264 {
265 endIndex = encoded.Length - 1;
266 }
267
268 var count = endIndex - startIndex;
269 var filenameSplitIndex = encoded.LastIndexOf('*', endIndex - 1, count);
270 return (filenameSplitIndex < 0) ? new SourceLineNumber(encoded) :
271 new SourceLineNumber(encoded.Substring(startIndex, filenameSplitIndex - startIndex),
272 Convert.ToInt32(encoded.Substring(filenameSplitIndex + 1, endIndex - filenameSplitIndex)));
273 }
274 }
275}
diff --git a/src/api/wix/WixToolset.Data/Symbols/ActionTextSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ActionTextSymbol.cs
new file mode 100644
index 00000000..80662060
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ActionTextSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ActionText = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ActionText,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ActionTextSymbolFields.Action), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ActionTextSymbolFields.Description), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ActionTextSymbolFields.Template), IntermediateFieldType.String),
16 },
17 typeof(ActionTextSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum ActionTextSymbolFields
24 {
25 Action,
26 Description,
27 Template,
28 }
29
30 public class ActionTextSymbol : IntermediateSymbol
31 {
32 public ActionTextSymbol() : base(SymbolDefinitions.ActionText, null, null)
33 {
34 }
35
36 public ActionTextSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ActionText, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[ActionTextSymbolFields index] => this.Fields[(int)index];
41
42 public string Action
43 {
44 get => (string)this.Fields[(int)ActionTextSymbolFields.Action];
45 set => this.Set((int)ActionTextSymbolFields.Action, value);
46 }
47
48 public string Description
49 {
50 get => (string)this.Fields[(int)ActionTextSymbolFields.Description];
51 set => this.Set((int)ActionTextSymbolFields.Description, value);
52 }
53
54 public string Template
55 {
56 get => (string)this.Fields[(int)ActionTextSymbolFields.Template];
57 set => this.Set((int)ActionTextSymbolFields.Template, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/AppIdSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/AppIdSymbol.cs
new file mode 100644
index 00000000..3eafa26f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/AppIdSymbol.cs
@@ -0,0 +1,92 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition AppId = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.AppId,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.AppId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.RemoteServerName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.LocalService), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.ServiceParameters), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.DllSurrogate), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.ActivateAtStorage), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(AppIdSymbolFields.RunAsInteractiveUser), IntermediateFieldType.Number),
20 },
21 typeof(AppIdSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum AppIdSymbolFields
28 {
29 AppId,
30 RemoteServerName,
31 LocalService,
32 ServiceParameters,
33 DllSurrogate,
34 ActivateAtStorage,
35 RunAsInteractiveUser,
36 }
37
38 public class AppIdSymbol : IntermediateSymbol
39 {
40 public AppIdSymbol() : base(SymbolDefinitions.AppId, null, null)
41 {
42 }
43
44 public AppIdSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.AppId, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[AppIdSymbolFields index] => this.Fields[(int)index];
49
50 public string AppId
51 {
52 get => (string)this.Fields[(int)AppIdSymbolFields.AppId];
53 set => this.Set((int)AppIdSymbolFields.AppId, value);
54 }
55
56 public string RemoteServerName
57 {
58 get => (string)this.Fields[(int)AppIdSymbolFields.RemoteServerName];
59 set => this.Set((int)AppIdSymbolFields.RemoteServerName, value);
60 }
61
62 public string LocalService
63 {
64 get => (string)this.Fields[(int)AppIdSymbolFields.LocalService];
65 set => this.Set((int)AppIdSymbolFields.LocalService, value);
66 }
67
68 public string ServiceParameters
69 {
70 get => (string)this.Fields[(int)AppIdSymbolFields.ServiceParameters];
71 set => this.Set((int)AppIdSymbolFields.ServiceParameters, value);
72 }
73
74 public string DllSurrogate
75 {
76 get => (string)this.Fields[(int)AppIdSymbolFields.DllSurrogate];
77 set => this.Set((int)AppIdSymbolFields.DllSurrogate, value);
78 }
79
80 public bool? ActivateAtStorage
81 {
82 get => (bool?)this.Fields[(int)AppIdSymbolFields.ActivateAtStorage];
83 set => this.Set((int)AppIdSymbolFields.ActivateAtStorage, value);
84 }
85
86 public bool? RunAsInteractiveUser
87 {
88 get => (bool?)this.Fields[(int)AppIdSymbolFields.RunAsInteractiveUser];
89 set => this.Set((int)AppIdSymbolFields.RunAsInteractiveUser, value);
90 }
91 }
92} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/AppSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/AppSearchSymbol.cs
new file mode 100644
index 00000000..2bd3d6ba
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/AppSearchSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition AppSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.AppSearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(AppSearchSymbolFields.PropertyRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(AppSearchSymbolFields.SignatureRef), IntermediateFieldType.String),
15 },
16 typeof(AppSearchSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum AppSearchSymbolFields
23 {
24 PropertyRef,
25 SignatureRef,
26 }
27
28 public class AppSearchSymbol : IntermediateSymbol
29 {
30 public AppSearchSymbol() : base(SymbolDefinitions.AppSearch, null, null)
31 {
32 }
33
34 public AppSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.AppSearch, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[AppSearchSymbolFields index] => this.Fields[(int)index];
39
40 public string PropertyRef
41 {
42 get => (string)this.Fields[(int)AppSearchSymbolFields.PropertyRef];
43 set => this.Set((int)AppSearchSymbolFields.PropertyRef, value);
44 }
45
46 public string SignatureRef
47 {
48 get => (string)this.Fields[(int)AppSearchSymbolFields.SignatureRef];
49 set => this.Set((int)AppSearchSymbolFields.SignatureRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/AssemblySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/AssemblySymbol.cs
new file mode 100644
index 00000000..192ca4eb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/AssemblySymbol.cs
@@ -0,0 +1,96 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Assembly = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Assembly,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.FeatureRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.ManifestFileRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.ApplicationFileRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.Type), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(AssemblySymbolFields.ProcessorArchitecture), IntermediateFieldType.String),
19 },
20 typeof(AssemblySymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum AssemblySymbolFields
27 {
28 ComponentRef,
29 FeatureRef,
30 ManifestFileRef,
31 ApplicationFileRef,
32 Type,
33 ProcessorArchitecture,
34 }
35
36 public enum AssemblyType
37 {
38 /// <summary>File is not an assembly.</summary>
39 NotAnAssembly,
40
41 /// <summary>File is a Common Language Runtime Assembly.</summary>
42 DotNetAssembly,
43
44 /// <summary>File is Win32 SxS assembly.</summary>
45 Win32Assembly,
46 }
47
48 public class AssemblySymbol : IntermediateSymbol
49 {
50 public AssemblySymbol() : base(SymbolDefinitions.Assembly, null, null)
51 {
52 }
53
54 public AssemblySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Assembly, sourceLineNumber, id)
55 {
56 }
57
58 public IntermediateField this[AssemblySymbolFields index] => this.Fields[(int)index];
59
60 public string ComponentRef
61 {
62 get => (string)this.Fields[(int)AssemblySymbolFields.ComponentRef];
63 set => this.Set((int)AssemblySymbolFields.ComponentRef, value);
64 }
65
66 public string FeatureRef
67 {
68 get => (string)this.Fields[(int)AssemblySymbolFields.FeatureRef];
69 set => this.Set((int)AssemblySymbolFields.FeatureRef, value);
70 }
71
72 public string ManifestFileRef
73 {
74 get => (string)this.Fields[(int)AssemblySymbolFields.ManifestFileRef];
75 set => this.Set((int)AssemblySymbolFields.ManifestFileRef, value);
76 }
77
78 public string ApplicationFileRef
79 {
80 get => (string)this.Fields[(int)AssemblySymbolFields.ApplicationFileRef];
81 set => this.Set((int)AssemblySymbolFields.ApplicationFileRef, value);
82 }
83
84 public AssemblyType Type
85 {
86 get => (AssemblyType)this.Fields[(int)AssemblySymbolFields.Type].AsNumber();
87 set => this.Set((int)AssemblySymbolFields.Type, (int)value);
88 }
89
90 public string ProcessorArchitecture
91 {
92 get => (string)this.Fields[(int)AssemblySymbolFields.ProcessorArchitecture];
93 set => this.Set((int)AssemblySymbolFields.ProcessorArchitecture, value);
94 }
95 }
96}
diff --git a/src/api/wix/WixToolset.Data/Symbols/BBControlSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/BBControlSymbol.cs
new file mode 100644
index 00000000..277d1d85
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/BBControlSymbol.cs
@@ -0,0 +1,180 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition BBControl = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.BBControl,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.BillboardRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.BBControl), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Type), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.X), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Y), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Width), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Height), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Attributes), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Enabled), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Indirect), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Integer), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.LeftScroll), IntermediateFieldType.Bool),
25 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.RightAligned), IntermediateFieldType.Bool),
26 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.RightToLeft), IntermediateFieldType.Bool),
27 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Sunken), IntermediateFieldType.Bool),
28 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Visible), IntermediateFieldType.Bool),
29 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.Text), IntermediateFieldType.String),
30 new IntermediateFieldDefinition(nameof(BBControlSymbolFields.SourceFile), IntermediateFieldType.Path),
31 },
32 typeof(BBControlSymbol));
33 }
34}
35
36namespace WixToolset.Data.Symbols
37{
38 public enum BBControlSymbolFields
39 {
40 BillboardRef,
41 BBControl,
42 Type,
43 X,
44 Y,
45 Width,
46 Height,
47 Attributes,
48 Enabled,
49 Indirect,
50 Integer,
51 LeftScroll,
52 RightAligned,
53 RightToLeft,
54 Sunken,
55 Visible,
56 Text,
57 SourceFile
58 }
59
60 public class BBControlSymbol : IntermediateSymbol
61 {
62 public BBControlSymbol() : base(SymbolDefinitions.BBControl, null, null)
63 {
64 }
65
66 public BBControlSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.BBControl, sourceLineNumber, id)
67 {
68 }
69
70 public IntermediateField this[BBControlSymbolFields index] => this.Fields[(int)index];
71
72 public string BillboardRef
73 {
74 get => (string)this.Fields[(int)BBControlSymbolFields.BillboardRef];
75 set => this.Set((int)BBControlSymbolFields.BillboardRef, value);
76 }
77
78 public string BBControl
79 {
80 get => (string)this.Fields[(int)BBControlSymbolFields.BBControl];
81 set => this.Set((int)BBControlSymbolFields.BBControl, value);
82 }
83
84 public string Type
85 {
86 get => (string)this.Fields[(int)BBControlSymbolFields.Type];
87 set => this.Set((int)BBControlSymbolFields.Type, value);
88 }
89
90 public int X
91 {
92 get => (int)this.Fields[(int)BBControlSymbolFields.X];
93 set => this.Set((int)BBControlSymbolFields.X, value);
94 }
95
96 public int Y
97 {
98 get => (int)this.Fields[(int)BBControlSymbolFields.Y];
99 set => this.Set((int)BBControlSymbolFields.Y, value);
100 }
101
102 public int Width
103 {
104 get => (int)this.Fields[(int)BBControlSymbolFields.Width].AsNumber();
105 set => this.Set((int)BBControlSymbolFields.Width, value);
106 }
107
108 public int Height
109 {
110 get => (int)this.Fields[(int)BBControlSymbolFields.Height];
111 set => this.Set((int)BBControlSymbolFields.Height, value);
112 }
113
114 public int Attributes
115 {
116 get => this.Fields[(int)BBControlSymbolFields.Attributes].AsNumber();
117 set => this.Set((int)BBControlSymbolFields.Attributes, value);
118 }
119
120 public bool Enabled
121 {
122 get => this.Fields[(int)BBControlSymbolFields.Enabled].AsBool();
123 set => this.Set((int)BBControlSymbolFields.Enabled, value);
124 }
125
126 public bool Indirect
127 {
128 get => this.Fields[(int)BBControlSymbolFields.Indirect].AsBool();
129 set => this.Set((int)BBControlSymbolFields.Indirect, value);
130 }
131
132 public bool Integer
133 {
134 get => this.Fields[(int)BBControlSymbolFields.Integer].AsBool();
135 set => this.Set((int)BBControlSymbolFields.Integer, value);
136 }
137
138 public bool LeftScroll
139 {
140 get => this.Fields[(int)BBControlSymbolFields.LeftScroll].AsBool();
141 set => this.Set((int)BBControlSymbolFields.LeftScroll, value);
142 }
143
144 public bool RightAligned
145 {
146 get => this.Fields[(int)BBControlSymbolFields.RightAligned].AsBool();
147 set => this.Set((int)BBControlSymbolFields.RightAligned, value);
148 }
149
150 public bool RightToLeft
151 {
152 get => this.Fields[(int)BBControlSymbolFields.RightToLeft].AsBool();
153 set => this.Set((int)BBControlSymbolFields.RightToLeft, value);
154 }
155
156 public bool Sunken
157 {
158 get => this.Fields[(int)BBControlSymbolFields.Sunken].AsBool();
159 set => this.Set((int)BBControlSymbolFields.Sunken, value);
160 }
161
162 public bool Visible
163 {
164 get => this.Fields[(int)BBControlSymbolFields.Visible].AsBool();
165 set => this.Set((int)BBControlSymbolFields.Visible, value);
166 }
167
168 public string Text
169 {
170 get => (string)this.Fields[(int)BBControlSymbolFields.Text];
171 set => this.Set((int)BBControlSymbolFields.Text, value);
172 }
173
174 public IntermediateFieldPathValue SourceFile
175 {
176 get => this.Fields[(int)BBControlSymbolFields.SourceFile].AsPath();
177 set => this.Set((int)BBControlSymbolFields.SourceFile, value);
178 }
179 }
180} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/BillboardSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/BillboardSymbol.cs
new file mode 100644
index 00000000..77f60bcb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/BillboardSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Billboard = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Billboard,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(BillboardSymbolFields.FeatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(BillboardSymbolFields.Action), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(BillboardSymbolFields.Ordering), IntermediateFieldType.Number),
16 },
17 typeof(BillboardSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum BillboardSymbolFields
24 {
25 FeatureRef,
26 Action,
27 Ordering,
28 }
29
30 public class BillboardSymbol : IntermediateSymbol
31 {
32 public BillboardSymbol() : base(SymbolDefinitions.Billboard, null, null)
33 {
34 }
35
36 public BillboardSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Billboard, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[BillboardSymbolFields index] => this.Fields[(int)index];
41
42 public string FeatureRef
43 {
44 get => (string)this.Fields[(int)BillboardSymbolFields.FeatureRef];
45 set => this.Set((int)BillboardSymbolFields.FeatureRef, value);
46 }
47
48 public string Action
49 {
50 get => (string)this.Fields[(int)BillboardSymbolFields.Action];
51 set => this.Set((int)BillboardSymbolFields.Action, value);
52 }
53
54 public int? Ordering
55 {
56 get => (int?)this.Fields[(int)BillboardSymbolFields.Ordering];
57 set => this.Set((int)BillboardSymbolFields.Ordering, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/BinarySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/BinarySymbol.cs
new file mode 100644
index 00000000..ec26b01a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/BinarySymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Binary = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Binary,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(BinarySymbolFields.Data), IntermediateFieldType.Path),
14 },
15 typeof(BinarySymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum BinarySymbolFields
22 {
23 Data,
24 }
25
26 public class BinarySymbol : IntermediateSymbol
27 {
28 public BinarySymbol() : base(SymbolDefinitions.Binary, null, null)
29 {
30 }
31
32 public BinarySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Binary, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[BinarySymbolFields index] => this.Fields[(int)index];
37
38 public IntermediateFieldPathValue Data
39 {
40 get => this.Fields[(int)BinarySymbolFields.Data].AsPath();
41 set => this.Set((int)BinarySymbolFields.Data, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/CCPSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/CCPSearchSymbol.cs
new file mode 100644
index 00000000..6f6227fd
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/CCPSearchSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition CCPSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.CCPSearch,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(CCPSearchSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum CCPSearchSymbolFields
21 {
22 }
23
24 public class CCPSearchSymbol : IntermediateSymbol
25 {
26 public CCPSearchSymbol() : base(SymbolDefinitions.CCPSearch, null, null)
27 {
28 }
29
30 public CCPSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.CCPSearch, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[CCPSearchSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/CheckBoxSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/CheckBoxSymbol.cs
new file mode 100644
index 00000000..cd6355c4
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/CheckBoxSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition CheckBox = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.CheckBox,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(CheckBoxSymbolFields.Property), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(CheckBoxSymbolFields.Value), IntermediateFieldType.String),
15 },
16 typeof(CheckBoxSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum CheckBoxSymbolFields
23 {
24 Property,
25 Value,
26 }
27
28 public class CheckBoxSymbol : IntermediateSymbol
29 {
30 public CheckBoxSymbol() : base(SymbolDefinitions.CheckBox, null, null)
31 {
32 }
33
34 public CheckBoxSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.CheckBox, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[CheckBoxSymbolFields index] => this.Fields[(int)index];
39
40 public string Property
41 {
42 get => (string)this.Fields[(int)CheckBoxSymbolFields.Property];
43 set => this.Set((int)CheckBoxSymbolFields.Property, value);
44 }
45
46 public string Value
47 {
48 get => (string)this.Fields[(int)CheckBoxSymbolFields.Value];
49 set => this.Set((int)CheckBoxSymbolFields.Value, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ClassSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ClassSymbol.cs
new file mode 100644
index 00000000..833867b1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ClassSymbol.cs
@@ -0,0 +1,140 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Class = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Class,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ClassSymbolFields.CLSID), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ClassSymbolFields.Context), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ClassSymbolFields.ComponentRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ClassSymbolFields.DefaultProgIdRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ClassSymbolFields.Description), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ClassSymbolFields.AppIdRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ClassSymbolFields.FileTypeMask), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ClassSymbolFields.IconRef), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ClassSymbolFields.IconIndex), IntermediateFieldType.Number),
22 new IntermediateFieldDefinition(nameof(ClassSymbolFields.DefInprocHandler), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(ClassSymbolFields.Argument), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(ClassSymbolFields.FeatureRef), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(ClassSymbolFields.RelativePath), IntermediateFieldType.Bool),
26 },
27 typeof(ClassSymbol));
28 }
29}
30
31namespace WixToolset.Data.Symbols
32{
33 public enum ClassSymbolFields
34 {
35 CLSID,
36 Context,
37 ComponentRef,
38 DefaultProgIdRef,
39 Description,
40 AppIdRef,
41 FileTypeMask,
42 IconRef,
43 IconIndex,
44 DefInprocHandler,
45 Argument,
46 FeatureRef,
47 RelativePath,
48 }
49
50 public class ClassSymbol : IntermediateSymbol
51 {
52 public ClassSymbol() : base(SymbolDefinitions.Class, null, null)
53 {
54 }
55
56 public ClassSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Class, sourceLineNumber, id)
57 {
58 }
59
60 public IntermediateField this[ClassSymbolFields index] => this.Fields[(int)index];
61
62 public string CLSID
63 {
64 get => (string)this.Fields[(int)ClassSymbolFields.CLSID];
65 set => this.Set((int)ClassSymbolFields.CLSID, value);
66 }
67
68 public string Context
69 {
70 get => (string)this.Fields[(int)ClassSymbolFields.Context];
71 set => this.Set((int)ClassSymbolFields.Context, value);
72 }
73
74 public string ComponentRef
75 {
76 get => (string)this.Fields[(int)ClassSymbolFields.ComponentRef];
77 set => this.Set((int)ClassSymbolFields.ComponentRef, value);
78 }
79
80 public string DefaultProgIdRef
81 {
82 get => (string)this.Fields[(int)ClassSymbolFields.DefaultProgIdRef];
83 set => this.Set((int)ClassSymbolFields.DefaultProgIdRef, value);
84 }
85
86 public string Description
87 {
88 get => (string)this.Fields[(int)ClassSymbolFields.Description];
89 set => this.Set((int)ClassSymbolFields.Description, value);
90 }
91
92 public string AppIdRef
93 {
94 get => (string)this.Fields[(int)ClassSymbolFields.AppIdRef];
95 set => this.Set((int)ClassSymbolFields.AppIdRef, value);
96 }
97
98 public string FileTypeMask
99 {
100 get => (string)this.Fields[(int)ClassSymbolFields.FileTypeMask];
101 set => this.Set((int)ClassSymbolFields.FileTypeMask, value);
102 }
103
104 public string IconRef
105 {
106 get => (string)this.Fields[(int)ClassSymbolFields.IconRef];
107 set => this.Set((int)ClassSymbolFields.IconRef, value);
108 }
109
110 public int? IconIndex
111 {
112 get => (int?)this.Fields[(int)ClassSymbolFields.IconIndex];
113 set => this.Set((int)ClassSymbolFields.IconIndex, value);
114 }
115
116 public string DefInprocHandler
117 {
118 get => (string)this.Fields[(int)ClassSymbolFields.DefInprocHandler];
119 set => this.Set((int)ClassSymbolFields.DefInprocHandler, value);
120 }
121
122 public string Argument
123 {
124 get => (string)this.Fields[(int)ClassSymbolFields.Argument];
125 set => this.Set((int)ClassSymbolFields.Argument, value);
126 }
127
128 public string FeatureRef
129 {
130 get => (string)this.Fields[(int)ClassSymbolFields.FeatureRef];
131 set => this.Set((int)ClassSymbolFields.FeatureRef, value);
132 }
133
134 public bool RelativePath
135 {
136 get => this.Fields[(int)ClassSymbolFields.RelativePath].AsBool();
137 set => this.Set((int)ClassSymbolFields.RelativePath, value);
138 }
139 }
140} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ComboBoxSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ComboBoxSymbol.cs
new file mode 100644
index 00000000..c7d8d986
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ComboBoxSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ComboBox = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ComboBox,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ComboBoxSymbolFields.Property), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ComboBoxSymbolFields.Order), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ComboBoxSymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComboBoxSymbolFields.Text), IntermediateFieldType.String),
17 },
18 typeof(ComboBoxSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ComboBoxSymbolFields
25 {
26 Property,
27 Order,
28 Value,
29 Text,
30 }
31
32 public class ComboBoxSymbol : IntermediateSymbol
33 {
34 public ComboBoxSymbol() : base(SymbolDefinitions.ComboBox, null, null)
35 {
36 }
37
38 public ComboBoxSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ComboBox, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ComboBoxSymbolFields index] => this.Fields[(int)index];
43
44 public string Property
45 {
46 get => (string)this.Fields[(int)ComboBoxSymbolFields.Property];
47 set => this.Set((int)ComboBoxSymbolFields.Property, value);
48 }
49
50 public int Order
51 {
52 get => (int)this.Fields[(int)ComboBoxSymbolFields.Order];
53 set => this.Set((int)ComboBoxSymbolFields.Order, value);
54 }
55
56 public string Value
57 {
58 get => (string)this.Fields[(int)ComboBoxSymbolFields.Value];
59 set => this.Set((int)ComboBoxSymbolFields.Value, value);
60 }
61
62 public string Text
63 {
64 get => (string)this.Fields[(int)ComboBoxSymbolFields.Text];
65 set => this.Set((int)ComboBoxSymbolFields.Text, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/CompLocatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/CompLocatorSymbol.cs
new file mode 100644
index 00000000..9004859c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/CompLocatorSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition CompLocator = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.CompLocator,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(CompLocatorSymbolFields.SignatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(CompLocatorSymbolFields.ComponentId), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(CompLocatorSymbolFields.Type), IntermediateFieldType.Number),
16 },
17 typeof(CompLocatorSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum CompLocatorSymbolFields
24 {
25 SignatureRef,
26 ComponentId,
27 Type,
28 }
29
30 public class CompLocatorSymbol : IntermediateSymbol
31 {
32 public CompLocatorSymbol() : base(SymbolDefinitions.CompLocator, null, null)
33 {
34 }
35
36 public CompLocatorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.CompLocator, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[CompLocatorSymbolFields index] => this.Fields[(int)index];
41
42 public string SignatureRef
43 {
44 get => (string)this.Fields[(int)CompLocatorSymbolFields.SignatureRef];
45 set => this.Set((int)CompLocatorSymbolFields.SignatureRef, value);
46 }
47
48 public string ComponentId
49 {
50 get => (string)this.Fields[(int)CompLocatorSymbolFields.ComponentId];
51 set => this.Set((int)CompLocatorSymbolFields.ComponentId, value);
52 }
53
54 public LocatorType Type
55 {
56 get => (LocatorType)this.Fields[(int)CompLocatorSymbolFields.Type].AsNumber();
57 set => this.Set((int)CompLocatorSymbolFields.Type, (int)value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ComplusSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ComplusSymbol.cs
new file mode 100644
index 00000000..fa16af86
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ComplusSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Complus = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Complus,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ComplusSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ComplusSymbolFields.ExpType), IntermediateFieldType.Number),
15 },
16 typeof(ComplusSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum ComplusSymbolFields
23 {
24 ComponentRef,
25 ExpType,
26 }
27
28 public class ComplusSymbol : IntermediateSymbol
29 {
30 public ComplusSymbol() : base(SymbolDefinitions.Complus, null, null)
31 {
32 }
33
34 public ComplusSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Complus, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[ComplusSymbolFields index] => this.Fields[(int)index];
39
40 public string ComponentRef
41 {
42 get => (string)this.Fields[(int)ComplusSymbolFields.ComponentRef];
43 set => this.Set((int)ComplusSymbolFields.ComponentRef, value);
44 }
45
46 public int? ExpType
47 {
48 get => (int?)this.Fields[(int)ComplusSymbolFields.ExpType];
49 set => this.Set((int)ComplusSymbolFields.ExpType, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ComponentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ComponentSymbol.cs
new file mode 100644
index 00000000..13d398b1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ComponentSymbol.cs
@@ -0,0 +1,155 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Component = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Component,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.ComponentId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.DirectoryRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Location), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.DisableRegistryReflection), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.NeverOverwrite), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Permanent), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.SharedDllRefCount), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Shared), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Transitive), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.UninstallWhenSuperseded), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Win64), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.Condition), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.KeyPath), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(ComponentSymbolFields.KeyPathType), IntermediateFieldType.Number),
27 },
28 typeof(ComponentSymbol));
29 }
30}
31
32namespace WixToolset.Data.Symbols
33{
34 public enum ComponentSymbolFields
35 {
36 ComponentId,
37 DirectoryRef,
38 Location,
39 DisableRegistryReflection,
40 NeverOverwrite,
41 Permanent,
42 SharedDllRefCount,
43 Shared,
44 Transitive,
45 UninstallWhenSuperseded,
46 Win64,
47 Condition,
48 KeyPath,
49 KeyPathType,
50 }
51
52 public enum ComponentLocation
53 {
54 LocalOnly,
55 SourceOnly,
56 Either
57 }
58
59 public class ComponentSymbol : IntermediateSymbol
60 {
61 public ComponentSymbol() : base(SymbolDefinitions.Component, null, null)
62 {
63 }
64
65 public ComponentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Component, sourceLineNumber, id)
66 {
67 }
68
69 public IntermediateField this[ComponentSymbolFields index] => this.Fields[(int)index];
70
71 public string ComponentId
72 {
73 get => (string)this.Fields[(int)ComponentSymbolFields.ComponentId];
74 set => this.Set((int)ComponentSymbolFields.ComponentId, value);
75 }
76
77 public string DirectoryRef
78 {
79 get => (string)this.Fields[(int)ComponentSymbolFields.DirectoryRef];
80 set => this.Set((int)ComponentSymbolFields.DirectoryRef, value);
81 }
82
83 public ComponentLocation Location
84 {
85 get => (ComponentLocation)this.Fields[(int)ComponentSymbolFields.Location].AsNumber();
86 set => this.Set((int)ComponentSymbolFields.Location, (int)value);
87 }
88
89 public bool DisableRegistryReflection
90 {
91 get => this.Fields[(int)ComponentSymbolFields.DisableRegistryReflection].AsBool();
92 set => this.Set((int)ComponentSymbolFields.DisableRegistryReflection, value);
93 }
94
95 public bool NeverOverwrite
96 {
97 get => this.Fields[(int)ComponentSymbolFields.NeverOverwrite].AsBool();
98 set => this.Set((int)ComponentSymbolFields.NeverOverwrite, value);
99 }
100
101 public bool Permanent
102 {
103 get => this.Fields[(int)ComponentSymbolFields.Permanent].AsBool();
104 set => this.Set((int)ComponentSymbolFields.Permanent, value);
105 }
106
107 public bool SharedDllRefCount
108 {
109 get => this.Fields[(int)ComponentSymbolFields.SharedDllRefCount].AsBool();
110 set => this.Set((int)ComponentSymbolFields.SharedDllRefCount, value);
111 }
112
113 public bool Shared
114 {
115 get => this.Fields[(int)ComponentSymbolFields.Shared].AsBool();
116 set => this.Set((int)ComponentSymbolFields.Shared, value);
117 }
118
119 public bool Transitive
120 {
121 get => this.Fields[(int)ComponentSymbolFields.Transitive].AsBool();
122 set => this.Set((int)ComponentSymbolFields.Transitive, value);
123 }
124
125 public bool UninstallWhenSuperseded
126 {
127 get => this.Fields[(int)ComponentSymbolFields.UninstallWhenSuperseded].AsBool();
128 set => this.Set((int)ComponentSymbolFields.UninstallWhenSuperseded, value);
129 }
130
131 public bool Win64
132 {
133 get => this.Fields[(int)ComponentSymbolFields.Win64].AsBool();
134 set => this.Set((int)ComponentSymbolFields.Win64, value);
135 }
136
137 public string Condition
138 {
139 get => (string)this.Fields[(int)ComponentSymbolFields.Condition];
140 set => this.Set((int)ComponentSymbolFields.Condition, value);
141 }
142
143 public string KeyPath
144 {
145 get => (string)this.Fields[(int)ComponentSymbolFields.KeyPath];
146 set => this.Set((int)ComponentSymbolFields.KeyPath, value);
147 }
148
149 public ComponentKeyPathType KeyPathType
150 {
151 get => (ComponentKeyPathType)this.Fields[(int)ComponentSymbolFields.KeyPathType].AsNumber();
152 set => this.Set((int)ComponentSymbolFields.KeyPathType, (int)value);
153 }
154 }
155} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ConditionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ConditionSymbol.cs
new file mode 100644
index 00000000..3a94ebb1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ConditionSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Condition = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Condition,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ConditionSymbolFields.FeatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ConditionSymbolFields.Level), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ConditionSymbolFields.Condition), IntermediateFieldType.String),
16 },
17 typeof(ConditionSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum ConditionSymbolFields
24 {
25 FeatureRef,
26 Level,
27 Condition,
28 }
29
30 public class ConditionSymbol : IntermediateSymbol
31 {
32 public ConditionSymbol() : base(SymbolDefinitions.Condition, null, null)
33 {
34 }
35
36 public ConditionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Condition, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[ConditionSymbolFields index] => this.Fields[(int)index];
41
42 public string FeatureRef
43 {
44 get => (string)this.Fields[(int)ConditionSymbolFields.FeatureRef];
45 set => this.Set((int)ConditionSymbolFields.FeatureRef, value);
46 }
47
48 public int Level
49 {
50 get => (int)this.Fields[(int)ConditionSymbolFields.Level];
51 set => this.Set((int)ConditionSymbolFields.Level, value);
52 }
53
54 public string Condition
55 {
56 get => (string)this.Fields[(int)ConditionSymbolFields.Condition];
57 set => this.Set((int)ConditionSymbolFields.Condition, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ControlConditionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ControlConditionSymbol.cs
new file mode 100644
index 00000000..cc5f2d74
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ControlConditionSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ControlCondition = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ControlCondition,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ControlConditionSymbolFields.DialogRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ControlConditionSymbolFields.ControlRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ControlConditionSymbolFields.Action), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ControlConditionSymbolFields.Condition), IntermediateFieldType.String),
17 },
18 typeof(ControlConditionSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ControlConditionSymbolFields
25 {
26 DialogRef,
27 ControlRef,
28 Action,
29 Condition,
30 }
31
32 public class ControlConditionSymbol : IntermediateSymbol
33 {
34 public ControlConditionSymbol() : base(SymbolDefinitions.ControlCondition, null, null)
35 {
36 }
37
38 public ControlConditionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ControlCondition, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ControlConditionSymbolFields index] => this.Fields[(int)index];
43
44 public string DialogRef
45 {
46 get => (string)this.Fields[(int)ControlConditionSymbolFields.DialogRef];
47 set => this.Set((int)ControlConditionSymbolFields.DialogRef, value);
48 }
49
50 public string ControlRef
51 {
52 get => (string)this.Fields[(int)ControlConditionSymbolFields.ControlRef];
53 set => this.Set((int)ControlConditionSymbolFields.ControlRef, value);
54 }
55
56 public string Action
57 {
58 get => (string)this.Fields[(int)ControlConditionSymbolFields.Action];
59 set => this.Set((int)ControlConditionSymbolFields.Action, value);
60 }
61
62 public string Condition
63 {
64 get => (string)this.Fields[(int)ControlConditionSymbolFields.Condition];
65 set => this.Set((int)ControlConditionSymbolFields.Condition, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ControlEventSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ControlEventSymbol.cs
new file mode 100644
index 00000000..3cf6da53
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ControlEventSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ControlEvent = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ControlEvent,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.DialogRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.ControlRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.Event), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.Argument), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.Condition), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ControlEventSymbolFields.Ordering), IntermediateFieldType.Number),
19 },
20 typeof(ControlEventSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum ControlEventSymbolFields
27 {
28 DialogRef,
29 ControlRef,
30 Event,
31 Argument,
32 Condition,
33 Ordering,
34 }
35
36 public class ControlEventSymbol : IntermediateSymbol
37 {
38 public ControlEventSymbol() : base(SymbolDefinitions.ControlEvent, null, null)
39 {
40 }
41
42 public ControlEventSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ControlEvent, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[ControlEventSymbolFields index] => this.Fields[(int)index];
47
48 public string DialogRef
49 {
50 get => (string)this.Fields[(int)ControlEventSymbolFields.DialogRef];
51 set => this.Set((int)ControlEventSymbolFields.DialogRef, value);
52 }
53
54 public string ControlRef
55 {
56 get => (string)this.Fields[(int)ControlEventSymbolFields.ControlRef];
57 set => this.Set((int)ControlEventSymbolFields.ControlRef, value);
58 }
59
60 public string Event
61 {
62 get => (string)this.Fields[(int)ControlEventSymbolFields.Event];
63 set => this.Set((int)ControlEventSymbolFields.Event, value);
64 }
65
66 public string Argument
67 {
68 get => (string)this.Fields[(int)ControlEventSymbolFields.Argument];
69 set => this.Set((int)ControlEventSymbolFields.Argument, value);
70 }
71
72 public string Condition
73 {
74 get => (string)this.Fields[(int)ControlEventSymbolFields.Condition];
75 set => this.Set((int)ControlEventSymbolFields.Condition, value);
76 }
77
78 public int? Ordering
79 {
80 get => (int?)this.Fields[(int)ControlEventSymbolFields.Ordering];
81 set => this.Set((int)ControlEventSymbolFields.Ordering, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ControlSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ControlSymbol.cs
new file mode 100644
index 00000000..732566d5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ControlSymbol.cs
@@ -0,0 +1,303 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Control = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Control,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ControlSymbolFields.DialogRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Control), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Type), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ControlSymbolFields.X), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Y), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Width), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Height), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Attributes), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Enabled), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Indirect), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Integer), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(ControlSymbolFields.LeftScroll), IntermediateFieldType.Bool),
25 new IntermediateFieldDefinition(nameof(ControlSymbolFields.RightAligned), IntermediateFieldType.Bool),
26 new IntermediateFieldDefinition(nameof(ControlSymbolFields.RightToLeft), IntermediateFieldType.Bool),
27 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Sunken), IntermediateFieldType.Bool),
28 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Visible), IntermediateFieldType.Bool),
29 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Property), IntermediateFieldType.String),
30 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Text), IntermediateFieldType.String),
31 new IntermediateFieldDefinition(nameof(ControlSymbolFields.NextControlRef), IntermediateFieldType.String),
32 new IntermediateFieldDefinition(nameof(ControlSymbolFields.Help), IntermediateFieldType.String),
33 new IntermediateFieldDefinition(nameof(ControlSymbolFields.TrackDiskSpace), IntermediateFieldType.Bool),
34 new IntermediateFieldDefinition(nameof(ControlSymbolFields.SourceFile), IntermediateFieldType.Path),
35 },
36 typeof(ControlSymbol));
37 }
38}
39
40namespace WixToolset.Data.Symbols
41{
42 public enum ControlSymbolFields
43 {
44 DialogRef,
45 Control,
46 Type,
47 X,
48 Y,
49 Width,
50 Height,
51 Attributes,
52 Enabled,
53 Indirect,
54 Integer,
55 LeftScroll,
56 RightAligned,
57 RightToLeft,
58 Sunken,
59 Visible,
60 Property,
61 Text,
62 NextControlRef,
63 Help,
64 TrackDiskSpace,
65 SourceFile,
66 }
67
68 public class ControlSymbol : IntermediateSymbol
69 {
70 public ControlSymbol() : base(SymbolDefinitions.Control, null, null)
71 {
72 }
73
74 public ControlSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Control, sourceLineNumber, id)
75 {
76 }
77
78 public IntermediateField this[ControlSymbolFields index] => this.Fields[(int)index];
79
80 public string DialogRef
81 {
82 get => (string)this.Fields[(int)ControlSymbolFields.DialogRef];
83 set => this.Set((int)ControlSymbolFields.DialogRef, value);
84 }
85
86 public string Control
87 {
88 get => (string)this.Fields[(int)ControlSymbolFields.Control];
89 set => this.Set((int)ControlSymbolFields.Control, value);
90 }
91
92 public string Type
93 {
94 get => (string)this.Fields[(int)ControlSymbolFields.Type];
95 set => this.Set((int)ControlSymbolFields.Type, value);
96 }
97
98 public int X
99 {
100 get => (int)this.Fields[(int)ControlSymbolFields.X];
101 set => this.Set((int)ControlSymbolFields.X, value);
102 }
103
104 public int Y
105 {
106 get => (int)this.Fields[(int)ControlSymbolFields.Y];
107 set => this.Set((int)ControlSymbolFields.Y, value);
108 }
109
110 public int Width
111 {
112 get => (int)this.Fields[(int)ControlSymbolFields.Width];
113 set => this.Set((int)ControlSymbolFields.Width, value);
114 }
115
116 public int Height
117 {
118 get => (int)this.Fields[(int)ControlSymbolFields.Height];
119 set => this.Set((int)ControlSymbolFields.Height, value);
120 }
121
122 public int? Attributes
123 {
124 get => (int?)this.Fields[(int)ControlSymbolFields.Attributes];
125 set => this.Set((int)ControlSymbolFields.Attributes, value);
126 }
127
128 public bool Enabled
129 {
130 get => this.Fields[(int)ControlSymbolFields.Enabled].AsBool();
131 set => this.Set((int)ControlSymbolFields.Enabled, value);
132 }
133
134 public bool Indirect
135 {
136 get => this.Fields[(int)ControlSymbolFields.Indirect].AsBool();
137 set => this.Set((int)ControlSymbolFields.Indirect, value);
138 }
139
140 public bool Integer
141 {
142 get => this.Fields[(int)ControlSymbolFields.Integer].AsBool();
143 set => this.Set((int)ControlSymbolFields.Integer, value);
144 }
145 /*
146 /// <summary>PictureButton control</summary>
147 public bool Bitmap
148 {
149 get => this.Fields[(int)ControlSymbolFields.Bitmap].AsBool();
150 set => this.Set((int)ControlSymbolFields.Bitmap, value);
151 }
152
153 /// <summary>RadioButton control</summary>
154 public bool Border
155 {
156 get => this.Fields[(int)ControlSymbolFields.Border].AsBool();
157 set => this.Set((int)ControlSymbolFields.Border, value);
158 }
159
160 /// <summary>ListBox and ComboBox control</summary>
161 public bool ComboList
162 {
163 get => this.Fields[(int)ControlSymbolFields.ComboList].AsBool();
164 set => this.Set((int)ControlSymbolFields.ComboList, value);
165 }
166
167 /// <summary>PushButton control</summary>
168 public bool ElevationShield
169 {
170 get => this.Fields[(int)ControlSymbolFields.ElevationShield].AsBool();
171 set => this.Set((int)ControlSymbolFields.ElevationShield, value);
172 }
173
174 /// <summary>PictureButton control</summary>
175 public bool FixedSize
176 {
177 get => this.Fields[(int)ControlSymbolFields.FixedSize].AsBool();
178 set => this.Set((int)ControlSymbolFields.FixedSize, value);
179 }
180
181 /// <summary>PictureButton control</summary>
182 public bool Icon
183 {
184 get => this.Fields[(int)ControlSymbolFields.Icon].AsBool();
185 set => this.Set((int)ControlSymbolFields.Icon, value);
186 }
187
188 /// <summary>PictureButton control</summary>
189 public bool Icon16
190 {
191 get => this.Fields[(int)ControlSymbolFields.Icon16].AsBool();
192 set => this.Set((int)ControlSymbolFields.Icon16, value);
193 }
194
195 /// <summary>PictureButton control</summary>
196 public bool Icon32
197 {
198 get => this.Fields[(int)ControlSymbolFields.Icon32].AsBool();
199 set => this.Set((int)ControlSymbolFields.Icon32, value);
200 }
201
202 /// <summary>PictureButton control</summary>
203 public bool Icon48
204 {
205 get => this.Fields[(int)ControlSymbolFields.Icon48].AsBool();
206 set => this.Set((int)ControlSymbolFields.Icon48, value);
207 }
208 */
209 public bool LeftScroll
210 {
211 get => this.Fields[(int)ControlSymbolFields.LeftScroll].AsBool();
212 set => this.Set((int)ControlSymbolFields.LeftScroll, value);
213 }
214 /*
215 /// <summary>PictureButton control</summary>
216 public bool PushLike
217 {
218 get => this.Fields[(int)ControlSymbolFields.PushLike].AsBool();
219 set => this.Set((int)ControlSymbolFields.PushLike, value);
220 }
221
222 /// <summary>Edit control</summary>
223 public bool Mulitline
224 {
225 get => this.Fields[(int)ControlSymbolFields.Mulitline].AsBool();
226 set => this.Set((int)ControlSymbolFields.Mulitline, value);
227 }
228 */
229 public bool RightAligned
230 {
231 get => this.Fields[(int)ControlSymbolFields.RightAligned].AsBool();
232 set => this.Set((int)ControlSymbolFields.RightAligned, value);
233 }
234
235 public bool RightToLeft
236 {
237 get => this.Fields[(int)ControlSymbolFields.RightToLeft].AsBool();
238 set => this.Set((int)ControlSymbolFields.RightToLeft, value);
239 }
240 /*
241 /// <summary>VolumeCostList control</summary>
242 public bool ShowRollbackCost
243 {
244 get => this.Fields[(int)ControlSymbolFields.ShowRollbackCost].AsBool();
245 set => this.Set((int)ControlSymbolFields.ShowRollbackCost, value);
246 }
247
248 /// <summary>ListBox and ComboBox control</summary>
249 public bool Sorted
250 {
251 get => this.Fields[(int)ControlSymbolFields.Sorted].AsBool();
252 set => this.Set((int)ControlSymbolFields.Sorted, value);
253 }
254 */
255 public bool Sunken
256 {
257 get => this.Fields[(int)ControlSymbolFields.Sunken].AsBool();
258 set => this.Set((int)ControlSymbolFields.Sunken, value);
259 }
260
261 public bool Visible
262 {
263 get => this.Fields[(int)ControlSymbolFields.Visible].AsBool();
264 set => this.Set((int)ControlSymbolFields.Visible, value);
265 }
266
267 public string Property
268 {
269 get => (string)this.Fields[(int)ControlSymbolFields.Property];
270 set => this.Set((int)ControlSymbolFields.Property, value);
271 }
272
273 public string Text
274 {
275 get => (string)this.Fields[(int)ControlSymbolFields.Text];
276 set => this.Set((int)ControlSymbolFields.Text, value);
277 }
278
279 public string NextControlRef
280 {
281 get => (string)this.Fields[(int)ControlSymbolFields.NextControlRef];
282 set => this.Set((int)ControlSymbolFields.NextControlRef, value);
283 }
284
285 public string Help
286 {
287 get => (string)this.Fields[(int)ControlSymbolFields.Help];
288 set => this.Set((int)ControlSymbolFields.Help, value);
289 }
290
291 public bool TrackDiskSpace
292 {
293 get => this.Fields[(int)ControlSymbolFields.TrackDiskSpace].AsBool();
294 set => this.Set((int)ControlSymbolFields.TrackDiskSpace, value);
295 }
296
297 public IntermediateFieldPathValue SourceFile
298 {
299 get => this.Fields[(int)ControlSymbolFields.SourceFile].AsPath();
300 set => this.Set((int)ControlSymbolFields.SourceFile, value);
301 }
302 }
303} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/CreateFolderSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/CreateFolderSymbol.cs
new file mode 100644
index 00000000..2b282266
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/CreateFolderSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition CreateFolder = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.CreateFolder,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(CreateFolderSymbolFields.DirectoryRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(CreateFolderSymbolFields.ComponentRef), IntermediateFieldType.String),
15 },
16 typeof(CreateFolderSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum CreateFolderSymbolFields
23 {
24 DirectoryRef,
25 ComponentRef,
26 }
27
28 public class CreateFolderSymbol : IntermediateSymbol
29 {
30 public CreateFolderSymbol() : base(SymbolDefinitions.CreateFolder, null, null)
31 {
32 }
33
34 public CreateFolderSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.CreateFolder, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[CreateFolderSymbolFields index] => this.Fields[(int)index];
39
40 public string DirectoryRef
41 {
42 get => (string)this.Fields[(int)CreateFolderSymbolFields.DirectoryRef];
43 set => this.Set((int)CreateFolderSymbolFields.DirectoryRef, value);
44 }
45
46 public string ComponentRef
47 {
48 get => (string)this.Fields[(int)CreateFolderSymbolFields.ComponentRef];
49 set => this.Set((int)CreateFolderSymbolFields.ComponentRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/CustomActionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/CustomActionSymbol.cs
new file mode 100644
index 00000000..1180dab4
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/CustomActionSymbol.cs
@@ -0,0 +1,168 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition CustomAction = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.CustomAction,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.ExecutionType), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Source), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.SourceType), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Target), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.TargetType), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Async), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Hidden), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.IgnoreResult), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Impersonate), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.PatchUninstall), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.TSAware), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.Win64), IntermediateFieldType.Bool),
25 new IntermediateFieldDefinition(nameof(CustomActionSymbolFields.ScriptFile), IntermediateFieldType.Path),
26 },
27 typeof(CustomActionSymbol));
28 }
29}
30
31namespace WixToolset.Data.Symbols
32{
33 public enum CustomActionSymbolFields
34 {
35 ExecutionType,
36 Source,
37 SourceType,
38 Target,
39 TargetType,
40 Async,
41 Hidden,
42 IgnoreResult,
43 Impersonate,
44 PatchUninstall,
45 TSAware,
46 Win64,
47 ScriptFile
48 }
49
50 public enum CustomActionExecutionType
51 {
52 Immediate,
53 FirstSequence = 256,
54 OncePerProcess = 512,
55 ClientRepeat = 768,
56 Deferred = 1024,
57 Rollback = 1280,
58 Commit = 1536,
59 }
60
61 public enum CustomActionSourceType
62 {
63 Binary,
64 File = 0x10,
65 Directory = 0x20,
66 Property = 0x30,
67 }
68
69 public enum CustomActionTargetType
70 {
71 Dll = 1,
72 Exe = 2,
73 TextData = 3,
74 JScript = 5,
75 VBScript = 6,
76 }
77
78 public class CustomActionSymbol : IntermediateSymbol
79 {
80 public CustomActionSymbol() : base(SymbolDefinitions.CustomAction, null, null)
81 {
82 }
83
84 public CustomActionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.CustomAction, sourceLineNumber, id)
85 {
86 }
87
88 public IntermediateField this[CustomActionSymbolFields index] => this.Fields[(int)index];
89
90 public CustomActionExecutionType ExecutionType
91 {
92 get => (CustomActionExecutionType)this.Fields[(int)CustomActionSymbolFields.ExecutionType].AsNumber();
93 set => this.Set((int)CustomActionSymbolFields.ExecutionType, (int)value);
94 }
95
96 public string Source
97 {
98 get => (string)this.Fields[(int)CustomActionSymbolFields.Source];
99 set => this.Set((int)CustomActionSymbolFields.Source, value);
100 }
101
102 public CustomActionSourceType SourceType
103 {
104 get => (CustomActionSourceType)this.Fields[(int)CustomActionSymbolFields.SourceType].AsNumber();
105 set => this.Set((int)CustomActionSymbolFields.SourceType, (int)value);
106 }
107
108 public string Target
109 {
110 get => (string)this.Fields[(int)CustomActionSymbolFields.Target];
111 set => this.Set((int)CustomActionSymbolFields.Target, value);
112 }
113
114 public CustomActionTargetType TargetType
115 {
116 get => (CustomActionTargetType)this.Fields[(int)CustomActionSymbolFields.TargetType].AsNumber();
117 set => this.Set((int)CustomActionSymbolFields.TargetType, (int)value);
118 }
119
120 public bool Async
121 {
122 get => this.Fields[(int)CustomActionSymbolFields.Async].AsBool();
123 set => this.Set((int)CustomActionSymbolFields.Async, value);
124 }
125
126 public bool Hidden
127 {
128 get => this.Fields[(int)CustomActionSymbolFields.Hidden].AsBool();
129 set => this.Set((int)CustomActionSymbolFields.Hidden, value);
130 }
131
132 public bool IgnoreResult
133 {
134 get => this.Fields[(int)CustomActionSymbolFields.IgnoreResult].AsBool();
135 set => this.Set((int)CustomActionSymbolFields.IgnoreResult, value);
136 }
137
138 public bool Impersonate
139 {
140 get => this.Fields[(int)CustomActionSymbolFields.Impersonate].AsBool();
141 set => this.Set((int)CustomActionSymbolFields.Impersonate, value);
142 }
143
144 public bool PatchUninstall
145 {
146 get => this.Fields[(int)CustomActionSymbolFields.PatchUninstall].AsBool();
147 set => this.Set((int)CustomActionSymbolFields.PatchUninstall, value);
148 }
149
150 public bool TSAware
151 {
152 get => this.Fields[(int)CustomActionSymbolFields.TSAware].AsBool();
153 set => this.Set((int)CustomActionSymbolFields.TSAware, value);
154 }
155
156 public bool Win64
157 {
158 get => this.Fields[(int)CustomActionSymbolFields.Win64].AsBool();
159 set => this.Set((int)CustomActionSymbolFields.Win64, value);
160 }
161
162 public IntermediateFieldPathValue ScriptFile
163 {
164 get => this.Fields[(int)CustomActionSymbolFields.ScriptFile].AsPath();
165 set => this.Set((int)CustomActionSymbolFields.ScriptFile, value);
166 }
167 }
168}
diff --git a/src/api/wix/WixToolset.Data/Symbols/DialogSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/DialogSymbol.cs
new file mode 100644
index 00000000..ee030405
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/DialogSymbol.cs
@@ -0,0 +1,188 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Dialog = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Dialog,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(DialogSymbolFields.HCentering), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(DialogSymbolFields.VCentering), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Width), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Height), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(DialogSymbolFields.CustomPalette), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(DialogSymbolFields.ErrorDialog), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Visible), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Modal), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(DialogSymbolFields.KeepModeless), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(DialogSymbolFields.LeftScroll), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Minimize), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(DialogSymbolFields.RightAligned), IntermediateFieldType.Bool),
25 new IntermediateFieldDefinition(nameof(DialogSymbolFields.RightToLeft), IntermediateFieldType.Bool),
26 new IntermediateFieldDefinition(nameof(DialogSymbolFields.SystemModal), IntermediateFieldType.Bool),
27 new IntermediateFieldDefinition(nameof(DialogSymbolFields.TrackDiskSpace), IntermediateFieldType.Bool),
28 new IntermediateFieldDefinition(nameof(DialogSymbolFields.Title), IntermediateFieldType.String),
29 new IntermediateFieldDefinition(nameof(DialogSymbolFields.FirstControlRef), IntermediateFieldType.String),
30 new IntermediateFieldDefinition(nameof(DialogSymbolFields.DefaultControlRef), IntermediateFieldType.String),
31 new IntermediateFieldDefinition(nameof(DialogSymbolFields.CancelControlRef), IntermediateFieldType.String),
32 },
33 typeof(DialogSymbol));
34 }
35}
36
37namespace WixToolset.Data.Symbols
38{
39 public enum DialogSymbolFields
40 {
41 HCentering,
42 VCentering,
43 Width,
44 Height,
45 CustomPalette,
46 ErrorDialog,
47 Visible,
48 Modal,
49 KeepModeless,
50 LeftScroll,
51 Minimize,
52 RightAligned,
53 RightToLeft,
54 SystemModal,
55 TrackDiskSpace,
56 Title,
57 FirstControlRef,
58 DefaultControlRef,
59 CancelControlRef,
60 }
61
62 public class DialogSymbol : IntermediateSymbol
63 {
64 public DialogSymbol() : base(SymbolDefinitions.Dialog, null, null)
65 {
66 }
67
68 public DialogSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Dialog, sourceLineNumber, id)
69 {
70 }
71
72 public IntermediateField this[DialogSymbolFields index] => this.Fields[(int)index];
73
74 public int HCentering
75 {
76 get => (int)this.Fields[(int)DialogSymbolFields.HCentering];
77 set => this.Set((int)DialogSymbolFields.HCentering, value);
78 }
79
80 public int VCentering
81 {
82 get => (int)this.Fields[(int)DialogSymbolFields.VCentering];
83 set => this.Set((int)DialogSymbolFields.VCentering, value);
84 }
85
86 public int Width
87 {
88 get => (int)this.Fields[(int)DialogSymbolFields.Width];
89 set => this.Set((int)DialogSymbolFields.Width, value);
90 }
91
92 public int Height
93 {
94 get => (int)this.Fields[(int)DialogSymbolFields.Height];
95 set => this.Set((int)DialogSymbolFields.Height, value);
96 }
97
98 public bool CustomPalette
99 {
100 get => this.Fields[(int)DialogSymbolFields.CustomPalette].AsBool();
101 set => this.Set((int)DialogSymbolFields.CustomPalette, value);
102 }
103
104 public bool ErrorDialog
105 {
106 get => this.Fields[(int)DialogSymbolFields.ErrorDialog].AsBool();
107 set => this.Set((int)DialogSymbolFields.ErrorDialog, value);
108 }
109
110 public bool Visible
111 {
112 get => this.Fields[(int)DialogSymbolFields.Visible].AsBool();
113 set => this.Set((int)DialogSymbolFields.Visible, value);
114 }
115
116 public bool Modal
117 {
118 get => this.Fields[(int)DialogSymbolFields.Modal].AsBool();
119 set => this.Set((int)DialogSymbolFields.Modal, value);
120 }
121
122 public bool KeepModeless
123 {
124 get => this.Fields[(int)DialogSymbolFields.KeepModeless].AsBool();
125 set => this.Set((int)DialogSymbolFields.KeepModeless, value);
126 }
127
128 public bool LeftScroll
129 {
130 get => this.Fields[(int)DialogSymbolFields.LeftScroll].AsBool();
131 set => this.Set((int)DialogSymbolFields.LeftScroll, value);
132 }
133
134 public bool Minimize
135 {
136 get => this.Fields[(int)DialogSymbolFields.Minimize].AsBool();
137 set => this.Set((int)DialogSymbolFields.Minimize, value);
138 }
139
140 public bool RightAligned
141 {
142 get => this.Fields[(int)DialogSymbolFields.RightAligned].AsBool();
143 set => this.Set((int)DialogSymbolFields.RightAligned, value);
144 }
145
146 public bool RightToLeft
147 {
148 get => this.Fields[(int)DialogSymbolFields.RightToLeft].AsBool();
149 set => this.Set((int)DialogSymbolFields.RightToLeft, value);
150 }
151
152 public bool TrackDiskSpace
153 {
154 get => this.Fields[(int)DialogSymbolFields.TrackDiskSpace].AsBool();
155 set => this.Set((int)DialogSymbolFields.TrackDiskSpace, value);
156 }
157
158 public bool SystemModal
159 {
160 get => this.Fields[(int)DialogSymbolFields.SystemModal].AsBool();
161 set => this.Set((int)DialogSymbolFields.SystemModal, value);
162 }
163
164 public string Title
165 {
166 get => (string)this.Fields[(int)DialogSymbolFields.Title];
167 set => this.Set((int)DialogSymbolFields.Title, value);
168 }
169
170 public string FirstControlRef
171 {
172 get => (string)this.Fields[(int)DialogSymbolFields.FirstControlRef];
173 set => this.Set((int)DialogSymbolFields.FirstControlRef, value);
174 }
175
176 public string DefaultControlRef
177 {
178 get => (string)this.Fields[(int)DialogSymbolFields.DefaultControlRef];
179 set => this.Set((int)DialogSymbolFields.DefaultControlRef, value);
180 }
181
182 public string CancelControlRef
183 {
184 get => (string)this.Fields[(int)DialogSymbolFields.CancelControlRef];
185 set => this.Set((int)DialogSymbolFields.CancelControlRef, value);
186 }
187 }
188} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/DirectorySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/DirectorySymbol.cs
new file mode 100644
index 00000000..209f5ca1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/DirectorySymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Directory = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Directory,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.ParentDirectoryRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.ShortName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.SourceName), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.SourceShortName), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(DirectorySymbolFields.ComponentGuidGenerationSeed), IntermediateFieldType.String),
19 },
20 typeof(DirectorySymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum DirectorySymbolFields
27 {
28 ParentDirectoryRef,
29 Name,
30 ShortName,
31 SourceName,
32 SourceShortName,
33 ComponentGuidGenerationSeed,
34 }
35
36 public class DirectorySymbol : IntermediateSymbol
37 {
38 public DirectorySymbol() : base(SymbolDefinitions.Directory, null, null)
39 {
40 }
41
42 public DirectorySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Directory, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[DirectorySymbolFields index] => this.Fields[(int)index];
47
48 public string ParentDirectoryRef
49 {
50 get => (string)this.Fields[(int)DirectorySymbolFields.ParentDirectoryRef];
51 set => this.Set((int)DirectorySymbolFields.ParentDirectoryRef, value);
52 }
53
54 public string Name
55 {
56 get => (string)this.Fields[(int)DirectorySymbolFields.Name];
57 set => this.Set((int)DirectorySymbolFields.Name, value);
58 }
59
60 public string ShortName
61 {
62 get => (string)this.Fields[(int)DirectorySymbolFields.ShortName];
63 set => this.Set((int)DirectorySymbolFields.ShortName, value);
64 }
65
66 public string SourceName
67 {
68 get => (string)this.Fields[(int)DirectorySymbolFields.SourceName];
69 set => this.Set((int)DirectorySymbolFields.SourceName, value);
70 }
71
72 public string SourceShortName
73 {
74 get => (string)this.Fields[(int)DirectorySymbolFields.SourceShortName];
75 set => this.Set((int)DirectorySymbolFields.SourceShortName, value);
76 }
77
78 public string ComponentGuidGenerationSeed
79 {
80 get => (string)this.Fields[(int)DirectorySymbolFields.ComponentGuidGenerationSeed];
81 set => this.Set((int)DirectorySymbolFields.ComponentGuidGenerationSeed, value);
82 }
83 }
84}
diff --git a/src/api/wix/WixToolset.Data/Symbols/DrLocatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/DrLocatorSymbol.cs
new file mode 100644
index 00000000..e403c61c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/DrLocatorSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition DrLocator = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.DrLocator,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(DrLocatorSymbolFields.SignatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(DrLocatorSymbolFields.Parent), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(DrLocatorSymbolFields.Path), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(DrLocatorSymbolFields.Depth), IntermediateFieldType.Number),
17 },
18 typeof(DrLocatorSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum DrLocatorSymbolFields
25 {
26 SignatureRef,
27 Parent,
28 Path,
29 Depth,
30 }
31
32 public class DrLocatorSymbol : IntermediateSymbol
33 {
34 public DrLocatorSymbol() : base(SymbolDefinitions.DrLocator, null, null)
35 {
36 }
37
38 public DrLocatorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.DrLocator, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[DrLocatorSymbolFields index] => this.Fields[(int)index];
43
44 public string SignatureRef
45 {
46 get => (string)this.Fields[(int)DrLocatorSymbolFields.SignatureRef];
47 set => this.Set((int)DrLocatorSymbolFields.SignatureRef, value);
48 }
49
50 public string Parent
51 {
52 get => (string)this.Fields[(int)DrLocatorSymbolFields.Parent];
53 set => this.Set((int)DrLocatorSymbolFields.Parent, value);
54 }
55
56 public string Path
57 {
58 get => (string)this.Fields[(int)DrLocatorSymbolFields.Path];
59 set => this.Set((int)DrLocatorSymbolFields.Path, value);
60 }
61
62 public int? Depth
63 {
64 get => (int?)this.Fields[(int)DrLocatorSymbolFields.Depth];
65 set => this.Set((int)DrLocatorSymbolFields.Depth, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/DuplicateFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/DuplicateFileSymbol.cs
new file mode 100644
index 00000000..f2d1d94f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/DuplicateFileSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition DuplicateFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.DuplicateFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(DuplicateFileSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(DuplicateFileSymbolFields.FileRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(DuplicateFileSymbolFields.DestinationName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(DuplicateFileSymbolFields.DestinationShortName), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(DuplicateFileSymbolFields.DestinationFolder), IntermediateFieldType.String),
18 },
19 typeof(DuplicateFileSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum DuplicateFileSymbolFields
26 {
27 ComponentRef,
28 FileRef,
29 DestinationName,
30 DestinationShortName,
31 DestinationFolder,
32 }
33
34 public class DuplicateFileSymbol : IntermediateSymbol
35 {
36 public DuplicateFileSymbol() : base(SymbolDefinitions.DuplicateFile, null, null)
37 {
38 }
39
40 public DuplicateFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.DuplicateFile, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[DuplicateFileSymbolFields index] => this.Fields[(int)index];
45
46 public string ComponentRef
47 {
48 get => (string)this.Fields[(int)DuplicateFileSymbolFields.ComponentRef];
49 set => this.Set((int)DuplicateFileSymbolFields.ComponentRef, value);
50 }
51
52 public string FileRef
53 {
54 get => (string)this.Fields[(int)DuplicateFileSymbolFields.FileRef];
55 set => this.Set((int)DuplicateFileSymbolFields.FileRef, value);
56 }
57
58 public string DestinationName
59 {
60 get => (string)this.Fields[(int)DuplicateFileSymbolFields.DestinationName];
61 set => this.Set((int)DuplicateFileSymbolFields.DestinationName, value);
62 }
63
64 public string DestinationShortName
65 {
66 get => (string)this.Fields[(int)DuplicateFileSymbolFields.DestinationShortName];
67 set => this.Set((int)DuplicateFileSymbolFields.DestinationShortName, value);
68 }
69
70 public string DestinationFolder
71 {
72 get => (string)this.Fields[(int)DuplicateFileSymbolFields.DestinationFolder];
73 set => this.Set((int)DuplicateFileSymbolFields.DestinationFolder, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/EnvironmentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/EnvironmentSymbol.cs
new file mode 100644
index 00000000..3fe12d4b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/EnvironmentSymbol.cs
@@ -0,0 +1,114 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Environment = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Environment,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Value), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Separator), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Action), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Part), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.Permanent), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.System), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(EnvironmentSymbolFields.ComponentRef), IntermediateFieldType.String),
21 },
22 typeof(EnvironmentSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum EnvironmentSymbolFields
29 {
30 Name,
31 Value,
32 Separator,
33 Action,
34 Part,
35 Permanent,
36 System,
37 ComponentRef,
38 }
39
40 public enum EnvironmentActionType
41 {
42 Set,
43 Create,
44 Remove
45 }
46
47 public enum EnvironmentPartType
48 {
49 All,
50 First,
51 Last
52 }
53
54 public class EnvironmentSymbol : IntermediateSymbol
55 {
56 public EnvironmentSymbol() : base(SymbolDefinitions.Environment, null, null)
57 {
58 }
59
60 public EnvironmentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Environment, sourceLineNumber, id)
61 {
62 }
63
64 public IntermediateField this[EnvironmentSymbolFields index] => this.Fields[(int)index];
65
66 public string Name
67 {
68 get => (string)this.Fields[(int)EnvironmentSymbolFields.Name];
69 set => this.Set((int)EnvironmentSymbolFields.Name, value);
70 }
71
72 public string Value
73 {
74 get => (string)this.Fields[(int)EnvironmentSymbolFields.Value];
75 set => this.Set((int)EnvironmentSymbolFields.Value, value);
76 }
77
78 public string Separator
79 {
80 get => (string)this.Fields[(int)EnvironmentSymbolFields.Separator];
81 set => this.Set((int)EnvironmentSymbolFields.Separator, value);
82 }
83
84 public EnvironmentActionType? Action
85 {
86 get => (EnvironmentActionType?)this.Fields[(int)EnvironmentSymbolFields.Action].AsNullableNumber();
87 set => this.Set((int)EnvironmentSymbolFields.Action, (int?)value);
88 }
89
90 public EnvironmentPartType? Part
91 {
92 get => (EnvironmentPartType?)this.Fields[(int)EnvironmentSymbolFields.Part].AsNullableNumber();
93 set => this.Set((int)EnvironmentSymbolFields.Part, (int?)value);
94 }
95
96 public bool Permanent
97 {
98 get => this.Fields[(int)EnvironmentSymbolFields.Permanent].AsBool();
99 set => this.Set((int)EnvironmentSymbolFields.Permanent, value);
100 }
101
102 public bool System
103 {
104 get => this.Fields[(int)EnvironmentSymbolFields.System].AsBool();
105 set => this.Set((int)EnvironmentSymbolFields.System, value);
106 }
107
108 public string ComponentRef
109 {
110 get => (string)this.Fields[(int)EnvironmentSymbolFields.ComponentRef];
111 set => this.Set((int)EnvironmentSymbolFields.ComponentRef, value);
112 }
113 }
114} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ErrorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ErrorSymbol.cs
new file mode 100644
index 00000000..d2994598
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ErrorSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Error = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Error,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ErrorSymbolFields.Message), IntermediateFieldType.String),
14 },
15 typeof(ErrorSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum ErrorSymbolFields
22 {
23 Message,
24 }
25
26 public class ErrorSymbol : IntermediateSymbol
27 {
28 public ErrorSymbol() : base(SymbolDefinitions.Error, null, null)
29 {
30 }
31
32 public ErrorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Error, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[ErrorSymbolFields index] => this.Fields[(int)index];
37
38 public string Message
39 {
40 get => (string)this.Fields[(int)ErrorSymbolFields.Message];
41 set => this.Set((int)ErrorSymbolFields.Message, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/EventMappingSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/EventMappingSymbol.cs
new file mode 100644
index 00000000..fec7be3b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/EventMappingSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition EventMapping = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.EventMapping,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(EventMappingSymbolFields.DialogRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(EventMappingSymbolFields.ControlRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(EventMappingSymbolFields.Event), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(EventMappingSymbolFields.Attribute), IntermediateFieldType.String),
17 },
18 typeof(EventMappingSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum EventMappingSymbolFields
25 {
26 DialogRef,
27 ControlRef,
28 Event,
29 Attribute,
30 }
31
32 public class EventMappingSymbol : IntermediateSymbol
33 {
34 public EventMappingSymbol() : base(SymbolDefinitions.EventMapping, null, null)
35 {
36 }
37
38 public EventMappingSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.EventMapping, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[EventMappingSymbolFields index] => this.Fields[(int)index];
43
44 public string DialogRef
45 {
46 get => (string)this.Fields[(int)EventMappingSymbolFields.DialogRef];
47 set => this.Set((int)EventMappingSymbolFields.DialogRef, value);
48 }
49
50 public string ControlRef
51 {
52 get => (string)this.Fields[(int)EventMappingSymbolFields.ControlRef];
53 set => this.Set((int)EventMappingSymbolFields.ControlRef, value);
54 }
55
56 public string Event
57 {
58 get => (string)this.Fields[(int)EventMappingSymbolFields.Event];
59 set => this.Set((int)EventMappingSymbolFields.Event, value);
60 }
61
62 public string Attribute
63 {
64 get => (string)this.Fields[(int)EventMappingSymbolFields.Attribute];
65 set => this.Set((int)EventMappingSymbolFields.Attribute, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ExtensionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ExtensionSymbol.cs
new file mode 100644
index 00000000..b8806971
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ExtensionSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Extension = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Extension,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ExtensionSymbolFields.Extension), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ExtensionSymbolFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ExtensionSymbolFields.ProgIdRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ExtensionSymbolFields.MimeRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ExtensionSymbolFields.FeatureRef), IntermediateFieldType.String),
18 },
19 typeof(ExtensionSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum ExtensionSymbolFields
26 {
27 Extension,
28 ComponentRef,
29 ProgIdRef,
30 MimeRef,
31 FeatureRef,
32 }
33
34 public class ExtensionSymbol : IntermediateSymbol
35 {
36 public ExtensionSymbol() : base(SymbolDefinitions.Extension, null, null)
37 {
38 }
39
40 public ExtensionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Extension, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[ExtensionSymbolFields index] => this.Fields[(int)index];
45
46 public string Extension
47 {
48 get => (string)this.Fields[(int)ExtensionSymbolFields.Extension];
49 set => this.Set((int)ExtensionSymbolFields.Extension, value);
50 }
51
52 public string ComponentRef
53 {
54 get => (string)this.Fields[(int)ExtensionSymbolFields.ComponentRef];
55 set => this.Set((int)ExtensionSymbolFields.ComponentRef, value);
56 }
57
58 public string ProgIdRef
59 {
60 get => (string)this.Fields[(int)ExtensionSymbolFields.ProgIdRef];
61 set => this.Set((int)ExtensionSymbolFields.ProgIdRef, value);
62 }
63
64 public string MimeRef
65 {
66 get => (string)this.Fields[(int)ExtensionSymbolFields.MimeRef];
67 set => this.Set((int)ExtensionSymbolFields.MimeRef, value);
68 }
69
70 public string FeatureRef
71 {
72 get => (string)this.Fields[(int)ExtensionSymbolFields.FeatureRef];
73 set => this.Set((int)ExtensionSymbolFields.FeatureRef, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ExternalFilesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ExternalFilesSymbol.cs
new file mode 100644
index 00000000..87888f0b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ExternalFilesSymbol.cs
@@ -0,0 +1,100 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ExternalFiles = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ExternalFiles,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.Family), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.FTK), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.FilePath), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.SymbolPaths), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.IgnoreOffsets), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.IgnoreLengths), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.RetainOffsets), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ExternalFilesSymbolFields.Order), IntermediateFieldType.Number),
21 },
22 typeof(ExternalFilesSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum ExternalFilesSymbolFields
29 {
30 Family,
31 FTK,
32 FilePath,
33 SymbolPaths,
34 IgnoreOffsets,
35 IgnoreLengths,
36 RetainOffsets,
37 Order,
38 }
39
40 public class ExternalFilesSymbol : IntermediateSymbol
41 {
42 public ExternalFilesSymbol() : base(SymbolDefinitions.ExternalFiles, null, null)
43 {
44 }
45
46 public ExternalFilesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ExternalFiles, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[ExternalFilesSymbolFields index] => this.Fields[(int)index];
51
52 public string Family
53 {
54 get => (string)this.Fields[(int)ExternalFilesSymbolFields.Family];
55 set => this.Set((int)ExternalFilesSymbolFields.Family, value);
56 }
57
58 public string FTK
59 {
60 get => (string)this.Fields[(int)ExternalFilesSymbolFields.FTK];
61 set => this.Set((int)ExternalFilesSymbolFields.FTK, value);
62 }
63
64 public string FilePath
65 {
66 get => (string)this.Fields[(int)ExternalFilesSymbolFields.FilePath];
67 set => this.Set((int)ExternalFilesSymbolFields.FilePath, value);
68 }
69
70 public string SymbolPaths
71 {
72 get => (string)this.Fields[(int)ExternalFilesSymbolFields.SymbolPaths];
73 set => this.Set((int)ExternalFilesSymbolFields.SymbolPaths, value);
74 }
75
76 public string IgnoreOffsets
77 {
78 get => (string)this.Fields[(int)ExternalFilesSymbolFields.IgnoreOffsets];
79 set => this.Set((int)ExternalFilesSymbolFields.IgnoreOffsets, value);
80 }
81
82 public string IgnoreLengths
83 {
84 get => (string)this.Fields[(int)ExternalFilesSymbolFields.IgnoreLengths];
85 set => this.Set((int)ExternalFilesSymbolFields.IgnoreLengths, value);
86 }
87
88 public string RetainOffsets
89 {
90 get => (string)this.Fields[(int)ExternalFilesSymbolFields.RetainOffsets];
91 set => this.Set((int)ExternalFilesSymbolFields.RetainOffsets, value);
92 }
93
94 public int Order
95 {
96 get => (int)this.Fields[(int)ExternalFilesSymbolFields.Order];
97 set => this.Set((int)ExternalFilesSymbolFields.Order, value);
98 }
99 }
100} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/FamilyFileRangesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/FamilyFileRangesSymbol.cs
new file mode 100644
index 00000000..84cd5b4b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/FamilyFileRangesSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition FamilyFileRanges = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.FamilyFileRanges,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(FamilyFileRangesSymbolFields.Family), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(FamilyFileRangesSymbolFields.FTK), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(FamilyFileRangesSymbolFields.RetainOffsets), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(FamilyFileRangesSymbolFields.RetainLengths), IntermediateFieldType.String),
17 },
18 typeof(FamilyFileRangesSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum FamilyFileRangesSymbolFields
25 {
26 Family,
27 FTK,
28 RetainOffsets,
29 RetainLengths,
30 }
31
32 public class FamilyFileRangesSymbol : IntermediateSymbol
33 {
34 public FamilyFileRangesSymbol() : base(SymbolDefinitions.FamilyFileRanges, null, null)
35 {
36 }
37
38 public FamilyFileRangesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.FamilyFileRanges, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[FamilyFileRangesSymbolFields index] => this.Fields[(int)index];
43
44 public string Family
45 {
46 get => (string)this.Fields[(int)FamilyFileRangesSymbolFields.Family];
47 set => this.Set((int)FamilyFileRangesSymbolFields.Family, value);
48 }
49
50 public string FTK
51 {
52 get => (string)this.Fields[(int)FamilyFileRangesSymbolFields.FTK];
53 set => this.Set((int)FamilyFileRangesSymbolFields.FTK, value);
54 }
55
56 public string RetainOffsets
57 {
58 get => (string)this.Fields[(int)FamilyFileRangesSymbolFields.RetainOffsets];
59 set => this.Set((int)FamilyFileRangesSymbolFields.RetainOffsets, value);
60 }
61
62 public string RetainLengths
63 {
64 get => (string)this.Fields[(int)FamilyFileRangesSymbolFields.RetainLengths];
65 set => this.Set((int)FamilyFileRangesSymbolFields.RetainLengths, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/FeatureComponentsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/FeatureComponentsSymbol.cs
new file mode 100644
index 00000000..af51daed
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/FeatureComponentsSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition FeatureComponents = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.FeatureComponents,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(FeatureComponentsSymbolFields.FeatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(FeatureComponentsSymbolFields.ComponentRef), IntermediateFieldType.String),
15 },
16 typeof(FeatureComponentsSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum FeatureComponentsSymbolFields
23 {
24 FeatureRef,
25 ComponentRef,
26 }
27
28 public class FeatureComponentsSymbol : IntermediateSymbol
29 {
30 public FeatureComponentsSymbol() : base(SymbolDefinitions.FeatureComponents, null, null)
31 {
32 }
33
34 public FeatureComponentsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.FeatureComponents, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[FeatureComponentsSymbolFields index] => this.Fields[(int)index];
39
40 public string FeatureRef
41 {
42 get => (string)this.Fields[(int)FeatureComponentsSymbolFields.FeatureRef];
43 set => this.Set((int)FeatureComponentsSymbolFields.FeatureRef, value);
44 }
45
46 public string ComponentRef
47 {
48 get => (string)this.Fields[(int)FeatureComponentsSymbolFields.ComponentRef];
49 set => this.Set((int)FeatureComponentsSymbolFields.ComponentRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/FeatureSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/FeatureSymbol.cs
new file mode 100644
index 00000000..67972b63
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/FeatureSymbol.cs
@@ -0,0 +1,129 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Feature = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Feature,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.ParentFeatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.Title), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.Description), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.Display), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.Level), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.DirectoryRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.DisallowAbsent), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.DisallowAdvertise), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.InstallDefault), IntermediateFieldType.Number),
22 new IntermediateFieldDefinition(nameof(FeatureSymbolFields.TypicalDefault), IntermediateFieldType.Number),
23 },
24 typeof(FeatureSymbol));
25 }
26}
27
28namespace WixToolset.Data.Symbols
29{
30 public enum FeatureSymbolFields
31 {
32 ParentFeatureRef,
33 Title,
34 Description,
35 Display,
36 Level,
37 DirectoryRef,
38 DisallowAbsent,
39 DisallowAdvertise,
40 InstallDefault,
41 TypicalDefault,
42 }
43
44 public enum FeatureInstallDefault
45 {
46 Local,
47 Source,
48 FollowParent,
49 }
50
51 public enum FeatureTypicalDefault
52 {
53 Install,
54 Advertise
55 }
56
57 public class FeatureSymbol : IntermediateSymbol
58 {
59 public FeatureSymbol() : base(SymbolDefinitions.Feature, null, null)
60 {
61 }
62
63 public FeatureSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Feature, sourceLineNumber, id)
64 {
65 }
66
67 public IntermediateField this[FeatureSymbolFields index] => this.Fields[(int)index];
68
69 public string ParentFeatureRef
70 {
71 get => (string)this.Fields[(int)FeatureSymbolFields.ParentFeatureRef];
72 set => this.Set((int)FeatureSymbolFields.ParentFeatureRef, value);
73 }
74
75 public string Title
76 {
77 get => (string)this.Fields[(int)FeatureSymbolFields.Title];
78 set => this.Set((int)FeatureSymbolFields.Title, value);
79 }
80
81 public string Description
82 {
83 get => (string)this.Fields[(int)FeatureSymbolFields.Description];
84 set => this.Set((int)FeatureSymbolFields.Description, value);
85 }
86
87 public int Display
88 {
89 get => (int)this.Fields[(int)FeatureSymbolFields.Display];
90 set => this.Set((int)FeatureSymbolFields.Display, value);
91 }
92
93 public int Level
94 {
95 get => (int)this.Fields[(int)FeatureSymbolFields.Level];
96 set => this.Set((int)FeatureSymbolFields.Level, value);
97 }
98
99 public string DirectoryRef
100 {
101 get => (string)this.Fields[(int)FeatureSymbolFields.DirectoryRef];
102 set => this.Set((int)FeatureSymbolFields.DirectoryRef, value);
103 }
104
105 public bool DisallowAbsent
106 {
107 get => this.Fields[(int)FeatureSymbolFields.DisallowAbsent].AsBool();
108 set => this.Set((int)FeatureSymbolFields.DisallowAbsent, value);
109 }
110
111 public bool DisallowAdvertise
112 {
113 get => this.Fields[(int)FeatureSymbolFields.DisallowAdvertise].AsBool();
114 set => this.Set((int)FeatureSymbolFields.DisallowAdvertise, value);
115 }
116
117 public FeatureInstallDefault InstallDefault
118 {
119 get => (FeatureInstallDefault)this.Fields[(int)FeatureSymbolFields.InstallDefault].AsNumber();
120 set => this.Set((int)FeatureSymbolFields.InstallDefault, (int)value);
121 }
122
123 public FeatureTypicalDefault TypicalDefault
124 {
125 get => (FeatureTypicalDefault)this.Fields[(int)FeatureSymbolFields.TypicalDefault].AsNumber();
126 set => this.Set((int)FeatureSymbolFields.TypicalDefault, (int)value);
127 }
128 }
129} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/FileSFPCatalogSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/FileSFPCatalogSymbol.cs
new file mode 100644
index 00000000..3abf2915
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/FileSFPCatalogSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition FileSFPCatalog = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.FileSFPCatalog,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(FileSFPCatalogSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(FileSFPCatalogSymbolFields.SFPCatalogRef), IntermediateFieldType.String),
15 },
16 typeof(FileSFPCatalogSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum FileSFPCatalogSymbolFields
23 {
24 FileRef,
25 SFPCatalogRef,
26 }
27
28 public class FileSFPCatalogSymbol : IntermediateSymbol
29 {
30 public FileSFPCatalogSymbol() : base(SymbolDefinitions.FileSFPCatalog, null, null)
31 {
32 }
33
34 public FileSFPCatalogSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.FileSFPCatalog, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[FileSFPCatalogSymbolFields index] => this.Fields[(int)index];
39
40 public string FileRef
41 {
42 get => (string)this.Fields[(int)FileSFPCatalogSymbolFields.FileRef];
43 set => this.Set((int)FileSFPCatalogSymbolFields.FileRef, value);
44 }
45
46 public string SFPCatalogRef
47 {
48 get => (string)this.Fields[(int)FileSFPCatalogSymbolFields.SFPCatalogRef];
49 set => this.Set((int)FileSFPCatalogSymbolFields.SFPCatalogRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/FileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/FileSymbol.cs
new file mode 100644
index 00000000..784b7846
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/FileSymbol.cs
@@ -0,0 +1,256 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition File = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.File,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(FileSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(FileSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(FileSymbolFields.ShortName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(FileSymbolFields.FileSize), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(FileSymbolFields.Version), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(FileSymbolFields.Language), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(FileSymbolFields.Attributes), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(FileSymbolFields.DirectoryRef), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(FileSymbolFields.DiskId), IntermediateFieldType.Number),
22 new IntermediateFieldDefinition(nameof(FileSymbolFields.Source), IntermediateFieldType.Path),
23
24 new IntermediateFieldDefinition(nameof(FileSymbolFields.FontTitle), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(FileSymbolFields.SelfRegCost), IntermediateFieldType.Number),
26 new IntermediateFieldDefinition(nameof(FileSymbolFields.BindPath), IntermediateFieldType.String),
27
28 new IntermediateFieldDefinition(nameof(FileSymbolFields.Sequence), IntermediateFieldType.Number),
29
30 new IntermediateFieldDefinition(nameof(FileSymbolFields.PatchGroup), IntermediateFieldType.Number),
31 new IntermediateFieldDefinition(nameof(FileSymbolFields.PatchAttributes), IntermediateFieldType.Number),
32 new IntermediateFieldDefinition(nameof(FileSymbolFields.DeltaPatchHeaderSource), IntermediateFieldType.String),
33
34 new IntermediateFieldDefinition(nameof(FileSymbolFields.RetainLengths), IntermediateFieldType.String),
35 new IntermediateFieldDefinition(nameof(FileSymbolFields.IgnoreOffsets), IntermediateFieldType.String),
36 new IntermediateFieldDefinition(nameof(FileSymbolFields.IgnoreLengths), IntermediateFieldType.String),
37 new IntermediateFieldDefinition(nameof(FileSymbolFields.RetainOffsets), IntermediateFieldType.String),
38 new IntermediateFieldDefinition(nameof(FileSymbolFields.SymbolPaths), IntermediateFieldType.String),
39 },
40 typeof(FileSymbol));
41 }
42}
43
44namespace WixToolset.Data.Symbols
45{
46 using System;
47
48 public enum FileSymbolFields
49 {
50 ComponentRef,
51 Name,
52 ShortName,
53 FileSize,
54 Version,
55 Language,
56 Attributes,
57 DirectoryRef,
58 DiskId,
59 Source,
60
61 FontTitle,
62 SelfRegCost,
63 BindPath,
64
65 Sequence,
66
67 PatchGroup,
68 PatchAttributes,
69 DeltaPatchHeaderSource,
70
71 RetainLengths,
72 IgnoreOffsets,
73 IgnoreLengths,
74 RetainOffsets,
75 SymbolPaths,
76 }
77
78 [Flags]
79 public enum FileSymbolAttributes : int
80 {
81 None = 0x0,
82 ReadOnly = 0x1,
83 Hidden = 0x2,
84 System = 0x4,
85 Vital = 0x8,
86 Compressed = 0x10,
87 Uncompressed = 0x20,
88 Checksum = 0x40,
89 }
90
91 /// <summary>
92 /// PatchAttribute values
93 /// </summary>
94 [Flags]
95 public enum PatchAttributeType
96 {
97 None = 0,
98
99 /// <summary>Prevents the updating of the file that is in fact changed in the upgraded image relative to the target images.</summary>
100 Ignore = 1,
101
102 /// <summary>Set if the entire file should be installed rather than creating a binary patch.</summary>
103 IncludeWholeFile = 2,
104
105 /// <summary>Set to indicate that the patch is non-vital.</summary>
106 AllowIgnoreOnError = 4,
107
108 /// <summary>Allowed bits.</summary>
109 Defined = Ignore | IncludeWholeFile | AllowIgnoreOnError
110 }
111
112 public class FileSymbol : IntermediateSymbol
113 {
114 public FileSymbol() : base(SymbolDefinitions.File, null, null)
115 {
116 }
117
118 public FileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.File, sourceLineNumber, id)
119 {
120 }
121
122 public IntermediateField this[FileSymbolFields index] => this.Fields[(int)index];
123
124 public string ComponentRef
125 {
126 get => (string)this.Fields[(int)FileSymbolFields.ComponentRef];
127 set => this.Set((int)FileSymbolFields.ComponentRef, value);
128 }
129
130 public string Name
131 {
132 get => (string)this.Fields[(int)FileSymbolFields.Name];
133 set => this.Set((int)FileSymbolFields.Name, value);
134 }
135
136 public string ShortName
137 {
138 get => (string)this.Fields[(int)FileSymbolFields.ShortName];
139 set => this.Set((int)FileSymbolFields.ShortName, value);
140 }
141
142 public int FileSize
143 {
144 get => (int)this.Fields[(int)FileSymbolFields.FileSize];
145 set => this.Set((int)FileSymbolFields.FileSize, value);
146 }
147
148 public string Version
149 {
150 get => (string)this.Fields[(int)FileSymbolFields.Version];
151 set => this.Set((int)FileSymbolFields.Version, value);
152 }
153
154 public string Language
155 {
156 get => (string)this.Fields[(int)FileSymbolFields.Language];
157 set => this.Set((int)FileSymbolFields.Language, value);
158 }
159
160 public FileSymbolAttributes Attributes
161 {
162 get => (FileSymbolAttributes)this.Fields[(int)FileSymbolFields.Attributes].AsNumber();
163 set => this.Set((int)FileSymbolFields.Attributes, (int)value);
164 }
165
166 public string DirectoryRef
167 {
168 get => (string)this.Fields[(int)FileSymbolFields.DirectoryRef];
169 set => this.Set((int)FileSymbolFields.DirectoryRef, value);
170 }
171
172 public int? DiskId
173 {
174 get => (int?)this.Fields[(int)FileSymbolFields.DiskId];
175 set => this.Set((int)FileSymbolFields.DiskId, value);
176 }
177
178 public IntermediateFieldPathValue Source
179 {
180 get => this.Fields[(int)FileSymbolFields.Source].AsPath();
181 set => this.Set((int)FileSymbolFields.Source, value);
182 }
183
184 public string FontTitle
185 {
186 get => (string)this.Fields[(int)FileSymbolFields.FontTitle];
187 set => this.Set((int)FileSymbolFields.FontTitle, value);
188 }
189
190 public int? SelfRegCost
191 {
192 get => (int?)this.Fields[(int)FileSymbolFields.SelfRegCost];
193 set => this.Set((int)FileSymbolFields.SelfRegCost, value);
194 }
195
196 public string BindPath
197 {
198 get => (string)this.Fields[(int)FileSymbolFields.BindPath];
199 set => this.Set((int)FileSymbolFields.BindPath, value);
200 }
201
202 public int Sequence
203 {
204 get => (int)this.Fields[(int)FileSymbolFields.Sequence];
205 set => this.Set((int)FileSymbolFields.Sequence, value);
206 }
207
208 public int? PatchGroup
209 {
210 get => (int?)this.Fields[(int)FileSymbolFields.PatchGroup];
211 set => this.Set((int)FileSymbolFields.PatchGroup, value);
212 }
213
214 public PatchAttributeType? PatchAttributes
215 {
216 get => (PatchAttributeType?)this.Fields[(int)FileSymbolFields.PatchAttributes].AsNullableNumber();
217 set => this.Set((int)FileSymbolFields.PatchAttributes, (int?)value);
218 }
219
220 public string DeltaPatchHeaderSource
221 {
222 get => (string)this.Fields[(int)FileSymbolFields.DeltaPatchHeaderSource];
223 set => this.Set((int)FileSymbolFields.DeltaPatchHeaderSource, value);
224 }
225
226 public string RetainLengths
227 {
228 get => (string)this.Fields[(int)FileSymbolFields.RetainLengths];
229 set => this.Set((int)FileSymbolFields.RetainLengths, value);
230 }
231
232 public string IgnoreOffsets
233 {
234 get => (string)this.Fields[(int)FileSymbolFields.IgnoreOffsets];
235 set => this.Set((int)FileSymbolFields.IgnoreOffsets, value);
236 }
237
238 public string IgnoreLengths
239 {
240 get => (string)this.Fields[(int)FileSymbolFields.IgnoreLengths];
241 set => this.Set((int)FileSymbolFields.IgnoreLengths, value);
242 }
243
244 public string RetainOffsets
245 {
246 get => (string)this.Fields[(int)FileSymbolFields.RetainOffsets];
247 set => this.Set((int)FileSymbolFields.RetainOffsets, value);
248 }
249
250 public string SymbolPaths
251 {
252 get => (string)this.Fields[(int)FileSymbolFields.SymbolPaths];
253 set => this.Set((int)FileSymbolFields.SymbolPaths, value);
254 }
255 }
256}
diff --git a/src/api/wix/WixToolset.Data/Symbols/IconSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/IconSymbol.cs
new file mode 100644
index 00000000..f3c825ec
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/IconSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Icon = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Icon,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(IconSymbolFields.Data), IntermediateFieldType.Path),
14 },
15 typeof(IconSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum IconSymbolFields
22 {
23 Data,
24 }
25
26 public class IconSymbol : IntermediateSymbol
27 {
28 public IconSymbol() : base(SymbolDefinitions.Icon, null, null)
29 {
30 }
31
32 public IconSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Icon, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[IconSymbolFields index] => this.Fields[(int)index];
37
38 public IntermediateFieldPathValue Data
39 {
40 get => this.Fields[(int)IconSymbolFields.Data].AsPath();
41 set => this.Set((int)IconSymbolFields.Data, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ImageFamiliesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ImageFamiliesSymbol.cs
new file mode 100644
index 00000000..090628ef
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ImageFamiliesSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ImageFamilies = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ImageFamilies,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.Family), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.MediaSrcPropName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.MediaDiskId), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.FileSequenceStart), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.DiskPrompt), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ImageFamiliesSymbolFields.VolumeLabel), IntermediateFieldType.String),
19 },
20 typeof(ImageFamiliesSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum ImageFamiliesSymbolFields
27 {
28 Family,
29 MediaSrcPropName,
30 MediaDiskId,
31 FileSequenceStart,
32 DiskPrompt,
33 VolumeLabel,
34 }
35
36 public class ImageFamiliesSymbol : IntermediateSymbol
37 {
38 public ImageFamiliesSymbol() : base(SymbolDefinitions.ImageFamilies, null, null)
39 {
40 }
41
42 public ImageFamiliesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ImageFamilies, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[ImageFamiliesSymbolFields index] => this.Fields[(int)index];
47
48 public string Family
49 {
50 get => (string)this.Fields[(int)ImageFamiliesSymbolFields.Family];
51 set => this.Set((int)ImageFamiliesSymbolFields.Family, value);
52 }
53
54 public string MediaSrcPropName
55 {
56 get => (string)this.Fields[(int)ImageFamiliesSymbolFields.MediaSrcPropName];
57 set => this.Set((int)ImageFamiliesSymbolFields.MediaSrcPropName, value);
58 }
59
60 public int? MediaDiskId
61 {
62 get => (int?)this.Fields[(int)ImageFamiliesSymbolFields.MediaDiskId];
63 set => this.Set((int)ImageFamiliesSymbolFields.MediaDiskId, value);
64 }
65
66 public int? FileSequenceStart
67 {
68 get => (int?)this.Fields[(int)ImageFamiliesSymbolFields.FileSequenceStart];
69 set => this.Set((int)ImageFamiliesSymbolFields.FileSequenceStart, value);
70 }
71
72 public string DiskPrompt
73 {
74 get => (string)this.Fields[(int)ImageFamiliesSymbolFields.DiskPrompt];
75 set => this.Set((int)ImageFamiliesSymbolFields.DiskPrompt, value);
76 }
77
78 public string VolumeLabel
79 {
80 get => (string)this.Fields[(int)ImageFamiliesSymbolFields.VolumeLabel];
81 set => this.Set((int)ImageFamiliesSymbolFields.VolumeLabel, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/IniFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/IniFileSymbol.cs
new file mode 100644
index 00000000..051acdbb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/IniFileSymbol.cs
@@ -0,0 +1,100 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition IniFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.IniFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.FileName), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.ShortFileName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.DirProperty), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.Section), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.Key), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.Value), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.Action), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(IniFileSymbolFields.ComponentRef), IntermediateFieldType.String),
21 },
22 typeof(IniFileSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum IniFileSymbolFields
29 {
30 FileName,
31 ShortFileName,
32 DirProperty,
33 Section,
34 Key,
35 Value,
36 Action,
37 ComponentRef,
38 }
39
40 public class IniFileSymbol : IntermediateSymbol
41 {
42 public IniFileSymbol() : base(SymbolDefinitions.IniFile, null, null)
43 {
44 }
45
46 public IniFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.IniFile, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[IniFileSymbolFields index] => this.Fields[(int)index];
51
52 public string FileName
53 {
54 get => (string)this.Fields[(int)IniFileSymbolFields.FileName];
55 set => this.Set((int)IniFileSymbolFields.FileName, value);
56 }
57
58 public string ShortFileName
59 {
60 get => (string)this.Fields[(int)IniFileSymbolFields.ShortFileName];
61 set => this.Set((int)IniFileSymbolFields.ShortFileName, value);
62 }
63
64 public string DirProperty
65 {
66 get => (string)this.Fields[(int)IniFileSymbolFields.DirProperty];
67 set => this.Set((int)IniFileSymbolFields.DirProperty, value);
68 }
69
70 public string Section
71 {
72 get => (string)this.Fields[(int)IniFileSymbolFields.Section];
73 set => this.Set((int)IniFileSymbolFields.Section, value);
74 }
75
76 public string Key
77 {
78 get => (string)this.Fields[(int)IniFileSymbolFields.Key];
79 set => this.Set((int)IniFileSymbolFields.Key, value);
80 }
81
82 public string Value
83 {
84 get => (string)this.Fields[(int)IniFileSymbolFields.Value];
85 set => this.Set((int)IniFileSymbolFields.Value, value);
86 }
87
88 public IniFileActionType Action
89 {
90 get => (IniFileActionType)this.Fields[(int)IniFileSymbolFields.Action]?.AsNumber();
91 set => this.Set((int)IniFileSymbolFields.Action, (int)value);
92 }
93
94 public string ComponentRef
95 {
96 get => (string)this.Fields[(int)IniFileSymbolFields.ComponentRef];
97 set => this.Set((int)IniFileSymbolFields.ComponentRef, value);
98 }
99 }
100} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/IniLocatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/IniLocatorSymbol.cs
new file mode 100644
index 00000000..c36f0dfc
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/IniLocatorSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition IniLocator = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.IniLocator,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.FileName), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.ShortFileName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.Section), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.Key), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.Field), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(IniLocatorSymbolFields.Type), IntermediateFieldType.Number),
19 },
20 typeof(IniLocatorSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum IniLocatorSymbolFields
27 {
28 FileName,
29 ShortFileName,
30 Section,
31 Key,
32 Field,
33 Type,
34 }
35
36 public class IniLocatorSymbol : IntermediateSymbol
37 {
38 public IniLocatorSymbol() : base(SymbolDefinitions.IniLocator, null, null)
39 {
40 }
41
42 public IniLocatorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.IniLocator, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[IniLocatorSymbolFields index] => this.Fields[(int)index];
47
48 public string FileName
49 {
50 get => (string)this.Fields[(int)IniLocatorSymbolFields.FileName];
51 set => this.Set((int)IniLocatorSymbolFields.FileName, value);
52 }
53
54 public string ShortFileName
55 {
56 get => (string)this.Fields[(int)IniLocatorSymbolFields.ShortFileName];
57 set => this.Set((int)IniLocatorSymbolFields.ShortFileName, value);
58 }
59
60 public string Section
61 {
62 get => (string)this.Fields[(int)IniLocatorSymbolFields.Section];
63 set => this.Set((int)IniLocatorSymbolFields.Section, value);
64 }
65
66 public string Key
67 {
68 get => (string)this.Fields[(int)IniLocatorSymbolFields.Key];
69 set => this.Set((int)IniLocatorSymbolFields.Key, value);
70 }
71
72 public int? Field
73 {
74 get => (int?)this.Fields[(int)IniLocatorSymbolFields.Field];
75 set => this.Set((int)IniLocatorSymbolFields.Field, value);
76 }
77
78 public int? Type
79 {
80 get => (int?)this.Fields[(int)IniLocatorSymbolFields.Type];
81 set => this.Set((int)IniLocatorSymbolFields.Type, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/InifFileActionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/InifFileActionSymbol.cs
new file mode 100644
index 00000000..a04567ec
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/InifFileActionSymbol.cs
@@ -0,0 +1,13 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.Symbols
4{
5 public enum IniFileActionType
6 {
7 AddLine,
8 AddTag,
9 CreateLine,
10 RemoveLine,
11 RemoveTag,
12 }
13} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/IsolatedComponentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/IsolatedComponentSymbol.cs
new file mode 100644
index 00000000..681f1030
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/IsolatedComponentSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition IsolatedComponent = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.IsolatedComponent,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(IsolatedComponentSymbolFields.SharedComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(IsolatedComponentSymbolFields.ApplicationComponentRef), IntermediateFieldType.String),
15 },
16 typeof(IsolatedComponentSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum IsolatedComponentSymbolFields
23 {
24 SharedComponentRef,
25 ApplicationComponentRef,
26 }
27
28 public class IsolatedComponentSymbol : IntermediateSymbol
29 {
30 public IsolatedComponentSymbol() : base(SymbolDefinitions.IsolatedComponent, null, null)
31 {
32 }
33
34 public IsolatedComponentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.IsolatedComponent, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[IsolatedComponentSymbolFields index] => this.Fields[(int)index];
39
40 public string SharedComponentRef
41 {
42 get => (string)this.Fields[(int)IsolatedComponentSymbolFields.SharedComponentRef];
43 set => this.Set((int)IsolatedComponentSymbolFields.SharedComponentRef, value);
44 }
45
46 public string ApplicationComponentRef
47 {
48 get => (string)this.Fields[(int)IsolatedComponentSymbolFields.ApplicationComponentRef];
49 set => this.Set((int)IsolatedComponentSymbolFields.ApplicationComponentRef, value);
50 }
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/Symbols/LaunchConditionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/LaunchConditionSymbol.cs
new file mode 100644
index 00000000..a160f25f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/LaunchConditionSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition LaunchCondition = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.LaunchCondition,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(LaunchConditionSymbolFields.Condition), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(LaunchConditionSymbolFields.Description), IntermediateFieldType.String),
15 },
16 typeof(LaunchConditionSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum LaunchConditionSymbolFields
23 {
24 Condition,
25 Description,
26 }
27
28 public class LaunchConditionSymbol : IntermediateSymbol
29 {
30 public LaunchConditionSymbol() : base(SymbolDefinitions.LaunchCondition, null, null)
31 {
32 }
33
34 public LaunchConditionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.LaunchCondition, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[LaunchConditionSymbolFields index] => this.Fields[(int)index];
39
40 public string Condition
41 {
42 get => (string)this.Fields[(int)LaunchConditionSymbolFields.Condition];
43 set => this.Set((int)LaunchConditionSymbolFields.Condition, value);
44 }
45
46 public string Description
47 {
48 get => (string)this.Fields[(int)LaunchConditionSymbolFields.Description];
49 set => this.Set((int)LaunchConditionSymbolFields.Description, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ListBoxSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ListBoxSymbol.cs
new file mode 100644
index 00000000..174327d1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ListBoxSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ListBox = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ListBox,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ListBoxSymbolFields.Property), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ListBoxSymbolFields.Order), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ListBoxSymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ListBoxSymbolFields.Text), IntermediateFieldType.String),
17 },
18 typeof(ListBoxSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ListBoxSymbolFields
25 {
26 Property,
27 Order,
28 Value,
29 Text,
30 }
31
32 public class ListBoxSymbol : IntermediateSymbol
33 {
34 public ListBoxSymbol() : base(SymbolDefinitions.ListBox, null, null)
35 {
36 }
37
38 public ListBoxSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ListBox, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ListBoxSymbolFields index] => this.Fields[(int)index];
43
44 public string Property
45 {
46 get => (string)this.Fields[(int)ListBoxSymbolFields.Property];
47 set => this.Set((int)ListBoxSymbolFields.Property, value);
48 }
49
50 public int Order
51 {
52 get => (int)this.Fields[(int)ListBoxSymbolFields.Order];
53 set => this.Set((int)ListBoxSymbolFields.Order, value);
54 }
55
56 public string Value
57 {
58 get => (string)this.Fields[(int)ListBoxSymbolFields.Value];
59 set => this.Set((int)ListBoxSymbolFields.Value, value);
60 }
61
62 public string Text
63 {
64 get => (string)this.Fields[(int)ListBoxSymbolFields.Text];
65 set => this.Set((int)ListBoxSymbolFields.Text, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ListViewSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ListViewSymbol.cs
new file mode 100644
index 00000000..09543ab1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ListViewSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ListView = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ListView,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ListViewSymbolFields.Property), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ListViewSymbolFields.Order), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ListViewSymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ListViewSymbolFields.Text), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ListViewSymbolFields.BinaryRef), IntermediateFieldType.String),
18 },
19 typeof(ListViewSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum ListViewSymbolFields
26 {
27 Property,
28 Order,
29 Value,
30 Text,
31 BinaryRef,
32 }
33
34 public class ListViewSymbol : IntermediateSymbol
35 {
36 public ListViewSymbol() : base(SymbolDefinitions.ListView, null, null)
37 {
38 }
39
40 public ListViewSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ListView, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[ListViewSymbolFields index] => this.Fields[(int)index];
45
46 public string Property
47 {
48 get => (string)this.Fields[(int)ListViewSymbolFields.Property];
49 set => this.Set((int)ListViewSymbolFields.Property, value);
50 }
51
52 public int Order
53 {
54 get => (int)this.Fields[(int)ListViewSymbolFields.Order];
55 set => this.Set((int)ListViewSymbolFields.Order, value);
56 }
57
58 public string Value
59 {
60 get => (string)this.Fields[(int)ListViewSymbolFields.Value];
61 set => this.Set((int)ListViewSymbolFields.Value, value);
62 }
63
64 public string Text
65 {
66 get => (string)this.Fields[(int)ListViewSymbolFields.Text];
67 set => this.Set((int)ListViewSymbolFields.Text, value);
68 }
69
70 public string BinaryRef
71 {
72 get => (string)this.Fields[(int)ListViewSymbolFields.BinaryRef];
73 set => this.Set((int)ListViewSymbolFields.BinaryRef, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/LocatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/LocatorSymbol.cs
new file mode 100644
index 00000000..6f136389
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/LocatorSymbol.cs
@@ -0,0 +1,12 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.Symbols
4{
5 public enum LocatorType
6 {
7 Directory,
8 Filename,
9 RawValue,
10 x64 = 16,
11 }
12}
diff --git a/src/api/wix/WixToolset.Data/Symbols/LockPermissionsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/LockPermissionsSymbol.cs
new file mode 100644
index 00000000..b9337446
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/LockPermissionsSymbol.cs
@@ -0,0 +1,157 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition LockPermissions = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.LockPermissions,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(LockPermissionsSymbolFields.LockObject), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(LockPermissionsSymbolFields.Table), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(LockPermissionsSymbolFields.Domain), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(LockPermissionsSymbolFields.User), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(LockPermissionsSymbolFields.Permission), IntermediateFieldType.Number),
18 },
19 typeof(LockPermissionsSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum LockPermissionsSymbolFields
26 {
27 LockObject,
28 Table,
29 Domain,
30 User,
31 Permission,
32 }
33
34 /// <summary>
35 ///-------------------------------------------------------------------------------------------------
36 /// Layout of an Access Mask (from http://technet.microsoft.com/en-us/library/cc783530(WS.10).aspx)
37 ///
38 /// -------------------------------------------------------------------------------------------------
39 /// |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
40 /// -------------------------------------------------------------------------------------------------
41 /// |GR|GW|GE|GA| Reserved |AS|StandardAccessRights| Object-Specific Access Rights |
42 ///
43 /// Key
44 /// GR = Generic Read
45 /// GW = Generic Write
46 /// GE = Generic Execute
47 /// GA = Generic All
48 /// AS = Right to access SACL
49 /// </summary>
50 public static class LockPermissionConstants
51 {
52 /// <summary>
53 /// Generic Access Rights (per WinNT.h)
54 /// ---------------------
55 /// GENERIC_ALL (0x10000000L)
56 /// GENERIC_EXECUTE (0x20000000L)
57 /// GENERIC_WRITE (0x40000000L)
58 /// GENERIC_READ (0x80000000L)
59 /// </summary>
60 public static readonly string[] GenericPermissions = { "GenericAll", "GenericExecute", "GenericWrite", "GenericRead" };
61
62 /// <summary>
63 /// Standard Access Rights (per WinNT.h)
64 /// ----------------------
65 /// DELETE (0x00010000L)
66 /// READ_CONTROL (0x00020000L)
67 /// WRITE_DAC (0x00040000L)
68 /// WRITE_OWNER (0x00080000L)
69 /// SYNCHRONIZE (0x00100000L)
70 /// </summary>
71 public static readonly string[] StandardPermissions = { "Delete", "ReadPermission", "ChangePermission", "TakeOwnership", "Synchronize" };
72
73 /// <summary>
74 /// Object-Specific Access Rights
75 /// =============================
76 /// Directory Access Rights (per WinNT.h)
77 /// -----------------------
78 /// FILE_LIST_DIRECTORY ( 0x0001 )
79 /// FILE_ADD_FILE ( 0x0002 )
80 /// FILE_ADD_SUBDIRECTORY ( 0x0004 )
81 /// FILE_READ_EA ( 0x0008 )
82 /// FILE_WRITE_EA ( 0x0010 )
83 /// FILE_TRAVERSE ( 0x0020 )
84 /// FILE_DELETE_CHILD ( 0x0040 )
85 /// FILE_READ_ATTRIBUTES ( 0x0080 )
86 /// FILE_WRITE_ATTRIBUTES ( 0x0100 )
87 /// </summary>
88 public static readonly string[] FolderPermissions = { "Read", "CreateFile", "CreateChild", "ReadExtendedAttributes", "WriteExtendedAttributes", "Traverse", "DeleteChild", "ReadAttributes", "WriteAttributes" };
89
90 /// <summary>
91 /// Registry Access Rights
92 /// ----------------------
93 /// </summary>
94 public static readonly string[] RegistryPermissions = { "Read", "Write", "CreateSubkeys", "EnumerateSubkeys", "Notify", "CreateLink" };
95
96 /// <summary>
97 /// File Access Rights (per WinNT.h)
98 /// ------------------
99 /// FILE_READ_DATA ( 0x0001 )
100 /// FILE_WRITE_DATA ( 0x0002 )
101 /// FILE_APPEND_DATA ( 0x0004 )
102 /// FILE_READ_EA ( 0x0008 )
103 /// FILE_WRITE_EA ( 0x0010 )
104 /// FILE_EXECUTE ( 0x0020 )
105 /// via mask FILE_ALL_ACCESS ( 0x0040 )
106 /// FILE_READ_ATTRIBUTES ( 0x0080 )
107 /// FILE_WRITE_ATTRIBUTES ( 0x0100 )
108 ///
109 /// STANDARD_RIGHTS_REQUIRED (0x000F0000L)
110 /// FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
111 /// </summary>
112 public static readonly string[] FilePermissions = { "Read", "Write", "Append", "ReadExtendedAttributes", "WriteExtendedAttributes", "Execute", "FileAllRights", "ReadAttributes", "WriteAttributes" };
113 }
114
115 public class LockPermissionsSymbol : IntermediateSymbol
116 {
117 public LockPermissionsSymbol() : base(SymbolDefinitions.LockPermissions, null, null)
118 {
119 }
120
121 public LockPermissionsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.LockPermissions, sourceLineNumber, id)
122 {
123 }
124
125 public IntermediateField this[LockPermissionsSymbolFields index] => this.Fields[(int)index];
126
127 public string LockObject
128 {
129 get => (string)this.Fields[(int)LockPermissionsSymbolFields.LockObject];
130 set => this.Set((int)LockPermissionsSymbolFields.LockObject, value);
131 }
132
133 public string Table
134 {
135 get => (string)this.Fields[(int)LockPermissionsSymbolFields.Table];
136 set => this.Set((int)LockPermissionsSymbolFields.Table, value);
137 }
138
139 public string Domain
140 {
141 get => (string)this.Fields[(int)LockPermissionsSymbolFields.Domain];
142 set => this.Set((int)LockPermissionsSymbolFields.Domain, value);
143 }
144
145 public string User
146 {
147 get => (string)this.Fields[(int)LockPermissionsSymbolFields.User];
148 set => this.Set((int)LockPermissionsSymbolFields.User, value);
149 }
150
151 public int? Permission
152 {
153 get => (int?)this.Fields[(int)LockPermissionsSymbolFields.Permission];
154 set => this.Set((int)LockPermissionsSymbolFields.Permission, value);
155 }
156 }
157} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MIMESymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MIMESymbol.cs
new file mode 100644
index 00000000..f66d05b8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MIMESymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MIME = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MIME,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MIMESymbolFields.ContentType), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MIMESymbolFields.ExtensionRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MIMESymbolFields.CLSID), IntermediateFieldType.String),
16 },
17 typeof(MIMESymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum MIMESymbolFields
24 {
25 ContentType,
26 ExtensionRef,
27 CLSID,
28 }
29
30 public class MIMESymbol : IntermediateSymbol
31 {
32 public MIMESymbol() : base(SymbolDefinitions.MIME, null, null)
33 {
34 }
35
36 public MIMESymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MIME, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[MIMESymbolFields index] => this.Fields[(int)index];
41
42 public string ContentType
43 {
44 get => (string)this.Fields[(int)MIMESymbolFields.ContentType];
45 set => this.Set((int)MIMESymbolFields.ContentType, value);
46 }
47
48 public string ExtensionRef
49 {
50 get => (string)this.Fields[(int)MIMESymbolFields.ExtensionRef];
51 set => this.Set((int)MIMESymbolFields.ExtensionRef, value);
52 }
53
54 public string CLSID
55 {
56 get => (string)this.Fields[(int)MIMESymbolFields.CLSID];
57 set => this.Set((int)MIMESymbolFields.CLSID, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MediaSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MediaSymbol.cs
new file mode 100644
index 00000000..f216cddc
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MediaSymbol.cs
@@ -0,0 +1,100 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Media = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Media,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MediaSymbolFields.DiskId), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(MediaSymbolFields.LastSequence), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(MediaSymbolFields.DiskPrompt), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MediaSymbolFields.Cabinet), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(MediaSymbolFields.VolumeLabel), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(MediaSymbolFields.Source), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(MediaSymbolFields.CompressionLevel), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(MediaSymbolFields.Layout), IntermediateFieldType.String),
21 },
22 typeof(MediaSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum MediaSymbolFields
29 {
30 DiskId,
31 LastSequence,
32 DiskPrompt,
33 Cabinet,
34 VolumeLabel,
35 Source,
36 CompressionLevel,
37 Layout,
38 }
39
40 public class MediaSymbol : IntermediateSymbol
41 {
42 public MediaSymbol() : base(SymbolDefinitions.Media, null, null)
43 {
44 }
45
46 public MediaSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Media, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[MediaSymbolFields index] => this.Fields[(int)index];
51
52 public int DiskId
53 {
54 get => (int)this.Fields[(int)MediaSymbolFields.DiskId];
55 set => this.Set((int)MediaSymbolFields.DiskId, value);
56 }
57
58 public int? LastSequence
59 {
60 get => (int?)this.Fields[(int)MediaSymbolFields.LastSequence];
61 set => this.Set((int)MediaSymbolFields.LastSequence, value);
62 }
63
64 public string DiskPrompt
65 {
66 get => (string)this.Fields[(int)MediaSymbolFields.DiskPrompt];
67 set => this.Set((int)MediaSymbolFields.DiskPrompt, value);
68 }
69
70 public string Cabinet
71 {
72 get => (string)this.Fields[(int)MediaSymbolFields.Cabinet];
73 set => this.Set((int)MediaSymbolFields.Cabinet, value);
74 }
75
76 public string VolumeLabel
77 {
78 get => (string)this.Fields[(int)MediaSymbolFields.VolumeLabel];
79 set => this.Set((int)MediaSymbolFields.VolumeLabel, value);
80 }
81
82 public string Source
83 {
84 get => (string)this.Fields[(int)MediaSymbolFields.Source];
85 set => this.Set((int)MediaSymbolFields.Source, value);
86 }
87
88 public CompressionLevel? CompressionLevel
89 {
90 get => (CompressionLevel?)this.Fields[(int)MediaSymbolFields.CompressionLevel].AsNullableNumber();
91 set => this.Set((int)MediaSymbolFields.CompressionLevel, (int?)value);
92 }
93
94 public string Layout
95 {
96 get => (string)this.Fields[(int)MediaSymbolFields.Layout];
97 set => this.Set((int)MediaSymbolFields.Layout, value);
98 }
99 }
100}
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleComponentsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleComponentsSymbol.cs
new file mode 100644
index 00000000..287819ab
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleComponentsSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleComponents = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleComponents,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ModuleComponentsSymbolFields.Component), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ModuleComponentsSymbolFields.ModuleID), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ModuleComponentsSymbolFields.Language), IntermediateFieldType.Number),
16 },
17 typeof(ModuleComponentsSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum ModuleComponentsSymbolFields
24 {
25 Component,
26 ModuleID,
27 Language,
28 }
29
30 public class ModuleComponentsSymbol : IntermediateSymbol
31 {
32 public ModuleComponentsSymbol() : base(SymbolDefinitions.ModuleComponents, null, null)
33 {
34 }
35
36 public ModuleComponentsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleComponents, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[ModuleComponentsSymbolFields index] => this.Fields[(int)index];
41
42 public string Component
43 {
44 get => (string)this.Fields[(int)ModuleComponentsSymbolFields.Component];
45 set => this.Set((int)ModuleComponentsSymbolFields.Component, value);
46 }
47
48 public string ModuleID
49 {
50 get => (string)this.Fields[(int)ModuleComponentsSymbolFields.ModuleID];
51 set => this.Set((int)ModuleComponentsSymbolFields.ModuleID, value);
52 }
53
54 public int Language
55 {
56 get => (int)this.Fields[(int)ModuleComponentsSymbolFields.Language];
57 set => this.Set((int)ModuleComponentsSymbolFields.Language, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleConfigurationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleConfigurationSymbol.cs
new file mode 100644
index 00000000..8188dc87
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleConfigurationSymbol.cs
@@ -0,0 +1,116 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleConfiguration = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleConfiguration,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.Format), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.Type), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.ContextData), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.DefaultValue), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.KeyNoOrphan), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.NonNullable), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.DisplayName), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.Description), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.HelpLocation), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(ModuleConfigurationSymbolFields.HelpKeyword), IntermediateFieldType.String),
23 },
24 typeof(ModuleConfigurationSymbol));
25 }
26}
27
28namespace WixToolset.Data.Symbols
29{
30 public enum ModuleConfigurationSymbolFields
31 {
32 Format,
33 Type,
34 ContextData,
35 DefaultValue,
36 KeyNoOrphan,
37 NonNullable,
38 DisplayName,
39 Description,
40 HelpLocation,
41 HelpKeyword,
42 }
43
44 public class ModuleConfigurationSymbol : IntermediateSymbol
45 {
46 public ModuleConfigurationSymbol() : base(SymbolDefinitions.ModuleConfiguration, null, null)
47 {
48 }
49
50 public ModuleConfigurationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleConfiguration, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[ModuleConfigurationSymbolFields index] => this.Fields[(int)index];
55
56 public int Format
57 {
58 get => (int)this.Fields[(int)ModuleConfigurationSymbolFields.Format];
59 set => this.Set((int)ModuleConfigurationSymbolFields.Format, value);
60 }
61
62 public string Type
63 {
64 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.Type];
65 set => this.Set((int)ModuleConfigurationSymbolFields.Type, value);
66 }
67
68 public string ContextData
69 {
70 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.ContextData];
71 set => this.Set((int)ModuleConfigurationSymbolFields.ContextData, value);
72 }
73
74 public string DefaultValue
75 {
76 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.DefaultValue];
77 set => this.Set((int)ModuleConfigurationSymbolFields.DefaultValue, value);
78 }
79
80 public bool KeyNoOrphan
81 {
82 get => this.Fields[(int)ModuleConfigurationSymbolFields.KeyNoOrphan].AsBool();
83 set => this.Set((int)ModuleConfigurationSymbolFields.KeyNoOrphan, value);
84 }
85
86 public bool NonNullable
87 {
88 get => this.Fields[(int)ModuleConfigurationSymbolFields.NonNullable].AsBool();
89 set => this.Set((int)ModuleConfigurationSymbolFields.NonNullable, value);
90 }
91
92 public string DisplayName
93 {
94 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.DisplayName];
95 set => this.Set((int)ModuleConfigurationSymbolFields.DisplayName, value);
96 }
97
98 public string Description
99 {
100 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.Description];
101 set => this.Set((int)ModuleConfigurationSymbolFields.Description, value);
102 }
103
104 public string HelpLocation
105 {
106 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.HelpLocation];
107 set => this.Set((int)ModuleConfigurationSymbolFields.HelpLocation, value);
108 }
109
110 public string HelpKeyword
111 {
112 get => (string)this.Fields[(int)ModuleConfigurationSymbolFields.HelpKeyword];
113 set => this.Set((int)ModuleConfigurationSymbolFields.HelpKeyword, value);
114 }
115 }
116} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleDependencySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleDependencySymbol.cs
new file mode 100644
index 00000000..80d2d5f6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleDependencySymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleDependency = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleDependency,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ModuleDependencySymbolFields.ModuleID), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ModuleDependencySymbolFields.ModuleLanguage), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ModuleDependencySymbolFields.RequiredID), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ModuleDependencySymbolFields.RequiredLanguage), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ModuleDependencySymbolFields.RequiredVersion), IntermediateFieldType.String),
18 },
19 typeof(ModuleDependencySymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum ModuleDependencySymbolFields
26 {
27 ModuleID,
28 ModuleLanguage,
29 RequiredID,
30 RequiredLanguage,
31 RequiredVersion,
32 }
33
34 public class ModuleDependencySymbol : IntermediateSymbol
35 {
36 public ModuleDependencySymbol() : base(SymbolDefinitions.ModuleDependency, null, null)
37 {
38 }
39
40 public ModuleDependencySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleDependency, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[ModuleDependencySymbolFields index] => this.Fields[(int)index];
45
46 public string ModuleID
47 {
48 get => (string)this.Fields[(int)ModuleDependencySymbolFields.ModuleID];
49 set => this.Set((int)ModuleDependencySymbolFields.ModuleID, value);
50 }
51
52 public int ModuleLanguage
53 {
54 get => (int)this.Fields[(int)ModuleDependencySymbolFields.ModuleLanguage];
55 set => this.Set((int)ModuleDependencySymbolFields.ModuleLanguage, value);
56 }
57
58 public string RequiredID
59 {
60 get => (string)this.Fields[(int)ModuleDependencySymbolFields.RequiredID];
61 set => this.Set((int)ModuleDependencySymbolFields.RequiredID, value);
62 }
63
64 public int RequiredLanguage
65 {
66 get => (int)this.Fields[(int)ModuleDependencySymbolFields.RequiredLanguage];
67 set => this.Set((int)ModuleDependencySymbolFields.RequiredLanguage, value);
68 }
69
70 public string RequiredVersion
71 {
72 get => (string)this.Fields[(int)ModuleDependencySymbolFields.RequiredVersion];
73 set => this.Set((int)ModuleDependencySymbolFields.RequiredVersion, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleExclusionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleExclusionSymbol.cs
new file mode 100644
index 00000000..0c45abfa
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleExclusionSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleExclusion = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleExclusion,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ModuleID), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ModuleLanguage), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ExcludedID), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ExcludedLanguage), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ExcludedMinVersion), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ModuleExclusionSymbolFields.ExcludedMaxVersion), IntermediateFieldType.String),
19 },
20 typeof(ModuleExclusionSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum ModuleExclusionSymbolFields
27 {
28 ModuleID,
29 ModuleLanguage,
30 ExcludedID,
31 ExcludedLanguage,
32 ExcludedMinVersion,
33 ExcludedMaxVersion,
34 }
35
36 public class ModuleExclusionSymbol : IntermediateSymbol
37 {
38 public ModuleExclusionSymbol() : base(SymbolDefinitions.ModuleExclusion, null, null)
39 {
40 }
41
42 public ModuleExclusionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleExclusion, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[ModuleExclusionSymbolFields index] => this.Fields[(int)index];
47
48 public string ModuleID
49 {
50 get => (string)this.Fields[(int)ModuleExclusionSymbolFields.ModuleID];
51 set => this.Set((int)ModuleExclusionSymbolFields.ModuleID, value);
52 }
53
54 public int ModuleLanguage
55 {
56 get => (int)this.Fields[(int)ModuleExclusionSymbolFields.ModuleLanguage];
57 set => this.Set((int)ModuleExclusionSymbolFields.ModuleLanguage, value);
58 }
59
60 public string ExcludedID
61 {
62 get => (string)this.Fields[(int)ModuleExclusionSymbolFields.ExcludedID];
63 set => this.Set((int)ModuleExclusionSymbolFields.ExcludedID, value);
64 }
65
66 public int ExcludedLanguage
67 {
68 get => (int)this.Fields[(int)ModuleExclusionSymbolFields.ExcludedLanguage];
69 set => this.Set((int)ModuleExclusionSymbolFields.ExcludedLanguage, value);
70 }
71
72 public string ExcludedMinVersion
73 {
74 get => (string)this.Fields[(int)ModuleExclusionSymbolFields.ExcludedMinVersion];
75 set => this.Set((int)ModuleExclusionSymbolFields.ExcludedMinVersion, value);
76 }
77
78 public string ExcludedMaxVersion
79 {
80 get => (string)this.Fields[(int)ModuleExclusionSymbolFields.ExcludedMaxVersion];
81 set => this.Set((int)ModuleExclusionSymbolFields.ExcludedMaxVersion, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleIgnoreTableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleIgnoreTableSymbol.cs
new file mode 100644
index 00000000..07302df8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleIgnoreTableSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleIgnoreTable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleIgnoreTable,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(ModuleIgnoreTableSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum ModuleIgnoreTableSymbolFields
21 {
22 }
23
24 public class ModuleIgnoreTableSymbol : IntermediateSymbol
25 {
26 public ModuleIgnoreTableSymbol() : base(SymbolDefinitions.ModuleIgnoreTable, null, null)
27 {
28 }
29
30 public ModuleIgnoreTableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleIgnoreTable, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[ModuleIgnoreTableSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ModuleSubstitutionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ModuleSubstitutionSymbol.cs
new file mode 100644
index 00000000..50d615b0
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ModuleSubstitutionSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ModuleSubstitution = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ModuleSubstitution,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ModuleSubstitutionSymbolFields.Table), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ModuleSubstitutionSymbolFields.Row), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ModuleSubstitutionSymbolFields.Column), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ModuleSubstitutionSymbolFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ModuleSubstitutionSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ModuleSubstitutionSymbolFields
25 {
26 Table,
27 Row,
28 Column,
29 Value,
30 }
31
32 public class ModuleSubstitutionSymbol : IntermediateSymbol
33 {
34 public ModuleSubstitutionSymbol() : base(SymbolDefinitions.ModuleSubstitution, null, null)
35 {
36 }
37
38 public ModuleSubstitutionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ModuleSubstitution, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ModuleSubstitutionSymbolFields index] => this.Fields[(int)index];
43
44 public string Table
45 {
46 get => (string)this.Fields[(int)ModuleSubstitutionSymbolFields.Table];
47 set => this.Set((int)ModuleSubstitutionSymbolFields.Table, value);
48 }
49
50 public string Row
51 {
52 get => (string)this.Fields[(int)ModuleSubstitutionSymbolFields.Row];
53 set => this.Set((int)ModuleSubstitutionSymbolFields.Row, value);
54 }
55
56 public string Column
57 {
58 get => (string)this.Fields[(int)ModuleSubstitutionSymbolFields.Column];
59 set => this.Set((int)ModuleSubstitutionSymbolFields.Column, value);
60 }
61
62 public string Value
63 {
64 get => (string)this.Fields[(int)ModuleSubstitutionSymbolFields.Value];
65 set => this.Set((int)ModuleSubstitutionSymbolFields.Value, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MoveFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MoveFileSymbol.cs
new file mode 100644
index 00000000..6e9e32a5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MoveFileSymbol.cs
@@ -0,0 +1,92 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MoveFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MoveFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.SourceName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.DestinationName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.DestinationShortName), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.SourceFolder), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.DestFolder), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(MoveFileSymbolFields.Delete), IntermediateFieldType.Bool),
20 },
21 typeof(MoveFileSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum MoveFileSymbolFields
28 {
29 ComponentRef,
30 SourceName,
31 DestinationName,
32 DestinationShortName,
33 SourceFolder,
34 DestFolder,
35 Delete,
36 }
37
38 public class MoveFileSymbol : IntermediateSymbol
39 {
40 public MoveFileSymbol() : base(SymbolDefinitions.MoveFile, null, null)
41 {
42 }
43
44 public MoveFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MoveFile, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[MoveFileSymbolFields index] => this.Fields[(int)index];
49
50 public string ComponentRef
51 {
52 get => (string)this.Fields[(int)MoveFileSymbolFields.ComponentRef];
53 set => this.Set((int)MoveFileSymbolFields.ComponentRef, value);
54 }
55
56 public string SourceName
57 {
58 get => (string)this.Fields[(int)MoveFileSymbolFields.SourceName];
59 set => this.Set((int)MoveFileSymbolFields.SourceName, value);
60 }
61
62 public string DestinationName
63 {
64 get => (string)this.Fields[(int)MoveFileSymbolFields.DestinationName];
65 set => this.Set((int)MoveFileSymbolFields.DestinationName, value);
66 }
67
68 public string DestinationShortName
69 {
70 get => (string)this.Fields[(int)MoveFileSymbolFields.DestinationShortName];
71 set => this.Set((int)MoveFileSymbolFields.DestinationShortName, value);
72 }
73
74 public string SourceFolder
75 {
76 get => (string)this.Fields[(int)MoveFileSymbolFields.SourceFolder];
77 set => this.Set((int)MoveFileSymbolFields.SourceFolder, value);
78 }
79
80 public string DestFolder
81 {
82 get => (string)this.Fields[(int)MoveFileSymbolFields.DestFolder];
83 set => this.Set((int)MoveFileSymbolFields.DestFolder, value);
84 }
85
86 public bool Delete
87 {
88 get => (bool)this.Fields[(int)MoveFileSymbolFields.Delete];
89 set => this.Set((int)MoveFileSymbolFields.Delete, value);
90 }
91 }
92}
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiAssemblyNameSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiAssemblyNameSymbol.cs
new file mode 100644
index 00000000..99c9806d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiAssemblyNameSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiAssemblyName = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiAssemblyName,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiAssemblyNameSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiAssemblyNameSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiAssemblyNameSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(MsiAssemblyNameSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum MsiAssemblyNameSymbolFields
24 {
25 ComponentRef,
26 Name,
27 Value,
28 }
29
30 public class MsiAssemblyNameSymbol : IntermediateSymbol
31 {
32 public MsiAssemblyNameSymbol() : base(SymbolDefinitions.MsiAssemblyName, null, null)
33 {
34 }
35
36 public MsiAssemblyNameSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiAssemblyName, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[MsiAssemblyNameSymbolFields index] => this.Fields[(int)index];
41
42 public string ComponentRef
43 {
44 get => (string)this.Fields[(int)MsiAssemblyNameSymbolFields.ComponentRef];
45 set => this.Set((int)MsiAssemblyNameSymbolFields.ComponentRef, value);
46 }
47
48 public string Name
49 {
50 get => (string)this.Fields[(int)MsiAssemblyNameSymbolFields.Name];
51 set => this.Set((int)MsiAssemblyNameSymbolFields.Name, value);
52 }
53
54 public string Value
55 {
56 get => (string)this.Fields[(int)MsiAssemblyNameSymbolFields.Value];
57 set => this.Set((int)MsiAssemblyNameSymbolFields.Value, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiDigitalCertificateSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiDigitalCertificateSymbol.cs
new file mode 100644
index 00000000..febd51cc
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiDigitalCertificateSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiDigitalCertificate = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiDigitalCertificate,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiDigitalCertificateSymbolFields.CertData), IntermediateFieldType.Path),
14 },
15 typeof(MsiDigitalCertificateSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum MsiDigitalCertificateSymbolFields
22 {
23 CertData,
24 }
25
26 public class MsiDigitalCertificateSymbol : IntermediateSymbol
27 {
28 public MsiDigitalCertificateSymbol() : base(SymbolDefinitions.MsiDigitalCertificate, null, null)
29 {
30 }
31
32 public MsiDigitalCertificateSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiDigitalCertificate, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[MsiDigitalCertificateSymbolFields index] => this.Fields[(int)index];
37
38 public string CertData
39 {
40 get => (string)this.Fields[(int)MsiDigitalCertificateSymbolFields.CertData];
41 set => this.Set((int)MsiDigitalCertificateSymbolFields.CertData, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiDigitalSignatureSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiDigitalSignatureSymbol.cs
new file mode 100644
index 00000000..560f3590
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiDigitalSignatureSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiDigitalSignature = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiDigitalSignature,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiDigitalSignatureSymbolFields.Table), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiDigitalSignatureSymbolFields.SignObject), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiDigitalSignatureSymbolFields.DigitalCertificateRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MsiDigitalSignatureSymbolFields.Hash), IntermediateFieldType.Path),
17 },
18 typeof(MsiDigitalSignatureSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum MsiDigitalSignatureSymbolFields
25 {
26 Table,
27 SignObject,
28 DigitalCertificateRef,
29 Hash,
30 }
31
32 public class MsiDigitalSignatureSymbol : IntermediateSymbol
33 {
34 public MsiDigitalSignatureSymbol() : base(SymbolDefinitions.MsiDigitalSignature, null, null)
35 {
36 }
37
38 public MsiDigitalSignatureSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiDigitalSignature, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[MsiDigitalSignatureSymbolFields index] => this.Fields[(int)index];
43
44 public string Table
45 {
46 get => (string)this.Fields[(int)MsiDigitalSignatureSymbolFields.Table];
47 set => this.Set((int)MsiDigitalSignatureSymbolFields.Table, value);
48 }
49
50 public string SignObject
51 {
52 get => (string)this.Fields[(int)MsiDigitalSignatureSymbolFields.SignObject];
53 set => this.Set((int)MsiDigitalSignatureSymbolFields.SignObject, value);
54 }
55
56 public string DigitalCertificateRef
57 {
58 get => (string)this.Fields[(int)MsiDigitalSignatureSymbolFields.DigitalCertificateRef];
59 set => this.Set((int)MsiDigitalSignatureSymbolFields.DigitalCertificateRef, value);
60 }
61
62 public string Hash
63 {
64 get => (string)this.Fields[(int)MsiDigitalSignatureSymbolFields.Hash];
65 set => this.Set((int)MsiDigitalSignatureSymbolFields.Hash, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedChainerSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedChainerSymbol.cs
new file mode 100644
index 00000000..eeed1673
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedChainerSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiEmbeddedChainer = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiEmbeddedChainer,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiEmbeddedChainerSymbolFields.Condition), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiEmbeddedChainerSymbolFields.CommandLine), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiEmbeddedChainerSymbolFields.Source), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MsiEmbeddedChainerSymbolFields.Type), IntermediateFieldType.Number),
17 },
18 typeof(MsiEmbeddedChainerSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum MsiEmbeddedChainerSymbolFields
25 {
26 Condition,
27 CommandLine,
28 Source,
29 Type,
30 }
31
32 public class MsiEmbeddedChainerSymbol : IntermediateSymbol
33 {
34 public MsiEmbeddedChainerSymbol() : base(SymbolDefinitions.MsiEmbeddedChainer, null, null)
35 {
36 }
37
38 public MsiEmbeddedChainerSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiEmbeddedChainer, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[MsiEmbeddedChainerSymbolFields index] => this.Fields[(int)index];
43
44 public string Condition
45 {
46 get => (string)this.Fields[(int)MsiEmbeddedChainerSymbolFields.Condition];
47 set => this.Set((int)MsiEmbeddedChainerSymbolFields.Condition, value);
48 }
49
50 public string CommandLine
51 {
52 get => (string)this.Fields[(int)MsiEmbeddedChainerSymbolFields.CommandLine];
53 set => this.Set((int)MsiEmbeddedChainerSymbolFields.CommandLine, value);
54 }
55
56 public string Source
57 {
58 get => (string)this.Fields[(int)MsiEmbeddedChainerSymbolFields.Source];
59 set => this.Set((int)MsiEmbeddedChainerSymbolFields.Source, value);
60 }
61
62 public int Type
63 {
64 get => (int)this.Fields[(int)MsiEmbeddedChainerSymbolFields.Type];
65 set => this.Set((int)MsiEmbeddedChainerSymbolFields.Type, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedUISymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedUISymbol.cs
new file mode 100644
index 00000000..87c9481a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiEmbeddedUISymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiEmbeddedUI = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiEmbeddedUI,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiEmbeddedUISymbolFields.FileName), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiEmbeddedUISymbolFields.EntryPoint), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(MsiEmbeddedUISymbolFields.SupportsBasicUI), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(MsiEmbeddedUISymbolFields.MessageFilter), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(MsiEmbeddedUISymbolFields.Source), IntermediateFieldType.Path),
18 },
19 typeof(MsiEmbeddedUISymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum MsiEmbeddedUISymbolFields
26 {
27 FileName,
28 EntryPoint,
29 SupportsBasicUI,
30 MessageFilter,
31 Source,
32 }
33
34 public class MsiEmbeddedUISymbol : IntermediateSymbol
35 {
36 public MsiEmbeddedUISymbol() : base(SymbolDefinitions.MsiEmbeddedUI, null, null)
37 {
38 }
39
40 public MsiEmbeddedUISymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiEmbeddedUI, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[MsiEmbeddedUISymbolFields index] => this.Fields[(int)index];
45
46 public string FileName
47 {
48 get => (string)this.Fields[(int)MsiEmbeddedUISymbolFields.FileName];
49 set => this.Set((int)MsiEmbeddedUISymbolFields.FileName, value);
50 }
51
52 public bool EntryPoint
53 {
54 get => this.Fields[(int)MsiEmbeddedUISymbolFields.EntryPoint].AsBool();
55 set => this.Set((int)MsiEmbeddedUISymbolFields.EntryPoint, value);
56 }
57
58 public bool SupportsBasicUI
59 {
60 get => this.Fields[(int)MsiEmbeddedUISymbolFields.SupportsBasicUI].AsBool();
61 set => this.Set((int)MsiEmbeddedUISymbolFields.SupportsBasicUI, value);
62 }
63
64 public int? MessageFilter
65 {
66 get => (int?)this.Fields[(int)MsiEmbeddedUISymbolFields.MessageFilter];
67 set => this.Set((int)MsiEmbeddedUISymbolFields.MessageFilter, value);
68 }
69
70 public string Source
71 {
72 get => (string)this.Fields[(int)MsiEmbeddedUISymbolFields.Source];
73 set => this.Set((int)MsiEmbeddedUISymbolFields.Source, value);
74 }
75 }
76}
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiFileHashSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiFileHashSymbol.cs
new file mode 100644
index 00000000..bfec1c12
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiFileHashSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiFileHash = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiFileHash,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiFileHashSymbolFields.Options), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(MsiFileHashSymbolFields.HashPart1), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(MsiFileHashSymbolFields.HashPart2), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(MsiFileHashSymbolFields.HashPart3), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(MsiFileHashSymbolFields.HashPart4), IntermediateFieldType.Number),
18 },
19 typeof(MsiFileHashSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum MsiFileHashSymbolFields
26 {
27 Options,
28 HashPart1,
29 HashPart2,
30 HashPart3,
31 HashPart4,
32 }
33
34 public class MsiFileHashSymbol : IntermediateSymbol
35 {
36 public MsiFileHashSymbol() : base(SymbolDefinitions.MsiFileHash, null, null)
37 {
38 }
39
40 public MsiFileHashSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiFileHash, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[MsiFileHashSymbolFields index] => this.Fields[(int)index];
45
46 public int Options
47 {
48 get => (int)this.Fields[(int)MsiFileHashSymbolFields.Options];
49 set => this.Set((int)MsiFileHashSymbolFields.Options, value);
50 }
51
52 public int HashPart1
53 {
54 get => (int)this.Fields[(int)MsiFileHashSymbolFields.HashPart1];
55 set => this.Set((int)MsiFileHashSymbolFields.HashPart1, value);
56 }
57
58 public int HashPart2
59 {
60 get => (int)this.Fields[(int)MsiFileHashSymbolFields.HashPart2];
61 set => this.Set((int)MsiFileHashSymbolFields.HashPart2, value);
62 }
63
64 public int HashPart3
65 {
66 get => (int)this.Fields[(int)MsiFileHashSymbolFields.HashPart3];
67 set => this.Set((int)MsiFileHashSymbolFields.HashPart3, value);
68 }
69
70 public int HashPart4
71 {
72 get => (int)this.Fields[(int)MsiFileHashSymbolFields.HashPart4];
73 set => this.Set((int)MsiFileHashSymbolFields.HashPart4, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiLockPermissionsExSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiLockPermissionsExSymbol.cs
new file mode 100644
index 00000000..88e7d019
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiLockPermissionsExSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiLockPermissionsEx = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiLockPermissionsEx,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiLockPermissionsExSymbolFields.LockObject), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiLockPermissionsExSymbolFields.Table), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiLockPermissionsExSymbolFields.SDDLText), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MsiLockPermissionsExSymbolFields.Condition), IntermediateFieldType.String),
17 },
18 typeof(MsiLockPermissionsExSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum MsiLockPermissionsExSymbolFields
25 {
26 LockObject,
27 Table,
28 SDDLText,
29 Condition,
30 }
31
32 public class MsiLockPermissionsExSymbol : IntermediateSymbol
33 {
34 public MsiLockPermissionsExSymbol() : base(SymbolDefinitions.MsiLockPermissionsEx, null, null)
35 {
36 }
37
38 public MsiLockPermissionsExSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiLockPermissionsEx, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[MsiLockPermissionsExSymbolFields index] => this.Fields[(int)index];
43
44 public string LockObject
45 {
46 get => (string)this.Fields[(int)MsiLockPermissionsExSymbolFields.LockObject];
47 set => this.Set((int)MsiLockPermissionsExSymbolFields.LockObject, value);
48 }
49
50 public string Table
51 {
52 get => (string)this.Fields[(int)MsiLockPermissionsExSymbolFields.Table];
53 set => this.Set((int)MsiLockPermissionsExSymbolFields.Table, value);
54 }
55
56 public string SDDLText
57 {
58 get => (string)this.Fields[(int)MsiLockPermissionsExSymbolFields.SDDLText];
59 set => this.Set((int)MsiLockPermissionsExSymbolFields.SDDLText, value);
60 }
61
62 public string Condition
63 {
64 get => (string)this.Fields[(int)MsiLockPermissionsExSymbolFields.Condition];
65 set => this.Set((int)MsiLockPermissionsExSymbolFields.Condition, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPackageCertificateSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPackageCertificateSymbol.cs
new file mode 100644
index 00000000..4a6774b1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPackageCertificateSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPackageCertificate = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPackageCertificate,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPackageCertificateSymbolFields.PackageCertificate), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPackageCertificateSymbolFields.DigitalCertificateRef), IntermediateFieldType.String),
15 },
16 typeof(MsiPackageCertificateSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum MsiPackageCertificateSymbolFields
23 {
24 PackageCertificate,
25 DigitalCertificateRef,
26 }
27
28 public class MsiPackageCertificateSymbol : IntermediateSymbol
29 {
30 public MsiPackageCertificateSymbol() : base(SymbolDefinitions.MsiPackageCertificate, null, null)
31 {
32 }
33
34 public MsiPackageCertificateSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPackageCertificate, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[MsiPackageCertificateSymbolFields index] => this.Fields[(int)index];
39
40 public string PackageCertificate
41 {
42 get => (string)this.Fields[(int)MsiPackageCertificateSymbolFields.PackageCertificate];
43 set => this.Set((int)MsiPackageCertificateSymbolFields.PackageCertificate, value);
44 }
45
46 public string DigitalCertificateRef
47 {
48 get => (string)this.Fields[(int)MsiPackageCertificateSymbolFields.DigitalCertificateRef];
49 set => this.Set((int)MsiPackageCertificateSymbolFields.DigitalCertificateRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchCertificateSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchCertificateSymbol.cs
new file mode 100644
index 00000000..7d6ce24e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchCertificateSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchCertificate = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchCertificate,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchCertificateSymbolFields.PatchCertificate), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchCertificateSymbolFields.DigitalCertificateRef), IntermediateFieldType.String),
15 },
16 typeof(MsiPatchCertificateSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum MsiPatchCertificateSymbolFields
23 {
24 PatchCertificate,
25 DigitalCertificateRef,
26 }
27
28 public class MsiPatchCertificateSymbol : IntermediateSymbol
29 {
30 public MsiPatchCertificateSymbol() : base(SymbolDefinitions.MsiPatchCertificate, null, null)
31 {
32 }
33
34 public MsiPatchCertificateSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchCertificate, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[MsiPatchCertificateSymbolFields index] => this.Fields[(int)index];
39
40 public string PatchCertificate
41 {
42 get => (string)this.Fields[(int)MsiPatchCertificateSymbolFields.PatchCertificate];
43 set => this.Set((int)MsiPatchCertificateSymbolFields.PatchCertificate, value);
44 }
45
46 public string DigitalCertificateRef
47 {
48 get => (string)this.Fields[(int)MsiPatchCertificateSymbolFields.DigitalCertificateRef];
49 set => this.Set((int)MsiPatchCertificateSymbolFields.DigitalCertificateRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchHeadersSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchHeadersSymbol.cs
new file mode 100644
index 00000000..0c68b164
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchHeadersSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchHeaders = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchHeaders,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchHeadersSymbolFields.StreamRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchHeadersSymbolFields.Header), IntermediateFieldType.Path),
15 },
16 typeof(MsiPatchHeadersSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum MsiPatchHeadersSymbolFields
23 {
24 StreamRef,
25 Header,
26 }
27
28 public class MsiPatchHeadersSymbol : IntermediateSymbol
29 {
30 public MsiPatchHeadersSymbol() : base(SymbolDefinitions.MsiPatchHeaders, null, null)
31 {
32 }
33
34 public MsiPatchHeadersSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchHeaders, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[MsiPatchHeadersSymbolFields index] => this.Fields[(int)index];
39
40 public string StreamRef
41 {
42 get => (string)this.Fields[(int)MsiPatchHeadersSymbolFields.StreamRef];
43 set => this.Set((int)MsiPatchHeadersSymbolFields.StreamRef, value);
44 }
45
46 public string Header
47 {
48 get => (string)this.Fields[(int)MsiPatchHeadersSymbolFields.Header];
49 set => this.Set((int)MsiPatchHeadersSymbolFields.Header, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchMetadataSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchMetadataSymbol.cs
new file mode 100644
index 00000000..682adbca
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchMetadataSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchMetadata = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchMetadata,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchMetadataSymbolFields.Company), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchMetadataSymbolFields.Property), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiPatchMetadataSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(MsiPatchMetadataSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum MsiPatchMetadataSymbolFields
24 {
25 Company,
26 Property,
27 Value,
28 }
29
30 public class MsiPatchMetadataSymbol : IntermediateSymbol
31 {
32 public MsiPatchMetadataSymbol() : base(SymbolDefinitions.MsiPatchMetadata, null, null)
33 {
34 }
35
36 public MsiPatchMetadataSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchMetadata, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[MsiPatchMetadataSymbolFields index] => this.Fields[(int)index];
41
42 public string Company
43 {
44 get => (string)this.Fields[(int)MsiPatchMetadataSymbolFields.Company];
45 set => this.Set((int)MsiPatchMetadataSymbolFields.Company, value);
46 }
47
48 public string Property
49 {
50 get => (string)this.Fields[(int)MsiPatchMetadataSymbolFields.Property];
51 set => this.Set((int)MsiPatchMetadataSymbolFields.Property, value);
52 }
53
54 public string Value
55 {
56 get => (string)this.Fields[(int)MsiPatchMetadataSymbolFields.Value];
57 set => this.Set((int)MsiPatchMetadataSymbolFields.Value, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyFileSymbol.cs
new file mode 100644
index 00000000..75385ba8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyFileSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchOldAssemblyFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchOldAssemblyFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchOldAssemblyFileSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchOldAssemblyFileSymbolFields.AssemblyRef), IntermediateFieldType.String),
15 },
16 typeof(MsiPatchOldAssemblyFileSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum MsiPatchOldAssemblyFileSymbolFields
23 {
24 FileRef,
25 AssemblyRef,
26 }
27
28 public class MsiPatchOldAssemblyFileSymbol : IntermediateSymbol
29 {
30 public MsiPatchOldAssemblyFileSymbol() : base(SymbolDefinitions.MsiPatchOldAssemblyFile, null, null)
31 {
32 }
33
34 public MsiPatchOldAssemblyFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchOldAssemblyFile, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[MsiPatchOldAssemblyFileSymbolFields index] => this.Fields[(int)index];
39
40 public string FileRef
41 {
42 get => (string)this.Fields[(int)MsiPatchOldAssemblyFileSymbolFields.FileRef];
43 set => this.Set((int)MsiPatchOldAssemblyFileSymbolFields.FileRef, value);
44 }
45
46 public string AssemblyRef
47 {
48 get => (string)this.Fields[(int)MsiPatchOldAssemblyFileSymbolFields.AssemblyRef];
49 set => this.Set((int)MsiPatchOldAssemblyFileSymbolFields.AssemblyRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyNameSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyNameSymbol.cs
new file mode 100644
index 00000000..199f5ff7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchOldAssemblyNameSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchOldAssemblyName = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchOldAssemblyName,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchOldAssemblyNameSymbolFields.Assembly), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchOldAssemblyNameSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiPatchOldAssemblyNameSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(MsiPatchOldAssemblyNameSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum MsiPatchOldAssemblyNameSymbolFields
24 {
25 Assembly,
26 Name,
27 Value,
28 }
29
30 public class MsiPatchOldAssemblyNameSymbol : IntermediateSymbol
31 {
32 public MsiPatchOldAssemblyNameSymbol() : base(SymbolDefinitions.MsiPatchOldAssemblyName, null, null)
33 {
34 }
35
36 public MsiPatchOldAssemblyNameSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchOldAssemblyName, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[MsiPatchOldAssemblyNameSymbolFields index] => this.Fields[(int)index];
41
42 public string Assembly
43 {
44 get => (string)this.Fields[(int)MsiPatchOldAssemblyNameSymbolFields.Assembly];
45 set => this.Set((int)MsiPatchOldAssemblyNameSymbolFields.Assembly, value);
46 }
47
48 public string Name
49 {
50 get => (string)this.Fields[(int)MsiPatchOldAssemblyNameSymbolFields.Name];
51 set => this.Set((int)MsiPatchOldAssemblyNameSymbolFields.Name, value);
52 }
53
54 public string Value
55 {
56 get => (string)this.Fields[(int)MsiPatchOldAssemblyNameSymbolFields.Value];
57 set => this.Set((int)MsiPatchOldAssemblyNameSymbolFields.Value, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiPatchSequenceSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiPatchSequenceSymbol.cs
new file mode 100644
index 00000000..ac2b0dc4
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiPatchSequenceSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiPatchSequence = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiPatchSequence,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiPatchSequenceSymbolFields.PatchFamily), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiPatchSequenceSymbolFields.ProductCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiPatchSequenceSymbolFields.Sequence), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(MsiPatchSequenceSymbolFields.Attributes), IntermediateFieldType.Number),
17 },
18 typeof(MsiPatchSequenceSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum MsiPatchSequenceSymbolFields
25 {
26 PatchFamily,
27 ProductCode,
28 Sequence,
29 Attributes,
30 }
31
32 public class MsiPatchSequenceSymbol : IntermediateSymbol
33 {
34 public MsiPatchSequenceSymbol() : base(SymbolDefinitions.MsiPatchSequence, null, null)
35 {
36 }
37
38 public MsiPatchSequenceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiPatchSequence, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[MsiPatchSequenceSymbolFields index] => this.Fields[(int)index];
43
44 public string PatchFamily
45 {
46 get => (string)this.Fields[(int)MsiPatchSequenceSymbolFields.PatchFamily];
47 set => this.Set((int)MsiPatchSequenceSymbolFields.PatchFamily, value);
48 }
49
50 public string ProductCode
51 {
52 get => (string)this.Fields[(int)MsiPatchSequenceSymbolFields.ProductCode];
53 set => this.Set((int)MsiPatchSequenceSymbolFields.ProductCode, value);
54 }
55
56 public string Sequence
57 {
58 get => (string)this.Fields[(int)MsiPatchSequenceSymbolFields.Sequence];
59 set => this.Set((int)MsiPatchSequenceSymbolFields.Sequence, value);
60 }
61
62 public int? Attributes
63 {
64 get => (int?)this.Fields[(int)MsiPatchSequenceSymbolFields.Attributes];
65 set => this.Set((int)MsiPatchSequenceSymbolFields.Attributes, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigFailureActionsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigFailureActionsSymbol.cs
new file mode 100644
index 00000000..92ca4059
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigFailureActionsSymbol.cs
@@ -0,0 +1,116 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiServiceConfigFailureActions = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiServiceConfigFailureActions,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnInstall), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnReinstall), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnUninstall), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.ResetPeriod), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.RebootMessage), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.Command), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.Actions), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.DelayActions), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.ComponentRef), IntermediateFieldType.String),
23 },
24 typeof(MsiServiceConfigFailureActionsSymbol));
25 }
26}
27
28namespace WixToolset.Data.Symbols
29{
30 public enum MsiServiceConfigFailureActionsSymbolFields
31 {
32 Name,
33 OnInstall,
34 OnReinstall,
35 OnUninstall,
36 ResetPeriod,
37 RebootMessage,
38 Command,
39 Actions,
40 DelayActions,
41 ComponentRef,
42 }
43
44 public class MsiServiceConfigFailureActionsSymbol : IntermediateSymbol
45 {
46 public MsiServiceConfigFailureActionsSymbol() : base(SymbolDefinitions.MsiServiceConfigFailureActions, null, null)
47 {
48 }
49
50 public MsiServiceConfigFailureActionsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiServiceConfigFailureActions, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[MsiServiceConfigFailureActionsSymbolFields index] => this.Fields[(int)index];
55
56 public string Name
57 {
58 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.Name];
59 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.Name, value);
60 }
61
62 public bool OnInstall
63 {
64 get => this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.OnInstall].AsBool();
65 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.OnInstall, value);
66 }
67
68 public bool OnReinstall
69 {
70 get => this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.OnReinstall].AsBool();
71 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.OnReinstall, value);
72 }
73
74 public bool OnUninstall
75 {
76 get => this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.OnUninstall].AsBool();
77 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.OnUninstall, value);
78 }
79
80 public int? ResetPeriod
81 {
82 get => (int?)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.ResetPeriod];
83 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.ResetPeriod, value);
84 }
85
86 public string RebootMessage
87 {
88 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.RebootMessage];
89 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.RebootMessage, value);
90 }
91
92 public string Command
93 {
94 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.Command];
95 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.Command, value);
96 }
97
98 public string Actions
99 {
100 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.Actions];
101 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.Actions, value);
102 }
103
104 public string DelayActions
105 {
106 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.DelayActions];
107 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.DelayActions, value);
108 }
109
110 public string ComponentRef
111 {
112 get => (string)this.Fields[(int)MsiServiceConfigFailureActionsSymbolFields.ComponentRef];
113 set => this.Set((int)MsiServiceConfigFailureActionsSymbolFields.ComponentRef, value);
114 }
115 }
116} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigSymbol.cs
new file mode 100644
index 00000000..9ad72d1e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiServiceConfigSymbol.cs
@@ -0,0 +1,101 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiServiceConfig = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiServiceConfig,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiServiceConfigSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnInstall), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnReinstall), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(MsiServiceConfigFailureActionsSymbolFields.OnUninstall), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(MsiServiceConfigSymbolFields.ConfigType), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(MsiServiceConfigSymbolFields.Argument), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(MsiServiceConfigSymbolFields.ComponentRef), IntermediateFieldType.String),
20 },
21 typeof(MsiServiceConfigSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum MsiServiceConfigSymbolFields
28 {
29 Name,
30 OnInstall,
31 OnReinstall,
32 OnUninstall,
33 ConfigType,
34 Argument,
35 ComponentRef,
36 }
37
38 public enum MsiServiceConfigType
39 {
40 DelayedAutoStart = 3,
41 FailureActionsFlag,
42 ServiceSidInfo,
43 RequiredPrivilegesInfo,
44 PreshutdownInfo,
45 }
46
47 public class MsiServiceConfigSymbol : IntermediateSymbol
48 {
49 public MsiServiceConfigSymbol() : base(SymbolDefinitions.MsiServiceConfig, null, null)
50 {
51 }
52
53 public MsiServiceConfigSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiServiceConfig, sourceLineNumber, id)
54 {
55 }
56
57 public IntermediateField this[MsiServiceConfigSymbolFields index] => this.Fields[(int)index];
58
59 public string Name
60 {
61 get => (string)this.Fields[(int)MsiServiceConfigSymbolFields.Name];
62 set => this.Set((int)MsiServiceConfigSymbolFields.Name, value);
63 }
64
65 public bool OnInstall
66 {
67 get => this.Fields[(int)MsiServiceConfigSymbolFields.OnInstall].AsBool();
68 set => this.Set((int)MsiServiceConfigSymbolFields.OnInstall, value);
69 }
70
71 public bool OnReinstall
72 {
73 get => this.Fields[(int)MsiServiceConfigSymbolFields.OnReinstall].AsBool();
74 set => this.Set((int)MsiServiceConfigSymbolFields.OnReinstall, value);
75 }
76
77 public bool OnUninstall
78 {
79 get => this.Fields[(int)MsiServiceConfigSymbolFields.OnUninstall].AsBool();
80 set => this.Set((int)MsiServiceConfigSymbolFields.OnUninstall, value);
81 }
82
83 public MsiServiceConfigType ConfigType
84 {
85 get => (MsiServiceConfigType)this.Fields[(int)MsiServiceConfigSymbolFields.ConfigType].AsNumber();
86 set => this.Set((int)MsiServiceConfigSymbolFields.ConfigType, (int)value);
87 }
88
89 public string Argument
90 {
91 get => (string)this.Fields[(int)MsiServiceConfigSymbolFields.Argument];
92 set => this.Set((int)MsiServiceConfigSymbolFields.Argument, value);
93 }
94
95 public string ComponentRef
96 {
97 get => (string)this.Fields[(int)MsiServiceConfigSymbolFields.ComponentRef];
98 set => this.Set((int)MsiServiceConfigSymbolFields.ComponentRef, value);
99 }
100 }
101} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/MsiShortcutPropertySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/MsiShortcutPropertySymbol.cs
new file mode 100644
index 00000000..5d5a46e5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/MsiShortcutPropertySymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition MsiShortcutProperty = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.MsiShortcutProperty,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(MsiShortcutPropertySymbolFields.ShortcutRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(MsiShortcutPropertySymbolFields.PropertyKey), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(MsiShortcutPropertySymbolFields.PropVariantValue), IntermediateFieldType.String),
16 },
17 typeof(MsiShortcutPropertySymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum MsiShortcutPropertySymbolFields
24 {
25 ShortcutRef,
26 PropertyKey,
27 PropVariantValue,
28 }
29
30 public class MsiShortcutPropertySymbol : IntermediateSymbol
31 {
32 public MsiShortcutPropertySymbol() : base(SymbolDefinitions.MsiShortcutProperty, null, null)
33 {
34 }
35
36 public MsiShortcutPropertySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.MsiShortcutProperty, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[MsiShortcutPropertySymbolFields index] => this.Fields[(int)index];
41
42 public string ShortcutRef
43 {
44 get => (string)this.Fields[(int)MsiShortcutPropertySymbolFields.ShortcutRef];
45 set => this.Set((int)MsiShortcutPropertySymbolFields.ShortcutRef, value);
46 }
47
48 public string PropertyKey
49 {
50 get => (string)this.Fields[(int)MsiShortcutPropertySymbolFields.PropertyKey];
51 set => this.Set((int)MsiShortcutPropertySymbolFields.PropertyKey, value);
52 }
53
54 public string PropVariantValue
55 {
56 get => (string)this.Fields[(int)MsiShortcutPropertySymbolFields.PropVariantValue];
57 set => this.Set((int)MsiShortcutPropertySymbolFields.PropVariantValue, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ODBCAttributeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ODBCAttributeSymbol.cs
new file mode 100644
index 00000000..45ca6ed8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ODBCAttributeSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ODBCAttribute = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ODBCAttribute,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ODBCAttributeSymbolFields.DriverRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ODBCAttributeSymbolFields.Attribute), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ODBCAttributeSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(ODBCAttributeSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum ODBCAttributeSymbolFields
24 {
25 DriverRef,
26 Attribute,
27 Value,
28 }
29
30 public class ODBCAttributeSymbol : IntermediateSymbol
31 {
32 public ODBCAttributeSymbol() : base(SymbolDefinitions.ODBCAttribute, null, null)
33 {
34 }
35
36 public ODBCAttributeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ODBCAttribute, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[ODBCAttributeSymbolFields index] => this.Fields[(int)index];
41
42 public string DriverRef
43 {
44 get => (string)this.Fields[(int)ODBCAttributeSymbolFields.DriverRef];
45 set => this.Set((int)ODBCAttributeSymbolFields.DriverRef, value);
46 }
47
48 public string Attribute
49 {
50 get => (string)this.Fields[(int)ODBCAttributeSymbolFields.Attribute];
51 set => this.Set((int)ODBCAttributeSymbolFields.Attribute, value);
52 }
53
54 public string Value
55 {
56 get => (string)this.Fields[(int)ODBCAttributeSymbolFields.Value];
57 set => this.Set((int)ODBCAttributeSymbolFields.Value, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ODBCDataSourceSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ODBCDataSourceSymbol.cs
new file mode 100644
index 00000000..6af140bd
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ODBCDataSourceSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ODBCDataSource = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ODBCDataSource,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ODBCDataSourceSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ODBCDataSourceSymbolFields.Description), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ODBCDataSourceSymbolFields.DriverDescription), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ODBCDataSourceSymbolFields.Registration), IntermediateFieldType.Number),
17 },
18 typeof(ODBCDataSourceSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ODBCDataSourceSymbolFields
25 {
26 ComponentRef,
27 Description,
28 DriverDescription,
29 Registration,
30 }
31
32 public class ODBCDataSourceSymbol : IntermediateSymbol
33 {
34 public ODBCDataSourceSymbol() : base(SymbolDefinitions.ODBCDataSource, null, null)
35 {
36 }
37
38 public ODBCDataSourceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ODBCDataSource, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ODBCDataSourceSymbolFields index] => this.Fields[(int)index];
43
44 public string ComponentRef
45 {
46 get => (string)this.Fields[(int)ODBCDataSourceSymbolFields.ComponentRef];
47 set => this.Set((int)ODBCDataSourceSymbolFields.ComponentRef, value);
48 }
49
50 public string Description
51 {
52 get => (string)this.Fields[(int)ODBCDataSourceSymbolFields.Description];
53 set => this.Set((int)ODBCDataSourceSymbolFields.Description, value);
54 }
55
56 public string DriverDescription
57 {
58 get => (string)this.Fields[(int)ODBCDataSourceSymbolFields.DriverDescription];
59 set => this.Set((int)ODBCDataSourceSymbolFields.DriverDescription, value);
60 }
61
62 public int Registration
63 {
64 get => (int)this.Fields[(int)ODBCDataSourceSymbolFields.Registration];
65 set => this.Set((int)ODBCDataSourceSymbolFields.Registration, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/ODBCDriverSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ODBCDriverSymbol.cs
new file mode 100644
index 00000000..b31cc4cb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ODBCDriverSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ODBCDriver = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ODBCDriver,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ODBCDriverSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ODBCDriverSymbolFields.Description), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ODBCDriverSymbolFields.FileRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ODBCDriverSymbolFields.SetupFileRef), IntermediateFieldType.String),
17 },
18 typeof(ODBCDriverSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ODBCDriverSymbolFields
25 {
26 ComponentRef,
27 Description,
28 FileRef,
29 SetupFileRef,
30 }
31
32 public class ODBCDriverSymbol : IntermediateSymbol
33 {
34 public ODBCDriverSymbol() : base(SymbolDefinitions.ODBCDriver, null, null)
35 {
36 }
37
38 public ODBCDriverSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ODBCDriver, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ODBCDriverSymbolFields index] => this.Fields[(int)index];
43
44 public string ComponentRef
45 {
46 get => (string)this.Fields[(int)ODBCDriverSymbolFields.ComponentRef];
47 set => this.Set((int)ODBCDriverSymbolFields.ComponentRef, value);
48 }
49
50 public string Description
51 {
52 get => (string)this.Fields[(int)ODBCDriverSymbolFields.Description];
53 set => this.Set((int)ODBCDriverSymbolFields.Description, value);
54 }
55
56 public string FileRef
57 {
58 get => (string)this.Fields[(int)ODBCDriverSymbolFields.FileRef];
59 set => this.Set((int)ODBCDriverSymbolFields.FileRef, value);
60 }
61
62 public string SetupFileRef
63 {
64 get => (string)this.Fields[(int)ODBCDriverSymbolFields.SetupFileRef];
65 set => this.Set((int)ODBCDriverSymbolFields.SetupFileRef, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/ODBCSourceAttributeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ODBCSourceAttributeSymbol.cs
new file mode 100644
index 00000000..2e25a5f7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ODBCSourceAttributeSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ODBCSourceAttribute = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ODBCSourceAttribute,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ODBCSourceAttributeSymbolFields.DataSourceRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ODBCSourceAttributeSymbolFields.Attribute), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ODBCSourceAttributeSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(ODBCSourceAttributeSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum ODBCSourceAttributeSymbolFields
24 {
25 DataSourceRef,
26 Attribute,
27 Value,
28 }
29
30 public class ODBCSourceAttributeSymbol : IntermediateSymbol
31 {
32 public ODBCSourceAttributeSymbol() : base(SymbolDefinitions.ODBCSourceAttribute, null, null)
33 {
34 }
35
36 public ODBCSourceAttributeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ODBCSourceAttribute, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[ODBCSourceAttributeSymbolFields index] => this.Fields[(int)index];
41
42 public string DataSourceRef
43 {
44 get => (string)this.Fields[(int)ODBCSourceAttributeSymbolFields.DataSourceRef];
45 set => this.Set((int)ODBCSourceAttributeSymbolFields.DataSourceRef, value);
46 }
47
48 public string Attribute
49 {
50 get => (string)this.Fields[(int)ODBCSourceAttributeSymbolFields.Attribute];
51 set => this.Set((int)ODBCSourceAttributeSymbolFields.Attribute, value);
52 }
53
54 public string Value
55 {
56 get => (string)this.Fields[(int)ODBCSourceAttributeSymbolFields.Value];
57 set => this.Set((int)ODBCSourceAttributeSymbolFields.Value, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ODBCTranslatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ODBCTranslatorSymbol.cs
new file mode 100644
index 00000000..c444b834
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ODBCTranslatorSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ODBCTranslator = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ODBCTranslator,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ODBCTranslatorSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ODBCTranslatorSymbolFields.Description), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ODBCTranslatorSymbolFields.FileRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ODBCTranslatorSymbolFields.SetupFileRef), IntermediateFieldType.String),
17 },
18 typeof(ODBCTranslatorSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ODBCTranslatorSymbolFields
25 {
26 ComponentRef,
27 Description,
28 FileRef,
29 SetupFileRef,
30 }
31
32 public class ODBCTranslatorSymbol : IntermediateSymbol
33 {
34 public ODBCTranslatorSymbol() : base(SymbolDefinitions.ODBCTranslator, null, null)
35 {
36 }
37
38 public ODBCTranslatorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ODBCTranslator, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ODBCTranslatorSymbolFields index] => this.Fields[(int)index];
43
44 public string ComponentRef
45 {
46 get => (string)this.Fields[(int)ODBCTranslatorSymbolFields.ComponentRef];
47 set => this.Set((int)ODBCTranslatorSymbolFields.ComponentRef, value);
48 }
49
50 public string Description
51 {
52 get => (string)this.Fields[(int)ODBCTranslatorSymbolFields.Description];
53 set => this.Set((int)ODBCTranslatorSymbolFields.Description, value);
54 }
55
56 public string FileRef
57 {
58 get => (string)this.Fields[(int)ODBCTranslatorSymbolFields.FileRef];
59 set => this.Set((int)ODBCTranslatorSymbolFields.FileRef, value);
60 }
61
62 public string SetupFileRef
63 {
64 get => (string)this.Fields[(int)ODBCTranslatorSymbolFields.SetupFileRef];
65 set => this.Set((int)ODBCTranslatorSymbolFields.SetupFileRef, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/PatchMetadataSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PatchMetadataSymbol.cs
new file mode 100644
index 00000000..201b8444
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PatchMetadataSymbol.cs
@@ -0,0 +1,89 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition PatchMetadata = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.PatchMetadata,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PatchMetadataSymbolFields.Company), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PatchMetadataSymbolFields.Property), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PatchMetadataSymbolFields.Value), IntermediateFieldType.String),
16 },
17 typeof(PatchMetadataSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 using System;
24
25 public enum PatchMetadataSymbolFields
26 {
27 Company,
28 Property,
29 Value,
30 }
31
32 /// <summary>
33 /// Values for the OptimizeCA MsiPatchMetdata property, which indicates whether custom actions can be skipped when applying the patch.
34 /// </summary>
35 [Flags]
36 public enum OptimizeCAFlags
37 {
38 /// <summary>
39 /// No custom actions are skipped.
40 /// </summary>
41 None = 0,
42
43 /// <summary>
44 /// Skip property (type 51) and directory (type 35) assignment custom actions.
45 /// </summary>
46 SkipAssignment = 1,
47
48 /// <summary>
49 /// Skip immediate custom actions that are not property or directory assignment custom actions.
50 /// </summary>
51 SkipImmediate = 2,
52
53 /// <summary>
54 /// Skip custom actions that run within the script.
55 /// </summary>
56 SkipDeferred = 4
57 }
58
59 public class PatchMetadataSymbol : IntermediateSymbol
60 {
61 public PatchMetadataSymbol() : base(SymbolDefinitions.PatchMetadata, null, null)
62 {
63 }
64
65 public PatchMetadataSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.PatchMetadata, sourceLineNumber, id)
66 {
67 }
68
69 public IntermediateField this[PatchMetadataSymbolFields index] => this.Fields[(int)index];
70
71 public string Company
72 {
73 get => (string)this.Fields[(int)PatchMetadataSymbolFields.Company];
74 set => this.Set((int)PatchMetadataSymbolFields.Company, value);
75 }
76
77 public string Property
78 {
79 get => (string)this.Fields[(int)PatchMetadataSymbolFields.Property];
80 set => this.Set((int)PatchMetadataSymbolFields.Property, value);
81 }
82
83 public string Value
84 {
85 get => (string)this.Fields[(int)PatchMetadataSymbolFields.Value];
86 set => this.Set((int)PatchMetadataSymbolFields.Value, value);
87 }
88 }
89}
diff --git a/src/api/wix/WixToolset.Data/Symbols/PatchPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PatchPackageSymbol.cs
new file mode 100644
index 00000000..0efdfd25
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PatchPackageSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition PatchPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.PatchPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PatchPackageSymbolFields.PatchId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PatchPackageSymbolFields.MediaDiskIdRef), IntermediateFieldType.Number),
15 },
16 typeof(PatchPackageSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum PatchPackageSymbolFields
23 {
24 PatchId,
25 MediaDiskIdRef,
26 }
27
28 public class PatchPackageSymbol : IntermediateSymbol
29 {
30 public PatchPackageSymbol() : base(SymbolDefinitions.PatchPackage, null, null)
31 {
32 }
33
34 public PatchPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.PatchPackage, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[PatchPackageSymbolFields index] => this.Fields[(int)index];
39
40 public string PatchId
41 {
42 get => (string)this.Fields[(int)PatchPackageSymbolFields.PatchId];
43 set => this.Set((int)PatchPackageSymbolFields.PatchId, value);
44 }
45
46 public int MediaDiskIdRef
47 {
48 get => (int)this.Fields[(int)PatchPackageSymbolFields.MediaDiskIdRef];
49 set => this.Set((int)PatchPackageSymbolFields.MediaDiskIdRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/PatchSequenceSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PatchSequenceSymbol.cs
new file mode 100644
index 00000000..a4cbca61
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PatchSequenceSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition PatchSequence = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.PatchSequence,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PatchSequenceSymbolFields.PatchFamily), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PatchSequenceSymbolFields.Target), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PatchSequenceSymbolFields.Sequence), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(PatchSequenceSymbolFields.Supersede), IntermediateFieldType.Number),
17 },
18 typeof(PatchSequenceSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum PatchSequenceSymbolFields
25 {
26 PatchFamily,
27 Target,
28 Sequence,
29 Supersede,
30 }
31
32 public class PatchSequenceSymbol : IntermediateSymbol
33 {
34 public PatchSequenceSymbol() : base(SymbolDefinitions.PatchSequence, null, null)
35 {
36 }
37
38 public PatchSequenceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.PatchSequence, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[PatchSequenceSymbolFields index] => this.Fields[(int)index];
43
44 public string PatchFamily
45 {
46 get => (string)this.Fields[(int)PatchSequenceSymbolFields.PatchFamily];
47 set => this.Set((int)PatchSequenceSymbolFields.PatchFamily, value);
48 }
49
50 public string Target
51 {
52 get => (string)this.Fields[(int)PatchSequenceSymbolFields.Target];
53 set => this.Set((int)PatchSequenceSymbolFields.Target, value);
54 }
55
56 public string Sequence
57 {
58 get => (string)this.Fields[(int)PatchSequenceSymbolFields.Sequence];
59 set => this.Set((int)PatchSequenceSymbolFields.Sequence, value);
60 }
61
62 public int? Supersede
63 {
64 get => (int?)this.Fields[(int)PatchSequenceSymbolFields.Supersede];
65 set => this.Set((int)PatchSequenceSymbolFields.Supersede, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/PatchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PatchSymbol.cs
new file mode 100644
index 00000000..31e68d76
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PatchSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Patch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Patch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PatchSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PatchSymbolFields.Sequence), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(PatchSymbolFields.PatchSize), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(PatchSymbolFields.Attributes), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(PatchSymbolFields.Header), IntermediateFieldType.Path),
18 new IntermediateFieldDefinition(nameof(PatchSymbolFields.StreamRef), IntermediateFieldType.String),
19 },
20 typeof(PatchSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum PatchSymbolFields
27 {
28 FileRef,
29 Sequence,
30 PatchSize,
31 Attributes,
32 Header,
33 StreamRef,
34 }
35
36 public class PatchSymbol : IntermediateSymbol
37 {
38 public PatchSymbol() : base(SymbolDefinitions.Patch, null, null)
39 {
40 }
41
42 public PatchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Patch, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[PatchSymbolFields index] => this.Fields[(int)index];
47
48 public string FileRef
49 {
50 get => (string)this.Fields[(int)PatchSymbolFields.FileRef];
51 set => this.Set((int)PatchSymbolFields.FileRef, value);
52 }
53
54 public int Sequence
55 {
56 get => (int)this.Fields[(int)PatchSymbolFields.Sequence];
57 set => this.Set((int)PatchSymbolFields.Sequence, value);
58 }
59
60 public int PatchSize
61 {
62 get => (int)this.Fields[(int)PatchSymbolFields.PatchSize];
63 set => this.Set((int)PatchSymbolFields.PatchSize, value);
64 }
65
66 public int Attributes
67 {
68 get => (int)this.Fields[(int)PatchSymbolFields.Attributes];
69 set => this.Set((int)PatchSymbolFields.Attributes, value);
70 }
71
72 public string Header
73 {
74 get => (string)this.Fields[(int)PatchSymbolFields.Header];
75 set => this.Set((int)PatchSymbolFields.Header, value);
76 }
77
78 public string StreamRef
79 {
80 get => (string)this.Fields[(int)PatchSymbolFields.StreamRef];
81 set => this.Set((int)PatchSymbolFields.StreamRef, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ProgIdSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ProgIdSymbol.cs
new file mode 100644
index 00000000..57ac758f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ProgIdSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ProgId = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ProgId,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.ProgId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.ParentProgIdRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.ClassRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.Description), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.IconRef), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ProgIdSymbolFields.IconIndex), IntermediateFieldType.Number),
19 },
20 typeof(ProgIdSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum ProgIdSymbolFields
27 {
28 ProgId,
29 ParentProgIdRef,
30 ClassRef,
31 Description,
32 IconRef,
33 IconIndex,
34 }
35
36 public class ProgIdSymbol : IntermediateSymbol
37 {
38 public ProgIdSymbol() : base(SymbolDefinitions.ProgId, null, null)
39 {
40 }
41
42 public ProgIdSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ProgId, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[ProgIdSymbolFields index] => this.Fields[(int)index];
47
48 public string ProgId
49 {
50 get => (string)this.Fields[(int)ProgIdSymbolFields.ProgId];
51 set => this.Set((int)ProgIdSymbolFields.ProgId, value);
52 }
53
54 public string ParentProgIdRef
55 {
56 get => (string)this.Fields[(int)ProgIdSymbolFields.ParentProgIdRef];
57 set => this.Set((int)ProgIdSymbolFields.ParentProgIdRef, value);
58 }
59
60 public string ClassRef
61 {
62 get => (string)this.Fields[(int)ProgIdSymbolFields.ClassRef];
63 set => this.Set((int)ProgIdSymbolFields.ClassRef, value);
64 }
65
66 public string Description
67 {
68 get => (string)this.Fields[(int)ProgIdSymbolFields.Description];
69 set => this.Set((int)ProgIdSymbolFields.Description, value);
70 }
71
72 public string IconRef
73 {
74 get => (string)this.Fields[(int)ProgIdSymbolFields.IconRef];
75 set => this.Set((int)ProgIdSymbolFields.IconRef, value);
76 }
77
78 public int? IconIndex
79 {
80 get => (int?)this.Fields[(int)ProgIdSymbolFields.IconIndex];
81 set => this.Set((int)ProgIdSymbolFields.IconIndex, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/PropertiesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PropertiesSymbol.cs
new file mode 100644
index 00000000..61059aa6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PropertiesSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Properties = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Properties,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PropertiesSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PropertiesSymbolFields.Value), IntermediateFieldType.String),
15 },
16 typeof(PropertiesSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum PropertiesSymbolFields
23 {
24 Name,
25 Value,
26 }
27
28 public class PropertiesSymbol : IntermediateSymbol
29 {
30 public PropertiesSymbol() : base(SymbolDefinitions.Properties, null, null)
31 {
32 }
33
34 public PropertiesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Properties, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[PropertiesSymbolFields index] => this.Fields[(int)index];
39
40 public string Name
41 {
42 get => (string)this.Fields[(int)PropertiesSymbolFields.Name];
43 set => this.Set((int)PropertiesSymbolFields.Name, value);
44 }
45
46 public string Value
47 {
48 get => (string)this.Fields[(int)PropertiesSymbolFields.Value];
49 set => this.Set((int)PropertiesSymbolFields.Value, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/PropertySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PropertySymbol.cs
new file mode 100644
index 00000000..b93d962a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PropertySymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Property = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Property,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PropertySymbolFields.Value), IntermediateFieldType.String),
14 },
15 typeof(PropertySymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum PropertySymbolFields
22 {
23 Value,
24 }
25
26 public class PropertySymbol : IntermediateSymbol
27 {
28 public PropertySymbol() : base(SymbolDefinitions.Property, null, null)
29 {
30 }
31
32 public PropertySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Property, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[PropertySymbolFields index] => this.Fields[(int)index];
37
38 public string Value
39 {
40 get => (string)this.Fields[(int)PropertySymbolFields.Value];
41 set => this.Set((int)PropertySymbolFields.Value, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/PublishComponentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/PublishComponentSymbol.cs
new file mode 100644
index 00000000..3fb81801
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/PublishComponentSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition PublishComponent = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.PublishComponent,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(PublishComponentSymbolFields.ComponentId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(PublishComponentSymbolFields.Qualifier), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PublishComponentSymbolFields.ComponentRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(PublishComponentSymbolFields.AppData), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(PublishComponentSymbolFields.FeatureRef), IntermediateFieldType.String),
18 },
19 typeof(PublishComponentSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum PublishComponentSymbolFields
26 {
27 ComponentId,
28 Qualifier,
29 ComponentRef,
30 AppData,
31 FeatureRef,
32 }
33
34 public class PublishComponentSymbol : IntermediateSymbol
35 {
36 public PublishComponentSymbol() : base(SymbolDefinitions.PublishComponent, null, null)
37 {
38 }
39
40 public PublishComponentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.PublishComponent, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[PublishComponentSymbolFields index] => this.Fields[(int)index];
45
46 public string ComponentId
47 {
48 get => (string)this.Fields[(int)PublishComponentSymbolFields.ComponentId];
49 set => this.Set((int)PublishComponentSymbolFields.ComponentId, value);
50 }
51
52 public string Qualifier
53 {
54 get => (string)this.Fields[(int)PublishComponentSymbolFields.Qualifier];
55 set => this.Set((int)PublishComponentSymbolFields.Qualifier, value);
56 }
57
58 public string ComponentRef
59 {
60 get => (string)this.Fields[(int)PublishComponentSymbolFields.ComponentRef];
61 set => this.Set((int)PublishComponentSymbolFields.ComponentRef, value);
62 }
63
64 public string AppData
65 {
66 get => (string)this.Fields[(int)PublishComponentSymbolFields.AppData];
67 set => this.Set((int)PublishComponentSymbolFields.AppData, value);
68 }
69
70 public string FeatureRef
71 {
72 get => (string)this.Fields[(int)PublishComponentSymbolFields.FeatureRef];
73 set => this.Set((int)PublishComponentSymbolFields.FeatureRef, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/RadioButtonSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/RadioButtonSymbol.cs
new file mode 100644
index 00000000..6a26e937
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RadioButtonSymbol.cs
@@ -0,0 +1,108 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition RadioButton = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.RadioButton,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Property), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Order), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.X), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Y), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Width), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Height), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Text), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(RadioButtonSymbolFields.Help), IntermediateFieldType.String),
22 },
23 typeof(RadioButtonSymbol));
24 }
25}
26
27namespace WixToolset.Data.Symbols
28{
29 public enum RadioButtonSymbolFields
30 {
31 Property,
32 Order,
33 Value,
34 X,
35 Y,
36 Width,
37 Height,
38 Text,
39 Help,
40 }
41
42 public class RadioButtonSymbol : IntermediateSymbol
43 {
44 public RadioButtonSymbol() : base(SymbolDefinitions.RadioButton, null, null)
45 {
46 }
47
48 public RadioButtonSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.RadioButton, sourceLineNumber, id)
49 {
50 }
51
52 public IntermediateField this[RadioButtonSymbolFields index] => this.Fields[(int)index];
53
54 public string Property
55 {
56 get => (string)this.Fields[(int)RadioButtonSymbolFields.Property];
57 set => this.Set((int)RadioButtonSymbolFields.Property, value);
58 }
59
60 public int Order
61 {
62 get => (int)this.Fields[(int)RadioButtonSymbolFields.Order];
63 set => this.Set((int)RadioButtonSymbolFields.Order, value);
64 }
65
66 public string Value
67 {
68 get => (string)this.Fields[(int)RadioButtonSymbolFields.Value];
69 set => this.Set((int)RadioButtonSymbolFields.Value, value);
70 }
71
72 public int X
73 {
74 get => (int)this.Fields[(int)RadioButtonSymbolFields.X];
75 set => this.Set((int)RadioButtonSymbolFields.X, value);
76 }
77
78 public int Y
79 {
80 get => (int)this.Fields[(int)RadioButtonSymbolFields.Y];
81 set => this.Set((int)RadioButtonSymbolFields.Y, value);
82 }
83
84 public int Width
85 {
86 get => (int)this.Fields[(int)RadioButtonSymbolFields.Width];
87 set => this.Set((int)RadioButtonSymbolFields.Width, value);
88 }
89
90 public int Height
91 {
92 get => (int)this.Fields[(int)RadioButtonSymbolFields.Height];
93 set => this.Set((int)RadioButtonSymbolFields.Height, value);
94 }
95
96 public string Text
97 {
98 get => (string)this.Fields[(int)RadioButtonSymbolFields.Text];
99 set => this.Set((int)RadioButtonSymbolFields.Text, value);
100 }
101
102 public string Help
103 {
104 get => (string)this.Fields[(int)RadioButtonSymbolFields.Help];
105 set => this.Set((int)RadioButtonSymbolFields.Help, value);
106 }
107 }
108} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/RegLocatorSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/RegLocatorSymbol.cs
new file mode 100644
index 00000000..bf50dab7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RegLocatorSymbol.cs
@@ -0,0 +1,83 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition RegLocator = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.RegLocator,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(RegLocatorSymbolFields.Root), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(RegLocatorSymbolFields.Key), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(RegLocatorSymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(RegLocatorSymbolFields.Type), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(RegLocatorSymbolFields.Win64), IntermediateFieldType.Bool),
18 },
19 typeof(RegLocatorSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum RegLocatorSymbolFields
26 {
27 Root,
28 Key,
29 Name,
30 Type,
31 Win64,
32 }
33
34 public enum RegLocatorType
35 {
36 Directory,
37 FileName,
38 Raw
39 };
40
41 public class RegLocatorSymbol : IntermediateSymbol
42 {
43 public RegLocatorSymbol() : base(SymbolDefinitions.RegLocator, null, null)
44 {
45 }
46
47 public RegLocatorSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.RegLocator, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[RegLocatorSymbolFields index] => this.Fields[(int)index];
52
53 public RegistryRootType Root
54 {
55 get => (RegistryRootType)this.Fields[(int)RegLocatorSymbolFields.Root].AsNumber();
56 set => this.Set((int)RegLocatorSymbolFields.Root, (int)value);
57 }
58
59 public string Key
60 {
61 get => (string)this.Fields[(int)RegLocatorSymbolFields.Key];
62 set => this.Set((int)RegLocatorSymbolFields.Key, value);
63 }
64
65 public string Name
66 {
67 get => (string)this.Fields[(int)RegLocatorSymbolFields.Name];
68 set => this.Set((int)RegLocatorSymbolFields.Name, value);
69 }
70
71 public RegLocatorType Type
72 {
73 get => (RegLocatorType)this.Fields[(int)RegLocatorSymbolFields.Type].AsNumber();
74 set => this.Set((int)RegLocatorSymbolFields.Type, (int)value);
75 }
76
77 public bool Win64
78 {
79 get => this.Fields[(int)RegLocatorSymbolFields.Win64].AsBool();
80 set => this.Set((int)RegLocatorSymbolFields.Win64, value);
81 }
82 }
83}
diff --git a/src/api/wix/WixToolset.Data/Symbols/RegistryRootType.cs b/src/api/wix/WixToolset.Data/Symbols/RegistryRootType.cs
new file mode 100644
index 00000000..9f60727c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RegistryRootType.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
3namespace WixToolset.Data.Symbols
4{
5 using System;
6
7 /// <summary>
8 /// Registry root mapping.
9 /// </summary>
10 public enum RegistryRootType
11 {
12 Unknown = Int32.MaxValue,
13
14 /// <summary>HKLM in a per-machine and HKCU in per-user.</summary>
15 MachineUser = -1,
16 ClassesRoot = 0,
17 CurrentUser = 1,
18 LocalMachine = 2,
19 Users = 3
20 }
21}
diff --git a/src/api/wix/WixToolset.Data/Symbols/RegistrySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/RegistrySymbol.cs
new file mode 100644
index 00000000..371bfe98
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RegistrySymbol.cs
@@ -0,0 +1,108 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Registry = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Registry,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.Root), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.Key), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.Value), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.ValueType), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.ValueAction), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(RegistrySymbolFields.ComponentRef), IntermediateFieldType.String),
20 },
21 typeof(RegistrySymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum RegistrySymbolFields
28 {
29 Root,
30 Key,
31 Name,
32 Value,
33 ValueType,
34 ValueAction,
35 ComponentRef,
36 }
37
38 public enum RegistryValueType
39 {
40 String,
41 Binary,
42 Expandable,
43 Integer,
44 MultiString,
45 }
46
47 public enum RegistryValueActionType
48 {
49 Write,
50 Append,
51 Prepend,
52 }
53
54 public class RegistrySymbol : IntermediateSymbol
55 {
56 public RegistrySymbol() : base(SymbolDefinitions.Registry, null, null)
57 {
58 }
59
60 public RegistrySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Registry, sourceLineNumber, id)
61 {
62 }
63
64 public IntermediateField this[RegistrySymbolFields index] => this.Fields[(int)index];
65
66 public RegistryRootType Root
67 {
68 get => (RegistryRootType)this.Fields[(int)RegistrySymbolFields.Root].AsNumber();
69 set => this.Set((int)RegistrySymbolFields.Root, (int)value);
70 }
71
72 public string Key
73 {
74 get => (string)this.Fields[(int)RegistrySymbolFields.Key];
75 set => this.Set((int)RegistrySymbolFields.Key, value);
76 }
77
78 public string Name
79 {
80 get => (string)this.Fields[(int)RegistrySymbolFields.Name];
81 set => this.Set((int)RegistrySymbolFields.Name, value);
82 }
83
84 public string Value
85 {
86 get => this.Fields[(int)RegistrySymbolFields.Value].AsString();
87 set => this.Set((int)RegistrySymbolFields.Value, value);
88 }
89
90 public RegistryValueType ValueType
91 {
92 get => (RegistryValueType)this.Fields[(int)RegistrySymbolFields.ValueType].AsNumber();
93 set => this.Set((int)RegistrySymbolFields.ValueType, (int)value);
94 }
95
96 public RegistryValueActionType ValueAction
97 {
98 get => (RegistryValueActionType)this.Fields[(int)RegistrySymbolFields.ValueAction].AsNumber();
99 set => this.Set((int)RegistrySymbolFields.ValueAction, (int)value);
100 }
101
102 public string ComponentRef
103 {
104 get => (string)this.Fields[(int)RegistrySymbolFields.ComponentRef];
105 set => this.Set((int)RegistrySymbolFields.ComponentRef, value);
106 }
107 }
108} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/RemoveFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/RemoveFileSymbol.cs
new file mode 100644
index 00000000..0167b070
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RemoveFileSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition RemoveFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.RemoveFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.FileName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.ShortFileName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.DirPropertyRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.OnInstall), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(RemoveFileSymbolFields.OnUninstall), IntermediateFieldType.Bool),
19 },
20 typeof(RemoveFileSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum RemoveFileSymbolFields
27 {
28 ComponentRef,
29 FileName,
30 ShortFileName,
31 DirPropertyRef,
32 OnInstall,
33 OnUninstall,
34 }
35
36 public class RemoveFileSymbol : IntermediateSymbol
37 {
38 public RemoveFileSymbol() : base(SymbolDefinitions.RemoveFile, null, null)
39 {
40 }
41
42 public RemoveFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.RemoveFile, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[RemoveFileSymbolFields index] => this.Fields[(int)index];
47
48 public string ComponentRef
49 {
50 get => (string)this.Fields[(int)RemoveFileSymbolFields.ComponentRef];
51 set => this.Set((int)RemoveFileSymbolFields.ComponentRef, value);
52 }
53
54 public string FileName
55 {
56 get => (string)this.Fields[(int)RemoveFileSymbolFields.FileName];
57 set => this.Set((int)RemoveFileSymbolFields.FileName, value);
58 }
59
60 public string ShortFileName
61 {
62 get => (string)this.Fields[(int)RemoveFileSymbolFields.ShortFileName];
63 set => this.Set((int)RemoveFileSymbolFields.ShortFileName, value);
64 }
65
66 public string DirPropertyRef
67 {
68 get => (string)this.Fields[(int)RemoveFileSymbolFields.DirPropertyRef];
69 set => this.Set((int)RemoveFileSymbolFields.DirPropertyRef, value);
70 }
71
72 public bool? OnInstall
73 {
74 get => (bool?)this.Fields[(int)RemoveFileSymbolFields.OnInstall];
75 set => this.Set((int)RemoveFileSymbolFields.OnInstall, value);
76 }
77
78 public bool? OnUninstall
79 {
80 get => (bool?)this.Fields[(int)RemoveFileSymbolFields.OnUninstall];
81 set => this.Set((int)RemoveFileSymbolFields.OnUninstall, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/RemoveRegistrySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/RemoveRegistrySymbol.cs
new file mode 100644
index 00000000..a797cd33
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/RemoveRegistrySymbol.cs
@@ -0,0 +1,82 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition RemoveRegistry = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.RemoveRegistry,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(RemoveRegistrySymbolFields.Root), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(RemoveRegistrySymbolFields.Key), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(RemoveRegistrySymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(RemoveRegistrySymbolFields.Action), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(RemoveRegistrySymbolFields.ComponentRef), IntermediateFieldType.String),
18 },
19 typeof(RemoveRegistrySymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum RemoveRegistrySymbolFields
26 {
27 Root,
28 Key,
29 Name,
30 Action,
31 ComponentRef,
32 }
33
34 public enum RemoveRegistryActionType
35 {
36 RemoveOnInstall,
37 RemoveOnUninstall
38 };
39
40 public class RemoveRegistrySymbol : IntermediateSymbol
41 {
42 public RemoveRegistrySymbol() : base(SymbolDefinitions.RemoveRegistry, null, null)
43 {
44 }
45
46 public RemoveRegistrySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.RemoveRegistry, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[RemoveRegistrySymbolFields index] => this.Fields[(int)index];
51
52 public RegistryRootType Root
53 {
54 get => (RegistryRootType)this.Fields[(int)RemoveRegistrySymbolFields.Root].AsNumber();
55 set => this.Set((int)RemoveRegistrySymbolFields.Root, (int)value);
56 }
57
58 public string Key
59 {
60 get => (string)this.Fields[(int)RemoveRegistrySymbolFields.Key];
61 set => this.Set((int)RemoveRegistrySymbolFields.Key, value);
62 }
63
64 public string Name
65 {
66 get => (string)this.Fields[(int)RemoveRegistrySymbolFields.Name];
67 set => this.Set((int)RemoveRegistrySymbolFields.Name, value);
68 }
69
70 public RemoveRegistryActionType Action
71 {
72 get => (RemoveRegistryActionType)this.Fields[(int)RemoveRegistrySymbolFields.Action].AsNumber();
73 set => this.Set((int)RemoveRegistrySymbolFields.Action, (int)value);
74 }
75
76 public string ComponentRef
77 {
78 get => (string)this.Fields[(int)RemoveRegistrySymbolFields.ComponentRef];
79 set => this.Set((int)RemoveRegistrySymbolFields.ComponentRef, value);
80 }
81 }
82} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ReserveCostSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ReserveCostSymbol.cs
new file mode 100644
index 00000000..b59dea2f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ReserveCostSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ReserveCost = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ReserveCost,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ReserveCostSymbolFields.ComponentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ReserveCostSymbolFields.ReserveFolder), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ReserveCostSymbolFields.ReserveLocal), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(ReserveCostSymbolFields.ReserveSource), IntermediateFieldType.Number),
17 },
18 typeof(ReserveCostSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum ReserveCostSymbolFields
25 {
26 ComponentRef,
27 ReserveFolder,
28 ReserveLocal,
29 ReserveSource,
30 }
31
32 public class ReserveCostSymbol : IntermediateSymbol
33 {
34 public ReserveCostSymbol() : base(SymbolDefinitions.ReserveCost, null, null)
35 {
36 }
37
38 public ReserveCostSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ReserveCost, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[ReserveCostSymbolFields index] => this.Fields[(int)index];
43
44 public string ComponentRef
45 {
46 get => (string)this.Fields[(int)ReserveCostSymbolFields.ComponentRef];
47 set => this.Set((int)ReserveCostSymbolFields.ComponentRef, value);
48 }
49
50 public string ReserveFolder
51 {
52 get => (string)this.Fields[(int)ReserveCostSymbolFields.ReserveFolder];
53 set => this.Set((int)ReserveCostSymbolFields.ReserveFolder, value);
54 }
55
56 public int ReserveLocal
57 {
58 get => (int)this.Fields[(int)ReserveCostSymbolFields.ReserveLocal];
59 set => this.Set((int)ReserveCostSymbolFields.ReserveLocal, value);
60 }
61
62 public int ReserveSource
63 {
64 get => (int)this.Fields[(int)ReserveCostSymbolFields.ReserveSource];
65 set => this.Set((int)ReserveCostSymbolFields.ReserveSource, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/SFPCatalogSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/SFPCatalogSymbol.cs
new file mode 100644
index 00000000..0d3f1558
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/SFPCatalogSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition SFPCatalog = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.SFPCatalog,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(SFPCatalogSymbolFields.SFPCatalog), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(SFPCatalogSymbolFields.Catalog), IntermediateFieldType.Path),
15 new IntermediateFieldDefinition(nameof(SFPCatalogSymbolFields.Dependency), IntermediateFieldType.String),
16 },
17 typeof(SFPCatalogSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum SFPCatalogSymbolFields
24 {
25 SFPCatalog,
26 Catalog,
27 Dependency,
28 }
29
30 public class SFPCatalogSymbol : IntermediateSymbol
31 {
32 public SFPCatalogSymbol() : base(SymbolDefinitions.SFPCatalog, null, null)
33 {
34 }
35
36 public SFPCatalogSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.SFPCatalog, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[SFPCatalogSymbolFields index] => this.Fields[(int)index];
41
42 public string SFPCatalog
43 {
44 get => (string)this.Fields[(int)SFPCatalogSymbolFields.SFPCatalog];
45 set => this.Set((int)SFPCatalogSymbolFields.SFPCatalog, value);
46 }
47
48 public string Catalog
49 {
50 get => (string)this.Fields[(int)SFPCatalogSymbolFields.Catalog];
51 set => this.Set((int)SFPCatalogSymbolFields.Catalog, value);
52 }
53
54 public string Dependency
55 {
56 get => (string)this.Fields[(int)SFPCatalogSymbolFields.Dependency];
57 set => this.Set((int)SFPCatalogSymbolFields.Dependency, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ServiceControlSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ServiceControlSymbol.cs
new file mode 100644
index 00000000..6e129681
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ServiceControlSymbol.cs
@@ -0,0 +1,116 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ServiceControl = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ServiceControl,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.InstallRemove), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.UninstallRemove), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.InstallStart), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.UninstallStart), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.InstallStop), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.UninstallStop), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.Arguments), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.Wait), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(ServiceControlSymbolFields.ComponentRef), IntermediateFieldType.String),
23 },
24 typeof(ServiceControlSymbol));
25 }
26}
27
28namespace WixToolset.Data.Symbols
29{
30 public enum ServiceControlSymbolFields
31 {
32 Name,
33 InstallRemove,
34 UninstallRemove,
35 InstallStart,
36 UninstallStart,
37 InstallStop,
38 UninstallStop,
39 Arguments,
40 Wait,
41 ComponentRef,
42 }
43
44 public class ServiceControlSymbol : IntermediateSymbol
45 {
46 public ServiceControlSymbol() : base(SymbolDefinitions.ServiceControl, null, null)
47 {
48 }
49
50 public ServiceControlSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ServiceControl, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[ServiceControlSymbolFields index] => this.Fields[(int)index];
55
56 public string Name
57 {
58 get => (string)this.Fields[(int)ServiceControlSymbolFields.Name];
59 set => this.Set((int)ServiceControlSymbolFields.Name, value);
60 }
61
62 public bool InstallRemove
63 {
64 get => this.Fields[(int)ServiceControlSymbolFields.InstallRemove].AsBool();
65 set => this.Set((int)ServiceControlSymbolFields.InstallRemove, value);
66 }
67
68 public bool UninstallRemove
69 {
70 get => this.Fields[(int)ServiceControlSymbolFields.UninstallRemove].AsBool();
71 set => this.Set((int)ServiceControlSymbolFields.UninstallRemove, value);
72 }
73
74 public bool InstallStart
75 {
76 get => this.Fields[(int)ServiceControlSymbolFields.InstallStart].AsBool();
77 set => this.Set((int)ServiceControlSymbolFields.InstallStart, value);
78 }
79
80 public bool UninstallStart
81 {
82 get => this.Fields[(int)ServiceControlSymbolFields.UninstallStart].AsBool();
83 set => this.Set((int)ServiceControlSymbolFields.UninstallStart, value);
84 }
85
86 public bool InstallStop
87 {
88 get => this.Fields[(int)ServiceControlSymbolFields.InstallStop].AsBool();
89 set => this.Set((int)ServiceControlSymbolFields.InstallStop, value);
90 }
91
92 public bool UninstallStop
93 {
94 get => this.Fields[(int)ServiceControlSymbolFields.UninstallStop].AsBool();
95 set => this.Set((int)ServiceControlSymbolFields.UninstallStop, value);
96 }
97
98 public string Arguments
99 {
100 get => (string)this.Fields[(int)ServiceControlSymbolFields.Arguments];
101 set => this.Set((int)ServiceControlSymbolFields.Arguments, value);
102 }
103
104 public bool? Wait
105 {
106 get => this.Fields[(int)ServiceControlSymbolFields.Wait].AsNullableBool();
107 set => this.Set((int)ServiceControlSymbolFields.Wait, value);
108 }
109
110 public string ComponentRef
111 {
112 get => (string)this.Fields[(int)ServiceControlSymbolFields.ComponentRef];
113 set => this.Set((int)ServiceControlSymbolFields.ComponentRef, value);
114 }
115 }
116} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ServiceInstallSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ServiceInstallSymbol.cs
new file mode 100644
index 00000000..f7ec8dbf
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ServiceInstallSymbol.cs
@@ -0,0 +1,173 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition ServiceInstall = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.ServiceInstall,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.DisplayName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.ServiceType), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.StartType), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.ErrorControl), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.LoadOrderGroup), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Dependencies), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.StartName), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Password), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Arguments), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.ComponentRef), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Description), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Interactive), IntermediateFieldType.Bool),
26 new IntermediateFieldDefinition(nameof(ServiceInstallSymbolFields.Vital), IntermediateFieldType.Bool),
27 },
28 typeof(ServiceInstallSymbol));
29 }
30}
31
32namespace WixToolset.Data.Symbols
33{
34 public enum ServiceInstallSymbolFields
35 {
36 Name,
37 DisplayName,
38 ServiceType,
39 StartType,
40 ErrorControl,
41 LoadOrderGroup,
42 Dependencies,
43 StartName,
44 Password,
45 Arguments,
46 ComponentRef,
47 Description,
48 Interactive,
49 Vital,
50 }
51
52 public enum ServiceType
53 {
54 KernelDriver,
55 SystemDriver,
56 OwnProcess = 0x10,
57 ShareProcess = 0x20,
58 InteractiveProcess = 0x100,
59 }
60
61 public enum ServiceStartType
62 {
63 Boot,
64 System,
65 Auto,
66 Demand,
67 Disabled,
68 }
69
70 public enum ServiceErrorControl
71 {
72 Ignore,
73 Normal,
74 Critical = 3,
75 }
76
77 public class ServiceInstallSymbol : IntermediateSymbol
78 {
79 public ServiceInstallSymbol() : base(SymbolDefinitions.ServiceInstall, null, null)
80 {
81 }
82
83 public ServiceInstallSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.ServiceInstall, sourceLineNumber, id)
84 {
85 }
86
87 public IntermediateField this[ServiceInstallSymbolFields index] => this.Fields[(int)index];
88
89 public string Name
90 {
91 get => (string)this.Fields[(int)ServiceInstallSymbolFields.Name];
92 set => this.Set((int)ServiceInstallSymbolFields.Name, value);
93 }
94
95 public string DisplayName
96 {
97 get => (string)this.Fields[(int)ServiceInstallSymbolFields.DisplayName];
98 set => this.Set((int)ServiceInstallSymbolFields.DisplayName, value);
99 }
100
101 public ServiceType ServiceType
102 {
103 get => (ServiceType)this.Fields[(int)ServiceInstallSymbolFields.ServiceType].AsNumber();
104 set => this.Set((int)ServiceInstallSymbolFields.ServiceType, (int)value);
105 }
106
107 public ServiceStartType StartType
108 {
109 get => (ServiceStartType)this.Fields[(int)ServiceInstallSymbolFields.StartType].AsNumber();
110 set => this.Set((int)ServiceInstallSymbolFields.StartType, (int)value);
111 }
112
113 public ServiceErrorControl ErrorControl
114 {
115 get => (ServiceErrorControl)this.Fields[(int)ServiceInstallSymbolFields.ErrorControl].AsNumber();
116 set => this.Set((int)ServiceInstallSymbolFields.ErrorControl, (int)value);
117 }
118
119 public string LoadOrderGroup
120 {
121 get => (string)this.Fields[(int)ServiceInstallSymbolFields.LoadOrderGroup];
122 set => this.Set((int)ServiceInstallSymbolFields.LoadOrderGroup, value);
123 }
124
125 public string Dependencies
126 {
127 get => (string)this.Fields[(int)ServiceInstallSymbolFields.Dependencies];
128 set => this.Set((int)ServiceInstallSymbolFields.Dependencies, value);
129 }
130
131 public string StartName
132 {
133 get => (string)this.Fields[(int)ServiceInstallSymbolFields.StartName];
134 set => this.Set((int)ServiceInstallSymbolFields.StartName, value);
135 }
136
137 public string Password
138 {
139 get => (string)this.Fields[(int)ServiceInstallSymbolFields.Password];
140 set => this.Set((int)ServiceInstallSymbolFields.Password, value);
141 }
142
143 public string Arguments
144 {
145 get => (string)this.Fields[(int)ServiceInstallSymbolFields.Arguments];
146 set => this.Set((int)ServiceInstallSymbolFields.Arguments, value);
147 }
148
149 public string ComponentRef
150 {
151 get => (string)this.Fields[(int)ServiceInstallSymbolFields.ComponentRef];
152 set => this.Set((int)ServiceInstallSymbolFields.ComponentRef, value);
153 }
154
155 public string Description
156 {
157 get => (string)this.Fields[(int)ServiceInstallSymbolFields.Description];
158 set => this.Set((int)ServiceInstallSymbolFields.Description, value);
159 }
160
161 public bool Interactive
162 {
163 get => this.Fields[(int)ServiceInstallSymbolFields.Interactive].AsBool();
164 set => this.Set((int)ServiceInstallSymbolFields.Interactive, value);
165 }
166
167 public bool Vital
168 {
169 get => this.Fields[(int)ServiceInstallSymbolFields.Vital].AsBool();
170 set => this.Set((int)ServiceInstallSymbolFields.Vital, value);
171 }
172 }
173} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/ShortcutSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/ShortcutSymbol.cs
new file mode 100644
index 00000000..f32fe4af
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/ShortcutSymbol.cs
@@ -0,0 +1,171 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Shortcut = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Shortcut,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.DirectoryRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.ShortName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.ComponentRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Target), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Arguments), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Description), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Hotkey), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.IconRef), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.IconIndex), IntermediateFieldType.Number),
23 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.Show), IntermediateFieldType.Number),
24 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.WkDir), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.DisplayResourceDLL), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.DisplayResourceId), IntermediateFieldType.Number),
27 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.DescriptionResourceDLL), IntermediateFieldType.String),
28 new IntermediateFieldDefinition(nameof(ShortcutSymbolFields.DescriptionResourceId), IntermediateFieldType.Number),
29 },
30 typeof(ShortcutSymbol));
31 }
32}
33
34namespace WixToolset.Data.Symbols
35{
36 public enum ShortcutSymbolFields
37 {
38 DirectoryRef,
39 Name,
40 ShortName,
41 ComponentRef,
42 Target,
43 Arguments,
44 Description,
45 Hotkey,
46 IconRef,
47 IconIndex,
48 Show,
49 WkDir,
50 DisplayResourceDLL,
51 DisplayResourceId,
52 DescriptionResourceDLL,
53 DescriptionResourceId,
54 }
55
56 public enum ShortcutShowType
57 {
58 Normal = 1,
59 Maximized = 3,
60 Minimized = 7
61 }
62
63 public class ShortcutSymbol : IntermediateSymbol
64 {
65 public ShortcutSymbol() : base(SymbolDefinitions.Shortcut, null, null)
66 {
67 }
68
69 public ShortcutSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Shortcut, sourceLineNumber, id)
70 {
71 }
72
73 public IntermediateField this[ShortcutSymbolFields index] => this.Fields[(int)index];
74
75 public string DirectoryRef
76 {
77 get => (string)this.Fields[(int)ShortcutSymbolFields.DirectoryRef];
78 set => this.Set((int)ShortcutSymbolFields.DirectoryRef, value);
79 }
80
81 public string Name
82 {
83 get => (string)this.Fields[(int)ShortcutSymbolFields.Name];
84 set => this.Set((int)ShortcutSymbolFields.Name, value);
85 }
86
87 public string ShortName
88 {
89 get => (string)this.Fields[(int)ShortcutSymbolFields.ShortName];
90 set => this.Set((int)ShortcutSymbolFields.ShortName, value);
91 }
92
93 public string ComponentRef
94 {
95 get => (string)this.Fields[(int)ShortcutSymbolFields.ComponentRef];
96 set => this.Set((int)ShortcutSymbolFields.ComponentRef, value);
97 }
98
99 public string Target
100 {
101 get => (string)this.Fields[(int)ShortcutSymbolFields.Target];
102 set => this.Set((int)ShortcutSymbolFields.Target, value);
103 }
104
105 public string Arguments
106 {
107 get => (string)this.Fields[(int)ShortcutSymbolFields.Arguments];
108 set => this.Set((int)ShortcutSymbolFields.Arguments, value);
109 }
110
111 public string Description
112 {
113 get => (string)this.Fields[(int)ShortcutSymbolFields.Description];
114 set => this.Set((int)ShortcutSymbolFields.Description, value);
115 }
116
117 public int? Hotkey
118 {
119 get => this.Fields[(int)ShortcutSymbolFields.Hotkey].AsNullableNumber();
120 set => this.Set((int)ShortcutSymbolFields.Hotkey, value);
121 }
122
123 public string IconRef
124 {
125 get => (string)this.Fields[(int)ShortcutSymbolFields.IconRef];
126 set => this.Set((int)ShortcutSymbolFields.IconRef, value);
127 }
128
129 public int? IconIndex
130 {
131 get => this.Fields[(int)ShortcutSymbolFields.IconIndex].AsNullableNumber();
132 set => this.Set((int)ShortcutSymbolFields.IconIndex, value);
133 }
134
135 public ShortcutShowType? Show
136 {
137 get => (ShortcutShowType?)this.Fields[(int)ShortcutSymbolFields.Show].AsNullableNumber();
138 set => this.Set((int)ShortcutSymbolFields.Show, (int?)value);
139 }
140
141 public string WorkingDirectory
142 {
143 get => (string)this.Fields[(int)ShortcutSymbolFields.WkDir];
144 set => this.Set((int)ShortcutSymbolFields.WkDir, value);
145 }
146
147 public string DisplayResourceDll
148 {
149 get => (string)this.Fields[(int)ShortcutSymbolFields.DisplayResourceDLL];
150 set => this.Set((int)ShortcutSymbolFields.DisplayResourceDLL, value);
151 }
152
153 public int? DisplayResourceId
154 {
155 get => this.Fields[(int)ShortcutSymbolFields.DisplayResourceId].AsNullableNumber();
156 set => this.Set((int)ShortcutSymbolFields.DisplayResourceId, value);
157 }
158
159 public string DescriptionResourceDll
160 {
161 get => (string)this.Fields[(int)ShortcutSymbolFields.DescriptionResourceDLL];
162 set => this.Set((int)ShortcutSymbolFields.DescriptionResourceDLL, value);
163 }
164
165 public int? DescriptionResourceId
166 {
167 get => this.Fields[(int)ShortcutSymbolFields.DescriptionResourceId].AsNullableNumber();
168 set => this.Set((int)ShortcutSymbolFields.DescriptionResourceId, value);
169 }
170 }
171}
diff --git a/src/api/wix/WixToolset.Data/Symbols/SignatureSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/SignatureSymbol.cs
new file mode 100644
index 00000000..fc2ce088
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/SignatureSymbol.cs
@@ -0,0 +1,100 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Signature = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Signature,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.FileName), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MinVersion), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MaxVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MinSize), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MaxSize), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MinDate), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.MaxDate), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(SignatureSymbolFields.Languages), IntermediateFieldType.String),
21 },
22 typeof(SignatureSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum SignatureSymbolFields
29 {
30 FileName,
31 MinVersion,
32 MaxVersion,
33 MinSize,
34 MaxSize,
35 MinDate,
36 MaxDate,
37 Languages,
38 }
39
40 public class SignatureSymbol : IntermediateSymbol
41 {
42 public SignatureSymbol() : base(SymbolDefinitions.Signature, null, null)
43 {
44 }
45
46 public SignatureSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Signature, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[SignatureSymbolFields index] => this.Fields[(int)index];
51
52 public string FileName
53 {
54 get => (string)this.Fields[(int)SignatureSymbolFields.FileName];
55 set => this.Set((int)SignatureSymbolFields.FileName, value);
56 }
57
58 public string MinVersion
59 {
60 get => (string)this.Fields[(int)SignatureSymbolFields.MinVersion];
61 set => this.Set((int)SignatureSymbolFields.MinVersion, value);
62 }
63
64 public string MaxVersion
65 {
66 get => (string)this.Fields[(int)SignatureSymbolFields.MaxVersion];
67 set => this.Set((int)SignatureSymbolFields.MaxVersion, value);
68 }
69
70 public int? MinSize
71 {
72 get => (int?)this.Fields[(int)SignatureSymbolFields.MinSize];
73 set => this.Set((int)SignatureSymbolFields.MinSize, value);
74 }
75
76 public int? MaxSize
77 {
78 get => (int?)this.Fields[(int)SignatureSymbolFields.MaxSize];
79 set => this.Set((int)SignatureSymbolFields.MaxSize, value);
80 }
81
82 public int? MinDate
83 {
84 get => (int?)this.Fields[(int)SignatureSymbolFields.MinDate];
85 set => this.Set((int)SignatureSymbolFields.MinDate, value);
86 }
87
88 public int? MaxDate
89 {
90 get => (int?)this.Fields[(int)SignatureSymbolFields.MaxDate];
91 set => this.Set((int)SignatureSymbolFields.MaxDate, value);
92 }
93
94 public string Languages
95 {
96 get => (string)this.Fields[(int)SignatureSymbolFields.Languages];
97 set => this.Set((int)SignatureSymbolFields.Languages, value);
98 }
99 }
100} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/SoftwareIdentificationTagSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/SoftwareIdentificationTagSymbol.cs
new file mode 100644
index 00000000..60bf22a2
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/SoftwareIdentificationTagSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition SoftwareIdentificationTag = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.SoftwareIdentificationTag,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(SoftwareIdentificationTagSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(SoftwareIdentificationTagSymbolFields.Regid), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(SoftwareIdentificationTagSymbolFields.UniqueId), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(SoftwareIdentificationTagSymbolFields.PersistentId), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(SoftwareIdentificationTagSymbolFields.Alias), IntermediateFieldType.String),
18 },
19 typeof(SoftwareIdentificationTagSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum SoftwareIdentificationTagSymbolFields
26 {
27 FileRef,
28 Regid,
29 UniqueId,
30 PersistentId,
31 Alias,
32 }
33
34 public class SoftwareIdentificationTagSymbol : IntermediateSymbol
35 {
36 public SoftwareIdentificationTagSymbol() : base(SymbolDefinitions.SoftwareIdentificationTag, null, null)
37 {
38 }
39
40 public SoftwareIdentificationTagSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.SoftwareIdentificationTag, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[SoftwareIdentificationTagSymbolFields index] => this.Fields[(int)index];
45
46 public string FileRef
47 {
48 get => this.Fields[(int)SoftwareIdentificationTagSymbolFields.FileRef].AsString();
49 set => this.Set((int)SoftwareIdentificationTagSymbolFields.FileRef, value);
50 }
51
52 public string Regid
53 {
54 get => this.Fields[(int)SoftwareIdentificationTagSymbolFields.Regid].AsString();
55 set => this.Set((int)SoftwareIdentificationTagSymbolFields.Regid, value);
56 }
57
58 public string TagId
59 {
60 get => this.Fields[(int)SoftwareIdentificationTagSymbolFields.UniqueId].AsString();
61 set => this.Set((int)SoftwareIdentificationTagSymbolFields.UniqueId, value);
62 }
63
64 public string PersistentId
65 {
66 get => this.Fields[(int)SoftwareIdentificationTagSymbolFields.PersistentId].AsString();
67 set => this.Set((int)SoftwareIdentificationTagSymbolFields.PersistentId, value);
68 }
69
70 public string Alias
71 {
72 get => this.Fields[(int)SoftwareIdentificationTagSymbolFields.Alias].AsString();
73 set => this.Set((int)SoftwareIdentificationTagSymbolFields.Alias, value);
74 }
75 }
76}
diff --git a/src/api/wix/WixToolset.Data/Symbols/SummaryInformationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/SummaryInformationSymbol.cs
new file mode 100644
index 00000000..b3b233fe
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/SummaryInformationSymbol.cs
@@ -0,0 +1,102 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition SummaryInformation = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.SummaryInformation,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(SummaryInformationSymbolFields.PropertyId), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(SummaryInformationSymbolFields.Value), IntermediateFieldType.String),
15 },
16 typeof(SummaryInformationSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum SummaryInformationSymbolFields
23 {
24 PropertyId,
25 Value,
26 }
27
28 public enum SummaryInformationType
29 {
30 Codepage = 1,
31 Title,
32 Subject,
33 PatchPackageName = 3, //used by patches
34 Author,
35 Keywords,
36 Comments,
37 PlatformAndLanguage,
38 PatchProductCodes = 7, // used by patches
39 TransformPlatformAndLanguageOrStorageNames,
40 TransformNames = 8, // used by patches
41 PackageCode,
42 PatchCode = 9, // used by patches
43 TransformProductCodes = 9, // used by transforms
44 Reserved11 = 11, // reserved by patches
45 Created,
46 LastSaved,
47 WindowsInstallerVersion,
48 Reserved14 = 14, // reserved by patches
49 WordCount,
50 PatchInstallerRequirement = 15, // used by patches
51 Reserved16, // reserved by patches
52 TransformValidationFlags = 16, // used by transforms
53 CreatingApplication = 18,
54 Security
55 }
56
57 /// <summary>
58 /// Summary information values for the PachInstallerRequirement property.
59 /// </summary>
60 public enum PatchInstallerRequirement
61 {
62 /// <summary>Any version of the installer will do</summary>
63 Version10 = 1,
64
65 /// <summary>At least 1.2</summary>
66 Version12 = 2,
67
68 /// <summary>At least 2.0</summary>
69 Version20 = 3,
70
71 /// <summary>At least 3.0</summary>
72 Version30 = 4,
73
74 /// <summary>At least 3.1</summary>
75 Version31 = 5,
76 }
77
78 public class SummaryInformationSymbol : IntermediateSymbol
79 {
80 public SummaryInformationSymbol() : base(SymbolDefinitions.SummaryInformation, null, null)
81 {
82 }
83
84 public SummaryInformationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.SummaryInformation, sourceLineNumber, id)
85 {
86 }
87
88 public IntermediateField this[SummaryInformationSymbolFields index] => this.Fields[(int)index];
89
90 public SummaryInformationType PropertyId
91 {
92 get => (SummaryInformationType)this.Fields[(int)SummaryInformationSymbolFields.PropertyId].AsNumber();
93 set => this.Set((int)SummaryInformationSymbolFields.PropertyId, (int)value);
94 }
95
96 public string Value
97 {
98 get => (string)this.Fields[(int)SummaryInformationSymbolFields.Value];
99 set => this.Set((int)SummaryInformationSymbolFields.Value, value);
100 }
101 }
102}
diff --git a/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs b/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs
new file mode 100644
index 00000000..0ed0a4ec
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs
@@ -0,0 +1,776 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 public enum SymbolDefinitionType
8 {
9 SummaryInformation,
10 ActionText,
11 AppId,
12 AppSearch,
13 BBControl,
14 Billboard,
15 Binary,
16 CCPSearch,
17 CheckBox,
18 Class,
19 ComboBox,
20 CompLocator,
21 Complus,
22 Component,
23 Condition,
24 Control,
25 ControlCondition,
26 ControlEvent,
27 CreateFolder,
28 CustomAction,
29 Dialog,
30 Directory,
31 DrLocator,
32 DuplicateFile,
33 Environment,
34 Error,
35 EventMapping,
36 Extension,
37 ExternalFiles,
38 FamilyFileRanges,
39 Feature,
40 FeatureComponents,
41 File,
42 FileSFPCatalog,
43 Icon,
44 ImageFamilies,
45 IniFile,
46 IniLocator,
47 IsolatedComponent,
48 LaunchCondition,
49 ListBox,
50 ListView,
51 LockPermissions,
52 Media,
53 MIME,
54 ModuleComponents,
55 ModuleConfiguration,
56 ModuleDependency,
57 ModuleExclusion,
58 ModuleIgnoreTable,
59 WixModule,
60 ModuleSubstitution,
61 MoveFile,
62 Assembly,
63 MsiAssemblyName,
64 MsiDigitalCertificate,
65 MsiDigitalSignature,
66 MsiEmbeddedChainer,
67 MsiEmbeddedUI,
68 MsiFileHash,
69 MsiLockPermissionsEx,
70 MsiPackageCertificate,
71 MsiPatchCertificate,
72 MsiPatchHeaders,
73 MsiPatchMetadata,
74 MsiPatchOldAssemblyFile,
75 MsiPatchOldAssemblyName,
76 MsiPatchSequence,
77 MsiServiceConfig,
78 MsiServiceConfigFailureActions,
79 MsiShortcutProperty,
80 ODBCAttribute,
81 ODBCDataSource,
82 ODBCDriver,
83 ODBCSourceAttribute,
84 ODBCTranslator,
85 Patch,
86 PatchMetadata,
87 PatchPackage,
88 PatchSequence,
89 ProgId,
90 Properties,
91 Property,
92 ProvidesDependency,
93 PublishComponent,
94 RadioButton,
95 Registry,
96 RegLocator,
97 RemoveFile,
98 RemoveRegistry,
99 ReserveCost,
100 ServiceControl,
101 ServiceInstall,
102 SFPCatalog,
103 Shortcut,
104 Signature,
105 SoftwareIdentificationTag,
106 TargetFilesOptionalData,
107 TargetImages,
108 TextStyle,
109 TypeLib,
110 UIText,
111 Upgrade,
112 UpgradedFilesOptionalData,
113 UpgradedFilesToIgnore,
114 UpgradedImages,
115 Verb,
116 WixAction,
117 WixApprovedExeForElevation,
118 WixBindUpdatedFiles,
119 WixBootstrapperApplication,
120 WixBootstrapperApplicationDll,
121 WixBuildInfo,
122 WixBundle,
123 WixBundleContainer,
124 WixBundleCustomData,
125 WixBundleCustomDataAttribute,
126 WixBundleCustomDataCell,
127 WixBundleExePackage,
128 WixBundleExePackagePayload,
129 WixBundleExtension,
130 WixBundleMsiFeature,
131 WixBundleMsiPackage,
132 WixBundleMsiPackagePayload,
133 WixBundleMsiProperty,
134 WixBundleMspPackage,
135 WixBundleMspPackagePayload,
136 WixBundleMsuPackage,
137 WixBundleMsuPackagePayload,
138 WixBundlePackage,
139 WixBundlePackageCommandLine,
140 WixBundlePackageExitCode,
141 WixBundlePackageGroup,
142 WixBundlePatchTargetCode,
143 WixBundlePayload,
144 WixBundlePayloadGroup,
145 WixBundleRelatedPackage,
146 WixBundleRollbackBoundary,
147 WixBundleSlipstreamMsp,
148 WixBundleTag,
149 WixBundleUpdate,
150 WixBundleVariable,
151 WixChain,
152 WixChainItem,
153 WixComplexReference,
154 WixComponentGroup,
155 WixComponentSearch,
156 WixCustomTable,
157 WixCustomTableCell,
158 WixCustomTableColumn,
159 WixDeltaPatchFile,
160 WixDeltaPatchSymbolPaths,
161 WixDependency,
162 WixDependencyRef,
163 WixDependencyProvider,
164 WixEnsureTable,
165 WixFeatureGroup,
166 WixFeatureModules,
167 WixFileSearch,
168 WixFragment,
169 WixGroup,
170 WixInstanceComponent,
171 WixInstanceTransforms,
172 WixMediaTemplate,
173 WixMerge,
174 WixOrdering,
175 WixPackage,
176 WixPatchBaseline,
177 WixPatchFamilyGroup,
178 WixPatch,
179 WixPatchRef,
180 WixPatchTarget,
181 WixProductSearch,
182 WixProductTag,
183 WixProperty,
184 WixRegistrySearch,
185 WixRelatedBundle,
186 WixSearch,
187 WixSearchRelation,
188 WixSetVariable,
189 WixSimpleReference,
190 WixSuppressAction,
191 WixSuppressModularization,
192 WixUI,
193 WixUpdateRegistration,
194 WixVariable,
195 MustBeFromAnExtension,
196 }
197
198 public static partial class SymbolDefinitions
199 {
200 public static readonly Version Version = new Version("4.0.0");
201
202 public static IntermediateSymbolDefinition ByName(string name)
203 {
204 if (!Enum.TryParse(name, out SymbolDefinitionType type) || type == SymbolDefinitionType.MustBeFromAnExtension)
205 {
206 return null;
207 }
208
209 return ByType(type);
210 }
211
212 public static IntermediateSymbolDefinition ByType(SymbolDefinitionType type)
213 {
214 switch (type)
215 {
216 case SymbolDefinitionType.SummaryInformation:
217 return SymbolDefinitions.SummaryInformation;
218
219 case SymbolDefinitionType.ActionText:
220 return SymbolDefinitions.ActionText;
221
222 case SymbolDefinitionType.AppId:
223 return SymbolDefinitions.AppId;
224
225 case SymbolDefinitionType.AppSearch:
226 return SymbolDefinitions.AppSearch;
227
228 case SymbolDefinitionType.BBControl:
229 return SymbolDefinitions.BBControl;
230
231 case SymbolDefinitionType.Billboard:
232 return SymbolDefinitions.Billboard;
233
234 case SymbolDefinitionType.Binary:
235 return SymbolDefinitions.Binary;
236
237 case SymbolDefinitionType.CCPSearch:
238 return SymbolDefinitions.CCPSearch;
239
240 case SymbolDefinitionType.CheckBox:
241 return SymbolDefinitions.CheckBox;
242
243 case SymbolDefinitionType.Class:
244 return SymbolDefinitions.Class;
245
246 case SymbolDefinitionType.ComboBox:
247 return SymbolDefinitions.ComboBox;
248
249 case SymbolDefinitionType.CompLocator:
250 return SymbolDefinitions.CompLocator;
251
252 case SymbolDefinitionType.Complus:
253 return SymbolDefinitions.Complus;
254
255 case SymbolDefinitionType.Component:
256 return SymbolDefinitions.Component;
257
258 case SymbolDefinitionType.Condition:
259 return SymbolDefinitions.Condition;
260
261 case SymbolDefinitionType.Control:
262 return SymbolDefinitions.Control;
263
264 case SymbolDefinitionType.ControlCondition:
265 return SymbolDefinitions.ControlCondition;
266
267 case SymbolDefinitionType.ControlEvent:
268 return SymbolDefinitions.ControlEvent;
269
270 case SymbolDefinitionType.CreateFolder:
271 return SymbolDefinitions.CreateFolder;
272
273 case SymbolDefinitionType.CustomAction:
274 return SymbolDefinitions.CustomAction;
275
276 case SymbolDefinitionType.Dialog:
277 return SymbolDefinitions.Dialog;
278
279 case SymbolDefinitionType.Directory:
280 return SymbolDefinitions.Directory;
281
282 case SymbolDefinitionType.DrLocator:
283 return SymbolDefinitions.DrLocator;
284
285 case SymbolDefinitionType.DuplicateFile:
286 return SymbolDefinitions.DuplicateFile;
287
288 case SymbolDefinitionType.Environment:
289 return SymbolDefinitions.Environment;
290
291 case SymbolDefinitionType.Error:
292 return SymbolDefinitions.Error;
293
294 case SymbolDefinitionType.EventMapping:
295 return SymbolDefinitions.EventMapping;
296
297 case SymbolDefinitionType.Extension:
298 return SymbolDefinitions.Extension;
299
300 case SymbolDefinitionType.ExternalFiles:
301 return SymbolDefinitions.ExternalFiles;
302
303 case SymbolDefinitionType.FamilyFileRanges:
304 return SymbolDefinitions.FamilyFileRanges;
305
306 case SymbolDefinitionType.Feature:
307 return SymbolDefinitions.Feature;
308
309 case SymbolDefinitionType.FeatureComponents:
310 return SymbolDefinitions.FeatureComponents;
311
312 case SymbolDefinitionType.File:
313 return SymbolDefinitions.File;
314
315 case SymbolDefinitionType.FileSFPCatalog:
316 return SymbolDefinitions.FileSFPCatalog;
317
318 case SymbolDefinitionType.Icon:
319 return SymbolDefinitions.Icon;
320
321 case SymbolDefinitionType.ImageFamilies:
322 return SymbolDefinitions.ImageFamilies;
323
324 case SymbolDefinitionType.IniFile:
325 return SymbolDefinitions.IniFile;
326
327 case SymbolDefinitionType.IniLocator:
328 return SymbolDefinitions.IniLocator;
329
330 case SymbolDefinitionType.IsolatedComponent:
331 return SymbolDefinitions.IsolatedComponent;
332
333 case SymbolDefinitionType.LaunchCondition:
334 return SymbolDefinitions.LaunchCondition;
335
336 case SymbolDefinitionType.ListBox:
337 return SymbolDefinitions.ListBox;
338
339 case SymbolDefinitionType.ListView:
340 return SymbolDefinitions.ListView;
341
342 case SymbolDefinitionType.LockPermissions:
343 return SymbolDefinitions.LockPermissions;
344
345 case SymbolDefinitionType.Media:
346 return SymbolDefinitions.Media;
347
348 case SymbolDefinitionType.MIME:
349 return SymbolDefinitions.MIME;
350
351 case SymbolDefinitionType.ModuleComponents:
352 return SymbolDefinitions.ModuleComponents;
353
354 case SymbolDefinitionType.ModuleConfiguration:
355 return SymbolDefinitions.ModuleConfiguration;
356
357 case SymbolDefinitionType.ModuleDependency:
358 return SymbolDefinitions.ModuleDependency;
359
360 case SymbolDefinitionType.ModuleExclusion:
361 return SymbolDefinitions.ModuleExclusion;
362
363 case SymbolDefinitionType.ModuleIgnoreTable:
364 return SymbolDefinitions.ModuleIgnoreTable;
365
366 case SymbolDefinitionType.WixModule:
367 return SymbolDefinitions.WixModule;
368
369 case SymbolDefinitionType.ModuleSubstitution:
370 return SymbolDefinitions.ModuleSubstitution;
371
372 case SymbolDefinitionType.MoveFile:
373 return SymbolDefinitions.MoveFile;
374
375 case SymbolDefinitionType.Assembly:
376 return SymbolDefinitions.Assembly;
377
378 case SymbolDefinitionType.MsiAssemblyName:
379 return SymbolDefinitions.MsiAssemblyName;
380
381 case SymbolDefinitionType.MsiDigitalCertificate:
382 return SymbolDefinitions.MsiDigitalCertificate;
383
384 case SymbolDefinitionType.MsiDigitalSignature:
385 return SymbolDefinitions.MsiDigitalSignature;
386
387 case SymbolDefinitionType.MsiEmbeddedChainer:
388 return SymbolDefinitions.MsiEmbeddedChainer;
389
390 case SymbolDefinitionType.MsiEmbeddedUI:
391 return SymbolDefinitions.MsiEmbeddedUI;
392
393 case SymbolDefinitionType.MsiFileHash:
394 return SymbolDefinitions.MsiFileHash;
395
396 case SymbolDefinitionType.MsiLockPermissionsEx:
397 return SymbolDefinitions.MsiLockPermissionsEx;
398
399 case SymbolDefinitionType.MsiPackageCertificate:
400 return SymbolDefinitions.MsiPackageCertificate;
401
402 case SymbolDefinitionType.MsiPatchCertificate:
403 return SymbolDefinitions.MsiPatchCertificate;
404
405 case SymbolDefinitionType.MsiPatchHeaders:
406 return SymbolDefinitions.MsiPatchHeaders;
407
408 case SymbolDefinitionType.MsiPatchMetadata:
409 return SymbolDefinitions.MsiPatchMetadata;
410
411 case SymbolDefinitionType.MsiPatchOldAssemblyFile:
412 return SymbolDefinitions.MsiPatchOldAssemblyFile;
413
414 case SymbolDefinitionType.MsiPatchOldAssemblyName:
415 return SymbolDefinitions.MsiPatchOldAssemblyName;
416
417 case SymbolDefinitionType.MsiPatchSequence:
418 return SymbolDefinitions.MsiPatchSequence;
419
420 case SymbolDefinitionType.MsiServiceConfig:
421 return SymbolDefinitions.MsiServiceConfig;
422
423 case SymbolDefinitionType.MsiServiceConfigFailureActions:
424 return SymbolDefinitions.MsiServiceConfigFailureActions;
425
426 case SymbolDefinitionType.MsiShortcutProperty:
427 return SymbolDefinitions.MsiShortcutProperty;
428
429 case SymbolDefinitionType.ODBCAttribute:
430 return SymbolDefinitions.ODBCAttribute;
431
432 case SymbolDefinitionType.ODBCDataSource:
433 return SymbolDefinitions.ODBCDataSource;
434
435 case SymbolDefinitionType.ODBCDriver:
436 return SymbolDefinitions.ODBCDriver;
437
438 case SymbolDefinitionType.ODBCSourceAttribute:
439 return SymbolDefinitions.ODBCSourceAttribute;
440
441 case SymbolDefinitionType.ODBCTranslator:
442 return SymbolDefinitions.ODBCTranslator;
443
444 case SymbolDefinitionType.Patch:
445 return SymbolDefinitions.Patch;
446
447 case SymbolDefinitionType.PatchMetadata:
448 return SymbolDefinitions.PatchMetadata;
449
450 case SymbolDefinitionType.PatchPackage:
451 return SymbolDefinitions.PatchPackage;
452
453 case SymbolDefinitionType.PatchSequence:
454 return SymbolDefinitions.PatchSequence;
455
456 case SymbolDefinitionType.ProgId:
457 return SymbolDefinitions.ProgId;
458
459 case SymbolDefinitionType.Properties:
460 return SymbolDefinitions.Properties;
461
462 case SymbolDefinitionType.Property:
463 return SymbolDefinitions.Property;
464
465 case SymbolDefinitionType.PublishComponent:
466 return SymbolDefinitions.PublishComponent;
467
468 case SymbolDefinitionType.RadioButton:
469 return SymbolDefinitions.RadioButton;
470
471 case SymbolDefinitionType.Registry:
472 return SymbolDefinitions.Registry;
473
474 case SymbolDefinitionType.RegLocator:
475 return SymbolDefinitions.RegLocator;
476
477 case SymbolDefinitionType.RemoveFile:
478 return SymbolDefinitions.RemoveFile;
479
480 case SymbolDefinitionType.RemoveRegistry:
481 return SymbolDefinitions.RemoveRegistry;
482
483 case SymbolDefinitionType.ReserveCost:
484 return SymbolDefinitions.ReserveCost;
485
486 case SymbolDefinitionType.ServiceControl:
487 return SymbolDefinitions.ServiceControl;
488
489 case SymbolDefinitionType.ServiceInstall:
490 return SymbolDefinitions.ServiceInstall;
491
492 case SymbolDefinitionType.SFPCatalog:
493 return SymbolDefinitions.SFPCatalog;
494
495 case SymbolDefinitionType.Shortcut:
496 return SymbolDefinitions.Shortcut;
497
498 case SymbolDefinitionType.Signature:
499 return SymbolDefinitions.Signature;
500
501 case SymbolDefinitionType.SoftwareIdentificationTag:
502 return SymbolDefinitions.SoftwareIdentificationTag;
503
504 case SymbolDefinitionType.TargetFilesOptionalData:
505 return SymbolDefinitions.TargetFilesOptionalData;
506
507 case SymbolDefinitionType.TargetImages:
508 return SymbolDefinitions.TargetImages;
509
510 case SymbolDefinitionType.TextStyle:
511 return SymbolDefinitions.TextStyle;
512
513 case SymbolDefinitionType.TypeLib:
514 return SymbolDefinitions.TypeLib;
515
516 case SymbolDefinitionType.UIText:
517 return SymbolDefinitions.UIText;
518
519 case SymbolDefinitionType.Upgrade:
520 return SymbolDefinitions.Upgrade;
521
522 case SymbolDefinitionType.UpgradedFilesOptionalData:
523 return SymbolDefinitions.UpgradedFilesOptionalData;
524
525 case SymbolDefinitionType.UpgradedFilesToIgnore:
526 return SymbolDefinitions.UpgradedFilesToIgnore;
527
528 case SymbolDefinitionType.UpgradedImages:
529 return SymbolDefinitions.UpgradedImages;
530
531 case SymbolDefinitionType.Verb:
532 return SymbolDefinitions.Verb;
533
534 case SymbolDefinitionType.WixAction:
535 return SymbolDefinitions.WixAction;
536
537 case SymbolDefinitionType.WixApprovedExeForElevation:
538 return SymbolDefinitions.WixApprovedExeForElevation;
539
540 case SymbolDefinitionType.WixBindUpdatedFiles:
541 return SymbolDefinitions.WixBindUpdatedFiles;
542
543 case SymbolDefinitionType.WixBootstrapperApplication:
544 return SymbolDefinitions.WixBootstrapperApplication;
545
546 case SymbolDefinitionType.WixBootstrapperApplicationDll:
547 return SymbolDefinitions.WixBootstrapperApplicationDll;
548
549 case SymbolDefinitionType.WixBuildInfo:
550 return SymbolDefinitions.WixBuildInfo;
551
552 case SymbolDefinitionType.WixBundle:
553 return SymbolDefinitions.WixBundle;
554
555 case SymbolDefinitionType.WixBundleContainer:
556 return SymbolDefinitions.WixBundleContainer;
557
558 case SymbolDefinitionType.WixBundleCustomData:
559 return SymbolDefinitions.WixBundleCustomData;
560
561 case SymbolDefinitionType.WixBundleCustomDataAttribute:
562 return SymbolDefinitions.WixBundleCustomDataAttribute;
563
564 case SymbolDefinitionType.WixBundleCustomDataCell:
565 return SymbolDefinitions.WixBundleCustomDataCell;
566
567 case SymbolDefinitionType.WixBundleExtension:
568 return SymbolDefinitions.WixBundleExtension;
569
570 case SymbolDefinitionType.WixBundleExePackage:
571 return SymbolDefinitions.WixBundleExePackage;
572
573 case SymbolDefinitionType.WixBundleExePackagePayload:
574 return SymbolDefinitions.WixBundleExePackagePayload;
575
576 case SymbolDefinitionType.WixBundleMsiFeature:
577 return SymbolDefinitions.WixBundleMsiFeature;
578
579 case SymbolDefinitionType.WixBundleMsiPackage:
580 return SymbolDefinitions.WixBundleMsiPackage;
581
582 case SymbolDefinitionType.WixBundleMsiPackagePayload:
583 return SymbolDefinitions.WixBundleMsiPackagePayload;
584
585 case SymbolDefinitionType.WixBundleMsiProperty:
586 return SymbolDefinitions.WixBundleMsiProperty;
587
588 case SymbolDefinitionType.WixBundleMspPackage:
589 return SymbolDefinitions.WixBundleMspPackage;
590
591 case SymbolDefinitionType.WixBundleMspPackagePayload:
592 return SymbolDefinitions.WixBundleMspPackagePayload;
593
594 case SymbolDefinitionType.WixBundleMsuPackage:
595 return SymbolDefinitions.WixBundleMsuPackage;
596
597 case SymbolDefinitionType.WixBundleMsuPackagePayload:
598 return SymbolDefinitions.WixBundleMsuPackagePayload;
599
600 case SymbolDefinitionType.WixBundlePackage:
601 return SymbolDefinitions.WixBundlePackage;
602
603 case SymbolDefinitionType.WixBundlePackageCommandLine:
604 return SymbolDefinitions.WixBundlePackageCommandLine;
605
606 case SymbolDefinitionType.WixBundlePackageExitCode:
607 return SymbolDefinitions.WixBundlePackageExitCode;
608
609 case SymbolDefinitionType.WixBundlePackageGroup:
610 return SymbolDefinitions.WixBundlePackageGroup;
611
612 case SymbolDefinitionType.WixBundlePatchTargetCode:
613 return SymbolDefinitions.WixBundlePatchTargetCode;
614
615 case SymbolDefinitionType.WixBundlePayload:
616 return SymbolDefinitions.WixBundlePayload;
617
618 case SymbolDefinitionType.WixBundlePayloadGroup:
619 return SymbolDefinitions.WixBundlePayloadGroup;
620
621 case SymbolDefinitionType.WixBundleRelatedPackage:
622 return SymbolDefinitions.WixBundleRelatedPackage;
623
624 case SymbolDefinitionType.WixBundleRollbackBoundary:
625 return SymbolDefinitions.WixBundleRollbackBoundary;
626
627 case SymbolDefinitionType.WixBundleSlipstreamMsp:
628 return SymbolDefinitions.WixBundleSlipstreamMsp;
629
630 case SymbolDefinitionType.WixBundleTag:
631 return SymbolDefinitions.WixBundleTag;
632
633 case SymbolDefinitionType.WixBundleUpdate:
634 return SymbolDefinitions.WixBundleUpdate;
635
636 case SymbolDefinitionType.WixBundleVariable:
637 return SymbolDefinitions.WixBundleVariable;
638
639 case SymbolDefinitionType.WixChain:
640 return SymbolDefinitions.WixChain;
641
642 case SymbolDefinitionType.WixChainItem:
643 return SymbolDefinitions.WixChainItem;
644
645 case SymbolDefinitionType.WixComplexReference:
646 return SymbolDefinitions.WixComplexReference;
647
648 case SymbolDefinitionType.WixComponentGroup:
649 return SymbolDefinitions.WixComponentGroup;
650
651 case SymbolDefinitionType.WixComponentSearch:
652 return SymbolDefinitions.WixComponentSearch;
653
654 case SymbolDefinitionType.WixCustomTable:
655 return SymbolDefinitions.WixCustomTable;
656
657 case SymbolDefinitionType.WixCustomTableCell:
658 return SymbolDefinitions.WixCustomTableCell;
659
660 case SymbolDefinitionType.WixCustomTableColumn:
661 return SymbolDefinitions.WixCustomTableColumn;
662
663 case SymbolDefinitionType.WixDeltaPatchFile:
664 return SymbolDefinitions.WixDeltaPatchFile;
665
666 case SymbolDefinitionType.WixDeltaPatchSymbolPaths:
667 return SymbolDefinitions.WixDeltaPatchSymbolPaths;
668
669 case SymbolDefinitionType.WixDependency:
670 return SymbolDefinitions.WixDependency;
671
672 case SymbolDefinitionType.WixDependencyRef:
673 return SymbolDefinitions.WixDependencyRef;
674
675 case SymbolDefinitionType.WixDependencyProvider:
676 return SymbolDefinitions.WixDependencyProvider;
677
678 case SymbolDefinitionType.WixEnsureTable:
679 return SymbolDefinitions.WixEnsureTable;
680
681 case SymbolDefinitionType.WixFeatureGroup:
682 return SymbolDefinitions.WixFeatureGroup;
683
684 case SymbolDefinitionType.WixFeatureModules:
685 return SymbolDefinitions.WixFeatureModules;
686
687 case SymbolDefinitionType.WixFileSearch:
688 return SymbolDefinitions.WixFileSearch;
689
690 case SymbolDefinitionType.WixFragment:
691 return SymbolDefinitions.WixFragment;
692
693 case SymbolDefinitionType.WixGroup:
694 return SymbolDefinitions.WixGroup;
695
696 case SymbolDefinitionType.WixInstanceComponent:
697 return SymbolDefinitions.WixInstanceComponent;
698
699 case SymbolDefinitionType.WixInstanceTransforms:
700 return SymbolDefinitions.WixInstanceTransforms;
701
702 case SymbolDefinitionType.WixMediaTemplate:
703 return SymbolDefinitions.WixMediaTemplate;
704
705 case SymbolDefinitionType.WixMerge:
706 return SymbolDefinitions.WixMerge;
707
708 case SymbolDefinitionType.WixOrdering:
709 return SymbolDefinitions.WixOrdering;
710
711 case SymbolDefinitionType.WixPackage:
712 return SymbolDefinitions.WixPackage;
713
714 case SymbolDefinitionType.WixPatchBaseline:
715 return SymbolDefinitions.WixPatchBaseline;
716
717 case SymbolDefinitionType.WixPatchFamilyGroup:
718 return SymbolDefinitions.WixPatchFamilyGroup;
719
720 case SymbolDefinitionType.WixPatch:
721 return SymbolDefinitions.WixPatchId;
722
723 case SymbolDefinitionType.WixPatchRef:
724 return SymbolDefinitions.WixPatchRef;
725
726 case SymbolDefinitionType.WixPatchTarget:
727 return SymbolDefinitions.WixPatchTarget;
728
729 case SymbolDefinitionType.WixProductSearch:
730 return SymbolDefinitions.WixProductSearch;
731
732 case SymbolDefinitionType.WixProductTag:
733 return SymbolDefinitions.WixProductTag;
734
735 case SymbolDefinitionType.WixProperty:
736 return SymbolDefinitions.WixProperty;
737
738 case SymbolDefinitionType.WixRegistrySearch:
739 return SymbolDefinitions.WixRegistrySearch;
740
741 case SymbolDefinitionType.WixRelatedBundle:
742 return SymbolDefinitions.WixRelatedBundle;
743
744 case SymbolDefinitionType.WixSearch:
745 return SymbolDefinitions.WixSearch;
746
747 case SymbolDefinitionType.WixSearchRelation:
748 return SymbolDefinitions.WixSearchRelation;
749
750 case SymbolDefinitionType.WixSetVariable:
751 return SymbolDefinitions.WixSetVariable;
752
753 case SymbolDefinitionType.WixSimpleReference:
754 return SymbolDefinitions.WixSimpleReference;
755
756 case SymbolDefinitionType.WixSuppressAction:
757 return SymbolDefinitions.WixSuppressAction;
758
759 case SymbolDefinitionType.WixSuppressModularization:
760 return SymbolDefinitions.WixSuppressModularization;
761
762 case SymbolDefinitionType.WixUI:
763 return SymbolDefinitions.WixUI;
764
765 case SymbolDefinitionType.WixUpdateRegistration:
766 return SymbolDefinitions.WixUpdateRegistration;
767
768 case SymbolDefinitionType.WixVariable:
769 return SymbolDefinitions.WixVariable;
770
771 default:
772 throw new ArgumentOutOfRangeException($"{nameof(type)} ({type})");
773 }
774 }
775 }
776}
diff --git a/src/api/wix/WixToolset.Data/Symbols/TargetFilesOptionalDataSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/TargetFilesOptionalDataSymbol.cs
new file mode 100644
index 00000000..66fdc30c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/TargetFilesOptionalDataSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition TargetFilesOptionalData = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.TargetFilesOptionalData,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.Target), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.FTK), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.SymbolPaths), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.IgnoreOffsets), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.IgnoreLengths), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(TargetFilesOptionalDataSymbolFields.RetainOffsets), IntermediateFieldType.String),
19 },
20 typeof(TargetFilesOptionalDataSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum TargetFilesOptionalDataSymbolFields
27 {
28 Target,
29 FTK,
30 SymbolPaths,
31 IgnoreOffsets,
32 IgnoreLengths,
33 RetainOffsets,
34 }
35
36 public class TargetFilesOptionalDataSymbol : IntermediateSymbol
37 {
38 public TargetFilesOptionalDataSymbol() : base(SymbolDefinitions.TargetFilesOptionalData, null, null)
39 {
40 }
41
42 public TargetFilesOptionalDataSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.TargetFilesOptionalData, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[TargetFilesOptionalDataSymbolFields index] => this.Fields[(int)index];
47
48 public string Target
49 {
50 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.Target];
51 set => this.Set((int)TargetFilesOptionalDataSymbolFields.Target, value);
52 }
53
54 public string FTK
55 {
56 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.FTK];
57 set => this.Set((int)TargetFilesOptionalDataSymbolFields.FTK, value);
58 }
59
60 public string SymbolPaths
61 {
62 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.SymbolPaths];
63 set => this.Set((int)TargetFilesOptionalDataSymbolFields.SymbolPaths, value);
64 }
65
66 public string IgnoreOffsets
67 {
68 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.IgnoreOffsets];
69 set => this.Set((int)TargetFilesOptionalDataSymbolFields.IgnoreOffsets, value);
70 }
71
72 public string IgnoreLengths
73 {
74 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.IgnoreLengths];
75 set => this.Set((int)TargetFilesOptionalDataSymbolFields.IgnoreLengths, value);
76 }
77
78 public string RetainOffsets
79 {
80 get => (string)this.Fields[(int)TargetFilesOptionalDataSymbolFields.RetainOffsets];
81 set => this.Set((int)TargetFilesOptionalDataSymbolFields.RetainOffsets, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/TargetImagesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/TargetImagesSymbol.cs
new file mode 100644
index 00000000..4748b1f3
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/TargetImagesSymbol.cs
@@ -0,0 +1,92 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition TargetImages = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.TargetImages,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.Target), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.MsiPath), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.SymbolPaths), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.Upgraded), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.Order), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.ProductValidateFlags), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(TargetImagesSymbolFields.IgnoreMissingSrcFiles), IntermediateFieldType.Bool),
20 },
21 typeof(TargetImagesSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum TargetImagesSymbolFields
28 {
29 Target,
30 MsiPath,
31 SymbolPaths,
32 Upgraded,
33 Order,
34 ProductValidateFlags,
35 IgnoreMissingSrcFiles,
36 }
37
38 public class TargetImagesSymbol : IntermediateSymbol
39 {
40 public TargetImagesSymbol() : base(SymbolDefinitions.TargetImages, null, null)
41 {
42 }
43
44 public TargetImagesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.TargetImages, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[TargetImagesSymbolFields index] => this.Fields[(int)index];
49
50 public string Target
51 {
52 get => (string)this.Fields[(int)TargetImagesSymbolFields.Target];
53 set => this.Set((int)TargetImagesSymbolFields.Target, value);
54 }
55
56 public string MsiPath
57 {
58 get => (string)this.Fields[(int)TargetImagesSymbolFields.MsiPath];
59 set => this.Set((int)TargetImagesSymbolFields.MsiPath, value);
60 }
61
62 public string SymbolPaths
63 {
64 get => (string)this.Fields[(int)TargetImagesSymbolFields.SymbolPaths];
65 set => this.Set((int)TargetImagesSymbolFields.SymbolPaths, value);
66 }
67
68 public string Upgraded
69 {
70 get => (string)this.Fields[(int)TargetImagesSymbolFields.Upgraded];
71 set => this.Set((int)TargetImagesSymbolFields.Upgraded, value);
72 }
73
74 public int Order
75 {
76 get => (int)this.Fields[(int)TargetImagesSymbolFields.Order];
77 set => this.Set((int)TargetImagesSymbolFields.Order, value);
78 }
79
80 public string ProductValidateFlags
81 {
82 get => (string)this.Fields[(int)TargetImagesSymbolFields.ProductValidateFlags];
83 set => this.Set((int)TargetImagesSymbolFields.ProductValidateFlags, value);
84 }
85
86 public bool IgnoreMissingSrcFiles
87 {
88 get => (bool)this.Fields[(int)TargetImagesSymbolFields.IgnoreMissingSrcFiles];
89 set => this.Set((int)TargetImagesSymbolFields.IgnoreMissingSrcFiles, value);
90 }
91 }
92} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/TextStyleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/TextStyleSymbol.cs
new file mode 100644
index 00000000..53415714
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/TextStyleSymbol.cs
@@ -0,0 +1,114 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition TextStyle = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.TextStyle,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.FaceName), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Size), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Red), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Green), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Blue), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Bold), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Italic), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Strike), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(TextStyleSymbolFields.Underline), IntermediateFieldType.Bool),
22 },
23 typeof(TextStyleSymbol));
24 }
25}
26
27namespace WixToolset.Data.Symbols
28{
29 public enum TextStyleSymbolFields
30 {
31 FaceName,
32 Size,
33 Red,
34 Green,
35 Blue,
36 Bold,
37 Italic,
38 Strike,
39 Underline,
40 }
41
42 public class TextStyleSymbol : IntermediateSymbol
43 {
44 public TextStyleSymbol() : base(SymbolDefinitions.TextStyle, null, null)
45 {
46 }
47
48 public TextStyleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.TextStyle, sourceLineNumber, id)
49 {
50 }
51
52 public IntermediateField this[TextStyleSymbolFields index] => this.Fields[(int)index];
53
54 public string FaceName
55 {
56 get => (string)this.Fields[(int)TextStyleSymbolFields.FaceName];
57 set => this.Set((int)TextStyleSymbolFields.FaceName, value);
58 }
59
60 public string LocalizedSize
61 {
62 get => (string)this.Fields[(int)TextStyleSymbolFields.Size];
63 set => this.Set((int)TextStyleSymbolFields.Size, value);
64 }
65
66 public int Size
67 {
68 get => (int)this.Fields[(int)TextStyleSymbolFields.Size];
69 set => this.Set((int)TextStyleSymbolFields.Size, value);
70 }
71
72 public int? Red
73 {
74 get => (int?)this.Fields[(int)TextStyleSymbolFields.Red];
75 set => this.Set((int)TextStyleSymbolFields.Red, value);
76 }
77
78 public int? Green
79 {
80 get => (int?)this.Fields[(int)TextStyleSymbolFields.Green];
81 set => this.Set((int)TextStyleSymbolFields.Green, value);
82 }
83
84 public int? Blue
85 {
86 get => (int?)this.Fields[(int)TextStyleSymbolFields.Blue];
87 set => this.Set((int)TextStyleSymbolFields.Blue, value);
88 }
89
90 public bool Bold
91 {
92 get => (bool)this.Fields[(int)TextStyleSymbolFields.Bold];
93 set => this.Set((int)TextStyleSymbolFields.Bold, value);
94 }
95
96 public bool Italic
97 {
98 get => (bool)this.Fields[(int)TextStyleSymbolFields.Italic];
99 set => this.Set((int)TextStyleSymbolFields.Italic, value);
100 }
101
102 public bool Strike
103 {
104 get => (bool)this.Fields[(int)TextStyleSymbolFields.Strike];
105 set => this.Set((int)TextStyleSymbolFields.Strike, value);
106 }
107
108 public bool Underline
109 {
110 get => (bool)this.Fields[(int)TextStyleSymbolFields.Underline];
111 set => this.Set((int)TextStyleSymbolFields.Underline, value);
112 }
113 }
114} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/TransformsFlags.cs b/src/api/wix/WixToolset.Data/Symbols/TransformsFlags.cs
new file mode 100644
index 00000000..90f22cb4
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/TransformsFlags.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
3namespace WixToolset.Data.Symbols
4{
5 using System;
6
7 /// <summary>
8 /// Summary information values for the CharCount property in transforms.
9 /// </summary>
10 [Flags]
11 public enum TransformFlags
12 {
13 /// <summary>Ignore error when adding a row that exists.</summary>
14 ErrorAddExistingRow = 0x1,
15
16 /// <summary>Ignore error when deleting a row that does not exist.</summary>
17 ErrorDeleteMissingRow = 0x2,
18
19 /// <summary>Ignore error when adding a table that exists. </summary>
20 ErrorAddExistingTable = 0x4,
21
22 /// <summary>Ignore error when deleting a table that does not exist. </summary>
23 ErrorDeleteMissingTable = 0x8,
24
25 /// <summary>Ignore error when updating a row that does not exist. </summary>
26 ErrorUpdateMissingRow = 0x10,
27
28 /// <summary>Ignore error when transform and database code pages do not match, and their code pages are neutral.</summary>
29 ErrorChangeCodePage = 0x20,
30
31 /// <summary>Default language must match base database. </summary>
32 ValidateLanguage = 0x10000,
33
34 /// <summary>Product must match base database.</summary>
35 ValidateProduct = 0x20000,
36
37 /// <summary>Check major version only. </summary>
38 ValidateMajorVersion = 0x80000,
39
40 /// <summary>Check major and minor versions only. </summary>
41 ValidateMinorVersion = 0x100000,
42
43 /// <summary>Check major, minor, and update versions.</summary>
44 ValidateUpdateVersion = 0x200000,
45
46 /// <summary>Installed version lt base version. </summary>
47 ValidateNewLessBaseVersion = 0x400000,
48
49 /// <summary>Installed version lte base version. </summary>
50 ValidateNewLessEqualBaseVersion = 0x800000,
51
52 /// <summary>Installed version eq base version. </summary>
53 ValidateNewEqualBaseVersion = 0x1000000,
54
55 /// <summary>Installed version gte base version.</summary>
56 ValidateNewGreaterEqualBaseVersion = 0x2000000,
57
58 /// <summary>Installed version gt base version.</summary>
59 ValidateNewGreaterBaseVersion = 0x4000000,
60
61 /// <summary>UpgradeCode must match base database.</summary>
62 ValidateUpgradeCode = 0x8000000,
63
64 /// <summary>Masks all version checks on ProductVersion.</summary>
65 ProductVersionMask = ValidateMajorVersion | ValidateMinorVersion | ValidateUpdateVersion,
66
67 /// <summary>Masks all operations on ProductVersion.</summary>
68 ProductVersionOperatorMask = ValidateNewLessBaseVersion | ValidateNewLessEqualBaseVersion | ValidateNewEqualBaseVersion | ValidateNewGreaterEqualBaseVersion | ValidateNewGreaterBaseVersion,
69
70 /// <summary>Default value for instance transforms.</summary>
71 InstanceTransformDefault = ErrorAddExistingRow | ErrorDeleteMissingRow | ErrorAddExistingTable | ErrorDeleteMissingTable | ErrorUpdateMissingRow | ErrorChangeCodePage | ValidateProduct | ValidateUpdateVersion | ValidateNewGreaterEqualBaseVersion,
72
73 /// <summary>Default value for language transforms.</summary>
74 LanguageTransformDefault = ErrorAddExistingRow | ErrorDeleteMissingRow | ErrorAddExistingTable | ErrorDeleteMissingTable | ErrorUpdateMissingRow | ErrorChangeCodePage | ValidateProduct,
75
76 /// <summary>Default value for patch transforms.</summary>
77 PatchTransformDefault = ErrorAddExistingRow | ErrorDeleteMissingRow | ErrorAddExistingTable | ErrorDeleteMissingTable | ErrorUpdateMissingRow | ValidateProduct | ValidateUpdateVersion | ValidateNewEqualBaseVersion | ValidateUpgradeCode,
78 }
79}
diff --git a/src/api/wix/WixToolset.Data/Symbols/TypeLibSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/TypeLibSymbol.cs
new file mode 100644
index 00000000..736ee292
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/TypeLibSymbol.cs
@@ -0,0 +1,100 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition TypeLib = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.TypeLib,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.LibId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.Language), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.ComponentRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.Version), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.Description), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.DirectoryRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.FeatureRef), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(TypeLibSymbolFields.Cost), IntermediateFieldType.Number),
21 },
22 typeof(TypeLibSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 public enum TypeLibSymbolFields
29 {
30 LibId,
31 Language,
32 ComponentRef,
33 Version,
34 Description,
35 DirectoryRef,
36 FeatureRef,
37 Cost,
38 }
39
40 public class TypeLibSymbol : IntermediateSymbol
41 {
42 public TypeLibSymbol() : base(SymbolDefinitions.TypeLib, null, null)
43 {
44 }
45
46 public TypeLibSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.TypeLib, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[TypeLibSymbolFields index] => this.Fields[(int)index];
51
52 public string LibId
53 {
54 get => (string)this.Fields[(int)TypeLibSymbolFields.LibId];
55 set => this.Set((int)TypeLibSymbolFields.LibId, value);
56 }
57
58 public int Language
59 {
60 get => (int)this.Fields[(int)TypeLibSymbolFields.Language];
61 set => this.Set((int)TypeLibSymbolFields.Language, value);
62 }
63
64 public string ComponentRef
65 {
66 get => (string)this.Fields[(int)TypeLibSymbolFields.ComponentRef];
67 set => this.Set((int)TypeLibSymbolFields.ComponentRef, value);
68 }
69
70 public int? Version
71 {
72 get => (int?)this.Fields[(int)TypeLibSymbolFields.Version];
73 set => this.Set((int)TypeLibSymbolFields.Version, value);
74 }
75
76 public string Description
77 {
78 get => (string)this.Fields[(int)TypeLibSymbolFields.Description];
79 set => this.Set((int)TypeLibSymbolFields.Description, value);
80 }
81
82 public string DirectoryRef
83 {
84 get => (string)this.Fields[(int)TypeLibSymbolFields.DirectoryRef];
85 set => this.Set((int)TypeLibSymbolFields.DirectoryRef, value);
86 }
87
88 public string FeatureRef
89 {
90 get => (string)this.Fields[(int)TypeLibSymbolFields.FeatureRef];
91 set => this.Set((int)TypeLibSymbolFields.FeatureRef, value);
92 }
93
94 public int? Cost
95 {
96 get => (int?)this.Fields[(int)TypeLibSymbolFields.Cost];
97 set => this.Set((int)TypeLibSymbolFields.Cost, value);
98 }
99 }
100}
diff --git a/src/api/wix/WixToolset.Data/Symbols/UITextSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/UITextSymbol.cs
new file mode 100644
index 00000000..39b99398
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/UITextSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition UIText = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.UIText,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(UITextSymbolFields.Text), IntermediateFieldType.String),
14 },
15 typeof(UITextSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum UITextSymbolFields
22 {
23 Text,
24 }
25
26 public class UITextSymbol : IntermediateSymbol
27 {
28 public UITextSymbol() : base(SymbolDefinitions.UIText, null, null)
29 {
30 }
31
32 public UITextSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.UIText, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[UITextSymbolFields index] => this.Fields[(int)index];
37
38 public string Text
39 {
40 get => (string)this.Fields[(int)UITextSymbolFields.Text];
41 set => this.Set((int)UITextSymbolFields.Text, value);
42 }
43 }
44}
diff --git a/src/api/wix/WixToolset.Data/Symbols/UpgradeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/UpgradeSymbol.cs
new file mode 100644
index 00000000..51eb74ef
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/UpgradeSymbol.cs
@@ -0,0 +1,155 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Upgrade = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Upgrade,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.UpgradeCode), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.VersionMin), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.VersionMax), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.Language), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.ExcludeLanguages), IntermediateFieldType.Bool),
18 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.IgnoreRemoveFailures), IntermediateFieldType.Bool),
19 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.MigrateFeatures), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.OnlyDetect), IntermediateFieldType.Bool),
21 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.VersionMaxInclusive), IntermediateFieldType.Bool),
22 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.VersionMinInclusive), IntermediateFieldType.Bool),
23 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.Remove), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(UpgradeSymbolFields.ActionProperty), IntermediateFieldType.String),
25 },
26 typeof(UpgradeSymbol));
27 }
28}
29
30namespace WixToolset.Data.Symbols
31{
32 public enum UpgradeSymbolFields
33 {
34 UpgradeCode,
35 VersionMin,
36 VersionMax,
37 Language,
38 ExcludeLanguages,
39 IgnoreRemoveFailures,
40 MigrateFeatures,
41 OnlyDetect,
42 VersionMaxInclusive,
43 VersionMinInclusive,
44 Remove,
45 ActionProperty,
46 }
47
48 public static class WixUpgradeConstants
49 {
50 /// <summary>
51 /// Standard property for detecting upgrades.
52 /// </summary>
53 public const string UpgradeDetectedProperty = "WIX_UPGRADE_DETECTED";
54
55 /// <summary>
56 /// Standard condition to prevent upgrades.
57 /// </summary>
58 public const string UpgradePreventedCondition = "NOT WIX_UPGRADE_DETECTED";
59
60 /// <summary>
61 /// Standard property for downgrade detected.
62 /// </summary>
63 public const string DowngradeDetectedProperty = "WIX_DOWNGRADE_DETECTED";
64
65 /// <summary>
66 /// Standard condition to prevent downgrades.
67 /// </summary>
68 public const string DowngradePreventedCondition = "NOT WIX_DOWNGRADE_DETECTED";
69 }
70
71 public class UpgradeSymbol : IntermediateSymbol
72 {
73 public UpgradeSymbol() : base(SymbolDefinitions.Upgrade, null, null)
74 {
75 }
76
77 public UpgradeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Upgrade, sourceLineNumber, id)
78 {
79 }
80
81 public IntermediateField this[UpgradeSymbolFields index] => this.Fields[(int)index];
82
83 public string UpgradeCode
84 {
85 get => (string)this.Fields[(int)UpgradeSymbolFields.UpgradeCode];
86 set => this.Set((int)UpgradeSymbolFields.UpgradeCode, value);
87 }
88
89 public string VersionMin
90 {
91 get => (string)this.Fields[(int)UpgradeSymbolFields.VersionMin];
92 set => this.Set((int)UpgradeSymbolFields.VersionMin, value);
93 }
94
95 public string VersionMax
96 {
97 get => (string)this.Fields[(int)UpgradeSymbolFields.VersionMax];
98 set => this.Set((int)UpgradeSymbolFields.VersionMax, value);
99 }
100
101 public string Language
102 {
103 get => (string)this.Fields[(int)UpgradeSymbolFields.Language];
104 set => this.Set((int)UpgradeSymbolFields.Language, value);
105 }
106
107 public bool ExcludeLanguages
108 {
109 get => this.Fields[(int)UpgradeSymbolFields.ExcludeLanguages].AsBool();
110 set => this.Set((int)UpgradeSymbolFields.ExcludeLanguages, value);
111 }
112
113 public bool IgnoreRemoveFailures
114 {
115 get => this.Fields[(int)UpgradeSymbolFields.IgnoreRemoveFailures].AsBool();
116 set => this.Set((int)UpgradeSymbolFields.IgnoreRemoveFailures, value);
117 }
118
119 public bool MigrateFeatures
120 {
121 get => this.Fields[(int)UpgradeSymbolFields.MigrateFeatures].AsBool();
122 set => this.Set((int)UpgradeSymbolFields.MigrateFeatures, value);
123 }
124
125 public bool OnlyDetect
126 {
127 get => this.Fields[(int)UpgradeSymbolFields.OnlyDetect].AsBool();
128 set => this.Set((int)UpgradeSymbolFields.OnlyDetect, value);
129 }
130
131 public bool VersionMaxInclusive
132 {
133 get => this.Fields[(int)UpgradeSymbolFields.VersionMaxInclusive].AsBool();
134 set => this.Set((int)UpgradeSymbolFields.VersionMaxInclusive, value);
135 }
136
137 public bool VersionMinInclusive
138 {
139 get => this.Fields[(int)UpgradeSymbolFields.VersionMinInclusive].AsBool();
140 set => this.Set((int)UpgradeSymbolFields.VersionMinInclusive, value);
141 }
142
143 public string Remove
144 {
145 get => (string)this.Fields[(int)UpgradeSymbolFields.Remove];
146 set => this.Set((int)UpgradeSymbolFields.Remove, value);
147 }
148
149 public string ActionProperty
150 {
151 get => (string)this.Fields[(int)UpgradeSymbolFields.ActionProperty];
152 set => this.Set((int)UpgradeSymbolFields.ActionProperty, value);
153 }
154 }
155} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesOptionalDataSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesOptionalDataSymbol.cs
new file mode 100644
index 00000000..9e669ec3
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesOptionalDataSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition UpgradedFilesOptionalData = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.UpgradedFilesOptionalData,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(UpgradedFilesOptionalDataSymbolFields.Upgraded), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(UpgradedFilesOptionalDataSymbolFields.FTK), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(UpgradedFilesOptionalDataSymbolFields.SymbolPaths), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(UpgradedFilesOptionalDataSymbolFields.AllowIgnoreOnPatchError), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(UpgradedFilesOptionalDataSymbolFields.IncludeWholeFile), IntermediateFieldType.Bool),
18 },
19 typeof(UpgradedFilesOptionalDataSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum UpgradedFilesOptionalDataSymbolFields
26 {
27 Upgraded,
28 FTK,
29 SymbolPaths,
30 AllowIgnoreOnPatchError,
31 IncludeWholeFile,
32 }
33
34 public class UpgradedFilesOptionalDataSymbol : IntermediateSymbol
35 {
36 public UpgradedFilesOptionalDataSymbol() : base(SymbolDefinitions.UpgradedFilesOptionalData, null, null)
37 {
38 }
39
40 public UpgradedFilesOptionalDataSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.UpgradedFilesOptionalData, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[UpgradedFilesOptionalDataSymbolFields index] => this.Fields[(int)index];
45
46 public string Upgraded
47 {
48 get => (string)this.Fields[(int)UpgradedFilesOptionalDataSymbolFields.Upgraded];
49 set => this.Set((int)UpgradedFilesOptionalDataSymbolFields.Upgraded, value);
50 }
51
52 public string FTK
53 {
54 get => (string)this.Fields[(int)UpgradedFilesOptionalDataSymbolFields.FTK];
55 set => this.Set((int)UpgradedFilesOptionalDataSymbolFields.FTK, value);
56 }
57
58 public string SymbolPaths
59 {
60 get => (string)this.Fields[(int)UpgradedFilesOptionalDataSymbolFields.SymbolPaths];
61 set => this.Set((int)UpgradedFilesOptionalDataSymbolFields.SymbolPaths, value);
62 }
63
64 public bool? AllowIgnoreOnPatchError
65 {
66 get => (bool?)this.Fields[(int)UpgradedFilesOptionalDataSymbolFields.AllowIgnoreOnPatchError];
67 set => this.Set((int)UpgradedFilesOptionalDataSymbolFields.AllowIgnoreOnPatchError, value);
68 }
69
70 public bool? IncludeWholeFile
71 {
72 get => (bool?)this.Fields[(int)UpgradedFilesOptionalDataSymbolFields.IncludeWholeFile];
73 set => this.Set((int)UpgradedFilesOptionalDataSymbolFields.IncludeWholeFile, value);
74 }
75 }
76}
diff --git a/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesToIgnoreSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesToIgnoreSymbol.cs
new file mode 100644
index 00000000..e21af6a2
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/UpgradedFilesToIgnoreSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition UpgradedFilesToIgnore = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.UpgradedFilesToIgnore,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(UpgradedFilesToIgnoreSymbolFields.Upgraded), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(UpgradedFilesToIgnoreSymbolFields.FTK), IntermediateFieldType.String),
15 },
16 typeof(UpgradedFilesToIgnoreSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum UpgradedFilesToIgnoreSymbolFields
23 {
24 Upgraded,
25 FTK,
26 }
27
28 public class UpgradedFilesToIgnoreSymbol : IntermediateSymbol
29 {
30 public UpgradedFilesToIgnoreSymbol() : base(SymbolDefinitions.UpgradedFilesToIgnore, null, null)
31 {
32 }
33
34 public UpgradedFilesToIgnoreSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.UpgradedFilesToIgnore, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[UpgradedFilesToIgnoreSymbolFields index] => this.Fields[(int)index];
39
40 public string Upgraded
41 {
42 get => (string)this.Fields[(int)UpgradedFilesToIgnoreSymbolFields.Upgraded];
43 set => this.Set((int)UpgradedFilesToIgnoreSymbolFields.Upgraded, value);
44 }
45
46 public string FTK
47 {
48 get => (string)this.Fields[(int)UpgradedFilesToIgnoreSymbolFields.FTK];
49 set => this.Set((int)UpgradedFilesToIgnoreSymbolFields.FTK, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/UpgradedImagesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/UpgradedImagesSymbol.cs
new file mode 100644
index 00000000..28eae08a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/UpgradedImagesSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition UpgradedImages = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.UpgradedImages,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(UpgradedImagesSymbolFields.Upgraded), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(UpgradedImagesSymbolFields.MsiPath), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(UpgradedImagesSymbolFields.PatchMsiPath), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(UpgradedImagesSymbolFields.SymbolPaths), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(UpgradedImagesSymbolFields.Family), IntermediateFieldType.String),
18 },
19 typeof(UpgradedImagesSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum UpgradedImagesSymbolFields
26 {
27 Upgraded,
28 MsiPath,
29 PatchMsiPath,
30 SymbolPaths,
31 Family,
32 }
33
34 public class UpgradedImagesSymbol : IntermediateSymbol
35 {
36 public UpgradedImagesSymbol() : base(SymbolDefinitions.UpgradedImages, null, null)
37 {
38 }
39
40 public UpgradedImagesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.UpgradedImages, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[UpgradedImagesSymbolFields index] => this.Fields[(int)index];
45
46 public string Upgraded
47 {
48 get => (string)this.Fields[(int)UpgradedImagesSymbolFields.Upgraded];
49 set => this.Set((int)UpgradedImagesSymbolFields.Upgraded, value);
50 }
51
52 public string MsiPath
53 {
54 get => (string)this.Fields[(int)UpgradedImagesSymbolFields.MsiPath];
55 set => this.Set((int)UpgradedImagesSymbolFields.MsiPath, value);
56 }
57
58 public string PatchMsiPath
59 {
60 get => (string)this.Fields[(int)UpgradedImagesSymbolFields.PatchMsiPath];
61 set => this.Set((int)UpgradedImagesSymbolFields.PatchMsiPath, value);
62 }
63
64 public string SymbolPaths
65 {
66 get => (string)this.Fields[(int)UpgradedImagesSymbolFields.SymbolPaths];
67 set => this.Set((int)UpgradedImagesSymbolFields.SymbolPaths, value);
68 }
69
70 public string Family
71 {
72 get => (string)this.Fields[(int)UpgradedImagesSymbolFields.Family];
73 set => this.Set((int)UpgradedImagesSymbolFields.Family, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/VerbSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/VerbSymbol.cs
new file mode 100644
index 00000000..95f045d6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/VerbSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition Verb = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.Verb,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(VerbSymbolFields.ExtensionRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(VerbSymbolFields.Verb), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(VerbSymbolFields.Sequence), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(VerbSymbolFields.Command), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(VerbSymbolFields.Argument), IntermediateFieldType.String),
18 },
19 typeof(VerbSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum VerbSymbolFields
26 {
27 ExtensionRef,
28 Verb,
29 Sequence,
30 Command,
31 Argument,
32 }
33
34 public class VerbSymbol : IntermediateSymbol
35 {
36 public VerbSymbol() : base(SymbolDefinitions.Verb, null, null)
37 {
38 }
39
40 public VerbSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.Verb, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[VerbSymbolFields index] => this.Fields[(int)index];
45
46 public string ExtensionRef
47 {
48 get => (string)this.Fields[(int)VerbSymbolFields.ExtensionRef];
49 set => this.Set((int)VerbSymbolFields.ExtensionRef, value);
50 }
51
52 public string Verb
53 {
54 get => (string)this.Fields[(int)VerbSymbolFields.Verb];
55 set => this.Set((int)VerbSymbolFields.Verb, value);
56 }
57
58 public int? Sequence
59 {
60 get => (int?)this.Fields[(int)VerbSymbolFields.Sequence];
61 set => this.Set((int)VerbSymbolFields.Sequence, value);
62 }
63
64 public string Command
65 {
66 get => (string)this.Fields[(int)VerbSymbolFields.Command];
67 set => this.Set((int)VerbSymbolFields.Command, value);
68 }
69
70 public string Argument
71 {
72 get => (string)this.Fields[(int)VerbSymbolFields.Argument];
73 set => this.Set((int)VerbSymbolFields.Argument, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixActionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixActionSymbol.cs
new file mode 100644
index 00000000..a055d68f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixActionSymbol.cs
@@ -0,0 +1,101 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixAction = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixAction,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.SequenceTable), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.Action), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.Condition), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.Sequence), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.Before), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.After), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixActionSymbolFields.Overridable), IntermediateFieldType.Bool),
20 },
21 typeof(WixActionSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum WixActionSymbolFields
28 {
29 SequenceTable,
30 Action,
31 Condition,
32 Sequence,
33 Before,
34 After,
35 Overridable,
36 }
37
38 public enum SequenceTable
39 {
40 AdminUISequence,
41 AdminExecuteSequence,
42 AdvertiseExecuteSequence,
43 InstallUISequence,
44 InstallExecuteSequence
45 }
46
47 public class WixActionSymbol : IntermediateSymbol
48 {
49 public WixActionSymbol() : base(SymbolDefinitions.WixAction, null, null)
50 {
51 }
52
53 public WixActionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixAction, sourceLineNumber, id)
54 {
55 }
56
57 public IntermediateField this[WixActionSymbolFields index] => this.Fields[(int)index];
58
59 public SequenceTable SequenceTable
60 {
61 get => (SequenceTable)this.Fields[(int)WixActionSymbolFields.SequenceTable].AsNumber();
62 set => this.Set((int)WixActionSymbolFields.SequenceTable, (int)value);
63 }
64
65 public string Action
66 {
67 get => (string)this.Fields[(int)WixActionSymbolFields.Action];
68 set => this.Set((int)WixActionSymbolFields.Action, value);
69 }
70
71 public string Condition
72 {
73 get => (string)this.Fields[(int)WixActionSymbolFields.Condition];
74 set => this.Set((int)WixActionSymbolFields.Condition, value);
75 }
76
77 public int? Sequence
78 {
79 get => (int?)this.Fields[(int)WixActionSymbolFields.Sequence];
80 set => this.Set((int)WixActionSymbolFields.Sequence, value);
81 }
82
83 public string Before
84 {
85 get => (string)this.Fields[(int)WixActionSymbolFields.Before];
86 set => this.Set((int)WixActionSymbolFields.Before, value);
87 }
88
89 public string After
90 {
91 get => (string)this.Fields[(int)WixActionSymbolFields.After];
92 set => this.Set((int)WixActionSymbolFields.After, value);
93 }
94
95 public bool Overridable
96 {
97 get => this.Fields[(int)WixActionSymbolFields.Overridable].AsBool();
98 set => this.Set((int)WixActionSymbolFields.Overridable, value);
99 }
100 }
101}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixApprovedExeForElevationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixApprovedExeForElevationSymbol.cs
new file mode 100644
index 00000000..04c6e712
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixApprovedExeForElevationSymbol.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixApprovedExeForElevation = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixApprovedExeForElevation,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixApprovedExeForElevationSymbolFields.Key), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixApprovedExeForElevationSymbolFields.ValueName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixApprovedExeForElevationSymbolFields.Attributes), IntermediateFieldType.Number),
16 },
17 typeof(WixApprovedExeForElevationSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 using System;
24
25 public enum WixApprovedExeForElevationSymbolFields
26 {
27 Key,
28 ValueName,
29 Attributes,
30 }
31
32 [Flags]
33 public enum WixApprovedExeForElevationAttributes
34 {
35 None = 0x0,
36 Win64 = 0x1,
37 }
38
39 public class WixApprovedExeForElevationSymbol : IntermediateSymbol
40 {
41 public WixApprovedExeForElevationSymbol() : base(SymbolDefinitions.WixApprovedExeForElevation, null, null)
42 {
43 }
44
45 public WixApprovedExeForElevationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixApprovedExeForElevation, sourceLineNumber, id)
46 {
47 }
48
49 public IntermediateField this[WixApprovedExeForElevationSymbolFields index] => this.Fields[(int)index];
50
51 public string Key
52 {
53 get => (string)this.Fields[(int)WixApprovedExeForElevationSymbolFields.Key];
54 set => this.Set((int)WixApprovedExeForElevationSymbolFields.Key, value);
55 }
56
57 public string ValueName
58 {
59 get => (string)this.Fields[(int)WixApprovedExeForElevationSymbolFields.ValueName];
60 set => this.Set((int)WixApprovedExeForElevationSymbolFields.ValueName, value);
61 }
62
63 public WixApprovedExeForElevationAttributes Attributes
64 {
65 get => (WixApprovedExeForElevationAttributes)this.Fields[(int)WixApprovedExeForElevationSymbolFields.Attributes].AsNumber();
66 set => this.Set((int)WixApprovedExeForElevationSymbolFields.Attributes, (int)value);
67 }
68
69 public bool Win64 => (this.Attributes & WixApprovedExeForElevationAttributes.Win64) == WixApprovedExeForElevationAttributes.Win64;
70 }
71}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBindUpdatedFilesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBindUpdatedFilesSymbol.cs
new file mode 100644
index 00000000..03bdb69b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBindUpdatedFilesSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBindUpdatedFiles = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBindUpdatedFiles,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBindUpdatedFilesSymbolFields.FileRef), IntermediateFieldType.String),
14 },
15 typeof(WixBindUpdatedFilesSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixBindUpdatedFilesSymbolFields
22 {
23 FileRef,
24 }
25
26 public class WixBindUpdatedFilesSymbol : IntermediateSymbol
27 {
28 public WixBindUpdatedFilesSymbol() : base(SymbolDefinitions.WixBindUpdatedFiles, null, null)
29 {
30 }
31
32 public WixBindUpdatedFilesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBindUpdatedFiles, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixBindUpdatedFilesSymbolFields index] => this.Fields[(int)index];
37
38 public string FileRef
39 {
40 get => (string)this.Fields[(int)WixBindUpdatedFilesSymbolFields.FileRef];
41 set => this.Set((int)WixBindUpdatedFilesSymbolFields.FileRef, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationDllSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationDllSymbol.cs
new file mode 100644
index 00000000..d3a66754
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationDllSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBootstrapperApplicationDll = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBootstrapperApplicationDll,
11 new IntermediateFieldDefinition[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBootstrapperApplicationDllSymbolFields.DpiAwareness), IntermediateFieldType.Number),
14 },
15 typeof(WixBootstrapperApplicationDllSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixBootstrapperApplicationDllSymbolFields
22 {
23 DpiAwareness,
24 }
25
26 public enum WixBootstrapperApplicationDpiAwarenessType
27 {
28 Unaware,
29 System,
30 PerMonitor,
31 PerMonitorV2,
32 GdiScaled,
33 }
34
35 public class WixBootstrapperApplicationDllSymbol : IntermediateSymbol
36 {
37 public WixBootstrapperApplicationDllSymbol() : base(SymbolDefinitions.WixBootstrapperApplicationDll, null, null)
38 {
39 }
40
41 public WixBootstrapperApplicationDllSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBootstrapperApplicationDll, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[WixBootstrapperApplicationDllSymbolFields index] => this.Fields[(int)index];
46
47 public WixBootstrapperApplicationDpiAwarenessType DpiAwareness
48 {
49 get => (WixBootstrapperApplicationDpiAwarenessType)this.Fields[(int)WixBootstrapperApplicationDllSymbolFields.DpiAwareness].AsNumber();
50 set => this.Set((int)WixBootstrapperApplicationDllSymbolFields.DpiAwareness, (int)value);
51 }
52 }
53}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationSymbol.cs
new file mode 100644
index 00000000..3d7876fd
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBootstrapperApplicationSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBootstrapperApplication = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBootstrapperApplication,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBootstrapperApplicationSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBootstrapperApplicationSymbolFields
21 {
22 }
23
24 public class WixBootstrapperApplicationSymbol : IntermediateSymbol
25 {
26 public WixBootstrapperApplicationSymbol() : base(SymbolDefinitions.WixBootstrapperApplication, null, null)
27 {
28 }
29
30 public WixBootstrapperApplicationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBootstrapperApplication, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBootstrapperApplicationSymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBuildInfoSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBuildInfoSymbol.cs
new file mode 100644
index 00000000..66e04d4b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBuildInfoSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBuildInfo = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBuildInfo,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBuildInfoSymbolFields.WixVersion), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBuildInfoSymbolFields.WixOutputFile), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBuildInfoSymbolFields.WixProjectFile), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBuildInfoSymbolFields.WixPdbFile), IntermediateFieldType.String),
17 },
18 typeof(WixBuildInfoSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixBuildInfoSymbolFields
25 {
26 WixVersion,
27 WixOutputFile,
28 WixProjectFile,
29 WixPdbFile,
30 }
31
32 public class WixBuildInfoSymbol : IntermediateSymbol
33 {
34 public WixBuildInfoSymbol() : base(SymbolDefinitions.WixBuildInfo, null, null)
35 {
36 }
37
38 public WixBuildInfoSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBuildInfo, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixBuildInfoSymbolFields index] => this.Fields[(int)index];
43
44 public string WixVersion
45 {
46 get => (string)this.Fields[(int)WixBuildInfoSymbolFields.WixVersion];
47 set => this.Set((int)WixBuildInfoSymbolFields.WixVersion, value);
48 }
49
50 public string WixOutputFile
51 {
52 get => (string)this.Fields[(int)WixBuildInfoSymbolFields.WixOutputFile];
53 set => this.Set((int)WixBuildInfoSymbolFields.WixOutputFile, value);
54 }
55
56 public string WixProjectFile
57 {
58 get => (string)this.Fields[(int)WixBuildInfoSymbolFields.WixProjectFile];
59 set => this.Set((int)WixBuildInfoSymbolFields.WixProjectFile, value);
60 }
61
62 public string WixPdbFile
63 {
64 get => (string)this.Fields[(int)WixBuildInfoSymbolFields.WixPdbFile];
65 set => this.Set((int)WixBuildInfoSymbolFields.WixPdbFile, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleContainerSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleContainerSymbol.cs
new file mode 100644
index 00000000..80beda0a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleContainerSymbol.cs
@@ -0,0 +1,103 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleContainer = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleContainer,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.Type), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.DownloadUrl), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.Size), IntermediateFieldType.LargeNumber),
17 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.Hash), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.AttachedContainerIndex), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(WixBundleContainerSymbolFields.WorkingPath), IntermediateFieldType.String),
20 },
21 typeof(WixBundleContainerSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 using System;
28
29 public enum WixBundleContainerSymbolFields
30 {
31 Name,
32 Type,
33 DownloadUrl,
34 Size,
35 Hash,
36 AttachedContainerIndex,
37 WorkingPath,
38 }
39
40 /// <summary>
41 /// Types of bundle packages.
42 /// </summary>
43 public enum ContainerType
44 {
45 Attached,
46 Detached,
47 }
48
49 public class WixBundleContainerSymbol : IntermediateSymbol
50 {
51 public WixBundleContainerSymbol() : base(SymbolDefinitions.WixBundleContainer, null, null)
52 {
53 }
54
55 public WixBundleContainerSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleContainer, sourceLineNumber, id)
56 {
57 }
58
59 public IntermediateField this[WixBundleContainerSymbolFields index] => this.Fields[(int)index];
60
61 public string Name
62 {
63 get => (string)this.Fields[(int)WixBundleContainerSymbolFields.Name];
64 set => this.Set((int)WixBundleContainerSymbolFields.Name, value);
65 }
66
67 public ContainerType Type
68 {
69 get => (ContainerType)this.Fields[(int)WixBundleContainerSymbolFields.Type].AsNumber();
70 set => this.Set((int)WixBundleContainerSymbolFields.Type, (int)value);
71 }
72
73 public string DownloadUrl
74 {
75 get => (string)this.Fields[(int)WixBundleContainerSymbolFields.DownloadUrl];
76 set => this.Set((int)WixBundleContainerSymbolFields.DownloadUrl, value);
77 }
78
79 public long? Size
80 {
81 get => (long?)this.Fields[(int)WixBundleContainerSymbolFields.Size];
82 set => this.Set((int)WixBundleContainerSymbolFields.Size, value);
83 }
84
85 public string Hash
86 {
87 get => (string)this.Fields[(int)WixBundleContainerSymbolFields.Hash];
88 set => this.Set((int)WixBundleContainerSymbolFields.Hash, value);
89 }
90
91 public int? AttachedContainerIndex
92 {
93 get => (int?)this.Fields[(int)WixBundleContainerSymbolFields.AttachedContainerIndex];
94 set => this.Set((int)WixBundleContainerSymbolFields.AttachedContainerIndex, value);
95 }
96
97 public string WorkingPath
98 {
99 get => (string)this.Fields[(int)WixBundleContainerSymbolFields.WorkingPath];
100 set => this.Set((int)WixBundleContainerSymbolFields.WorkingPath, value);
101 }
102 }
103}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataAttributeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataAttributeSymbol.cs
new file mode 100644
index 00000000..c0a657ee
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataAttributeSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleCustomDataAttribute = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleCustomDataAttribute,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleCustomDataAttributeSymbolFields.CustomDataRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleCustomDataAttributeSymbolFields.Name), IntermediateFieldType.String),
15 },
16 typeof(WixBundleCustomDataAttributeSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixBundleCustomDataAttributeSymbolFields
23 {
24 CustomDataRef,
25 Name,
26 }
27
28 public class WixBundleCustomDataAttributeSymbol : IntermediateSymbol
29 {
30 public WixBundleCustomDataAttributeSymbol() : base(SymbolDefinitions.WixBundleCustomDataAttribute, null, null)
31 {
32 }
33
34 public WixBundleCustomDataAttributeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleCustomDataAttribute, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixBundleCustomDataAttributeSymbolFields index] => this.Fields[(int)index];
39
40 public string CustomDataRef
41 {
42 get => (string)this.Fields[(int)WixBundleCustomDataAttributeSymbolFields.CustomDataRef];
43 set => this.Set((int)WixBundleCustomDataAttributeSymbolFields.CustomDataRef, value);
44 }
45
46 public string Name
47 {
48 get => (string)this.Fields[(int)WixBundleCustomDataAttributeSymbolFields.Name];
49 set => this.Set((int)WixBundleCustomDataAttributeSymbolFields.Name, value);
50 }
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataCellSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataCellSymbol.cs
new file mode 100644
index 00000000..0488969a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataCellSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleCustomDataCell = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleCustomDataCell,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleCustomDataCellSymbolFields.CustomDataRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleCustomDataCellSymbolFields.AttributeRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleCustomDataCellSymbolFields.ElementId), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleCustomDataCellSymbolFields.Value), IntermediateFieldType.String),
17 },
18 typeof(WixBundleCustomDataCellSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixBundleCustomDataCellSymbolFields
25 {
26 CustomDataRef,
27 AttributeRef,
28 ElementId,
29 Value,
30 }
31
32 public class WixBundleCustomDataCellSymbol : IntermediateSymbol
33 {
34 public WixBundleCustomDataCellSymbol() : base(SymbolDefinitions.WixBundleCustomDataCell, null, null)
35 {
36 }
37
38 public WixBundleCustomDataCellSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleCustomDataCell, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixBundleCustomDataCellSymbolFields index] => this.Fields[(int)index];
43
44 public string CustomDataRef
45 {
46 get => (string)this.Fields[(int)WixBundleCustomDataCellSymbolFields.CustomDataRef];
47 set => this.Set((int)WixBundleCustomDataCellSymbolFields.CustomDataRef, value);
48 }
49
50 public string AttributeRef
51 {
52 get => (string)this.Fields[(int)WixBundleCustomDataCellSymbolFields.AttributeRef];
53 set => this.Set((int)WixBundleCustomDataCellSymbolFields.AttributeRef, value);
54 }
55
56 public string ElementId
57 {
58 get => (string)this.Fields[(int)WixBundleCustomDataCellSymbolFields.ElementId];
59 set => this.Set((int)WixBundleCustomDataCellSymbolFields.ElementId, value);
60 }
61
62 public string Value
63 {
64 get => (string)this.Fields[(int)WixBundleCustomDataCellSymbolFields.Value];
65 set => this.Set((int)WixBundleCustomDataCellSymbolFields.Value, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataSymbol.cs
new file mode 100644
index 00000000..0490f9f7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleCustomDataSymbol.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleCustomData = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleCustomData,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleCustomDataSymbolFields.AttributeNames), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleCustomDataSymbolFields.Type), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixBundleCustomDataSymbolFields.BundleExtensionRef), IntermediateFieldType.String),
16 },
17 typeof(WixBundleCustomDataSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum WixBundleCustomDataSymbolFields
24 {
25 AttributeNames,
26 Type,
27 BundleExtensionRef,
28 }
29
30 public enum WixBundleCustomDataType
31 {
32 Unknown,
33 BootstrapperApplication,
34 BundleExtension,
35 }
36
37 public class WixBundleCustomDataSymbol : IntermediateSymbol
38 {
39 public const char AttributeNamesSeparator = '\x85';
40
41 public WixBundleCustomDataSymbol() : base(SymbolDefinitions.WixBundleCustomData, null, null)
42 {
43 }
44
45 public WixBundleCustomDataSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleCustomData, sourceLineNumber, id)
46 {
47 }
48
49 public IntermediateField this[WixBundleCustomDataSymbolFields index] => this.Fields[(int)index];
50
51 public string AttributeNames
52 {
53 get => (string)this.Fields[(int)WixBundleCustomDataSymbolFields.AttributeNames];
54 set => this.Set((int)WixBundleCustomDataSymbolFields.AttributeNames, value);
55 }
56
57 public WixBundleCustomDataType Type
58 {
59 get => (WixBundleCustomDataType)this.Fields[(int)WixBundleCustomDataSymbolFields.Type].AsNumber();
60 set => this.Set((int)WixBundleCustomDataSymbolFields.Type, (int)value);
61 }
62
63 public string BundleExtensionRef
64 {
65 get => (string)this.Fields[(int)WixBundleCustomDataSymbolFields.BundleExtensionRef];
66 set => this.Set((int)WixBundleCustomDataSymbolFields.BundleExtensionRef, value);
67 }
68
69 public string[] AttributeNamesSeparated => this.AttributeNames.Split(AttributeNamesSeparator);
70 }
71}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackagePayloadSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackagePayloadSymbol.cs
new file mode 100644
index 00000000..c0bf603f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackagePayloadSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleExePackagePayload = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleExePackagePayload,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundleExePackagePayloadSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundleExePackagePayloadSymbolFields
21 {
22 }
23
24 public class WixBundleExePackagePayloadSymbol : IntermediateSymbol
25 {
26 public WixBundleExePackagePayloadSymbol() : base(SymbolDefinitions.WixBundleExePackagePayload, null, null)
27 {
28 }
29
30 public WixBundleExePackagePayloadSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleExePackagePayload, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundleExePackagePayloadSymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackageSymbol.cs
new file mode 100644
index 00000000..8a8cff1b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleExePackageSymbol.cs
@@ -0,0 +1,94 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleExePackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleExePackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.Attributes), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.DetectCondition), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.InstallCommand), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.RepairCommand), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.UninstallCommand), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleExePackageSymbolFields.ExeProtocol), IntermediateFieldType.String),
19 },
20 typeof(WixBundleExePackageSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 using System;
27
28 public enum WixBundleExePackageSymbolFields
29 {
30 Attributes,
31 DetectCondition,
32 InstallCommand,
33 RepairCommand,
34 UninstallCommand,
35 ExeProtocol,
36 }
37
38 [Flags]
39 public enum WixBundleExePackageAttributes
40 {
41 None = 0,
42 }
43
44 public class WixBundleExePackageSymbol : IntermediateSymbol
45 {
46 public WixBundleExePackageSymbol() : base(SymbolDefinitions.WixBundleExePackage, null, null)
47 {
48 }
49
50 public WixBundleExePackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleExePackage, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[WixBundleExePackageSymbolFields index] => this.Fields[(int)index];
55
56 public WixBundleExePackageAttributes Attributes
57 {
58 get => (WixBundleExePackageAttributes)(int)this.Fields[(int)WixBundleExePackageSymbolFields.Attributes];
59 set => this.Set((int)WixBundleExePackageSymbolFields.Attributes, (int)value);
60 }
61
62 public string DetectCondition
63 {
64 get => (string)this.Fields[(int)WixBundleExePackageSymbolFields.DetectCondition];
65 set => this.Set((int)WixBundleExePackageSymbolFields.DetectCondition, value);
66 }
67
68 public string InstallCommand
69 {
70 get => (string)this.Fields[(int)WixBundleExePackageSymbolFields.InstallCommand];
71 set => this.Set((int)WixBundleExePackageSymbolFields.InstallCommand, value);
72 }
73
74 public string RepairCommand
75 {
76 get => (string)this.Fields[(int)WixBundleExePackageSymbolFields.RepairCommand];
77 set => this.Set((int)WixBundleExePackageSymbolFields.RepairCommand, value);
78 }
79
80 public string UninstallCommand
81 {
82 get => (string)this.Fields[(int)WixBundleExePackageSymbolFields.UninstallCommand];
83 set => this.Set((int)WixBundleExePackageSymbolFields.UninstallCommand, value);
84 }
85
86 public string ExeProtocol
87 {
88 get => (string)this.Fields[(int)WixBundleExePackageSymbolFields.ExeProtocol];
89 set => this.Set((int)WixBundleExePackageSymbolFields.ExeProtocol, value);
90 }
91
92 public bool Repairable => !String.IsNullOrEmpty(this.RepairCommand);
93 }
94}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleExtensionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleExtensionSymbol.cs
new file mode 100644
index 00000000..8e6bea58
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleExtensionSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleExtension = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleExtension,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleExtensionSymbolFields.PayloadRef), IntermediateFieldType.String),
14 },
15 typeof(WixBundleExtensionSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixBundleExtensionSymbolFields
22 {
23 PayloadRef,
24 }
25
26 public class WixBundleExtensionSymbol : IntermediateSymbol
27 {
28 public WixBundleExtensionSymbol() : base(SymbolDefinitions.WixBundleExtension, null, null)
29 {
30 }
31
32 public WixBundleExtensionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleExtension, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixBundleExtensionSymbolFields index] => this.Fields[(int)index];
37
38 public string PayloadRef
39 {
40 get => (string)this.Fields[(int)WixBundleExtensionSymbolFields.PayloadRef];
41 set => this.Set((int)WixBundleExtensionSymbolFields.PayloadRef, value);
42 }
43 }
44}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiFeatureSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiFeatureSymbol.cs
new file mode 100644
index 00000000..f81da5b8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiFeatureSymbol.cs
@@ -0,0 +1,116 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsiFeature = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsiFeature,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.PackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Size), IntermediateFieldType.LargeNumber),
16 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Parent), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Title), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Description), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Display), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Level), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Directory), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(WixBundleMsiFeatureSymbolFields.Attributes), IntermediateFieldType.Number),
23 },
24 typeof(WixBundleMsiFeatureSymbol));
25 }
26}
27
28namespace WixToolset.Data.Symbols
29{
30 public enum WixBundleMsiFeatureSymbolFields
31 {
32 PackageRef,
33 Name,
34 Size,
35 Parent,
36 Title,
37 Description,
38 Display,
39 Level,
40 Directory,
41 Attributes,
42 }
43
44 public class WixBundleMsiFeatureSymbol : IntermediateSymbol
45 {
46 public WixBundleMsiFeatureSymbol() : base(SymbolDefinitions.WixBundleMsiFeature, null, null)
47 {
48 }
49
50 public WixBundleMsiFeatureSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsiFeature, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[WixBundleMsiFeatureSymbolFields index] => this.Fields[(int)index];
55
56 public string PackageRef
57 {
58 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.PackageRef];
59 set => this.Set((int)WixBundleMsiFeatureSymbolFields.PackageRef, value);
60 }
61
62 public string Name
63 {
64 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Name];
65 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Name, value);
66 }
67
68 public long Size
69 {
70 get => (long)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Size];
71 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Size, value);
72 }
73
74 public string Parent
75 {
76 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Parent];
77 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Parent, value);
78 }
79
80 public string Title
81 {
82 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Title];
83 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Title, value);
84 }
85
86 public string Description
87 {
88 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Description];
89 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Description, value);
90 }
91
92 public int Display
93 {
94 get => (int)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Display];
95 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Display, value);
96 }
97
98 public int Level
99 {
100 get => (int)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Level];
101 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Level, value);
102 }
103
104 public string Directory
105 {
106 get => (string)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Directory];
107 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Directory, value);
108 }
109
110 public int Attributes
111 {
112 get => (int)this.Fields[(int)WixBundleMsiFeatureSymbolFields.Attributes];
113 set => this.Set((int)WixBundleMsiFeatureSymbolFields.Attributes, value);
114 }
115 }
116}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackagePayloadSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackagePayloadSymbol.cs
new file mode 100644
index 00000000..e5af1044
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackagePayloadSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsiPackagePayload = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsiPackagePayload,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundleMsiPackagePayloadSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundleMsiPackagePayloadSymbolFields
21 {
22 }
23
24 public class WixBundleMsiPackagePayloadSymbol : IntermediateSymbol
25 {
26 public WixBundleMsiPackagePayloadSymbol() : base(SymbolDefinitions.WixBundleMsiPackagePayload, null, null)
27 {
28 }
29
30 public WixBundleMsiPackagePayloadSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsiPackagePayload, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundleMsiPackagePayloadSymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackageSymbol.cs
new file mode 100644
index 00000000..21735f64
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPackageSymbol.cs
@@ -0,0 +1,105 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsiPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsiPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.Attributes), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.ProductCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.UpgradeCode), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.ProductVersion), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.ProductLanguage), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.ProductName), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixBundleMsiPackageSymbolFields.Manufacturer), IntermediateFieldType.String),
20 },
21 typeof(WixBundleMsiPackageSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 using System;
28
29 public enum WixBundleMsiPackageSymbolFields
30 {
31 Attributes,
32 ProductCode,
33 UpgradeCode,
34 ProductVersion,
35 ProductLanguage,
36 ProductName,
37 Manufacturer,
38 }
39
40 [Flags]
41 public enum WixBundleMsiPackageAttributes
42 {
43 EnableFeatureSelection = 0x4,
44 ForcePerMachine = 0x2,
45 }
46
47 public class WixBundleMsiPackageSymbol : IntermediateSymbol
48 {
49 public WixBundleMsiPackageSymbol() : base(SymbolDefinitions.WixBundleMsiPackage, null, null)
50 {
51 }
52
53 public WixBundleMsiPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsiPackage, sourceLineNumber, id)
54 {
55 }
56
57 public IntermediateField this[WixBundleMsiPackageSymbolFields index] => this.Fields[(int)index];
58
59 public WixBundleMsiPackageAttributes Attributes
60 {
61 get => (WixBundleMsiPackageAttributes)(int)this.Fields[(int)WixBundleMsiPackageSymbolFields.Attributes];
62 set => this.Set((int)WixBundleMsiPackageSymbolFields.Attributes, (int)value);
63 }
64
65 public string ProductCode
66 {
67 get => (string)this.Fields[(int)WixBundleMsiPackageSymbolFields.ProductCode];
68 set => this.Set((int)WixBundleMsiPackageSymbolFields.ProductCode, value);
69 }
70
71 public string UpgradeCode
72 {
73 get => (string)this.Fields[(int)WixBundleMsiPackageSymbolFields.UpgradeCode];
74 set => this.Set((int)WixBundleMsiPackageSymbolFields.UpgradeCode, value);
75 }
76
77 public string ProductVersion
78 {
79 get => (string)this.Fields[(int)WixBundleMsiPackageSymbolFields.ProductVersion];
80 set => this.Set((int)WixBundleMsiPackageSymbolFields.ProductVersion, value);
81 }
82
83 public int ProductLanguage
84 {
85 get => (int)this.Fields[(int)WixBundleMsiPackageSymbolFields.ProductLanguage];
86 set => this.Set((int)WixBundleMsiPackageSymbolFields.ProductLanguage, value);
87 }
88
89 public string ProductName
90 {
91 get => (string)this.Fields[(int)WixBundleMsiPackageSymbolFields.ProductName];
92 set => this.Set((int)WixBundleMsiPackageSymbolFields.ProductName, value);
93 }
94
95 public string Manufacturer
96 {
97 get => (string)this.Fields[(int)WixBundleMsiPackageSymbolFields.Manufacturer];
98 set => this.Set((int)WixBundleMsiPackageSymbolFields.Manufacturer, value);
99 }
100
101 public bool EnableFeatureSelection => (this.Attributes & WixBundleMsiPackageAttributes.EnableFeatureSelection) == WixBundleMsiPackageAttributes.EnableFeatureSelection;
102
103 public bool ForcePerMachine => (this.Attributes & WixBundleMsiPackageAttributes.ForcePerMachine) == WixBundleMsiPackageAttributes.ForcePerMachine;
104 }
105} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPropertySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPropertySymbol.cs
new file mode 100644
index 00000000..0d87f87d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsiPropertySymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsiProperty = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsiProperty,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleMsiPropertySymbolFields.PackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleMsiPropertySymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleMsiPropertySymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleMsiPropertySymbolFields.Condition), IntermediateFieldType.String),
17 },
18 typeof(WixBundleMsiPropertySymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixBundleMsiPropertySymbolFields
25 {
26 PackageRef,
27 Name,
28 Value,
29 Condition,
30 }
31
32 public class WixBundleMsiPropertySymbol : IntermediateSymbol
33 {
34 public WixBundleMsiPropertySymbol() : base(SymbolDefinitions.WixBundleMsiProperty, null, null)
35 {
36 }
37
38 public WixBundleMsiPropertySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsiProperty, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixBundleMsiPropertySymbolFields index] => this.Fields[(int)index];
43
44 public string PackageRef
45 {
46 get => (string)this.Fields[(int)WixBundleMsiPropertySymbolFields.PackageRef];
47 set => this.Set((int)WixBundleMsiPropertySymbolFields.PackageRef, value);
48 }
49
50 public string Name
51 {
52 get => (string)this.Fields[(int)WixBundleMsiPropertySymbolFields.Name];
53 set => this.Set((int)WixBundleMsiPropertySymbolFields.Name, value);
54 }
55
56 public string Value
57 {
58 get => (string)this.Fields[(int)WixBundleMsiPropertySymbolFields.Value];
59 set => this.Set((int)WixBundleMsiPropertySymbolFields.Value, value);
60 }
61
62 public string Condition
63 {
64 get => (string)this.Fields[(int)WixBundleMsiPropertySymbolFields.Condition];
65 set => this.Set((int)WixBundleMsiPropertySymbolFields.Condition, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackagePayloadSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackagePayloadSymbol.cs
new file mode 100644
index 00000000..d1a21243
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackagePayloadSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMspPackagePayload = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMspPackagePayload,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundleMspPackagePayloadSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundleMspPackagePayloadSymbolFields
21 {
22 }
23
24 public class WixBundleMspPackagePayloadSymbol : IntermediateSymbol
25 {
26 public WixBundleMspPackagePayloadSymbol() : base(SymbolDefinitions.WixBundleMspPackagePayload, null, null)
27 {
28 }
29
30 public WixBundleMspPackagePayloadSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMspPackagePayload, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundleMspPackagePayloadSymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackageSymbol.cs
new file mode 100644
index 00000000..3784c2ff
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMspPackageSymbol.cs
@@ -0,0 +1,81 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMspPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMspPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleMspPackageSymbolFields.Attributes), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleMspPackageSymbolFields.PatchCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleMspPackageSymbolFields.Manufacturer), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleMspPackageSymbolFields.PatchXml), IntermediateFieldType.String),
17 },
18 typeof(WixBundleMspPackageSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System;
25
26 public enum WixBundleMspPackageSymbolFields
27 {
28 Attributes,
29 PatchCode,
30 Manufacturer,
31 PatchXml,
32 }
33
34 [Flags]
35 public enum WixBundleMspPackageAttributes
36 {
37 Slipstream = 0x2,
38 TargetUnspecified = 0x4,
39 }
40
41 public class WixBundleMspPackageSymbol : IntermediateSymbol
42 {
43 public WixBundleMspPackageSymbol() : base(SymbolDefinitions.WixBundleMspPackage, null, null)
44 {
45 }
46
47 public WixBundleMspPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMspPackage, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[WixBundleMspPackageSymbolFields index] => this.Fields[(int)index];
52
53 public WixBundleMspPackageAttributes Attributes
54 {
55 get => (WixBundleMspPackageAttributes)(int)this.Fields[(int)WixBundleMspPackageSymbolFields.Attributes];
56 set => this.Set((int)WixBundleMspPackageSymbolFields.Attributes, (int)value);
57 }
58
59 public string PatchCode
60 {
61 get => (string)this.Fields[(int)WixBundleMspPackageSymbolFields.PatchCode];
62 set => this.Set((int)WixBundleMspPackageSymbolFields.PatchCode, value);
63 }
64
65 public string Manufacturer
66 {
67 get => (string)this.Fields[(int)WixBundleMspPackageSymbolFields.Manufacturer];
68 set => this.Set((int)WixBundleMspPackageSymbolFields.Manufacturer, value);
69 }
70
71 public string PatchXml
72 {
73 get => (string)this.Fields[(int)WixBundleMspPackageSymbolFields.PatchXml];
74 set => this.Set((int)WixBundleMspPackageSymbolFields.PatchXml, value);
75 }
76
77 public bool Slipstream => (this.Attributes & WixBundleMspPackageAttributes.Slipstream) == WixBundleMspPackageAttributes.Slipstream;
78
79 public bool TargetUnspecified => (this.Attributes & WixBundleMspPackageAttributes.TargetUnspecified) == WixBundleMspPackageAttributes.TargetUnspecified;
80 }
81} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackagePayloadSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackagePayloadSymbol.cs
new file mode 100644
index 00000000..88c7deb2
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackagePayloadSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsuPackagePayload = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsuPackagePayload,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundleMsuPackagePayloadSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundleMsuPackagePayloadSymbolFields
21 {
22 }
23
24 public class WixBundleMsuPackagePayloadSymbol : IntermediateSymbol
25 {
26 public WixBundleMsuPackagePayloadSymbol() : base(SymbolDefinitions.WixBundleMsuPackagePayload, null, null)
27 {
28 }
29
30 public WixBundleMsuPackagePayloadSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsuPackagePayload, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundleMsuPackagePayloadSymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackageSymbol.cs
new file mode 100644
index 00000000..e52a9b2d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleMsuPackageSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleMsuPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleMsuPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleMsuPackageSymbolFields.DetectCondition), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleMsuPackageSymbolFields.MsuKB), IntermediateFieldType.String),
15 },
16 typeof(WixBundleMsuPackageSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixBundleMsuPackageSymbolFields
23 {
24 DetectCondition,
25 MsuKB,
26 }
27
28 public class WixBundleMsuPackageSymbol : IntermediateSymbol
29 {
30 public WixBundleMsuPackageSymbol() : base(SymbolDefinitions.WixBundleMsuPackage, null, null)
31 {
32 }
33
34 public WixBundleMsuPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleMsuPackage, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixBundleMsuPackageSymbolFields index] => this.Fields[(int)index];
39
40 public string DetectCondition
41 {
42 get => (string)this.Fields[(int)WixBundleMsuPackageSymbolFields.DetectCondition];
43 set => this.Set((int)WixBundleMsuPackageSymbolFields.DetectCondition, value);
44 }
45
46 public string MsuKB
47 {
48 get => (string)this.Fields[(int)WixBundleMsuPackageSymbolFields.MsuKB];
49 set => this.Set((int)WixBundleMsuPackageSymbolFields.MsuKB, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageCommandLineSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageCommandLineSymbol.cs
new file mode 100644
index 00000000..7ef254a6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageCommandLineSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePackageCommandLine = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePackageCommandLine,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundlePackageCommandLineSymbolFields.WixBundlePackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundlePackageCommandLineSymbolFields.InstallArgument), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundlePackageCommandLineSymbolFields.UninstallArgument), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundlePackageCommandLineSymbolFields.RepairArgument), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundlePackageCommandLineSymbolFields.Condition), IntermediateFieldType.String),
18 },
19 typeof(WixBundlePackageCommandLineSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum WixBundlePackageCommandLineSymbolFields
26 {
27 WixBundlePackageRef,
28 InstallArgument,
29 UninstallArgument,
30 RepairArgument,
31 Condition,
32 }
33
34 public class WixBundlePackageCommandLineSymbol : IntermediateSymbol
35 {
36 public WixBundlePackageCommandLineSymbol() : base(SymbolDefinitions.WixBundlePackageCommandLine, null, null)
37 {
38 }
39
40 public WixBundlePackageCommandLineSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePackageCommandLine, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[WixBundlePackageCommandLineSymbolFields index] => this.Fields[(int)index];
45
46 public string WixBundlePackageRef
47 {
48 get => (string)this.Fields[(int)WixBundlePackageCommandLineSymbolFields.WixBundlePackageRef];
49 set => this.Set((int)WixBundlePackageCommandLineSymbolFields.WixBundlePackageRef, value);
50 }
51
52 public string InstallArgument
53 {
54 get => (string)this.Fields[(int)WixBundlePackageCommandLineSymbolFields.InstallArgument];
55 set => this.Set((int)WixBundlePackageCommandLineSymbolFields.InstallArgument, value);
56 }
57
58 public string UninstallArgument
59 {
60 get => (string)this.Fields[(int)WixBundlePackageCommandLineSymbolFields.UninstallArgument];
61 set => this.Set((int)WixBundlePackageCommandLineSymbolFields.UninstallArgument, value);
62 }
63
64 public string RepairArgument
65 {
66 get => (string)this.Fields[(int)WixBundlePackageCommandLineSymbolFields.RepairArgument];
67 set => this.Set((int)WixBundlePackageCommandLineSymbolFields.RepairArgument, value);
68 }
69
70 public string Condition
71 {
72 get => (string)this.Fields[(int)WixBundlePackageCommandLineSymbolFields.Condition];
73 set => this.Set((int)WixBundlePackageCommandLineSymbolFields.Condition, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs
new file mode 100644
index 00000000..d77d9d58
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePackageExitCode = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePackageExitCode,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundlePackageExitCodeSymbolFields.ChainPackageId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundlePackageExitCodeSymbolFields.Code), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixBundlePackageExitCodeSymbolFields.Behavior), IntermediateFieldType.String),
16 },
17 typeof(WixBundlePackageExitCodeSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 using System;
24
25 public enum WixBundlePackageExitCodeSymbolFields
26 {
27 ChainPackageId,
28 Code,
29 Behavior,
30 }
31
32 public enum ExitCodeBehaviorType
33 {
34 NotSet = -1,
35 Success,
36 Error,
37 ScheduleReboot,
38 ForceReboot,
39 }
40
41 public class WixBundlePackageExitCodeSymbol : IntermediateSymbol
42 {
43 public WixBundlePackageExitCodeSymbol() : base(SymbolDefinitions.WixBundlePackageExitCode, null, null)
44 {
45 }
46
47 public WixBundlePackageExitCodeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePackageExitCode, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[WixBundlePackageExitCodeSymbolFields index] => this.Fields[(int)index];
52
53 public string ChainPackageId
54 {
55 get => (string)this.Fields[(int)WixBundlePackageExitCodeSymbolFields.ChainPackageId];
56 set => this.Set((int)WixBundlePackageExitCodeSymbolFields.ChainPackageId, value);
57 }
58
59 public int? Code
60 {
61 get => (int?)this.Fields[(int)WixBundlePackageExitCodeSymbolFields.Code];
62 set => this.Set((int)WixBundlePackageExitCodeSymbolFields.Code, value);
63 }
64
65 public ExitCodeBehaviorType Behavior
66 {
67 get => Enum.TryParse((string)this.Fields[(int)WixBundlePackageExitCodeSymbolFields.Behavior], true, out ExitCodeBehaviorType value) ? value : ExitCodeBehaviorType.NotSet;
68 set => this.Set((int)WixBundlePackageExitCodeSymbolFields.Behavior, value.ToString());
69 }
70 }
71}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageGroupSymbol.cs
new file mode 100644
index 00000000..a5e1943b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageGroupSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePackageGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePackageGroup,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundlePackageGroupSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundlePackageGroupSymbolFields
21 {
22 }
23
24 public class WixBundlePackageGroupSymbol : IntermediateSymbol
25 {
26 public WixBundlePackageGroupSymbol() : base(SymbolDefinitions.WixBundlePackageGroup, null, null)
27 {
28 }
29
30 public WixBundlePackageGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePackageGroup, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundlePackageGroupSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageSymbol.cs
new file mode 100644
index 00000000..cbe7f761
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageSymbol.cs
@@ -0,0 +1,212 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Type), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.PayloadRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.InstallCondition), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Cache), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.CacheId), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Vital), IntermediateFieldType.Bool),
20 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.PerMachine), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.LogPathVariable), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.RollbackLogPathVariable), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Size), IntermediateFieldType.LargeNumber),
24 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.InstallSize), IntermediateFieldType.LargeNumber),
25 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Version), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Language), IntermediateFieldType.Number),
27 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.DisplayName), IntermediateFieldType.String),
28 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Description), IntermediateFieldType.String),
29 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.RollbackBoundaryRef), IntermediateFieldType.String),
30 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.RollbackBoundaryBackwardRef), IntermediateFieldType.String),
31 new IntermediateFieldDefinition(nameof(WixBundlePackageSymbolFields.Win64), IntermediateFieldType.Bool),
32 },
33 typeof(WixBundlePackageSymbol));
34 }
35}
36
37namespace WixToolset.Data.Symbols
38{
39 using System;
40
41 public enum WixBundlePackageSymbolFields
42 {
43 Type,
44 PayloadRef,
45 Attributes,
46 InstallCondition,
47 Cache,
48 CacheId,
49 Vital,
50 PerMachine,
51 LogPathVariable,
52 RollbackLogPathVariable,
53 Size,
54 InstallSize,
55 Version,
56 Language,
57 DisplayName,
58 Description,
59 RollbackBoundaryRef,
60 RollbackBoundaryBackwardRef,
61 Win64,
62 }
63
64 /// <summary>
65 /// Types of bundle packages.
66 /// </summary>
67 public enum WixBundlePackageType
68 {
69 Exe,
70 Msi,
71 Msp,
72 Msu,
73 }
74
75 [Flags]
76 public enum WixBundlePackageAttributes
77 {
78 Permanent = 0x1,
79 Visible = 0x2,
80 PerMachine = 0x4,
81 Win64 = 0x8,
82 }
83
84 public class WixBundlePackageSymbol : IntermediateSymbol
85 {
86 public WixBundlePackageSymbol() : base(SymbolDefinitions.WixBundlePackage, null, null)
87 {
88 }
89
90 public WixBundlePackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePackage, sourceLineNumber, id)
91 {
92 }
93
94 public IntermediateField this[WixBundlePackageSymbolFields index] => this.Fields[(int)index];
95
96 public WixBundlePackageType Type
97 {
98 get => (WixBundlePackageType)Enum.Parse(typeof(WixBundlePackageType), (string)this.Fields[(int)WixBundlePackageSymbolFields.Type], true);
99 set => this.Set((int)WixBundlePackageSymbolFields.Type, value.ToString());
100 }
101
102 public string PayloadRef
103 {
104 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.PayloadRef];
105 set => this.Set((int)WixBundlePackageSymbolFields.PayloadRef, value);
106 }
107
108 public WixBundlePackageAttributes Attributes
109 {
110 get => (WixBundlePackageAttributes)(int)this.Fields[(int)WixBundlePackageSymbolFields.Attributes];
111 set => this.Set((int)WixBundlePackageSymbolFields.Attributes, (int)value);
112 }
113
114 public string InstallCondition
115 {
116 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.InstallCondition];
117 set => this.Set((int)WixBundlePackageSymbolFields.InstallCondition, value);
118 }
119
120 public YesNoAlwaysType Cache
121 {
122 get => Enum.TryParse((string)this.Fields[(int)WixBundlePackageSymbolFields.Cache], true, out YesNoAlwaysType value) ? value : YesNoAlwaysType.NotSet;
123 set => this.Set((int)WixBundlePackageSymbolFields.Cache, value.ToString().ToLowerInvariant());
124 }
125
126 public string CacheId
127 {
128 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.CacheId];
129 set => this.Set((int)WixBundlePackageSymbolFields.CacheId, value);
130 }
131
132 public bool? Vital
133 {
134 get => (bool?)this.Fields[(int)WixBundlePackageSymbolFields.Vital];
135 set => this.Set((int)WixBundlePackageSymbolFields.Vital, value);
136 }
137
138 public YesNoDefaultType PerMachine
139 {
140 get => Enum.TryParse((string)this.Fields[(int)WixBundlePackageSymbolFields.PerMachine], true, out YesNoDefaultType value) ? value : YesNoDefaultType.NotSet;
141 set => this.Set((int)WixBundlePackageSymbolFields.PerMachine, value.ToString().ToLowerInvariant());
142 }
143
144 public string LogPathVariable
145 {
146 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.LogPathVariable];
147 set => this.Set((int)WixBundlePackageSymbolFields.LogPathVariable, value);
148 }
149
150 public string RollbackLogPathVariable
151 {
152 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.RollbackLogPathVariable];
153 set => this.Set((int)WixBundlePackageSymbolFields.RollbackLogPathVariable, value);
154 }
155
156 public long Size
157 {
158 get => (long)this.Fields[(int)WixBundlePackageSymbolFields.Size];
159 set => this.Set((int)WixBundlePackageSymbolFields.Size, value);
160 }
161
162 public long? InstallSize
163 {
164 get => (long?)this.Fields[(int)WixBundlePackageSymbolFields.InstallSize];
165 set => this.Set((int)WixBundlePackageSymbolFields.InstallSize, value);
166 }
167
168 public string Version
169 {
170 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.Version];
171 set => this.Set((int)WixBundlePackageSymbolFields.Version, value);
172 }
173
174 public int? Language
175 {
176 get => (int?)this.Fields[(int)WixBundlePackageSymbolFields.Language];
177 set => this.Set((int)WixBundlePackageSymbolFields.Language, value);
178 }
179
180 public string DisplayName
181 {
182 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.DisplayName];
183 set => this.Set((int)WixBundlePackageSymbolFields.DisplayName, value);
184 }
185
186 public string Description
187 {
188 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.Description];
189 set => this.Set((int)WixBundlePackageSymbolFields.Description, value);
190 }
191
192 public string RollbackBoundaryRef
193 {
194 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.RollbackBoundaryRef];
195 set => this.Set((int)WixBundlePackageSymbolFields.RollbackBoundaryRef, value);
196 }
197
198 public string RollbackBoundaryBackwardRef
199 {
200 get => (string)this.Fields[(int)WixBundlePackageSymbolFields.RollbackBoundaryBackwardRef];
201 set => this.Set((int)WixBundlePackageSymbolFields.RollbackBoundaryBackwardRef, value);
202 }
203
204 public bool Win64
205 {
206 get => (bool)this.Fields[(int)WixBundlePackageSymbolFields.Win64];
207 set => this.Set((int)WixBundlePackageSymbolFields.Win64, value);
208 }
209
210 public bool Permanent => (this.Attributes & WixBundlePackageAttributes.Permanent) == WixBundlePackageAttributes.Permanent;
211 }
212} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePatchTargetCodeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePatchTargetCodeSymbol.cs
new file mode 100644
index 00000000..b1aa9c77
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePatchTargetCodeSymbol.cs
@@ -0,0 +1,82 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePatchTargetCode = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePatchTargetCode,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundlePatchTargetCodeSymbolFields.PackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundlePatchTargetCodeSymbolFields.TargetCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundlePatchTargetCodeSymbolFields.Attributes), IntermediateFieldType.Number),
16 },
17 typeof(WixBundlePatchTargetCodeSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 using System;
24
25 public enum WixBundlePatchTargetCodeSymbolFields
26 {
27 PackageRef,
28 TargetCode,
29 Attributes,
30 }
31
32 [Flags]
33 public enum WixBundlePatchTargetCodeAttributes : int
34 {
35 None = 0,
36
37 /// <summary>
38 /// The transform targets a specific ProductCode.
39 /// </summary>
40 TargetsProductCode = 1,
41
42 /// <summary>
43 /// The transform targets a specific UpgradeCode.
44 /// </summary>
45 TargetsUpgradeCode = 2,
46 }
47
48 public class WixBundlePatchTargetCodeSymbol : IntermediateSymbol
49 {
50 public WixBundlePatchTargetCodeSymbol() : base(SymbolDefinitions.WixBundlePatchTargetCode, null, null)
51 {
52 }
53
54 public WixBundlePatchTargetCodeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePatchTargetCode, sourceLineNumber, id)
55 {
56 }
57
58 public IntermediateField this[WixBundlePatchTargetCodeSymbolFields index] => this.Fields[(int)index];
59
60 public string PackageRef
61 {
62 get => (string)this.Fields[(int)WixBundlePatchTargetCodeSymbolFields.PackageRef];
63 set => this.Set((int)WixBundlePatchTargetCodeSymbolFields.PackageRef, value);
64 }
65
66 public string TargetCode
67 {
68 get => (string)this.Fields[(int)WixBundlePatchTargetCodeSymbolFields.TargetCode];
69 set => this.Set((int)WixBundlePatchTargetCodeSymbolFields.TargetCode, value);
70 }
71
72 public WixBundlePatchTargetCodeAttributes Attributes
73 {
74 get => (WixBundlePatchTargetCodeAttributes)this.Fields[(int)WixBundlePatchTargetCodeSymbolFields.Attributes].AsNumber();
75 set => this.Set((int)WixBundlePatchTargetCodeSymbolFields.Attributes, (int)value);
76 }
77
78 public bool TargetsProductCode => (this.Attributes & WixBundlePatchTargetCodeAttributes.TargetsProductCode) == WixBundlePatchTargetCodeAttributes.TargetsProductCode;
79
80 public bool TargetsUpgradeCode => (this.Attributes & WixBundlePatchTargetCodeAttributes.TargetsUpgradeCode) == WixBundlePatchTargetCodeAttributes.TargetsUpgradeCode;
81 }
82}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadGroupSymbol.cs
new file mode 100644
index 00000000..c53f6e73
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadGroupSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePayloadGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePayloadGroup,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixBundlePayloadGroupSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixBundlePayloadGroupSymbolFields
21 {
22 }
23
24 public class WixBundlePayloadGroupSymbol : IntermediateSymbol
25 {
26 public WixBundlePayloadGroupSymbol() : base(SymbolDefinitions.WixBundlePayloadGroup, null, null)
27 {
28 }
29
30 public WixBundlePayloadGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePayloadGroup, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixBundlePayloadGroupSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadSymbol.cs
new file mode 100644
index 00000000..82b75285
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePayloadSymbol.cs
@@ -0,0 +1,166 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundlePayload = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundlePayload,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Name), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.SourceFile), IntermediateFieldType.Path),
15 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.DownloadUrl), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Compressed), IntermediateFieldType.Bool),
17 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.UnresolvedSourceFile), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.DisplayName), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Description), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.FileSize), IntermediateFieldType.LargeNumber),
21 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Version), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Hash), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.ContainerRef), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.ContentFile), IntermediateFieldType.Bool),
25 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.EmbeddedId), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.LayoutOnly), IntermediateFieldType.Bool),
27 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.Packaging), IntermediateFieldType.Number),
28 new IntermediateFieldDefinition(nameof(WixBundlePayloadSymbolFields.ParentPackagePayloadRef), IntermediateFieldType.String),
29 },
30 typeof(WixBundlePayloadSymbol));
31 }
32}
33
34namespace WixToolset.Data.Symbols
35{
36 using System;
37
38 public enum WixBundlePayloadSymbolFields
39 {
40 Name,
41 SourceFile,
42 DownloadUrl,
43 Compressed,
44 UnresolvedSourceFile,
45 DisplayName,
46 Description,
47 FileSize,
48 Version,
49 Hash,
50 ContainerRef,
51 ContentFile,
52 EmbeddedId,
53 LayoutOnly,
54 Packaging,
55 ParentPackagePayloadRef,
56 }
57
58 public class WixBundlePayloadSymbol : IntermediateSymbol
59 {
60 public WixBundlePayloadSymbol() : base(SymbolDefinitions.WixBundlePayload, null, null)
61 {
62 }
63
64 public WixBundlePayloadSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePayload, sourceLineNumber, id)
65 {
66 }
67
68 public IntermediateField this[WixBundlePayloadSymbolFields index] => this.Fields[(int)index];
69
70 public string Name
71 {
72 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.Name];
73 set => this.Set((int)WixBundlePayloadSymbolFields.Name, value);
74 }
75
76 public IntermediateFieldPathValue SourceFile
77 {
78 get => this.Fields[(int)WixBundlePayloadSymbolFields.SourceFile].AsPath();
79 set => this.Set((int)WixBundlePayloadSymbolFields.SourceFile, value);
80 }
81
82 public string DownloadUrl
83 {
84 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.DownloadUrl];
85 set => this.Set((int)WixBundlePayloadSymbolFields.DownloadUrl, value);
86 }
87
88 public bool? Compressed
89 {
90 get => (bool?)this.Fields[(int)WixBundlePayloadSymbolFields.Compressed];
91 set => this.Set((int)WixBundlePayloadSymbolFields.Compressed, value);
92 }
93
94 public string UnresolvedSourceFile
95 {
96 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.UnresolvedSourceFile];
97 set => this.Set((int)WixBundlePayloadSymbolFields.UnresolvedSourceFile, value);
98 }
99
100 public string DisplayName
101 {
102 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.DisplayName];
103 set => this.Set((int)WixBundlePayloadSymbolFields.DisplayName, value);
104 }
105
106 public string Description
107 {
108 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.Description];
109 set => this.Set((int)WixBundlePayloadSymbolFields.Description, value);
110 }
111
112 public long? FileSize
113 {
114 get => (long?)this.Fields[(int)WixBundlePayloadSymbolFields.FileSize];
115 set => this.Set((int)WixBundlePayloadSymbolFields.FileSize, value);
116 }
117
118 public string Version
119 {
120 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.Version];
121 set => this.Set((int)WixBundlePayloadSymbolFields.Version, value);
122 }
123
124 public string Hash
125 {
126 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.Hash];
127 set => this.Set((int)WixBundlePayloadSymbolFields.Hash, value);
128 }
129
130 public string ContainerRef
131 {
132 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.ContainerRef];
133 set => this.Set((int)WixBundlePayloadSymbolFields.ContainerRef, value);
134 }
135
136 public bool ContentFile
137 {
138 get => (bool)this.Fields[(int)WixBundlePayloadSymbolFields.ContentFile];
139 set => this.Set((int)WixBundlePayloadSymbolFields.ContentFile, value);
140 }
141
142 public string EmbeddedId
143 {
144 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.EmbeddedId];
145 set => this.Set((int)WixBundlePayloadSymbolFields.EmbeddedId, value);
146 }
147
148 public bool LayoutOnly
149 {
150 get => (bool)this.Fields[(int)WixBundlePayloadSymbolFields.LayoutOnly];
151 set => this.Set((int)WixBundlePayloadSymbolFields.LayoutOnly, value);
152 }
153
154 public PackagingType? Packaging
155 {
156 get => (PackagingType?)this.Fields[(int)WixBundlePayloadSymbolFields.Packaging].AsNumber();
157 set => this.Set((int)WixBundlePayloadSymbolFields.Packaging, (int?)value);
158 }
159
160 public string ParentPackagePayloadRef
161 {
162 get => (string)this.Fields[(int)WixBundlePayloadSymbolFields.ParentPackagePayloadRef];
163 set => this.Set((int)WixBundlePayloadSymbolFields.ParentPackagePayloadRef, value);
164 }
165 }
166}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleRelatedPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleRelatedPackageSymbol.cs
new file mode 100644
index 00000000..7bd67b7f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleRelatedPackageSymbol.cs
@@ -0,0 +1,104 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleRelatedPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleRelatedPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.PackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.RelatedId), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.MinVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.MaxVersion), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.Languages), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleRelatedPackageSymbolFields.Attributes), IntermediateFieldType.Number),
19 },
20 typeof(WixBundleRelatedPackageSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 using System;
27
28 public enum WixBundleRelatedPackageSymbolFields
29 {
30 PackageRef,
31 RelatedId,
32 MinVersion,
33 MaxVersion,
34 Languages,
35 Attributes,
36 }
37
38 [Flags]
39 public enum WixBundleRelatedPackageAttributes
40 {
41 None = 0x0,
42 OnlyDetect = 0x1,
43 MinInclusive = 0x2,
44 MaxInclusive = 0x4,
45 LangInclusive = 0x8,
46 }
47
48 public class WixBundleRelatedPackageSymbol : IntermediateSymbol
49 {
50 public WixBundleRelatedPackageSymbol() : base(SymbolDefinitions.WixBundleRelatedPackage, null, null)
51 {
52 }
53
54 public WixBundleRelatedPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleRelatedPackage, sourceLineNumber, id)
55 {
56 }
57
58 public IntermediateField this[WixBundleRelatedPackageSymbolFields index] => this.Fields[(int)index];
59
60 public string PackageRef
61 {
62 get => (string)this.Fields[(int)WixBundleRelatedPackageSymbolFields.PackageRef];
63 set => this.Set((int)WixBundleRelatedPackageSymbolFields.PackageRef, value);
64 }
65
66 public string RelatedId
67 {
68 get => (string)this.Fields[(int)WixBundleRelatedPackageSymbolFields.RelatedId];
69 set => this.Set((int)WixBundleRelatedPackageSymbolFields.RelatedId, value);
70 }
71
72 public string MinVersion
73 {
74 get => (string)this.Fields[(int)WixBundleRelatedPackageSymbolFields.MinVersion];
75 set => this.Set((int)WixBundleRelatedPackageSymbolFields.MinVersion, value);
76 }
77
78 public string MaxVersion
79 {
80 get => (string)this.Fields[(int)WixBundleRelatedPackageSymbolFields.MaxVersion];
81 set => this.Set((int)WixBundleRelatedPackageSymbolFields.MaxVersion, value);
82 }
83
84 public string Languages
85 {
86 get => (string)this.Fields[(int)WixBundleRelatedPackageSymbolFields.Languages];
87 set => this.Set((int)WixBundleRelatedPackageSymbolFields.Languages, value);
88 }
89
90 public WixBundleRelatedPackageAttributes Attributes
91 {
92 get => (WixBundleRelatedPackageAttributes)this.Fields[(int)WixBundleRelatedPackageSymbolFields.Attributes].AsNumber();
93 set => this.Set((int)WixBundleRelatedPackageSymbolFields.Attributes, (int)value);
94 }
95
96 public bool MinInclusive => (this.Attributes & WixBundleRelatedPackageAttributes.MinInclusive) == WixBundleRelatedPackageAttributes.MinInclusive;
97
98 public bool MaxInclusive => (this.Attributes & WixBundleRelatedPackageAttributes.MaxInclusive) == WixBundleRelatedPackageAttributes.MaxInclusive;
99
100 public bool OnlyDetect => (this.Attributes & WixBundleRelatedPackageAttributes.OnlyDetect) == WixBundleRelatedPackageAttributes.OnlyDetect;
101
102 public bool LangInclusive => (this.Attributes & WixBundleRelatedPackageAttributes.LangInclusive) == WixBundleRelatedPackageAttributes.LangInclusive;
103 }
104}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleRollbackBoundarySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleRollbackBoundarySymbol.cs
new file mode 100644
index 00000000..e54e898e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleRollbackBoundarySymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleRollbackBoundary = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleRollbackBoundary,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleRollbackBoundarySymbolFields.Vital), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleRollbackBoundarySymbolFields.Transaction), IntermediateFieldType.Number),
15 },
16 typeof(WixBundleRollbackBoundarySymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixBundleRollbackBoundarySymbolFields
23 {
24 Vital,
25 Transaction,
26 }
27
28 public class WixBundleRollbackBoundarySymbol : IntermediateSymbol
29 {
30 public WixBundleRollbackBoundarySymbol() : base(SymbolDefinitions.WixBundleRollbackBoundary, null, null)
31 {
32 }
33
34 public WixBundleRollbackBoundarySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleRollbackBoundary, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixBundleRollbackBoundarySymbolFields index] => this.Fields[(int)index];
39
40 public bool? Vital
41 {
42 get => (bool?)this.Fields[(int)WixBundleRollbackBoundarySymbolFields.Vital];
43 set => this.Set((int)WixBundleRollbackBoundarySymbolFields.Vital, value);
44 }
45
46 public bool? Transaction
47 {
48 get => (bool?)this.Fields[(int)WixBundleRollbackBoundarySymbolFields.Transaction];
49 set => this.Set((int)WixBundleRollbackBoundarySymbolFields.Transaction, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleSlipstreamMspSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleSlipstreamMspSymbol.cs
new file mode 100644
index 00000000..d8e9db3f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleSlipstreamMspSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleSlipstreamMsp = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleSlipstreamMsp,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleSlipstreamMspSymbolFields.TargetPackageRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleSlipstreamMspSymbolFields.MspPackageRef), IntermediateFieldType.String),
15 },
16 typeof(WixBundleSlipstreamMspSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixBundleSlipstreamMspSymbolFields
23 {
24 TargetPackageRef,
25 MspPackageRef,
26 }
27
28 public class WixBundleSlipstreamMspSymbol : IntermediateSymbol
29 {
30 public WixBundleSlipstreamMspSymbol() : base(SymbolDefinitions.WixBundleSlipstreamMsp, null, null)
31 {
32 }
33
34 public WixBundleSlipstreamMspSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleSlipstreamMsp, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixBundleSlipstreamMspSymbolFields index] => this.Fields[(int)index];
39
40 public string TargetPackageRef
41 {
42 get => (string)this.Fields[(int)WixBundleSlipstreamMspSymbolFields.TargetPackageRef];
43 set => this.Set((int)WixBundleSlipstreamMspSymbolFields.TargetPackageRef, value);
44 }
45
46 public string MspPackageRef
47 {
48 get => (string)this.Fields[(int)WixBundleSlipstreamMspSymbolFields.MspPackageRef];
49 set => this.Set((int)WixBundleSlipstreamMspSymbolFields.MspPackageRef, value);
50 }
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs
new file mode 100644
index 00000000..8cad5c36
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs
@@ -0,0 +1,234 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundle = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundle,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.UpgradeCode), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Version), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Copyright), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Manufacturer), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Attributes), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.AboutUrl), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.HelpUrl), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.HelpTelephone), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.UpdateUrl), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Compressed), IntermediateFieldType.Bool),
24 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.LogPathVariable), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.LogPrefix), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.LogExtension), IntermediateFieldType.String),
27 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.IconSourceFile), IntermediateFieldType.Path),
28 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.SplashScreenSourceFile), IntermediateFieldType.Path),
29 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Condition), IntermediateFieldType.String),
30 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Tag), IntermediateFieldType.String),
31 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.Platform), IntermediateFieldType.String),
32 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.ParentName), IntermediateFieldType.String),
33 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.BundleId), IntermediateFieldType.String),
34 new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.ProviderKey), IntermediateFieldType.String),
35 },
36 typeof(WixBundleSymbol));
37 }
38}
39
40namespace WixToolset.Data.Symbols
41{
42 using System;
43
44 public enum WixBundleSymbolFields
45 {
46 UpgradeCode,
47 Version,
48 Copyright,
49 Name,
50 Manufacturer,
51 Attributes,
52 AboutUrl,
53 HelpUrl,
54 HelpTelephone,
55 UpdateUrl,
56 Compressed,
57 LogPathVariable,
58 LogPrefix,
59 LogExtension,
60 IconSourceFile,
61 SplashScreenSourceFile,
62 Condition,
63 Tag,
64 Platform,
65 ParentName,
66 BundleId,
67 ProviderKey,
68 }
69
70 [Flags]
71 public enum WixBundleAttributes
72 {
73 None = 0x0,
74 DisableModify = 0x1,
75 DisableRemove = 0x2,
76 SingleChangeUninstallButton = 0x4,
77 PerMachine = 0x8,
78 }
79
80 public class WixBundleSymbol : IntermediateSymbol
81 {
82 public WixBundleSymbol() : base(SymbolDefinitions.WixBundle, null, null)
83 {
84 }
85
86 public WixBundleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundle, sourceLineNumber, id)
87 {
88 }
89
90 public IntermediateField this[WixBundleSymbolFields index] => this.Fields[(int)index];
91
92 public string UpgradeCode
93 {
94 get => (string)this.Fields[(int)WixBundleSymbolFields.UpgradeCode];
95 set => this.Set((int)WixBundleSymbolFields.UpgradeCode, value);
96 }
97
98 public string Version
99 {
100 get => (string)this.Fields[(int)WixBundleSymbolFields.Version];
101 set => this.Set((int)WixBundleSymbolFields.Version, value);
102 }
103
104 public string Copyright
105 {
106 get => (string)this.Fields[(int)WixBundleSymbolFields.Copyright];
107 set => this.Set((int)WixBundleSymbolFields.Copyright, value);
108 }
109
110 public string Name
111 {
112 get => (string)this.Fields[(int)WixBundleSymbolFields.Name];
113 set => this.Set((int)WixBundleSymbolFields.Name, value);
114 }
115
116 public string Manufacturer
117 {
118 get => (string)this.Fields[(int)WixBundleSymbolFields.Manufacturer];
119 set => this.Set((int)WixBundleSymbolFields.Manufacturer, value);
120 }
121
122 public WixBundleAttributes Attributes
123 {
124 get => (WixBundleAttributes)this.Fields[(int)WixBundleSymbolFields.Attributes].AsNumber();
125 set => this.Set((int)WixBundleSymbolFields.Attributes, (int)value);
126 }
127
128 public string AboutUrl
129 {
130 get => (string)this.Fields[(int)WixBundleSymbolFields.AboutUrl];
131 set => this.Set((int)WixBundleSymbolFields.AboutUrl, value);
132 }
133
134 public string HelpTelephone
135 {
136 get => (string)this.Fields[(int)WixBundleSymbolFields.HelpTelephone];
137 set => this.Set((int)WixBundleSymbolFields.HelpTelephone, value);
138 }
139
140 public string HelpUrl
141 {
142 get => (string)this.Fields[(int)WixBundleSymbolFields.HelpUrl];
143 set => this.Set((int)WixBundleSymbolFields.HelpUrl, value);
144 }
145
146 public string UpdateUrl
147 {
148 get => (string)this.Fields[(int)WixBundleSymbolFields.UpdateUrl];
149 set => this.Set((int)WixBundleSymbolFields.UpdateUrl, value);
150 }
151
152 public bool? Compressed
153 {
154 get => (bool?)this.Fields[(int)WixBundleSymbolFields.Compressed];
155 set => this.Set((int)WixBundleSymbolFields.Compressed, value);
156 }
157
158 public string LogPathVariable
159 {
160 get => (string)this.Fields[(int)WixBundleSymbolFields.LogPathVariable];
161 set => this.Set((int)WixBundleSymbolFields.LogPathVariable, value);
162 }
163
164 public string LogPrefix
165 {
166 get => (string)this.Fields[(int)WixBundleSymbolFields.LogPrefix];
167 set => this.Set((int)WixBundleSymbolFields.LogPrefix, value);
168 }
169
170 public string LogExtension
171 {
172 get => (string)this.Fields[(int)WixBundleSymbolFields.LogExtension];
173 set => this.Set((int)WixBundleSymbolFields.LogExtension, value);
174 }
175
176 public string IconSourceFile
177 {
178 get => (string)this.Fields[(int)WixBundleSymbolFields.IconSourceFile];
179 set => this.Set((int)WixBundleSymbolFields.IconSourceFile, value);
180 }
181
182 public string SplashScreenSourceFile
183 {
184 get => (string)this.Fields[(int)WixBundleSymbolFields.SplashScreenSourceFile];
185 set => this.Set((int)WixBundleSymbolFields.SplashScreenSourceFile, value);
186 }
187
188 public string Condition
189 {
190 get => (string)this.Fields[(int)WixBundleSymbolFields.Condition];
191 set => this.Set((int)WixBundleSymbolFields.Condition, value);
192 }
193
194 public string Tag
195 {
196 get => (string)this.Fields[(int)WixBundleSymbolFields.Tag];
197 set => this.Set((int)WixBundleSymbolFields.Tag, value);
198 }
199
200 public Platform Platform
201 {
202 get => (Platform)this.Fields[(int)WixBundleSymbolFields.Platform].AsNumber();
203 set => this.Set((int)WixBundleSymbolFields.Platform, (int)value);
204 }
205
206 public string ParentName
207 {
208 get => (string)this.Fields[(int)WixBundleSymbolFields.ParentName];
209 set => this.Set((int)WixBundleSymbolFields.ParentName, value);
210 }
211
212 public string BundleId
213 {
214 get => (string)this.Fields[(int)WixBundleSymbolFields.BundleId];
215 set => this.Set((int)WixBundleSymbolFields.BundleId, value);
216 }
217
218 public string ProviderKey
219 {
220 get => (string)this.Fields[(int)WixBundleSymbolFields.ProviderKey];
221 set => this.Set((int)WixBundleSymbolFields.ProviderKey, value);
222 }
223
224 public PackagingType DefaultPackagingType => (this.Compressed.HasValue && !this.Compressed.Value) ? PackagingType.External : PackagingType.Embedded;
225
226 public bool DisableModify => (this.Attributes & WixBundleAttributes.DisableModify) == WixBundleAttributes.DisableModify;
227
228 public bool DisableRemove => (this.Attributes & WixBundleAttributes.DisableRemove) == WixBundleAttributes.DisableRemove;
229
230 public bool PerMachine => (this.Attributes & WixBundleAttributes.PerMachine) == WixBundleAttributes.PerMachine;
231
232 public bool SingleChangeUninstallButton => (this.Attributes & WixBundleAttributes.SingleChangeUninstallButton) == WixBundleAttributes.SingleChangeUninstallButton;
233 }
234}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleTagSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleTagSymbol.cs
new file mode 100644
index 00000000..d550dae0
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleTagSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleTag = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleTag,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.Filename), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.Regid), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.InstallPath), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.Attributes), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixBundleTagSymbolFields.Xml), IntermediateFieldType.String),
19 },
20 typeof(WixBundleTagSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum WixBundleTagSymbolFields
27 {
28 Filename,
29 Regid,
30 Name,
31 InstallPath,
32 Attributes,
33 Xml,
34 }
35
36 public class WixBundleTagSymbol : IntermediateSymbol
37 {
38 public WixBundleTagSymbol() : base(SymbolDefinitions.WixBundleTag, null, null)
39 {
40 }
41
42 public WixBundleTagSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleTag, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[WixBundleTagSymbolFields index] => this.Fields[(int)index];
47
48 public string Filename
49 {
50 get => this.Fields[(int)WixBundleTagSymbolFields.Filename].AsString();
51 set => this.Set((int)WixBundleTagSymbolFields.Filename, value);
52 }
53
54 public string Regid
55 {
56 get => this.Fields[(int)WixBundleTagSymbolFields.Regid].AsString();
57 set => this.Set((int)WixBundleTagSymbolFields.Regid, value);
58 }
59
60 public string Name
61 {
62 get => this.Fields[(int)WixBundleTagSymbolFields.Name].AsString();
63 set => this.Set((int)WixBundleTagSymbolFields.Name, value);
64 }
65
66 public string InstallPath
67 {
68 get => this.Fields[(int)WixBundleTagSymbolFields.InstallPath].AsString();
69 set => this.Set((int)WixBundleTagSymbolFields.InstallPath, value);
70 }
71
72 public int Attributes
73 {
74 get => this.Fields[(int)WixBundleTagSymbolFields.Attributes].AsNumber();
75 set => this.Set((int)WixBundleTagSymbolFields.Attributes, value);
76 }
77
78 public string Xml
79 {
80 get => this.Fields[(int)WixBundleTagSymbolFields.Xml].AsString();
81 set => this.Set((int)WixBundleTagSymbolFields.Xml, value);
82 }
83 }
84}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleUpdateSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleUpdateSymbol.cs
new file mode 100644
index 00000000..d27bbc32
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleUpdateSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleUpdate = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleUpdate,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleUpdateSymbolFields.Location), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleUpdateSymbolFields.Attributes), IntermediateFieldType.Number),
15 },
16 typeof(WixBundleUpdateSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixBundleUpdateSymbolFields
23 {
24 Location,
25 Attributes,
26 }
27
28 public class WixBundleUpdateSymbol : IntermediateSymbol
29 {
30 public WixBundleUpdateSymbol() : base(SymbolDefinitions.WixBundleUpdate, null, null)
31 {
32 }
33
34 public WixBundleUpdateSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleUpdate, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixBundleUpdateSymbolFields index] => this.Fields[(int)index];
39
40 public string Location
41 {
42 get => (string)this.Fields[(int)WixBundleUpdateSymbolFields.Location];
43 set => this.Set((int)WixBundleUpdateSymbolFields.Location, value);
44 }
45
46 public int Attributes
47 {
48 get => (int)this.Fields[(int)WixBundleUpdateSymbolFields.Attributes];
49 set => this.Set((int)WixBundleUpdateSymbolFields.Attributes, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleVariableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleVariableSymbol.cs
new file mode 100644
index 00000000..d68ac682
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleVariableSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixBundleVariable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixBundleVariable,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleVariableSymbolFields.Value), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixBundleVariableSymbolFields.Type), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBundleVariableSymbolFields.Hidden), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(WixBundleVariableSymbolFields.Persisted), IntermediateFieldType.Bool),
17 },
18 typeof(WixBundleVariableSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System;
25
26 public enum WixBundleVariableSymbolFields
27 {
28 Value,
29 Type,
30 Hidden,
31 Persisted,
32 }
33
34 public enum WixBundleVariableType
35 {
36 Unknown,
37 Formatted,
38 Numeric,
39 String,
40 Version,
41 }
42
43 public class WixBundleVariableSymbol : IntermediateSymbol
44 {
45 public WixBundleVariableSymbol() : base(SymbolDefinitions.WixBundleVariable, null, null)
46 {
47 }
48
49 public WixBundleVariableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundleVariable, sourceLineNumber, id)
50 {
51 }
52
53 public IntermediateField this[WixBundleVariableSymbolFields index] => this.Fields[(int)index];
54
55 public string Value
56 {
57 get => (string)this.Fields[(int)WixBundleVariableSymbolFields.Value];
58 set => this.Set((int)WixBundleVariableSymbolFields.Value, value);
59 }
60
61 public WixBundleVariableType Type
62 {
63 get => Enum.TryParse((string)this.Fields[(int)WixBundleVariableSymbolFields.Type], true, out WixBundleVariableType value) ? value : WixBundleVariableType.Unknown;
64 set => this.Set((int)WixBundleVariableSymbolFields.Type, value.ToString().ToLowerInvariant());
65 }
66
67 public bool Hidden
68 {
69 get => (bool)this.Fields[(int)WixBundleVariableSymbolFields.Hidden];
70 set => this.Set((int)WixBundleVariableSymbolFields.Hidden, value);
71 }
72
73 public bool Persisted
74 {
75 get => (bool)this.Fields[(int)WixBundleVariableSymbolFields.Persisted];
76 set => this.Set((int)WixBundleVariableSymbolFields.Persisted, value);
77 }
78 }
79}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixChainItemSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixChainItemSymbol.cs
new file mode 100644
index 00000000..c657678c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixChainItemSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixChainItem = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixChainItem,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixChainItemSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixChainItemSymbolFields
21 {
22 }
23
24 public class WixChainItemSymbol : IntermediateSymbol
25 {
26 public WixChainItemSymbol() : base(SymbolDefinitions.WixChainItem, null, null)
27 {
28 }
29
30 public WixChainItemSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixChainItem, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixChainItemSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixChainSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixChainSymbol.cs
new file mode 100644
index 00000000..8ec5fc63
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixChainSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixChain = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixChain,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixChainSymbolFields.Attributes), IntermediateFieldType.Number),
14 },
15 typeof(WixChainSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 using System;
22
23 public enum WixChainSymbolFields
24 {
25 Attributes,
26 }
27
28 [Flags]
29 public enum WixChainAttributes
30 {
31 None = 0x0,
32 DisableRollback = 0x1,
33 DisableSystemRestore = 0x2,
34 ParallelCache = 0x4,
35 }
36
37 public class WixChainSymbol : IntermediateSymbol
38 {
39 public WixChainSymbol() : base(SymbolDefinitions.WixChain, null, null)
40 {
41 }
42
43 public WixChainSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixChain, sourceLineNumber, id)
44 {
45 }
46
47 public IntermediateField this[WixChainSymbolFields index] => this.Fields[(int)index];
48
49 public WixChainAttributes Attributes
50 {
51 get => (WixChainAttributes)(int)this.Fields[(int)WixChainSymbolFields.Attributes];
52 set => this.Set((int)WixChainSymbolFields.Attributes, (int)value);
53 }
54
55 public bool DisableRollback => (this.Attributes & WixChainAttributes.DisableRollback) == WixChainAttributes.DisableRollback;
56
57 public bool DisableSystemRestore => (this.Attributes & WixChainAttributes.DisableSystemRestore) == WixChainAttributes.DisableSystemRestore;
58
59 public bool ParallelCache => (this.Attributes & WixChainAttributes.ParallelCache) == WixChainAttributes.ParallelCache;
60 }
61}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixComplexReferenceSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixComplexReferenceSymbol.cs
new file mode 100644
index 00000000..3db9bcd5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixComplexReferenceSymbol.cs
@@ -0,0 +1,86 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixComplexReference = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixComplexReference,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.Parent), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.ParentAttributes), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.ParentLanguage), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.Child), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.ChildAttributes), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixComplexReferenceSymbolFields.Attributes), IntermediateFieldType.Bool),
19 },
20 typeof(WixComplexReferenceSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 using System;
27
28 public enum WixComplexReferenceSymbolFields
29 {
30 Parent,
31 ParentAttributes,
32 ParentLanguage,
33 Child,
34 ChildAttributes,
35 Attributes,
36 }
37
38 public class WixComplexReferenceSymbol : IntermediateSymbol
39 {
40 public WixComplexReferenceSymbol() : base(SymbolDefinitions.WixComplexReference, null, null)
41 {
42 }
43
44 public WixComplexReferenceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixComplexReference, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[WixComplexReferenceSymbolFields index] => this.Fields[(int)index];
49
50 public string Parent
51 {
52 get => (string)this.Fields[(int)WixComplexReferenceSymbolFields.Parent];
53 set => this.Set((int)WixComplexReferenceSymbolFields.Parent, value);
54 }
55
56 public ComplexReferenceParentType ParentType
57 {
58 get => (ComplexReferenceParentType)this.Fields[(int)WixComplexReferenceSymbolFields.ParentAttributes].AsNumber();
59 set => this.Set((int)WixComplexReferenceSymbolFields.ParentAttributes, (int)value);
60 }
61
62 public string ParentLanguage
63 {
64 get => (string)this.Fields[(int)WixComplexReferenceSymbolFields.ParentLanguage];
65 set => this.Set((int)WixComplexReferenceSymbolFields.ParentLanguage, value);
66 }
67
68 public string Child
69 {
70 get => (string)this.Fields[(int)WixComplexReferenceSymbolFields.Child];
71 set => this.Set((int)WixComplexReferenceSymbolFields.Child, value);
72 }
73
74 public ComplexReferenceChildType ChildType
75 {
76 get => (ComplexReferenceChildType)this.Fields[(int)WixComplexReferenceSymbolFields.ChildAttributes].AsNumber();
77 set => this.Set((int)WixComplexReferenceSymbolFields.ChildAttributes, (int)value);
78 }
79
80 public bool IsPrimary
81 {
82 get => (bool)this.Fields[(int)WixComplexReferenceSymbolFields.Attributes];
83 set => this.Set((int)WixComplexReferenceSymbolFields.Attributes, value);
84 }
85 }
86} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixComponentGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixComponentGroupSymbol.cs
new file mode 100644
index 00000000..4dd5a3b5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixComponentGroupSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixComponentGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixComponentGroup,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixComponentGroupSymbolFields.WixComponentGroup), IntermediateFieldType.String),
14 },
15 typeof(WixComponentGroupSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixComponentGroupSymbolFields
22 {
23 WixComponentGroup,
24 }
25
26 public class WixComponentGroupSymbol : IntermediateSymbol
27 {
28 public WixComponentGroupSymbol() : base(SymbolDefinitions.WixComponentGroup, null, null)
29 {
30 }
31
32 public WixComponentGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixComponentGroup, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixComponentGroupSymbolFields index] => this.Fields[(int)index];
37
38 public string WixComponentGroup
39 {
40 get => (string)this.Fields[(int)WixComponentGroupSymbolFields.WixComponentGroup];
41 set => this.Set((int)WixComponentGroupSymbolFields.WixComponentGroup, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixComponentSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixComponentSearchSymbol.cs
new file mode 100644
index 00000000..63f7179f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixComponentSearchSymbol.cs
@@ -0,0 +1,70 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixComponentSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixComponentSearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixComponentSearchSymbolFields.Guid), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixComponentSearchSymbolFields.ProductCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixComponentSearchSymbolFields.Attributes), IntermediateFieldType.Number),
16 },
17 typeof(WixComponentSearchSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 using System;
24
25 public enum WixComponentSearchSymbolFields
26 {
27 Guid,
28 ProductCode,
29 Attributes,
30 }
31
32 [Flags]
33 public enum WixComponentSearchAttributes
34 {
35 KeyPath = 0x1,
36 State = 0x2,
37 WantDirectory = 0x4,
38 }
39
40 public class WixComponentSearchSymbol : IntermediateSymbol
41 {
42 public WixComponentSearchSymbol() : base(SymbolDefinitions.WixComponentSearch, null, null)
43 {
44 }
45
46 public WixComponentSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixComponentSearch, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[WixComponentSearchSymbolFields index] => this.Fields[(int)index];
51
52 public string Guid
53 {
54 get => (string)this.Fields[(int)WixComponentSearchSymbolFields.Guid];
55 set => this.Set((int)WixComponentSearchSymbolFields.Guid, value);
56 }
57
58 public string ProductCode
59 {
60 get => (string)this.Fields[(int)WixComponentSearchSymbolFields.ProductCode];
61 set => this.Set((int)WixComponentSearchSymbolFields.ProductCode, value);
62 }
63
64 public WixComponentSearchAttributes Attributes
65 {
66 get => (WixComponentSearchAttributes)this.Fields[(int)WixComponentSearchSymbolFields.Attributes].AsNumber();
67 set => this.Set((int)WixComponentSearchSymbolFields.Attributes, (int)value);
68 }
69 }
70}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixCustomTableCellSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableCellSymbol.cs
new file mode 100644
index 00000000..b45cda43
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableCellSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixCustomTableCell = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixCustomTableCell,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixCustomTableCellSymbolFields.TableRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixCustomTableCellSymbolFields.ColumnRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixCustomTableCellSymbolFields.RowId), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixCustomTableCellSymbolFields.Data), IntermediateFieldType.String),
17 },
18 typeof(WixCustomTableCellSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixCustomTableCellSymbolFields
25 {
26 TableRef,
27 ColumnRef,
28 RowId,
29 Data,
30 }
31
32 public class WixCustomTableCellSymbol : IntermediateSymbol
33 {
34 public WixCustomTableCellSymbol() : base(SymbolDefinitions.WixCustomTableCell, null, null)
35 {
36 }
37
38 public WixCustomTableCellSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixCustomTableCell, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixCustomTableCellSymbolFields index] => this.Fields[(int)index];
43
44 public string TableRef
45 {
46 get => (string)this.Fields[(int)WixCustomTableCellSymbolFields.TableRef];
47 set => this.Set((int)WixCustomTableCellSymbolFields.TableRef, value);
48 }
49
50 public string ColumnRef
51 {
52 get => (string)this.Fields[(int)WixCustomTableCellSymbolFields.ColumnRef];
53 set => this.Set((int)WixCustomTableCellSymbolFields.ColumnRef, value);
54 }
55
56 public string RowId
57 {
58 get => (string)this.Fields[(int)WixCustomTableCellSymbolFields.RowId];
59 set => this.Set((int)WixCustomTableCellSymbolFields.RowId, value);
60 }
61
62 public string Data
63 {
64 get => (string)this.Fields[(int)WixCustomTableCellSymbolFields.Data];
65 set => this.Set((int)WixCustomTableCellSymbolFields.Data, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixCustomTableColumnSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableColumnSymbol.cs
new file mode 100644
index 00000000..9ae2a904
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableColumnSymbol.cs
@@ -0,0 +1,203 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixCustomTableColumn = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixCustomTableColumn,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.TableRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Name), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Type), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Attributes), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Width), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.MinValue), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.MaxValue), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.KeyTable), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.KeyColumn), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Category), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Set), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Description), IntermediateFieldType.String),
25 new IntermediateFieldDefinition(nameof(WixCustomTableColumnSymbolFields.Modularize), IntermediateFieldType.Number)
26 },
27 typeof(WixCustomTableColumnSymbol));
28 }
29}
30
31namespace WixToolset.Data.Symbols
32{
33 using System;
34
35 public enum WixCustomTableColumnSymbolFields
36 {
37 TableRef,
38 Name,
39 Type,
40 Attributes,
41 Width,
42 MinValue,
43 MaxValue,
44 KeyTable,
45 KeyColumn,
46 Category,
47 Set,
48 Description,
49 Modularize,
50 }
51
52 [Flags]
53 public enum WixCustomTableColumnSymbolAttributes
54 {
55 None = 0x0,
56 PrimaryKey = 0x1,
57 Localizable = 0x2,
58 Nullable = 0x4,
59 Unreal = 0x8,
60 }
61
62 public enum WixCustomTableColumnCategoryType
63 {
64 Text,
65 UpperCase,
66 LowerCase,
67 Integer,
68 DoubleInteger,
69 TimeDate,
70 Identifier,
71 Property,
72 Filename,
73 WildCardFilename,
74 Path,
75 Paths,
76 AnyPath,
77 DefaultDir,
78 RegPath,
79 Formatted,
80 FormattedSddl,
81 Template,
82 Condition,
83 Guid,
84 Version,
85 Language,
86 Binary,
87 CustomSource,
88 Cabinet,
89 Shortcut,
90 }
91
92 public enum WixCustomTableColumnModularizeType
93 {
94 None,
95 Column,
96 CompanionFile,
97 Condition,
98 ControlEventArgument,
99 ControlText,
100 Icon,
101 Property,
102 SemicolonDelimited,
103 }
104
105 public class WixCustomTableColumnSymbol : IntermediateSymbol
106 {
107 public WixCustomTableColumnSymbol() : base(SymbolDefinitions.WixCustomTableColumn, null, null)
108 {
109 }
110
111 public WixCustomTableColumnSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixCustomTableColumn, sourceLineNumber, id)
112 {
113 }
114
115 public IntermediateField this[WixCustomTableColumnSymbolFields index] => this.Fields[(int)index];
116
117 public string TableRef
118 {
119 get => (string)this.Fields[(int)WixCustomTableColumnSymbolFields.TableRef];
120 set => this.Set((int)WixCustomTableColumnSymbolFields.TableRef, value);
121 }
122
123 public string Name
124 {
125 get => (string)this.Fields[(int)WixCustomTableColumnSymbolFields.Name];
126 set => this.Set((int)WixCustomTableColumnSymbolFields.Name, value);
127 }
128
129 public IntermediateFieldType Type
130 {
131 get => (IntermediateFieldType)this.Fields[(int)WixCustomTableColumnSymbolFields.Type].AsNumber();
132 set => this.Set((int)WixCustomTableColumnSymbolFields.Type, (int)value);
133 }
134
135 public WixCustomTableColumnSymbolAttributes Attributes
136 {
137 get => (WixCustomTableColumnSymbolAttributes)this.Fields[(int)WixCustomTableColumnSymbolFields.Attributes].AsNumber();
138 set => this.Set((int)WixCustomTableColumnSymbolFields.Attributes, (int)value);
139 }
140
141 public int Width
142 {
143 get => (int)this.Fields[(int)WixCustomTableColumnSymbolFields.Width];
144 set => this.Set((int)WixCustomTableColumnSymbolFields.Width, value);
145 }
146
147 public long? MinValue
148 {
149 get => (long?)this.Fields[(int)WixCustomTableColumnSymbolFields.MinValue];
150 set => this.Set((int)WixCustomTableColumnSymbolFields.MinValue, value);
151 }
152
153 public long? MaxValue
154 {
155 get => (long?)this.Fields[(int)WixCustomTableColumnSymbolFields.MaxValue];
156 set => this.Set((int)WixCustomTableColumnSymbolFields.MaxValue, value);
157 }
158
159 public string KeyTable
160 {
161 get => (string)this.Fields[(int)WixCustomTableColumnSymbolFields.KeyTable];
162 set => this.Set((int)WixCustomTableColumnSymbolFields.KeyTable, value);
163 }
164
165 public int? KeyColumn
166 {
167 get => (int?)this.Fields[(int)WixCustomTableColumnSymbolFields.KeyColumn];
168 set => this.Set((int)WixCustomTableColumnSymbolFields.KeyColumn, value);
169 }
170
171 public WixCustomTableColumnCategoryType? Category
172 {
173 get => (WixCustomTableColumnCategoryType?)this.Fields[(int)WixCustomTableColumnSymbolFields.Category].AsNullableNumber();
174 set => this.Set((int)WixCustomTableColumnSymbolFields.Category, (int?)value);
175 }
176
177 public string Set
178 {
179 get => (string)this.Fields[(int)WixCustomTableColumnSymbolFields.Set];
180 set => this.Set((int)WixCustomTableColumnSymbolFields.Set, value);
181 }
182
183 public string Description
184 {
185 get => (string)this.Fields[(int)WixCustomTableColumnSymbolFields.Description];
186 set => this.Set((int)WixCustomTableColumnSymbolFields.Description, value);
187 }
188
189 public WixCustomTableColumnModularizeType? Modularize
190 {
191 get => (WixCustomTableColumnModularizeType?)this.Fields[(int)WixCustomTableColumnSymbolFields.Modularize].AsNullableNumber();
192 set => this.Set((int)WixCustomTableColumnSymbolFields.Modularize, (int?)value);
193 }
194
195 public bool PrimaryKey => (this.Attributes & WixCustomTableColumnSymbolAttributes.PrimaryKey) == WixCustomTableColumnSymbolAttributes.PrimaryKey;
196
197 public bool Localizable => (this.Attributes & WixCustomTableColumnSymbolAttributes.Localizable) == WixCustomTableColumnSymbolAttributes.Localizable;
198
199 public bool Nullable => (this.Attributes & WixCustomTableColumnSymbolAttributes.Nullable) == WixCustomTableColumnSymbolAttributes.Nullable;
200
201 public bool Unreal => (this.Attributes & WixCustomTableColumnSymbolAttributes.Unreal) == WixCustomTableColumnSymbolAttributes.Unreal;
202 }
203}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixCustomTableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableSymbol.cs
new file mode 100644
index 00000000..af731443
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixCustomTableSymbol.cs
@@ -0,0 +1,56 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixCustomTable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixCustomTable,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixCustomTableSymbolFields.ColumnNames), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixCustomTableSymbolFields.Unreal), IntermediateFieldType.Bool),
15 },
16 typeof(WixCustomTableSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixCustomTableSymbolFields
23 {
24 ColumnNames,
25 Unreal,
26 }
27
28 public class WixCustomTableSymbol : IntermediateSymbol
29 {
30 public const char ColumnNamesSeparator = '\x85';
31
32 public WixCustomTableSymbol() : base(SymbolDefinitions.WixCustomTable, null, null)
33 {
34 }
35
36 public WixCustomTableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixCustomTable, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[WixCustomTableSymbolFields index] => this.Fields[(int)index];
41
42 public string ColumnNames
43 {
44 get => (string)this.Fields[(int)WixCustomTableSymbolFields.ColumnNames];
45 set => this.Set((int)WixCustomTableSymbolFields.ColumnNames, value);
46 }
47
48 public bool Unreal
49 {
50 get => (bool)this.Fields[(int)WixCustomTableSymbolFields.Unreal];
51 set => this.Set((int)WixCustomTableSymbolFields.Unreal, value);
52 }
53
54 public string[] ColumnNamesSeparated => this.ColumnNames.Split(ColumnNamesSeparator);
55 }
56}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchFileSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchFileSymbol.cs
new file mode 100644
index 00000000..77203b03
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchFileSymbol.cs
@@ -0,0 +1,84 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixDeltaPatchFile = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixDeltaPatchFile,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.RetainLengths), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.IgnoreOffsets), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.IgnoreLengths), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.RetainOffsets), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixDeltaPatchFileSymbolFields.SymbolPaths), IntermediateFieldType.String),
19 },
20 typeof(WixDeltaPatchFileSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 public enum WixDeltaPatchFileSymbolFields
27 {
28 FileRef,
29 RetainLengths,
30 IgnoreOffsets,
31 IgnoreLengths,
32 RetainOffsets,
33 SymbolPaths,
34 }
35
36 public class WixDeltaPatchFileSymbol : IntermediateSymbol
37 {
38 public WixDeltaPatchFileSymbol() : base(SymbolDefinitions.WixDeltaPatchFile, null, null)
39 {
40 }
41
42 public WixDeltaPatchFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixDeltaPatchFile, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[WixDeltaPatchFileSymbolFields index] => this.Fields[(int)index];
47
48 public string FileRef
49 {
50 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.FileRef];
51 set => this.Set((int)WixDeltaPatchFileSymbolFields.FileRef, value);
52 }
53
54 public string RetainLengths
55 {
56 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.RetainLengths];
57 set => this.Set((int)WixDeltaPatchFileSymbolFields.RetainLengths, value);
58 }
59
60 public string IgnoreOffsets
61 {
62 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.IgnoreOffsets];
63 set => this.Set((int)WixDeltaPatchFileSymbolFields.IgnoreOffsets, value);
64 }
65
66 public string IgnoreLengths
67 {
68 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.IgnoreLengths];
69 set => this.Set((int)WixDeltaPatchFileSymbolFields.IgnoreLengths, value);
70 }
71
72 public string RetainOffsets
73 {
74 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.RetainOffsets];
75 set => this.Set((int)WixDeltaPatchFileSymbolFields.RetainOffsets, value);
76 }
77
78 public string SymbolPaths
79 {
80 get => (string)this.Fields[(int)WixDeltaPatchFileSymbolFields.SymbolPaths];
81 set => this.Set((int)WixDeltaPatchFileSymbolFields.SymbolPaths, value);
82 }
83 }
84} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchSymbolPathsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchSymbolPathsSymbol.cs
new file mode 100644
index 00000000..20f30da4
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixDeltaPatchSymbolPathsSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixDeltaPatchSymbolPaths = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixDeltaPatchSymbolPaths,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixDeltaPatchSymbolPathsSymbolFields.SymbolType), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixDeltaPatchSymbolPathsSymbolFields.SymbolId), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixDeltaPatchSymbolPathsSymbolFields.SymbolPaths), IntermediateFieldType.String),
16 },
17 typeof(WixDeltaPatchSymbolPathsSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum WixDeltaPatchSymbolPathsSymbolFields
24 {
25 SymbolType,
26 SymbolId,
27 SymbolPaths,
28 }
29
30 /// <summary>
31 /// The types that the WixDeltaPatchSymbolPaths table can hold.
32 /// </summary>
33 /// <remarks>The order of these values is important since WixDeltaPatchSymbolPaths are sorted by this type.</remarks>
34 public enum SymbolPathType
35 {
36 File,
37 Component,
38 Directory,
39 Media,
40 Product
41 };
42
43 public class WixDeltaPatchSymbolPathsSymbol : IntermediateSymbol
44 {
45 public WixDeltaPatchSymbolPathsSymbol() : base(SymbolDefinitions.WixDeltaPatchSymbolPaths, null, null)
46 {
47 }
48
49 public WixDeltaPatchSymbolPathsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixDeltaPatchSymbolPaths, sourceLineNumber, id)
50 {
51 }
52
53 public IntermediateField this[WixDeltaPatchSymbolPathsSymbolFields index] => this.Fields[(int)index];
54
55 public SymbolPathType SymbolType
56 {
57 get => (SymbolPathType)this.Fields[(int)WixDeltaPatchSymbolPathsSymbolFields.SymbolType].AsNumber();
58 set => this.Set((int)WixDeltaPatchSymbolPathsSymbolFields.SymbolType, (int)value);
59 }
60
61 public string SymbolId
62 {
63 get => (string)this.Fields[(int)WixDeltaPatchSymbolPathsSymbolFields.SymbolId];
64 set => this.Set((int)WixDeltaPatchSymbolPathsSymbolFields.SymbolId, value);
65 }
66
67 public string SymbolPaths
68 {
69 get => (string)this.Fields[(int)WixDeltaPatchSymbolPathsSymbolFields.SymbolPaths];
70 set => this.Set((int)WixDeltaPatchSymbolPathsSymbolFields.SymbolPaths, value);
71 }
72 }
73}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixDependencyProviderSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixDependencyProviderSymbol.cs
new file mode 100644
index 00000000..0212bfab
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixDependencyProviderSymbol.cs
@@ -0,0 +1,90 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixDependencyProvider = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixDependencyProvider,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixDependencyProviderSymbolFields.ParentRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixDependencyProviderSymbolFields.ProviderKey), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixDependencyProviderSymbolFields.Version), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixDependencyProviderSymbolFields.DisplayName), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixDependencyProviderSymbolFields.Attributes), IntermediateFieldType.Number),
18 },
19 typeof(WixDependencyProviderSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 using System;
26 using WixToolset.Data;
27
28 public enum WixDependencyProviderSymbolFields
29 {
30 ParentRef,
31 ProviderKey,
32 Version,
33 DisplayName,
34 Attributes,
35 }
36
37 [Flags]
38 public enum WixDependencyProviderAttributes
39 {
40 ProvidesAttributesBundle = 0x10000,
41 ProvidesAttributesImported = 0x20000
42 }
43
44 public class WixDependencyProviderSymbol : IntermediateSymbol
45 {
46 public WixDependencyProviderSymbol() : base(SymbolDefinitions.WixDependencyProvider, null, null)
47 {
48 }
49
50 public WixDependencyProviderSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixDependencyProvider, sourceLineNumber, id)
51 {
52 }
53
54 public IntermediateField this[WixDependencyProviderSymbolFields index] => this.Fields[(int)index];
55
56 public string ParentRef
57 {
58 get => this.Fields[(int)WixDependencyProviderSymbolFields.ParentRef].AsString();
59 set => this.Set((int)WixDependencyProviderSymbolFields.ParentRef, value);
60 }
61
62 public string ProviderKey
63 {
64 get => this.Fields[(int)WixDependencyProviderSymbolFields.ProviderKey].AsString();
65 set => this.Set((int)WixDependencyProviderSymbolFields.ProviderKey, value);
66 }
67
68 public string Version
69 {
70 get => this.Fields[(int)WixDependencyProviderSymbolFields.Version].AsString();
71 set => this.Set((int)WixDependencyProviderSymbolFields.Version, value);
72 }
73
74 public string DisplayName
75 {
76 get => this.Fields[(int)WixDependencyProviderSymbolFields.DisplayName].AsString();
77 set => this.Set((int)WixDependencyProviderSymbolFields.DisplayName, value);
78 }
79
80 public WixDependencyProviderAttributes Attributes
81 {
82 get => (WixDependencyProviderAttributes)(int)this.Fields[(int)WixDependencyProviderSymbolFields.Attributes];
83 set => this.Set((int)WixDependencyProviderSymbolFields.Attributes, (int)value);
84 }
85
86 public bool Bundle => (this.Attributes & WixDependencyProviderAttributes.ProvidesAttributesBundle) == WixDependencyProviderAttributes.ProvidesAttributesBundle;
87
88 public bool Imported => (this.Attributes & WixDependencyProviderAttributes.ProvidesAttributesImported) == WixDependencyProviderAttributes.ProvidesAttributesImported;
89 }
90}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixDependencyRefSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixDependencyRefSymbol.cs
new file mode 100644
index 00000000..d6076d57
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixDependencyRefSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixDependencyRef = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixDependencyRef,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixDependencyRefSymbolFields.WixDependencyProviderRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixDependencyRefSymbolFields.WixDependencyRef), IntermediateFieldType.String),
15 },
16 typeof(WixDependencyRefSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixDependencyRefSymbolFields
23 {
24 WixDependencyProviderRef,
25 WixDependencyRef,
26 }
27
28 public class WixDependencyRefSymbol : IntermediateSymbol
29 {
30 public WixDependencyRefSymbol() : base(SymbolDefinitions.WixDependencyRef, null, null)
31 {
32 }
33
34 public WixDependencyRefSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixDependencyRef, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixDependencyRefSymbolFields index] => this.Fields[(int)index];
39
40 public string WixDependencyProviderRef
41 {
42 get => this.Fields[(int)WixDependencyRefSymbolFields.WixDependencyProviderRef].AsString();
43 set => this.Set((int)WixDependencyRefSymbolFields.WixDependencyProviderRef, value);
44 }
45
46 public string WixDependencyRef
47 {
48 get => this.Fields[(int)WixDependencyRefSymbolFields.WixDependencyRef].AsString();
49 set => this.Set((int)WixDependencyRefSymbolFields.WixDependencyRef, value);
50 }
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixDependencySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixDependencySymbol.cs
new file mode 100644
index 00000000..840331bb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixDependencySymbol.cs
@@ -0,0 +1,82 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixDependency = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixDependency,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixDependencySymbolFields.ProviderKey), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixDependencySymbolFields.MinVersion), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixDependencySymbolFields.MaxVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixDependencySymbolFields.Attributes), IntermediateFieldType.Number),
17 },
18 typeof(WixDependencySymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System;
25
26 public enum WixDependencySymbolFields
27 {
28 ProviderKey,
29 MinVersion,
30 MaxVersion,
31 Attributes,
32 }
33
34 [Flags]
35 public enum WixDependencySymbolAttributes : int
36 {
37 None = 0x0,
38 RequiresAttributesMinVersionInclusive = 0x100,
39 RequiresAttributesMaxVersionInclusive = 0x200,
40 }
41
42 public class WixDependencySymbol : IntermediateSymbol
43 {
44 public WixDependencySymbol() : base(SymbolDefinitions.WixDependency, null, null)
45 {
46 }
47
48 public WixDependencySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixDependency, sourceLineNumber, id)
49 {
50 }
51
52 public IntermediateField this[WixDependencySymbolFields index] => this.Fields[(int)index];
53
54 public string ProviderKey
55 {
56 get => this.Fields[(int)WixDependencySymbolFields.ProviderKey].AsString();
57 set => this.Set((int)WixDependencySymbolFields.ProviderKey, value);
58 }
59
60 public string MinVersion
61 {
62 get => this.Fields[(int)WixDependencySymbolFields.MinVersion].AsString();
63 set => this.Set((int)WixDependencySymbolFields.MinVersion, value);
64 }
65
66 public string MaxVersion
67 {
68 get => this.Fields[(int)WixDependencySymbolFields.MaxVersion].AsString();
69 set => this.Set((int)WixDependencySymbolFields.MaxVersion, value);
70 }
71
72 public WixDependencySymbolAttributes Attributes
73 {
74 get => (WixDependencySymbolAttributes)this.Fields[(int)WixDependencySymbolFields.Attributes].AsNumber();
75 set => this.Set((int)WixDependencySymbolFields.Attributes, (int)value);
76 }
77
78 public bool RequiresAttributesMinVersionInclusive => (this.Attributes & WixDependencySymbolAttributes.RequiresAttributesMinVersionInclusive) == WixDependencySymbolAttributes.RequiresAttributesMinVersionInclusive;
79
80 public bool RequiresAttributesMaxVersionInclusive => (this.Attributes & WixDependencySymbolAttributes.RequiresAttributesMaxVersionInclusive) == WixDependencySymbolAttributes.RequiresAttributesMaxVersionInclusive;
81 }
82}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixEnsureTableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixEnsureTableSymbol.cs
new file mode 100644
index 00000000..d13063b7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixEnsureTableSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixEnsureTable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixEnsureTable,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixEnsureTableSymbolFields.Table), IntermediateFieldType.String),
14 },
15 typeof(WixEnsureTableSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixEnsureTableSymbolFields
22 {
23 Table,
24 }
25
26 public class WixEnsureTableSymbol : IntermediateSymbol
27 {
28 public WixEnsureTableSymbol() : base(SymbolDefinitions.WixEnsureTable, null, null)
29 {
30 }
31
32 public WixEnsureTableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixEnsureTable, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixEnsureTableSymbolFields index] => this.Fields[(int)index];
37
38 public string Table
39 {
40 get => (string)this.Fields[(int)WixEnsureTableSymbolFields.Table];
41 set => this.Set((int)WixEnsureTableSymbolFields.Table, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixFeatureGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixFeatureGroupSymbol.cs
new file mode 100644
index 00000000..ac002bb6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixFeatureGroupSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixFeatureGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixFeatureGroup,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixFeatureGroupSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixFeatureGroupSymbolFields
21 {
22 }
23
24 public class WixFeatureGroupSymbol : IntermediateSymbol
25 {
26 public WixFeatureGroupSymbol() : base(SymbolDefinitions.WixFeatureGroup, null, null)
27 {
28 }
29
30 public WixFeatureGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixFeatureGroup, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixFeatureGroupSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixFeatureModulesSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixFeatureModulesSymbol.cs
new file mode 100644
index 00000000..b8b3d4b9
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixFeatureModulesSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixFeatureModules = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixFeatureModules,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixFeatureModulesSymbolFields.FeatureRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixFeatureModulesSymbolFields.WixMergeRef), IntermediateFieldType.String),
15 },
16 typeof(WixFeatureModulesSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixFeatureModulesSymbolFields
23 {
24 FeatureRef,
25 WixMergeRef,
26 }
27
28 public class WixFeatureModulesSymbol : IntermediateSymbol
29 {
30 public WixFeatureModulesSymbol() : base(SymbolDefinitions.WixFeatureModules, null, null)
31 {
32 }
33
34 public WixFeatureModulesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixFeatureModules, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixFeatureModulesSymbolFields index] => this.Fields[(int)index];
39
40 public string FeatureRef
41 {
42 get => (string)this.Fields[(int)WixFeatureModulesSymbolFields.FeatureRef];
43 set => this.Set((int)WixFeatureModulesSymbolFields.FeatureRef, value);
44 }
45
46 public string WixMergeRef
47 {
48 get => (string)this.Fields[(int)WixFeatureModulesSymbolFields.WixMergeRef];
49 set => this.Set((int)WixFeatureModulesSymbolFields.WixMergeRef, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixFileSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixFileSearchSymbol.cs
new file mode 100644
index 00000000..027605c7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixFileSearchSymbol.cs
@@ -0,0 +1,125 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixFileSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixFileSearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.Path), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MinVersion), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MaxVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MinSize), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MaxSize), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MinDate), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.MaxDate), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.Languages), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(WixFileSearchSymbolFields.Attributes), IntermediateFieldType.Number),
22 },
23 typeof(WixFileSearchSymbol));
24 }
25}
26
27namespace WixToolset.Data.Symbols
28{
29 using System;
30
31 public enum WixFileSearchSymbolFields
32 {
33 Path,
34 MinVersion,
35 MaxVersion,
36 MinSize,
37 MaxSize,
38 MinDate,
39 MaxDate,
40 Languages,
41 Attributes,
42 }
43
44 [Flags]
45 public enum WixFileSearchAttributes
46 {
47 Default = 0x001,
48 MinVersionInclusive = 0x002,
49 MaxVersionInclusive = 0x004,
50 MinSizeInclusive = 0x008,
51 MaxSizeInclusive = 0x010,
52 MinDateInclusive = 0x020,
53 MaxDateInclusive = 0x040,
54 WantVersion = 0x080,
55 WantExists = 0x100,
56 IsDirectory = 0x200,
57 }
58
59 public class WixFileSearchSymbol : IntermediateSymbol
60 {
61 public WixFileSearchSymbol() : base(SymbolDefinitions.WixFileSearch, null, null)
62 {
63 }
64
65 public WixFileSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixFileSearch, sourceLineNumber, id)
66 {
67 }
68
69 public IntermediateField this[WixFileSearchSymbolFields index] => this.Fields[(int)index];
70
71 public string Path
72 {
73 get => (string)this.Fields[(int)WixFileSearchSymbolFields.Path];
74 set => this.Set((int)WixFileSearchSymbolFields.Path, value);
75 }
76
77 public string MinVersion
78 {
79 get => (string)this.Fields[(int)WixFileSearchSymbolFields.MinVersion];
80 set => this.Set((int)WixFileSearchSymbolFields.MinVersion, value);
81 }
82
83 public string MaxVersion
84 {
85 get => (string)this.Fields[(int)WixFileSearchSymbolFields.MaxVersion];
86 set => this.Set((int)WixFileSearchSymbolFields.MaxVersion, value);
87 }
88
89 public int? MinSize
90 {
91 get => (int?)this.Fields[(int)WixFileSearchSymbolFields.MinSize];
92 set => this.Set((int)WixFileSearchSymbolFields.MinSize, value);
93 }
94
95 public int? MaxSize
96 {
97 get => (int?)this.Fields[(int)WixFileSearchSymbolFields.MaxSize];
98 set => this.Set((int)WixFileSearchSymbolFields.MaxSize, value);
99 }
100
101 public int? MinDate
102 {
103 get => (int?)this.Fields[(int)WixFileSearchSymbolFields.MinDate];
104 set => this.Set((int)WixFileSearchSymbolFields.MinDate, value);
105 }
106
107 public int? MaxDate
108 {
109 get => (int?)this.Fields[(int)WixFileSearchSymbolFields.MaxDate];
110 set => this.Set((int)WixFileSearchSymbolFields.MaxDate, value);
111 }
112
113 public string Languages
114 {
115 get => (string)this.Fields[(int)WixFileSearchSymbolFields.Languages];
116 set => this.Set((int)WixFileSearchSymbolFields.Languages, value);
117 }
118
119 public WixFileSearchAttributes Attributes
120 {
121 get => (WixFileSearchAttributes)this.Fields[(int)WixFileSearchSymbolFields.Attributes].AsNumber();
122 set => this.Set((int)WixFileSearchSymbolFields.Attributes, (int)value);
123 }
124 }
125}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixFragmentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixFragmentSymbol.cs
new file mode 100644
index 00000000..9c31b79c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixFragmentSymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixFragment = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixFragment,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixFragmentSymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixFragmentSymbolFields
21 {
22 }
23
24 public class WixFragmentSymbol : IntermediateSymbol
25 {
26 public WixFragmentSymbol() : base(SymbolDefinitions.WixFragment, null, null)
27 {
28 }
29
30 public WixFragmentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixFragment, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixFragmentSymbolFields index] => this.Fields[(int)index];
35 }
36} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixGroupSymbol.cs
new file mode 100644
index 00000000..f8adf78d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixGroupSymbol.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixGroup,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixGroupSymbolFields.ParentId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixGroupSymbolFields.ParentType), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixGroupSymbolFields.ChildId), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixGroupSymbolFields.ChildType), IntermediateFieldType.Number),
17 },
18 typeof(WixGroupSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System.Diagnostics;
25
26 public enum WixGroupSymbolFields
27 {
28 ParentId,
29 ParentType,
30 ChildId,
31 ChildType,
32 }
33
34 [DebuggerDisplay("WixGroupSymbol {ParentType} {ParentId,nq} -> {ChildType} {ChildId,nq}")]
35 public class WixGroupSymbol : IntermediateSymbol
36 {
37 public WixGroupSymbol() : base(SymbolDefinitions.WixGroup, null, null)
38 {
39 }
40
41 public WixGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixGroup, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[WixGroupSymbolFields index] => this.Fields[(int)index];
46
47 public string ParentId
48 {
49 get => (string)this.Fields[(int)WixGroupSymbolFields.ParentId];
50 set => this.Set((int)WixGroupSymbolFields.ParentId, value);
51 }
52
53 public ComplexReferenceParentType ParentType
54 {
55 get => (ComplexReferenceParentType)this.Fields[(int)WixGroupSymbolFields.ParentType].AsNumber();
56 set => this.Set((int)WixGroupSymbolFields.ParentType, (int)value);
57 }
58
59 public string ChildId
60 {
61 get => (string)this.Fields[(int)WixGroupSymbolFields.ChildId];
62 set => this.Set((int)WixGroupSymbolFields.ChildId, value);
63 }
64
65 public ComplexReferenceChildType ChildType
66 {
67 get => (ComplexReferenceChildType)this.Fields[(int)WixGroupSymbolFields.ChildType].AsNumber();
68 set => this.Set((int)WixGroupSymbolFields.ChildType, (int)value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixInstanceComponentSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixInstanceComponentSymbol.cs
new file mode 100644
index 00000000..c9e4470c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixInstanceComponentSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixInstanceComponent = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixInstanceComponent,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixInstanceComponentSymbolFields.ComponentRef), IntermediateFieldType.String),
14 },
15 typeof(WixInstanceComponentSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixInstanceComponentSymbolFields
22 {
23 ComponentRef,
24 }
25
26 public class WixInstanceComponentSymbol : IntermediateSymbol
27 {
28 public WixInstanceComponentSymbol() : base(SymbolDefinitions.WixInstanceComponent, null, null)
29 {
30 }
31
32 public WixInstanceComponentSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixInstanceComponent, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixInstanceComponentSymbolFields index] => this.Fields[(int)index];
37
38 public string ComponentRef
39 {
40 get => (string)this.Fields[(int)WixInstanceComponentSymbolFields.ComponentRef];
41 set => this.Set((int)WixInstanceComponentSymbolFields.ComponentRef, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixInstanceTransformsSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixInstanceTransformsSymbol.cs
new file mode 100644
index 00000000..3a58cb31
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixInstanceTransformsSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixInstanceTransforms = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixInstanceTransforms,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixInstanceTransformsSymbolFields.PropertyId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixInstanceTransformsSymbolFields.ProductCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixInstanceTransformsSymbolFields.ProductName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixInstanceTransformsSymbolFields.UpgradeCode), IntermediateFieldType.String),
17 },
18 typeof(WixInstanceTransformsSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixInstanceTransformsSymbolFields
25 {
26 PropertyId,
27 ProductCode,
28 ProductName,
29 UpgradeCode,
30 }
31
32 public class WixInstanceTransformsSymbol : IntermediateSymbol
33 {
34 public WixInstanceTransformsSymbol() : base(SymbolDefinitions.WixInstanceTransforms, null, null)
35 {
36 }
37
38 public WixInstanceTransformsSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixInstanceTransforms, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixInstanceTransformsSymbolFields index] => this.Fields[(int)index];
43
44 public string PropertyId
45 {
46 get => (string)this.Fields[(int)WixInstanceTransformsSymbolFields.PropertyId];
47 set => this.Set((int)WixInstanceTransformsSymbolFields.PropertyId, value);
48 }
49
50 public string ProductCode
51 {
52 get => (string)this.Fields[(int)WixInstanceTransformsSymbolFields.ProductCode];
53 set => this.Set((int)WixInstanceTransformsSymbolFields.ProductCode, value);
54 }
55
56 public string ProductName
57 {
58 get => (string)this.Fields[(int)WixInstanceTransformsSymbolFields.ProductName];
59 set => this.Set((int)WixInstanceTransformsSymbolFields.ProductName, value);
60 }
61
62 public string UpgradeCode
63 {
64 get => (string)this.Fields[(int)WixInstanceTransformsSymbolFields.UpgradeCode];
65 set => this.Set((int)WixInstanceTransformsSymbolFields.UpgradeCode, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixMediaTemplateSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixMediaTemplateSymbol.cs
new file mode 100644
index 00000000..28695b3e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixMediaTemplateSymbol.cs
@@ -0,0 +1,86 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixMediaTemplate = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixMediaTemplate,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.CabinetTemplate), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.CompressionLevel), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.DiskPrompt), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.VolumeLabel), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.MaximumUncompressedMediaSize), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixMediaTemplateSymbolFields.MaximumCabinetSizeForLargeFileSplitting), IntermediateFieldType.Number),
19 },
20 typeof(WixMediaTemplateSymbol));
21 }
22}
23
24namespace WixToolset.Data.Symbols
25{
26 using System;
27
28 public enum WixMediaTemplateSymbolFields
29 {
30 CabinetTemplate,
31 CompressionLevel,
32 DiskPrompt,
33 VolumeLabel,
34 MaximumUncompressedMediaSize,
35 MaximumCabinetSizeForLargeFileSplitting,
36 }
37
38 public class WixMediaTemplateSymbol : IntermediateSymbol
39 {
40 public WixMediaTemplateSymbol() : base(SymbolDefinitions.WixMediaTemplate, null, null)
41 {
42 }
43
44 public WixMediaTemplateSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixMediaTemplate, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[WixMediaTemplateSymbolFields index] => this.Fields[(int)index];
49
50 public string CabinetTemplate
51 {
52 get => (string)this.Fields[(int)WixMediaTemplateSymbolFields.CabinetTemplate];
53 set => this.Set((int)WixMediaTemplateSymbolFields.CabinetTemplate, value);
54 }
55
56 public CompressionLevel? CompressionLevel
57 {
58 get => (CompressionLevel?)this.Fields[(int)WixMediaTemplateSymbolFields.CompressionLevel].AsNullableNumber();
59 set => this.Set((int)WixMediaTemplateSymbolFields.CompressionLevel, (int?)value);
60 }
61
62 public string DiskPrompt
63 {
64 get => (string)this.Fields[(int)WixMediaTemplateSymbolFields.DiskPrompt];
65 set => this.Set((int)WixMediaTemplateSymbolFields.DiskPrompt, value);
66 }
67
68 public string VolumeLabel
69 {
70 get => (string)this.Fields[(int)WixMediaTemplateSymbolFields.VolumeLabel];
71 set => this.Set((int)WixMediaTemplateSymbolFields.VolumeLabel, value);
72 }
73
74 public int? MaximumUncompressedMediaSize
75 {
76 get => (int?)this.Fields[(int)WixMediaTemplateSymbolFields.MaximumUncompressedMediaSize];
77 set => this.Set((int)WixMediaTemplateSymbolFields.MaximumUncompressedMediaSize, value);
78 }
79
80 public int? MaximumCabinetSizeForLargeFileSplitting
81 {
82 get => (int?)this.Fields[(int)WixMediaTemplateSymbolFields.MaximumCabinetSizeForLargeFileSplitting];
83 set => this.Set((int)WixMediaTemplateSymbolFields.MaximumCabinetSizeForLargeFileSplitting, value);
84 }
85 }
86} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixMergeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixMergeSymbol.cs
new file mode 100644
index 00000000..d066fa8e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixMergeSymbol.cs
@@ -0,0 +1,92 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixMerge = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixMerge,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.Language), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.DirectoryRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.SourceFile), IntermediateFieldType.Path),
16 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.DiskId), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.FileAttributes), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.ConfigurationData), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixMergeSymbolFields.FeatureRef), IntermediateFieldType.String),
20 },
21 typeof(WixMergeSymbol));
22 }
23}
24
25namespace WixToolset.Data.Symbols
26{
27 public enum WixMergeSymbolFields
28 {
29 Language,
30 DirectoryRef,
31 SourceFile,
32 DiskId,
33 FileAttributes,
34 ConfigurationData,
35 FeatureRef,
36 }
37
38 public class WixMergeSymbol : IntermediateSymbol
39 {
40 public WixMergeSymbol() : base(SymbolDefinitions.WixMerge, null, null)
41 {
42 }
43
44 public WixMergeSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixMerge, sourceLineNumber, id)
45 {
46 }
47
48 public IntermediateField this[WixMergeSymbolFields index] => this.Fields[(int)index];
49
50 public int Language
51 {
52 get => (int)this.Fields[(int)WixMergeSymbolFields.Language];
53 set => this.Set((int)WixMergeSymbolFields.Language, value);
54 }
55
56 public string DirectoryRef
57 {
58 get => (string)this.Fields[(int)WixMergeSymbolFields.DirectoryRef];
59 set => this.Set((int)WixMergeSymbolFields.DirectoryRef, value);
60 }
61
62 public string SourceFile
63 {
64 get => (string)this.Fields[(int)WixMergeSymbolFields.SourceFile];
65 set => this.Set((int)WixMergeSymbolFields.SourceFile, value);
66 }
67
68 public int DiskId
69 {
70 get => (int)this.Fields[(int)WixMergeSymbolFields.DiskId];
71 set => this.Set((int)WixMergeSymbolFields.DiskId, value);
72 }
73
74 public FileSymbolAttributes FileAttributes
75 {
76 get => (FileSymbolAttributes)this.Fields[(int)WixMergeSymbolFields.FileAttributes].AsNumber();
77 set => this.Set((int)WixMergeSymbolFields.FileAttributes, (int)value);
78 }
79
80 public string ConfigurationData
81 {
82 get => (string)this.Fields[(int)WixMergeSymbolFields.ConfigurationData];
83 set => this.Set((int)WixMergeSymbolFields.ConfigurationData, value);
84 }
85
86 public string FeatureRef
87 {
88 get => (string)this.Fields[(int)WixMergeSymbolFields.FeatureRef];
89 set => this.Set((int)WixMergeSymbolFields.FeatureRef, value);
90 }
91 }
92}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixModuleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixModuleSymbol.cs
new file mode 100644
index 00000000..fbb16764
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixModuleSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixModule = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixModule,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixModuleSymbolFields.ModuleId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixModuleSymbolFields.Language), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixModuleSymbolFields.Version), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixModuleSymbolFields.Codepage), IntermediateFieldType.String),
17 },
18 typeof(WixModuleSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixModuleSymbolFields
25 {
26 ModuleId,
27 Language,
28 Version,
29 Codepage,
30 }
31
32 public class WixModuleSymbol : IntermediateSymbol
33 {
34 public WixModuleSymbol() : base(SymbolDefinitions.WixModule, null, null)
35 {
36 }
37
38 public WixModuleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixModule, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixModuleSymbolFields index] => this.Fields[(int)index];
43
44 public string ModuleId
45 {
46 get => (string)this.Fields[(int)WixModuleSymbolFields.ModuleId];
47 set => this.Set((int)WixModuleSymbolFields.ModuleId, value);
48 }
49
50 public string Language
51 {
52 get => (string)this.Fields[(int)WixModuleSymbolFields.Language];
53 set => this.Set((int)WixModuleSymbolFields.Language, value);
54 }
55
56 public string Version
57 {
58 get => (string)this.Fields[(int)WixModuleSymbolFields.Version];
59 set => this.Set((int)WixModuleSymbolFields.Version, value);
60 }
61
62 public string Codepage
63 {
64 get => (string)this.Fields[(int)WixModuleSymbolFields.Codepage];
65 set => this.Set((int)WixModuleSymbolFields.Codepage, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixOrderingSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixOrderingSymbol.cs
new file mode 100644
index 00000000..5e6dc980
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixOrderingSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixOrdering = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixOrdering,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixOrderingSymbolFields.ItemType), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixOrderingSymbolFields.ItemIdRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixOrderingSymbolFields.DependsOnType), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixOrderingSymbolFields.DependsOnIdRef), IntermediateFieldType.String),
17 },
18 typeof(WixOrderingSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixOrderingSymbolFields
25 {
26 ItemType,
27 ItemIdRef,
28 DependsOnType,
29 DependsOnIdRef,
30 }
31
32 public class WixOrderingSymbol : IntermediateSymbol
33 {
34 public WixOrderingSymbol() : base(SymbolDefinitions.WixOrdering, null, null)
35 {
36 }
37
38 public WixOrderingSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixOrdering, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixOrderingSymbolFields index] => this.Fields[(int)index];
43
44 public ComplexReferenceChildType ItemType
45 {
46 get => (ComplexReferenceChildType)this.Fields[(int)WixOrderingSymbolFields.ItemType].AsNumber();
47 set => this.Set((int)WixOrderingSymbolFields.ItemType, (int)value);
48 }
49
50 public string ItemIdRef
51 {
52 get => (string)this.Fields[(int)WixOrderingSymbolFields.ItemIdRef];
53 set => this.Set((int)WixOrderingSymbolFields.ItemIdRef, value);
54 }
55
56 public ComplexReferenceChildType DependsOnType
57 {
58 get => (ComplexReferenceChildType)this.Fields[(int)WixOrderingSymbolFields.DependsOnType].AsNumber();
59 set => this.Set((int)WixOrderingSymbolFields.DependsOnType, (int)value);
60 }
61
62 public string DependsOnIdRef
63 {
64 get => (string)this.Fields[(int)WixOrderingSymbolFields.DependsOnIdRef];
65 set => this.Set((int)WixOrderingSymbolFields.DependsOnIdRef, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPackageSymbol.cs
new file mode 100644
index 00000000..e1720033
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPackageSymbol.cs
@@ -0,0 +1,111 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPackage = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPackage,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.PackageId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.UpgradeCode), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Language), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Version), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Manufacturer), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Attributes), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(WixPackageSymbolFields.Codepage), IntermediateFieldType.String),
21 },
22 typeof(WixPackageSymbol));
23 }
24}
25
26namespace WixToolset.Data.Symbols
27{
28 using System;
29
30 public enum WixPackageSymbolFields
31 {
32 PackageId,
33 UpgradeCode,
34 Name,
35 Language,
36 Version,
37 Manufacturer,
38 Attributes,
39 Codepage,
40 }
41
42 [Flags]
43 public enum WixPackageAttributes
44 {
45 None = 0x0,
46 PerMachine = 0x1,
47 }
48
49 public class WixPackageSymbol : IntermediateSymbol
50 {
51 public WixPackageSymbol() : base(SymbolDefinitions.WixPackage, null, null)
52 {
53 }
54
55 public WixPackageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPackage, sourceLineNumber, id)
56 {
57 }
58
59 public IntermediateField this[WixPackageSymbolFields index] => this.Fields[(int)index];
60
61 public string PackageId
62 {
63 get => (string)this.Fields[(int)WixPackageSymbolFields.PackageId];
64 set => this.Set((int)WixPackageSymbolFields.PackageId, value);
65 }
66
67 public string UpgradeCode
68 {
69 get => (string)this.Fields[(int)WixPackageSymbolFields.UpgradeCode];
70 set => this.Set((int)WixPackageSymbolFields.UpgradeCode, value);
71 }
72
73 public string Name
74 {
75 get => (string)this.Fields[(int)WixPackageSymbolFields.Name];
76 set => this.Set((int)WixPackageSymbolFields.Name, value);
77 }
78
79 public string Language
80 {
81 get => (string)this.Fields[(int)WixPackageSymbolFields.Language];
82 set => this.Set((int)WixPackageSymbolFields.Language, value);
83 }
84
85 public string Version
86 {
87 get => (string)this.Fields[(int)WixPackageSymbolFields.Version];
88 set => this.Set((int)WixPackageSymbolFields.Version, value);
89 }
90
91 public string Manufacturer
92 {
93 get => (string)this.Fields[(int)WixPackageSymbolFields.Manufacturer];
94 set => this.Set((int)WixPackageSymbolFields.Manufacturer, value);
95 }
96
97 public WixPackageAttributes Attributes
98 {
99 get => (WixPackageAttributes)this.Fields[(int)WixPackageSymbolFields.Attributes].AsNumber();
100 set => this.Set((int)WixPackageSymbolFields.Attributes, (int)value);
101 }
102
103 public string Codepage
104 {
105 get => (string)this.Fields[(int)WixPackageSymbolFields.Codepage];
106 set => this.Set((int)WixPackageSymbolFields.Codepage, value);
107 }
108
109 public bool PerMachine => (this.Attributes & WixPackageAttributes.PerMachine) == WixPackageAttributes.PerMachine;
110 }
111}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPatchBaselineSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPatchBaselineSymbol.cs
new file mode 100644
index 00000000..d7295424
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPatchBaselineSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPatchBaseline = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPatchBaseline,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPatchBaselineSymbolFields.DiskId), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixPatchBaselineSymbolFields.ValidationFlags), IntermediateFieldType.Number),
15 new IntermediateFieldDefinition(nameof(WixPatchBaselineSymbolFields.BaselineFile), IntermediateFieldType.Path),
16 new IntermediateFieldDefinition(nameof(WixPatchBaselineSymbolFields.UpdateFile), IntermediateFieldType.Path),
17 new IntermediateFieldDefinition(nameof(WixPatchBaselineSymbolFields.TransformFile), IntermediateFieldType.Path),
18 },
19 typeof(WixPatchBaselineSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum WixPatchBaselineSymbolFields
26 {
27 DiskId,
28 ValidationFlags,
29 BaselineFile,
30 UpdateFile,
31 TransformFile,
32 }
33
34 public class WixPatchBaselineSymbol : IntermediateSymbol
35 {
36 public WixPatchBaselineSymbol() : base(SymbolDefinitions.WixPatchBaseline, null, null)
37 {
38 }
39
40 public WixPatchBaselineSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPatchBaseline, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[WixPatchBaselineSymbolFields index] => this.Fields[(int)index];
45
46 public int DiskId
47 {
48 get => (int)this.Fields[(int)WixPatchBaselineSymbolFields.DiskId];
49 set => this.Set((int)WixPatchBaselineSymbolFields.DiskId, value);
50 }
51
52 public TransformFlags ValidationFlags
53 {
54 get => (TransformFlags)this.Fields[(int)WixPatchBaselineSymbolFields.ValidationFlags].AsNumber();
55 set => this.Set((int)WixPatchBaselineSymbolFields.ValidationFlags, (int)value);
56 }
57
58 public IntermediateFieldPathValue BaselineFile
59 {
60 get => this.Fields[(int)WixPatchBaselineSymbolFields.BaselineFile].AsPath();
61 set => this.Set((int)WixPatchBaselineSymbolFields.BaselineFile, value);
62 }
63
64 public IntermediateFieldPathValue UpdateFile
65 {
66 get => this.Fields[(int)WixPatchBaselineSymbolFields.UpdateFile].AsPath();
67 set => this.Set((int)WixPatchBaselineSymbolFields.UpdateFile, value);
68 }
69
70 public IntermediateFieldPathValue TransformFile
71 {
72 get => this.Fields[(int)WixPatchBaselineSymbolFields.TransformFile].AsPath();
73 set => this.Set((int)WixPatchBaselineSymbolFields.TransformFile, value);
74 }
75 }
76}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPatchFamilyGroupSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPatchFamilyGroupSymbol.cs
new file mode 100644
index 00000000..3ab34f1f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPatchFamilyGroupSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPatchFamilyGroup = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPatchFamilyGroup,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPatchFamilyGroupSymbolFields.WixPatchFamilyGroup), IntermediateFieldType.String),
14 },
15 typeof(WixPatchFamilyGroupSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixPatchFamilyGroupSymbolFields
22 {
23 WixPatchFamilyGroup,
24 }
25
26 public class WixPatchFamilyGroupSymbol : IntermediateSymbol
27 {
28 public WixPatchFamilyGroupSymbol() : base(SymbolDefinitions.WixPatchFamilyGroup, null, null)
29 {
30 }
31
32 public WixPatchFamilyGroupSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPatchFamilyGroup, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixPatchFamilyGroupSymbolFields index] => this.Fields[(int)index];
37
38 public string WixPatchFamilyGroup
39 {
40 get => (string)this.Fields[(int)WixPatchFamilyGroupSymbolFields.WixPatchFamilyGroup];
41 set => this.Set((int)WixPatchFamilyGroupSymbolFields.WixPatchFamilyGroup, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPatchRefSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPatchRefSymbol.cs
new file mode 100644
index 00000000..66257d84
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPatchRefSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPatchRef = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPatchRef,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPatchRefSymbolFields.Table), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixPatchRefSymbolFields.PrimaryKeys), IntermediateFieldType.String),
15 },
16 typeof(WixPatchRefSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixPatchRefSymbolFields
23 {
24 Table,
25 PrimaryKeys,
26 }
27
28 public class WixPatchRefSymbol : IntermediateSymbol
29 {
30 public WixPatchRefSymbol() : base(SymbolDefinitions.WixPatchRef, null, null)
31 {
32 }
33
34 public WixPatchRefSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPatchRef, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixPatchRefSymbolFields index] => this.Fields[(int)index];
39
40 public string Table
41 {
42 get => (string)this.Fields[(int)WixPatchRefSymbolFields.Table];
43 set => this.Set((int)WixPatchRefSymbolFields.Table, value);
44 }
45
46 public string PrimaryKeys
47 {
48 get => (string)this.Fields[(int)WixPatchRefSymbolFields.PrimaryKeys];
49 set => this.Set((int)WixPatchRefSymbolFields.PrimaryKeys, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPatchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPatchSymbol.cs
new file mode 100644
index 00000000..3f1f20bb
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPatchSymbol.cs
@@ -0,0 +1,98 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPatchId = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPatch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPatchSymbolFields.ClientPatchId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixPatchSymbolFields.OptimizePatchSizeForLargeFiles), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(WixPatchSymbolFields.ApiPatchingSymbolFlags), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(WixPatchSymbolFields.Codepage), IntermediateFieldType.String),
17 },
18 typeof(WixPatchSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System;
25
26 public enum WixPatchSymbolFields
27 {
28 ClientPatchId,
29 OptimizePatchSizeForLargeFiles,
30 ApiPatchingSymbolFlags,
31 Codepage,
32 }
33
34 /// <summary>
35 /// The following flags are used with PATCH_OPTION_DATA SymbolOptionFlags:
36 /// </summary>
37 [Flags]
38 [CLSCompliant(false)]
39 public enum PatchSymbolFlags : uint
40 {
41 /// <summary>
42 /// Don't use imagehlp.dll
43 /// </summary>
44 PatchSymbolNoImagehlp = 0x00000001,
45
46 /// <summary>
47 /// Don't fail patch due to imagehlp failures.
48 /// </summary>
49 PatchSymbolNoFailures = 0x00000002,
50
51 /// <summary>
52 /// After matching decorated symbols, try to match remaining by undecorated names.
53 /// </summary>
54 PatchSymbolUndecoratedToo = 0x00000004,
55
56 /// <summary>
57 /// (used internally)
58 /// </summary>
59 PatchSymbolReserved = 0x80000000,
60 }
61
62 public class WixPatchSymbol : IntermediateSymbol
63 {
64 public WixPatchSymbol() : base(SymbolDefinitions.WixPatchId, null, null)
65 {
66 }
67
68 public WixPatchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPatchId, sourceLineNumber, id)
69 {
70 }
71
72 public IntermediateField this[WixPatchSymbolFields index] => this.Fields[(int)index];
73
74 public string ClientPatchId
75 {
76 get => (string)this.Fields[(int)WixPatchSymbolFields.ClientPatchId];
77 set => this.Set((int)WixPatchSymbolFields.ClientPatchId, value);
78 }
79
80 public bool? OptimizePatchSizeForLargeFiles
81 {
82 get => (bool?)this.Fields[(int)WixPatchSymbolFields.OptimizePatchSizeForLargeFiles];
83 set => this.Set((int)WixPatchSymbolFields.OptimizePatchSizeForLargeFiles, value);
84 }
85
86 public int? ApiPatchingSymbolFlags
87 {
88 get => (int?)this.Fields[(int)WixPatchSymbolFields.ApiPatchingSymbolFlags];
89 set => this.Set((int)WixPatchSymbolFields.ApiPatchingSymbolFlags, value);
90 }
91
92 public string Codepage
93 {
94 get => (string)this.Fields[(int)WixPatchSymbolFields.Codepage];
95 set => this.Set((int)WixPatchSymbolFields.Codepage, value);
96 }
97 }
98} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPatchTargetSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPatchTargetSymbol.cs
new file mode 100644
index 00000000..e8c01c26
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPatchTargetSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixPatchTarget = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixPatchTarget,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPatchTargetSymbolFields.ProductCode), IntermediateFieldType.String),
14 },
15 typeof(WixPatchTargetSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixPatchTargetSymbolFields
22 {
23 ProductCode,
24 }
25
26 public class WixPatchTargetSymbol : IntermediateSymbol
27 {
28 public WixPatchTargetSymbol() : base(SymbolDefinitions.WixPatchTarget, null, null)
29 {
30 }
31
32 public WixPatchTargetSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixPatchTarget, sourceLineNumber, id)
33 {
34 }
35
36 public IntermediateField this[WixPatchTargetSymbolFields index] => this.Fields[(int)index];
37
38 public string ProductCode
39 {
40 get => (string)this.Fields[(int)WixPatchTargetSymbolFields.ProductCode];
41 set => this.Set((int)WixPatchTargetSymbolFields.ProductCode, value);
42 }
43 }
44} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixProductSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixProductSearchSymbol.cs
new file mode 100644
index 00000000..f8a17b64
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixProductSearchSymbol.cs
@@ -0,0 +1,64 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixProductSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixProductSearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixProductSearchSymbolFields.Guid), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixProductSearchSymbolFields.Attributes), IntermediateFieldType.Number),
15 },
16 typeof(WixProductSearchSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 using System;
23
24 public enum WixProductSearchSymbolFields
25 {
26 Guid,
27 Attributes,
28 }
29
30 [Flags]
31 public enum WixProductSearchAttributes
32 {
33 Version = 0x1,
34 Language = 0x2,
35 State = 0x4,
36 Assignment = 0x8,
37 UpgradeCode = 0x10,
38 }
39
40 public class WixProductSearchSymbol : IntermediateSymbol
41 {
42 public WixProductSearchSymbol() : base(SymbolDefinitions.WixProductSearch, null, null)
43 {
44 }
45
46 public WixProductSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixProductSearch, sourceLineNumber, id)
47 {
48 }
49
50 public IntermediateField this[WixProductSearchSymbolFields index] => this.Fields[(int)index];
51
52 public string Guid
53 {
54 get => (string)this.Fields[(int)WixProductSearchSymbolFields.Guid];
55 set => this.Set((int)WixProductSearchSymbolFields.Guid, value);
56 }
57
58 public WixProductSearchAttributes Attributes
59 {
60 get => (WixProductSearchAttributes)this.Fields[(int)WixProductSearchSymbolFields.Attributes].AsNumber();
61 set => this.Set((int)WixProductSearchSymbolFields.Attributes, (int)value);
62 }
63 }
64}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixProductTagSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixProductTagSymbol.cs
new file mode 100644
index 00000000..a2f1ed11
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixProductTagSymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixProductTag = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixProductTag,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixProductTagSymbolFields.FileRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixProductTagSymbolFields.Regid), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixProductTagSymbolFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixProductTagSymbolFields.Attributes), IntermediateFieldType.Number)
17 },
18 typeof(WixProductTagSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixProductTagSymbolFields
25 {
26 FileRef,
27 Regid,
28 Name,
29 Attributes
30 }
31
32 public class WixProductTagSymbol : IntermediateSymbol
33 {
34 public WixProductTagSymbol() : base(SymbolDefinitions.WixProductTag, null, null)
35 {
36 }
37
38 public WixProductTagSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixProductTag, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixProductTagSymbolFields index] => this.Fields[(int)index];
43
44 public string FileRef
45 {
46 get => this.Fields[(int)WixProductTagSymbolFields.FileRef].AsString();
47 set => this.Set((int)WixProductTagSymbolFields.FileRef, value);
48 }
49
50 public string Regid
51 {
52 get => this.Fields[(int)WixProductTagSymbolFields.Regid].AsString();
53 set => this.Set((int)WixProductTagSymbolFields.Regid, value);
54 }
55
56 public string Name
57 {
58 get => this.Fields[(int)WixProductTagSymbolFields.Name].AsString();
59 set => this.Set((int)WixProductTagSymbolFields.Name, value);
60 }
61
62 public int Attributes
63 {
64 get => this.Fields[(int)WixProductTagSymbolFields.Attributes].AsNumber();
65 set => this.Set((int)WixProductTagSymbolFields.Attributes, value);
66 }
67 }
68}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixPropertySymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixPropertySymbol.cs
new file mode 100644
index 00000000..17cf59ce
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixPropertySymbol.cs
@@ -0,0 +1,68 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixProperty = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixProperty,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixPropertySymbolFields.PropertyRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixPropertySymbolFields.Admin), IntermediateFieldType.Bool),
15 new IntermediateFieldDefinition(nameof(WixPropertySymbolFields.Hidden), IntermediateFieldType.Bool),
16 new IntermediateFieldDefinition(nameof(WixPropertySymbolFields.Secure), IntermediateFieldType.Bool),
17 },
18 typeof(WixPropertySymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 public enum WixPropertySymbolFields
25 {
26 PropertyRef,
27 Admin,
28 Hidden,
29 Secure,
30 }
31
32 public class WixPropertySymbol : IntermediateSymbol
33 {
34 public WixPropertySymbol() : base(SymbolDefinitions.WixProperty, null, null)
35 {
36 }
37
38 public WixPropertySymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixProperty, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixPropertySymbolFields index] => this.Fields[(int)index];
43
44 public string PropertyRef
45 {
46 get => (string)this.Fields[(int)WixPropertySymbolFields.PropertyRef];
47 set => this.Set((int)WixPropertySymbolFields.PropertyRef, value);
48 }
49
50 public bool Admin
51 {
52 get => (bool)this.Fields[(int)WixPropertySymbolFields.Admin];
53 set => this.Set((int)WixPropertySymbolFields.Admin, value);
54 }
55
56 public bool Hidden
57 {
58 get => (bool)this.Fields[(int)WixPropertySymbolFields.Hidden];
59 set => this.Set((int)WixPropertySymbolFields.Hidden, value);
60 }
61
62 public bool Secure
63 {
64 get => (bool)this.Fields[(int)WixPropertySymbolFields.Secure];
65 set => this.Set((int)WixPropertySymbolFields.Secure, value);
66 }
67 }
68} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixRegistrySearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixRegistrySearchSymbol.cs
new file mode 100644
index 00000000..dffa8410
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixRegistrySearchSymbol.cs
@@ -0,0 +1,81 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixRegistrySearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixRegistrySearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixRegistrySearchSymbolFields.Root), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixRegistrySearchSymbolFields.Key), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixRegistrySearchSymbolFields.Value), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixRegistrySearchSymbolFields.Attributes), IntermediateFieldType.Number),
17 },
18 typeof(WixRegistrySearchSymbol));
19 }
20}
21
22namespace WixToolset.Data.Symbols
23{
24 using System;
25
26 public enum WixRegistrySearchSymbolFields
27 {
28 Root,
29 Key,
30 Value,
31 Attributes,
32 }
33
34 [Flags]
35 public enum WixRegistrySearchAttributes
36 {
37 Raw = 0x01,
38 Compatible = 0x02,
39 ExpandEnvironmentVariables = 0x04,
40 WantValue = 0x08,
41 WantExists = 0x10,
42 Win64 = 0x20,
43 }
44
45 public class WixRegistrySearchSymbol : IntermediateSymbol
46 {
47 public WixRegistrySearchSymbol() : base(SymbolDefinitions.WixRegistrySearch, null, null)
48 {
49 }
50
51 public WixRegistrySearchSymbol(SourceLineNumber sourceLineNumber , Identifier id = null) : base(SymbolDefinitions.WixRegistrySearch, sourceLineNumber, id)
52 {
53 }
54
55 public IntermediateField this[WixRegistrySearchSymbolFields index] => this.Fields[(int)index];
56
57 public RegistryRootType Root
58 {
59 get => (RegistryRootType)this.Fields[(int)WixRegistrySearchSymbolFields.Root].AsNumber();
60 set => this.Set((int)WixRegistrySearchSymbolFields.Root, (int)value);
61 }
62
63 public string Key
64 {
65 get => (string)this.Fields[(int)WixRegistrySearchSymbolFields.Key];
66 set => this.Set((int)WixRegistrySearchSymbolFields.Key, value);
67 }
68
69 public string Value
70 {
71 get => (string)this.Fields[(int)WixRegistrySearchSymbolFields.Value];
72 set => this.Set((int)WixRegistrySearchSymbolFields.Value, value);
73 }
74
75 public WixRegistrySearchAttributes Attributes
76 {
77 get => (WixRegistrySearchAttributes)this.Fields[(int)WixRegistrySearchSymbolFields.Attributes].AsNumber();
78 set => this.Set((int)WixRegistrySearchSymbolFields.Attributes, (int)value);
79 }
80 }
81}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixRelatedBundleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixRelatedBundleSymbol.cs
new file mode 100644
index 00000000..dc544e29
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixRelatedBundleSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixRelatedBundle = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixRelatedBundle,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixRelatedBundleSymbolFields.BundleId), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixRelatedBundleSymbolFields.Action), IntermediateFieldType.Number),
15 },
16 typeof(WixRelatedBundleSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixRelatedBundleSymbolFields
23 {
24 BundleId,
25 Action,
26 }
27
28 public enum RelatedBundleActionType
29 {
30 Detect,
31 Upgrade,
32 Addon,
33 Patch
34 }
35
36 public class WixRelatedBundleSymbol : IntermediateSymbol
37 {
38 public WixRelatedBundleSymbol() : base(SymbolDefinitions.WixRelatedBundle, null, null)
39 {
40 }
41
42 public WixRelatedBundleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixRelatedBundle, sourceLineNumber, id)
43 {
44 }
45
46 public IntermediateField this[WixRelatedBundleSymbolFields index] => this.Fields[(int)index];
47
48 public string BundleId
49 {
50 get => (string)this.Fields[(int)WixRelatedBundleSymbolFields.BundleId];
51 set => this.Set((int)WixRelatedBundleSymbolFields.BundleId, value);
52 }
53
54 public RelatedBundleActionType Action
55 {
56 get => (RelatedBundleActionType)this.Fields[(int)WixRelatedBundleSymbolFields.Action].AsNumber();
57 set => this.Set((int)WixRelatedBundleSymbolFields.Action, (int)value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSearchRelationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSearchRelationSymbol.cs
new file mode 100644
index 00000000..6b47833a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSearchRelationSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSearchRelation = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSearchRelation,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSearchRelationSymbolFields.ParentSearchRef), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixSearchRelationSymbolFields.Attributes), IntermediateFieldType.Number),
15 },
16 typeof(WixSearchRelationSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixSearchRelationSymbolFields
23 {
24 ParentSearchRef,
25 Attributes,
26 }
27
28 public class WixSearchRelationSymbol : IntermediateSymbol
29 {
30 public WixSearchRelationSymbol() : base(SymbolDefinitions.WixSearchRelation, null, null)
31 {
32 }
33
34 public WixSearchRelationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSearchRelation, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixSearchRelationSymbolFields index] => this.Fields[(int)index];
39
40 public string ParentSearchRef
41 {
42 get => (string)this.Fields[(int)WixSearchRelationSymbolFields.ParentSearchRef];
43 set => this.Set((int)WixSearchRelationSymbolFields.ParentSearchRef, value);
44 }
45
46 public int Attributes
47 {
48 get => (int)this.Fields[(int)WixSearchRelationSymbolFields.Attributes];
49 set => this.Set((int)WixSearchRelationSymbolFields.Attributes, value);
50 }
51 }
52} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSearchSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSearchSymbol.cs
new file mode 100644
index 00000000..2d6a927c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSearchSymbol.cs
@@ -0,0 +1,60 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSearch = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSearch,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSearchSymbolFields.Variable), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixSearchSymbolFields.Condition), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixSearchSymbolFields.BundleExtensionRef), IntermediateFieldType.String),
16 },
17 typeof(WixSearchSymbol));
18 }
19}
20
21namespace WixToolset.Data.Symbols
22{
23 public enum WixSearchSymbolFields
24 {
25 Variable,
26 Condition,
27 BundleExtensionRef,
28 }
29
30 public class WixSearchSymbol : IntermediateSymbol
31 {
32 public WixSearchSymbol() : base(SymbolDefinitions.WixSearch, null, null)
33 {
34 }
35
36 public WixSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSearch, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[WixSearchSymbolFields index] => this.Fields[(int)index];
41
42 public string Variable
43 {
44 get => (string)this.Fields[(int)WixSearchSymbolFields.Variable];
45 set => this.Set((int)WixSearchSymbolFields.Variable, value);
46 }
47
48 public string Condition
49 {
50 get => (string)this.Fields[(int)WixSearchSymbolFields.Condition];
51 set => this.Set((int)WixSearchSymbolFields.Condition, value);
52 }
53
54 public string BundleExtensionRef
55 {
56 get => (string)this.Fields[(int)WixSearchSymbolFields.BundleExtensionRef];
57 set => this.Set((int)WixSearchSymbolFields.BundleExtensionRef, value);
58 }
59 }
60} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSetVariableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSetVariableSymbol.cs
new file mode 100644
index 00000000..05fdf561
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSetVariableSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSetVariable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSetVariable,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSetVariableSymbolFields.Value), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixSetVariableSymbolFields.Type), IntermediateFieldType.String),
15 },
16 typeof(WixSetVariableSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 using System;
23
24 public enum WixSetVariableSymbolFields
25 {
26 Value,
27 Type,
28 }
29
30 public class WixSetVariableSymbol : IntermediateSymbol
31 {
32 public WixSetVariableSymbol() : base(SymbolDefinitions.WixSetVariable, null, null)
33 {
34 }
35
36 public WixSetVariableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSetVariable, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[WixSetVariableSymbolFields index] => this.Fields[(int)index];
41
42 public string Value
43 {
44 get => (string)this.Fields[(int)WixSetVariableSymbolFields.Value];
45 set => this.Set((int)WixSetVariableSymbolFields.Value, value);
46 }
47
48 public WixBundleVariableType Type
49 {
50 get => Enum.TryParse((string)this.Fields[(int)WixSetVariableSymbolFields.Type], true, out WixBundleVariableType value) ? value : WixBundleVariableType.Unknown;
51 set => this.Set((int)WixSetVariableSymbolFields.Type, value.ToString().ToLowerInvariant());
52 }
53 }
54}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSimpleReferenceSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSimpleReferenceSymbol.cs
new file mode 100644
index 00000000..86e410ff
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSimpleReferenceSymbol.cs
@@ -0,0 +1,62 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSimpleReference = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSimpleReference,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSimpleReferenceSymbolFields.Table), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixSimpleReferenceSymbolFields.PrimaryKeys), IntermediateFieldType.String),
15 },
16 typeof(WixSimpleReferenceSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 using System;
23 using System.Diagnostics;
24
25 public enum WixSimpleReferenceSymbolFields
26 {
27 Table,
28 PrimaryKeys,
29 }
30
31 [DebuggerDisplay("Ref {SymbolicName,nq}")]
32 public class WixSimpleReferenceSymbol : IntermediateSymbol
33 {
34 public WixSimpleReferenceSymbol() : base(SymbolDefinitions.WixSimpleReference, null, null)
35 {
36 }
37
38 public WixSimpleReferenceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSimpleReference, sourceLineNumber, id)
39 {
40 }
41
42 public IntermediateField this[WixSimpleReferenceSymbolFields index] => this.Fields[(int)index];
43
44 public string Table
45 {
46 get => (string)this.Fields[(int)WixSimpleReferenceSymbolFields.Table];
47 set => this.Set((int)WixSimpleReferenceSymbolFields.Table, value);
48 }
49
50 public string PrimaryKeys
51 {
52 get => (string)this.Fields[(int)WixSimpleReferenceSymbolFields.PrimaryKeys];
53 set => this.Set((int)WixSimpleReferenceSymbolFields.PrimaryKeys, value);
54 }
55
56 /// <summary>
57 /// Gets the symbolic name.
58 /// </summary>
59 /// <value>Symbolic name.</value>
60 public string SymbolicName => String.Concat(this.Table, ":", this.PrimaryKeys);
61 }
62} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSuppressActionSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSuppressActionSymbol.cs
new file mode 100644
index 00000000..f99246f0
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSuppressActionSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSuppressAction = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSuppressAction,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSuppressActionSymbolFields.SequenceTable), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixSuppressActionSymbolFields.Action), IntermediateFieldType.String),
15 },
16 typeof(WixSuppressActionSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 using System;
23
24 public enum WixSuppressActionSymbolFields
25 {
26 SequenceTable,
27 Action,
28 }
29
30 public class WixSuppressActionSymbol : IntermediateSymbol
31 {
32 public WixSuppressActionSymbol() : base(SymbolDefinitions.WixSuppressAction, null, null)
33 {
34 }
35
36 public WixSuppressActionSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSuppressAction, sourceLineNumber, id)
37 {
38 }
39
40 public IntermediateField this[WixSuppressActionSymbolFields index] => this.Fields[(int)index];
41
42 public SequenceTable SequenceTable
43 {
44 get => (SequenceTable)Enum.Parse(typeof(SequenceTable), (string)this.Fields[(int)WixSuppressActionSymbolFields.SequenceTable]);
45 set => this.Set((int)WixSuppressActionSymbolFields.SequenceTable, value.ToString());
46 }
47
48 public string Action
49 {
50 get => (string)this.Fields[(int)WixSuppressActionSymbolFields.Action];
51 set => this.Set((int)WixSuppressActionSymbolFields.Action, value);
52 }
53 }
54} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixSuppressModularizationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixSuppressModularizationSymbol.cs
new file mode 100644
index 00000000..dca86820
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixSuppressModularizationSymbol.cs
@@ -0,0 +1,44 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixSuppressModularization = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixSuppressModularization,
11 new IntermediateFieldDefinition[]
12 {
13 new IntermediateFieldDefinition(nameof(WixSuppressModularizationSymbolFields.SuppressIdentifier), IntermediateFieldType.String),
14 },
15 typeof(WixSuppressModularizationSymbol));
16 }
17}
18
19namespace WixToolset.Data.Symbols
20{
21 public enum WixSuppressModularizationSymbolFields
22 {
23 SuppressIdentifier,
24 }
25
26 public class WixSuppressModularizationSymbol : IntermediateSymbol
27 {
28 public WixSuppressModularizationSymbol() : base(SymbolDefinitions.WixSuppressModularization, null, null)
29 {
30 }
31
32 public WixSuppressModularizationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixSuppressModularization, sourceLineNumber, id)
33 {
34 }
35
36 public string SuppressIdentifier
37 {
38 get => (string)this.Fields[(int)WixSuppressModularizationSymbolFields.SuppressIdentifier];
39 set => this.Set((int)WixSuppressModularizationSymbolFields.SuppressIdentifier, value);
40 }
41
42 public IntermediateField this[WixSuppressModularizationSymbolFields index] => this.Fields[(int)index];
43 }
44}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixUISymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixUISymbol.cs
new file mode 100644
index 00000000..f1254952
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixUISymbol.cs
@@ -0,0 +1,36 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixUI = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixUI,
11 new IntermediateFieldDefinition[]
12 {
13 },
14 typeof(WixUISymbol));
15 }
16}
17
18namespace WixToolset.Data.Symbols
19{
20 public enum WixUISymbolFields
21 {
22 }
23
24 public class WixUISymbol : IntermediateSymbol
25 {
26 public WixUISymbol() : base(SymbolDefinitions.WixUI, null, null)
27 {
28 }
29
30 public WixUISymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixUI, sourceLineNumber, id)
31 {
32 }
33
34 public IntermediateField this[WixUISymbolFields index] => this.Fields[(int)index];
35 }
36}
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixUpdateRegistrationSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixUpdateRegistrationSymbol.cs
new file mode 100644
index 00000000..1320dfd5
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixUpdateRegistrationSymbol.cs
@@ -0,0 +1,76 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixUpdateRegistration = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixUpdateRegistration,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixUpdateRegistrationSymbolFields.Manufacturer), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixUpdateRegistrationSymbolFields.Department), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixUpdateRegistrationSymbolFields.ProductFamily), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixUpdateRegistrationSymbolFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixUpdateRegistrationSymbolFields.Classification), IntermediateFieldType.String),
18 },
19 typeof(WixUpdateRegistrationSymbol));
20 }
21}
22
23namespace WixToolset.Data.Symbols
24{
25 public enum WixUpdateRegistrationSymbolFields
26 {
27 Manufacturer,
28 Department,
29 ProductFamily,
30 Name,
31 Classification,
32 }
33
34 public class WixUpdateRegistrationSymbol : IntermediateSymbol
35 {
36 public WixUpdateRegistrationSymbol() : base(SymbolDefinitions.WixUpdateRegistration, null, null)
37 {
38 }
39
40 public WixUpdateRegistrationSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixUpdateRegistration, sourceLineNumber, id)
41 {
42 }
43
44 public IntermediateField this[WixUpdateRegistrationSymbolFields index] => this.Fields[(int)index];
45
46 public string Manufacturer
47 {
48 get => (string)this.Fields[(int)WixUpdateRegistrationSymbolFields.Manufacturer];
49 set => this.Set((int)WixUpdateRegistrationSymbolFields.Manufacturer, value);
50 }
51
52 public string Department
53 {
54 get => (string)this.Fields[(int)WixUpdateRegistrationSymbolFields.Department];
55 set => this.Set((int)WixUpdateRegistrationSymbolFields.Department, value);
56 }
57
58 public string ProductFamily
59 {
60 get => (string)this.Fields[(int)WixUpdateRegistrationSymbolFields.ProductFamily];
61 set => this.Set((int)WixUpdateRegistrationSymbolFields.ProductFamily, value);
62 }
63
64 public string Name
65 {
66 get => (string)this.Fields[(int)WixUpdateRegistrationSymbolFields.Name];
67 set => this.Set((int)WixUpdateRegistrationSymbolFields.Name, value);
68 }
69
70 public string Classification
71 {
72 get => (string)this.Fields[(int)WixUpdateRegistrationSymbolFields.Classification];
73 set => this.Set((int)WixUpdateRegistrationSymbolFields.Classification, value);
74 }
75 }
76} \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixVariableSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixVariableSymbol.cs
new file mode 100644
index 00000000..0a56dcbf
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/Symbols/WixVariableSymbol.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
3namespace WixToolset.Data
4{
5 using WixToolset.Data.Symbols;
6
7 public static partial class SymbolDefinitions
8 {
9 public static readonly IntermediateSymbolDefinition WixVariable = new IntermediateSymbolDefinition(
10 SymbolDefinitionType.WixVariable,
11 new[]
12 {
13 new IntermediateFieldDefinition(nameof(WixVariableSymbolFields.Value), IntermediateFieldType.String),
14 new IntermediateFieldDefinition(nameof(WixVariableSymbolFields.Overridable), IntermediateFieldType.Bool),
15 },
16 typeof(WixVariableSymbol));
17 }
18}
19
20namespace WixToolset.Data.Symbols
21{
22 public enum WixVariableSymbolFields
23 {
24 Value,
25 Overridable,
26 }
27
28 public class WixVariableSymbol : IntermediateSymbol
29 {
30 public WixVariableSymbol() : base(SymbolDefinitions.WixVariable, null, null)
31 {
32 }
33
34 public WixVariableSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixVariable, sourceLineNumber, id)
35 {
36 }
37
38 public IntermediateField this[WixVariableSymbolFields index] => this.Fields[(int)index];
39
40 public string Value
41 {
42 get => (string)this.Fields[(int)WixVariableSymbolFields.Value];
43 set => this.Set((int)WixVariableSymbolFields.Value, value);
44 }
45
46 public bool Overridable
47 {
48 get => (bool)this.Fields[(int)WixVariableSymbolFields.Overridable];
49 set => this.Set((int)WixVariableSymbolFields.Overridable, value);
50 }
51 }
52}
diff --git a/src/api/wix/WixToolset.Data/VerboseMessages.cs b/src/api/wix/WixToolset.Data/VerboseMessages.cs
new file mode 100644
index 00000000..8342aa5e
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/VerboseMessages.cs
@@ -0,0 +1,234 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Resources;
7
8 public static class VerboseMessages
9 {
10 public static Message BinderTempDirLocatedAt(string directory)
11 {
12 return Message(null, Ids.BinderTempDirLocatedAt, "Binder temporary directory located at '{0}'.", directory);
13 }
14
15 public static Message BundleGuid(string bundleGuid)
16 {
17 return Message(null, Ids.BundleGuid, "Assigning bundle GUID '{0}'.", bundleGuid);
18 }
19
20 public static Message CabFile(string fileId, string filePath)
21 {
22 return Message(null, Ids.CabFile, "Cabbing file {0} from '{1}'.", fileId, filePath);
23 }
24
25 public static Message CabinetsSplitInParallel()
26 {
27 return Message(null, Ids.CabinetsSplitInParallel, "Multiple Cabinets with Large Files are splitting simultaneously. This current cabinet is waiting on a shared resource and splitting will resume when the other splitting has completed.");
28 }
29
30 public static Message ConnectingMergeModule(string modulePath, string feature)
31 {
32 return Message(null, Ids.ConnectingMergeModule, "Connecting merge module '{0}' to feature '{1}'.", modulePath, feature);
33 }
34
35 public static Message CopyFile(string sourceFile, string destinationFile)
36 {
37 return Message(null, Ids.CopyFile, "Copying file '{0}' to '{1}'.", sourceFile, destinationFile);
38 }
39
40 public static Message CopyingExternalPayload(string payload, string outputDirectory)
41 {
42 return Message(null, Ids.CopyingExternalPayload, "Copying external payload from '{0}' to '{1}'.", payload, outputDirectory);
43 }
44
45 public static Message CreateCabinet(string cabinet)
46 {
47 return Message(null, Ids.CreateCabinet, "Creating cabinet '{0}'.", cabinet);
48 }
49
50 public static Message CreateDirectory(string directory)
51 {
52 return Message(null, Ids.CreateDirectory, "The directory '{0}' does not exist, creating it now.", directory);
53 }
54
55 public static Message CreatingCabinetFiles()
56 {
57 return Message(null, Ids.CreatingCabinetFiles, "Creating cabinet files.");
58 }
59
60 public static Message DecompilingTable(string tableName)
61 {
62 return Message(null, Ids.DecompilingTable, "Decompiling the {0} table.", tableName);
63 }
64
65 public static Message EmbeddingContainer(string container, long size, string compression)
66 {
67 return Message(null, Ids.EmbeddingContainer, "Embedding container '{0}' ({1} bytes) with '{2}' compression.", container, size, compression);
68 }
69
70 public static Message GeneratingBundle(string bundleFile, string stubFile)
71 {
72 return Message(null, Ids.GeneratingBundle, "Generating Burn bundle '{0}' from stub '{1}'.", bundleFile, stubFile);
73 }
74
75 public static Message GeneratingDatabase()
76 {
77 return Message(null, Ids.GeneratingDatabase, "Generating database.");
78 }
79
80 public static Message ImportBinaryStream(string streamSource)
81 {
82 return Message(null, Ids.ImportBinaryStream, "Importing binary stream from '{0}'.", streamSource);
83 }
84
85 public static Message ImportIconStream(string streamSource)
86 {
87 return Message(null, Ids.ImportIconStream, "Importing icon stream from '{0}'.", streamSource);
88 }
89
90 public static Message ImportingStreams()
91 {
92 return Message(null, Ids.ImportingStreams, "Importing streams.");
93 }
94
95 public static Message LayingOutMedia()
96 {
97 return Message(null, Ids.LayingOutMedia, "Laying out media.");
98 }
99
100 public static Message LoadingPayload(string payload)
101 {
102 return Message(null, Ids.LoadingPayload, "Loading payload '{0}' into container.", payload);
103 }
104
105 public static Message MergingMergeModule(string modulePath)
106 {
107 return Message(null, Ids.MergingMergeModule, "Merging merge module '{0}'.", modulePath);
108 }
109
110 public static Message MergingModules()
111 {
112 return Message(null, Ids.MergingModules, "Merging modules.");
113 }
114
115 public static Message MoveFile(string sourceFile, string destinationFile)
116 {
117 return Message(null, Ids.MoveFile, "Moving file '{0}' to '{1}'.", sourceFile, destinationFile);
118 }
119
120 public static Message OpeningMergeModule(string modulePath, Int16 language)
121 {
122 return Message(null, Ids.OpeningMergeModule, "Opening merge module '{0}' with language '{1}'.", modulePath, language);
123 }
124
125 public static Message RemoveDestinationFile(string destinationFile)
126 {
127 return Message(null, Ids.RemoveDestinationFile, "The destination file '{0}' already exists, attempting to remove it.", destinationFile);
128 }
129
130 public static Message ResequencingMergeModuleFiles()
131 {
132 return Message(null, Ids.ResequencingMergeModuleFiles, "Resequencing files from all merge modules.");
133 }
134
135 public static Message ResolvingManifest(string manifestFile)
136 {
137 return Message(null, Ids.ResolvingManifest, "Generating resolved manifest '{0}'.", manifestFile);
138 }
139
140 public static Message ReusingCabCache(SourceLineNumber sourceLineNumbers, string cabinetName, string source)
141 {
142 return Message(sourceLineNumbers, Ids.ReusingCabCache, "Reusing cabinet '{0}' from cabinet cache path: '{1}'.", cabinetName, source);
143 }
144
145 public static Message SetCabbingThreadCount(string threads)
146 {
147 return Message(null, Ids.SetCabbingThreadCount, "There will be '{0}' threads used to produce CAB files.", threads);
148 }
149
150 public static Message SwitchingToPerUserPackage(SourceLineNumber sourceLineNumbers, string path)
151 {
152 return Message(sourceLineNumbers, Ids.SwitchingToPerUserPackage, "Bundle switching from per-machine to per-user due to addition of per-user package '{0}'.", path);
153 }
154
155 public static Message UpdatingFileInformation()
156 {
157 return Message(null, Ids.UpdatingFileInformation, "Updating file information.");
158 }
159
160 public static Message ValidatedDatabase(long size)
161 {
162 return Message(null, Ids.ValidatedDatabase, "Validation complete: {0:N0}ms elapsed.", size);
163 }
164
165 public static Message ValidatingDatabase()
166 {
167 return Message(null, Ids.ValidatingDatabase, "Validating database.");
168 }
169
170 public static Message ValidationInfo(string ice, string message)
171 {
172 return Message(null, Ids.ValidationInfo, "{0}: {1}", ice, message);
173 }
174
175 public static Message ValidationSerialized()
176 {
177 return Message(null, Ids.ValidationSerialized, "Multiple packages cannot reliably be validated simultaneously. This validation will resume when the other package being validated has completed.");
178 }
179
180 public static Message ValidatorTempDirLocatedAt(string directory)
181 {
182 return Message(null, Ids.ValidatorTempDirLocatedAt, "Validator temporary directory located at '{0}'.", directory);
183 }
184
185 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
186 {
187 return new Message(sourceLineNumber, MessageLevel.Verbose, (int)id, format, args);
188 }
189
190 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
191 {
192 return new Message(sourceLineNumber, MessageLevel.Verbose, (int)id, resourceManager, resourceName, args);
193 }
194
195 public enum Ids
196 {
197 ImportBinaryStream = 9000,
198 ImportIconStream = 9001,
199 CopyFile = 9002,
200 MoveFile = 9003,
201 CreateDirectory = 9004,
202 RemoveDestinationFile = 9005,
203 CabFile = 9006,
204 UpdatingFileInformation = 9007,
205 GeneratingDatabase = 9008,
206 MergingModules = 9009,
207 CreatingCabinetFiles = 9010,
208 ImportingStreams = 9011,
209 LayingOutMedia = 9012,
210 DecompilingTable = 9013,
211 ValidationInfo = 9014,
212 CreateCabinet = 9015,
213 ValidatingDatabase = 9016,
214 OpeningMergeModule = 9017,
215 MergingMergeModule = 9018,
216 ConnectingMergeModule = 9019,
217 ResequencingMergeModuleFiles = 9020,
218 BinderTempDirLocatedAt = 9021,
219 ValidatorTempDirLocatedAt = 9022,
220 GeneratingBundle = 9023,
221 ResolvingManifest = 9024,
222 LoadingPayload = 9025,
223 BundleGuid = 9026,
224 CopyingExternalPayload = 9027,
225 EmbeddingContainer = 9028,
226 SwitchingToPerUserPackage = 9029,
227 SetCabbingThreadCount = 9030,
228 ValidationSerialized = 9031,
229 ReusingCabCache = 9032,
230 CabinetsSplitInParallel = 9033,
231 ValidatedDatabase = 9034,
232 }
233 }
234}
diff --git a/src/api/wix/WixToolset.Data/WarningMessages.cs b/src/api/wix/WixToolset.Data/WarningMessages.cs
new file mode 100644
index 00000000..78ed87af
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WarningMessages.cs
@@ -0,0 +1,816 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Resources;
7
8 public static class WarningMessages
9 {
10 public static Message AccessDeniedForDeletion(SourceLineNumber sourceLineNumbers, string tempFilesBasePath)
11 {
12 return Message(sourceLineNumbers, Ids.AccessDeniedForDeletion, "Access denied; cannot delete '{0}'.", tempFilesBasePath);
13 }
14
15 public static Message AccessDeniedForSettingAttributes(SourceLineNumber sourceLineNumbers, string filePath)
16 {
17 return Message(sourceLineNumbers, Ids.AccessDeniedForSettingAttributes, "Access denied; cannot set attributes on '{0}'.", filePath);
18 }
19
20 public static Message ActionSequenceCollision(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName1, string actionName2, int sequenceNumber)
21 {
22 return Message(sourceLineNumbers, Ids.ActionSequenceCollision, "The {0} table contains actions '{1}' and '{2}' which both have the same sequence number {3}. Please change the sequence number for one of these actions to avoid an ICE warning.", sequenceTableName, actionName1, actionName2, sequenceNumber);
23 }
24
25 public static Message ActionSequenceCollision2(SourceLineNumber sourceLineNumbers)
26 {
27 return Message(sourceLineNumbers, Ids.ActionSequenceCollision2, "The location of the action related to previous warning.");
28 }
29
30 public static Message AllChangesIncludedInPatch(SourceLineNumber sourceLineNumbers)
31 {
32 return Message(sourceLineNumbers, Ids.AllChangesIncludedInPatch, "All changes between the baseline and upgraded packages will be included in the patch except for any change to the ProductCode. The 'All' element is supported primarily for testing purposes and negates the benefits of patch families.");
33 }
34
35 public static Message AmbiguousFileOrDirectoryName(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
36 {
37 return Message(sourceLineNumbers, Ids.AmbiguousFileOrDirectoryName, "The {0}/@{1} attribute's value '{2}' is an ambiguous short name because it ends with a '~' character followed by a number. Under some circumstances, this name could resolve to more than one file or directory name and lead to unpredictable results (for example 'MICROS~1' may correspond to 'Microsoft Shared' or 'Microsoft Foo' or literally 'Micros~1').", elementName, attributeName, value);
38 }
39
40 public static Message AttributeShouldContain(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string attributeValue, string expectedContains, string otherAttributeName, string otherAttributeValue)
41 {
42 return Message(sourceLineNumbers, Ids.AttributeShouldContain, "The {0}/@{1} attribute value '{2}' should contain '{3}' when the {0}/@{4} attribute is set to '{5}'.", elementName, attributeName, attributeValue, expectedContains, otherAttributeName, otherAttributeValue);
43 }
44
45 public static Message BackslashTerminateInlineDirectorySyntax(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
46 {
47 return Message(sourceLineNumbers, Ids.BackslashTerminateInlineDirectorySyntax, "Backslash terminate the {0}/@{1} attribute's inline directory value '{2}'. A backslash ensures a directory name will not be mistaken for a directory reference.", elementName, attributeName, value);
48 }
49
50 public static Message BadColumnDataIgnored(SourceLineNumber sourceLineNumbers, string value, string tableName, string columnName)
51 {
52 return Message(sourceLineNumbers, Ids.BadColumnDataIgnored, "The value '{0}' in table '{1}', column '{2}' is invalid according to the column's validation information. The decompiled output includes a best-effort representation of this value.", value, tableName, columnName);
53 }
54
55 public static Message CannotUpdateCabCache(SourceLineNumber sourceLineNumbers, string cabinetPath, string detail)
56 {
57 return Message(sourceLineNumbers, Ids.CannotUpdateCabCache, "Cannot update the timestamp of cached cabinet: '{0}'. If the timestamp is not updated, the build may rebuild more than is necessary. To fix the issue, ensure that the cabinet file is writable, error: {1}", cabinetPath, detail);
58 }
59
60 public static Message ColumnsIncompatibleWithInstallerVersion(SourceLineNumber sourceLineNumbers, string tableName, int productInstallerVersion)
61 {
62 return Message(sourceLineNumbers, Ids.ColumnsIncompatibleWithInstallerVersion, "Table '{0}' uses columns that require a version of Windows Installer greater than specified in your package ('{1}').", tableName, productInstallerVersion);
63 }
64
65 public static Message CopyFileFileIdUseless(SourceLineNumber sourceLineNumbers)
66 {
67 return Message(sourceLineNumbers, Ids.CopyFileFileIdUseless, "Since the CopyFile/@FileId attribute was specified but none of the following attributes (DestinationName, DestinationDirectory, DestinationProperty) were specified, this authoring will not do anything.");
68 }
69
70 public static Message DangerousTableInMergeModule(SourceLineNumber sourceLineNumbers, string tableName)
71 {
72 return Message(sourceLineNumbers, Ids.DangerousTableInMergeModule, "Merge modules should not contain the '{0}' table because all merge conflicts cannot avoided. However, this warning can be suppressed if all of the consumers of the Merge Module agree to not duplicate identifiers in the '{0}' table.", tableName);
73 }
74
75 public static Message DecompiledStandardActionRelativelyScheduledInModule(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
76 {
77 return Message(sourceLineNumbers, Ids.DecompiledStandardActionRelativelyScheduledInModule, "The {0} table contains a standard action '{1}' that does not have a sequence number specified. A value in the Sequence column is required for standard actions in a merge module. Remove the action from the decompiled authoring to have WiX automatically sequence it.", sequenceTableName, actionName);
78 }
79
80 public static Message DecompilingAsCustomTable(SourceLineNumber sourceLineNumbers, string tableName)
81 {
82 return Message(sourceLineNumbers, Ids.DecompilingAsCustomTable, "The {0} table is being decompiled as a custom table.", tableName);
83 }
84
85 public static Message DefaultLanguageUsedForUnversionedFile(SourceLineNumber sourceLineNumbers, string language, string fileId)
86 {
87 return Message(sourceLineNumbers, Ids.DefaultLanguageUsedForUnversionedFile, "The DefaultLanguage '{0}' was used for file '{1}' which has no language or version. For unversioned files, specifying a value for DefaultLanguage is not neccessary and it will not be used when determining file versions. Remove the DefaultLanguage attribute to eliminate this warning.", language, fileId);
88 }
89
90 public static Message DefaultLanguageUsedForVersionedFile(SourceLineNumber sourceLineNumbers, string language, string fileId)
91 {
92 return Message(sourceLineNumbers, Ids.DefaultLanguageUsedForVersionedFile, "The DefaultLanguage '{0}' was used for file '{1}' which has no language. Specifying a language that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Either specify a value for DefaultLanguage or put the language in the version information resource to eliminate this warning.", language, fileId);
93 }
94
95 public static Message DefaultVersionUsedForUnversionedFile(SourceLineNumber sourceLineNumbers, string version, string fileId)
96 {
97 return Message(sourceLineNumbers, Ids.DefaultVersionUsedForUnversionedFile, "The DefaultVersion '{0}' was used for file '{1}' which has no version. No entry for this file will be placed in the MsiFileHash table. For unversioned files, specifying a version that is different from the actual file may result in unexpected versioning behavior during a repair or while patching. Version the resource to eliminate this warning.", version, fileId);
98 }
99
100 public static Message DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
101 {
102 return Message(sourceLineNumbers, Ids.DeprecatedAttribute, "The {0}/@{1} attribute has been deprecated.", elementName, attributeName);
103 }
104
105 public static Message DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string newAttributeName)
106 {
107 return Message(sourceLineNumbers, Ids.DeprecatedAttribute, "The {0}/@{1} attribute has been deprecated. Please use the {2} attribute instead.", elementName, attributeName, newAttributeName);
108 }
109
110 public static Message DeprecatedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string newAttributeName1, string newAttributeName2)
111 {
112 return Message(sourceLineNumbers, Ids.DeprecatedAttribute, "The {0}/@{1} attribute has been deprecated. Please use the {2} or {3} attribute instead.", elementName, attributeName, newAttributeName1, newAttributeName2);
113 }
114
115 public static Message DeprecatedAttributeValue(SourceLineNumber sourceLineNumbers, string attributeValue, string elementName, string attributeName)
116 {
117 return Message(sourceLineNumbers, Ids.DeprecatedAttributeValue, "The value \"{0}\" for the {1}/@{2} attribute has been deprecated. Remove the attribute.", attributeValue, elementName, attributeName);
118 }
119
120 public static Message DeprecatedAttributeValue(SourceLineNumber sourceLineNumbers, string attributeValue, string elementName, string attributeName, string newAttributeValue)
121 {
122 return Message(sourceLineNumbers, Ids.DeprecatedAttributeValue, "The value \"{0}\" for the {1}/@{2} attribute has been deprecated. Please use \"{3}\" instead.", attributeValue, elementName, attributeName, newAttributeValue);
123 }
124
125 public static Message DeprecatedCommandLineSwitch(string oldSwitch)
126 {
127 return Message(null, Ids.DeprecatedCommandLineSwitch, "The command line switch '{0}' is deprecated.", oldSwitch);
128 }
129
130 public static Message DeprecatedCommandLineSwitch(string oldSwitch, string newSwitch)
131 {
132 return Message(null, Ids.DeprecatedCommandLineSwitch, "The command line switch '{0}' is deprecated. Please use '{1}' instead.", oldSwitch, newSwitch);
133 }
134
135 public static Message DeprecatedComponentGroupId(SourceLineNumber sourceLineNumbers, string elementName)
136 {
137 return Message(sourceLineNumbers, Ids.DeprecatedComponentGroupId, "The {0}/@Id attribute contains invalid characters for an identifier. Being able to use invalid identifier characters for a {0} identifier has been deprecated.", elementName);
138 }
139
140 public static Message DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName)
141 {
142 return Message(sourceLineNumbers, Ids.DeprecatedElement, "The {0} element has been deprecated.", elementName);
143 }
144
145 public static Message DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName, string newElementName)
146 {
147 return Message(sourceLineNumbers, Ids.DeprecatedElement, "The {0} element has been deprecated. Please use the {1} element instead.", elementName, newElementName);
148 }
149
150 public static Message DeprecatedElement(SourceLineNumber sourceLineNumbers, string elementName, string newElementName1, string newElementName2)
151 {
152 return Message(sourceLineNumbers, Ids.DeprecatedElement, "The {0} element has been deprecated. Please use the {1} or {2} element instead.", elementName, newElementName1, newElementName2);
153 }
154
155 public static Message DeprecatedIgnoreModularizationElement(SourceLineNumber sourceLineNumbers)
156 {
157 return Message(sourceLineNumbers, Ids.DeprecatedIgnoreModularizationElement, "The IgnoreModularization element has been deprecated. Use the Binary/@SuppressModularization, CustomAction/@SuppressModularization, or Property/@SuppressModularization attribute instead.");
158 }
159
160 public static Message DeprecatedLocalizationVariablePrefix(SourceLineNumber sourceLineNumbers, string variableId)
161 {
162 return Message(sourceLineNumbers, Ids.DeprecatedLocalizationVariablePrefix, "The localization variable $(loc.{0}) uses a deprecated prefix '$'. Please use the '!' prefix instead. Since the prefix '$' is also used by the preprocessor, it has been deprecated to avoid namespace collisions.", variableId);
163 }
164
165 public static Message DeprecatedLongNameAttribute(SourceLineNumber sourceLineNumbers, string elementName, string longNameAttributeName, string nameAttributeName, string shortNameAttributeName)
166 {
167 return Message(sourceLineNumbers, Ids.DeprecatedLongNameAttribute, "The {0}/@{1} attribute has been deprecated. Since WiX now has the ability to generate short file/directory names, the desired name should be specified in the {2} attribute instead. If the name specified in the {2} attribute is a short name, then WiX will not generate a short name. If the name specified in the {2} attribute is a long name and you want to manually specify the short name, please set the short name value in the {3} attribute.", elementName, longNameAttributeName, nameAttributeName, shortNameAttributeName);
168 }
169
170 public static Message DeprecatedPatchSequenceTargetAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
171 {
172 return Message(sourceLineNumbers, Ids.DeprecatedPatchSequenceTargetAttribute, "The {0}/@{1} attribute has been deprecated in favor of the more strongly-typed ProductCode or TargetImage attributes. Please use the ProductCode attribute for indicating the ProductCode of a patch family directly, or the TargetImage attribute to specify the TargetImage which in turn will retrieve the ProductCode of the patch family.", elementName, attributeName);
173 }
174
175 public static Message DeprecatedPreProcVariable(SourceLineNumber sourceLineNumbers, string oldName, string newName)
176 {
177 return Message(sourceLineNumbers, Ids.DeprecatedPreProcVariable, "The built-in preprocessor variable '{0}' is deprecated. Please correct your authoring to use the new '{1}' preprocessor variable instead.", oldName, newName);
178 }
179
180 public static Message DeprecatedQuestionMarksGuid(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
181 {
182 return Message(sourceLineNumbers, Ids.DeprecatedQuestionMarksGuid, "The {0}/@{1} attribute's value '????????-????-????-????-????????????' has been deprecated. Use '*' instead.", elementName, attributeName);
183 }
184
185 public static Message DeprecatedRegistryElement(SourceLineNumber sourceLineNumbers)
186 {
187 return Message(sourceLineNumbers, Ids.DeprecatedRegistryElement, "The Registry element has been deprecated. Please use one of the new elements which replaces its functionality: RegistryKey for creating registry keys, RegistryValue for writing registry values, RemoveRegistryKey for removing registry keys, and RemoveRegistryValue for removing registry values.");
188 }
189
190 public static Message DeprecatedRegistryKeyActionAttribute(SourceLineNumber sourceLineNumbers)
191 {
192 return Message(sourceLineNumbers, Ids.DeprecatedRegistryKeyActionAttribute, "The RegistryKey/@Action attribute has been deprecated. In most cases, you can simply omit @Action. If you need to force Windows Installer to create an empty key or recursively delete the key, use the ForceCreateOnInstall or ForceDeleteOnUninstall attributes instead.");
193 }
194
195 public static Message DeprecatedTable(string tableName)
196 {
197 return Message(null, Ids.DeprecatedTable, "The {0} table is not supported by the WiX toolset because it has been deprecated by the Windows Installer team. Any information in this table will be left out of the decompiled output.", tableName);
198 }
199
200 public static Message DeprecatedUpgradeProperty(SourceLineNumber sourceLineNumbers)
201 {
202 return Message(sourceLineNumbers, Ids.DeprecatedUpgradeProperty, "Specifying a Property element as a child of an Upgrade element has been deprecated. Please specify this Property element as a child of a different element such as Product or Fragment.");
203 }
204
205 public static Message DirectoryInUse(SourceLineNumber sourceLineNumbers, string filePath)
206 {
207 return Message(sourceLineNumbers, Ids.DirectoryInUse, "The directory '{0}' is in use and cannot be deleted.", filePath);
208 }
209
210 public static Message DirectoryRedundantNames(SourceLineNumber sourceLineNumbers, string elementName, string shortNameAttributeName, string longNameAttributeName, string attributeValue)
211 {
212 return Message(sourceLineNumbers, Ids.DirectoryRedundantNames, "The {0} element's {1} and {2} values are both '{3}'. This is redundant; the {2} attribute should be removed.", elementName, shortNameAttributeName, longNameAttributeName, attributeValue);
213 }
214
215 public static Message DirectoryRedundantNames(SourceLineNumber sourceLineNumbers, string elementName, string sourceNameAttributeName, string longSourceAttributeName)
216 {
217 return Message(sourceLineNumbers, Ids.DirectoryRedundantNames, "The {0} element's source and destination names are identical. This is redundant; the {1} and {2} attributes should be removed if present.", elementName, sourceNameAttributeName, longSourceAttributeName);
218 }
219
220 public static Message DiscardedRollbackBoundary(SourceLineNumber sourceLineNumbers, string rollbackBoundaryId)
221 {
222 return Message(sourceLineNumbers, Ids.DiscardedRollbackBoundary, "The RollbackBoundary '{0}' was discarded because it was not followed by a package. Without a package the rollback boundary doesn't do anything. Verify that the RollbackBoundary element is not followed by another RollbackBoundary and that the element is not at the end of the chain.", rollbackBoundaryId);
223 }
224
225 public static Message DiscouragedAllUsersValue(SourceLineNumber sourceLineNumbers, string path, string machineOrUser)
226 {
227 return Message(sourceLineNumbers, Ids.DiscouragedAllUsersValue, "Bundles require a package to be either per-machine or per-user. The MSI '{0}' ALLUSERS Property is set to '2' which may change from per-user to per-machine at install time. The Bundle will assume the package is per-{1} and will not work correctly if that changes. If possible, remove the Property with Id='ALLUSERS' and use Package/@InstallScope attribute instead.", path, machineOrUser);
228 }
229
230 public static Message DetectConditionRecommended(SourceLineNumber sourceLineNumbers, string elementName)
231 {
232 return Message(sourceLineNumbers, Ids.DetectConditionRecommended, "The {0}/@DetectCondition attribute is recommended so the package is only installed when absent.", elementName);
233 }
234
235 public static Message DownloadUrlNotSupportedForAttachedContainers(SourceLineNumber sourceLineNumbers, string containerId)
236 {
237 return Message(sourceLineNumbers, Ids.DownloadUrlNotSupportedForAttachedContainers, "The Container '{0}' is attached but included a @DownloadUrl attribute. Attached Containers cannot be downloaded so the download URL is being ignored.", containerId);
238 }
239
240 public static Message DownloadUrlNotSupportedForBAPayloads(SourceLineNumber sourceLineNumbers, string payloadId)
241 {
242 return Message(sourceLineNumbers, Ids.DownloadUrlNotSupportedForBAPayloads, "The BootstrapperApplication Payload '{0}' included a @DownloadUrl attribute. BootstrapperApplication Payloads cannot be downloaded so the download URL is being ignored.", payloadId);
243 }
244
245 public static Message DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(SourceLineNumber sourceLineNumbers, string componentId, string guid, string type, string keyPath)
246 {
247 return Message(sourceLineNumbers, Ids.DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions, "Component/@Id='{0}' with {2} '{3}' has a @Guid value '{1}' that duplicates another component in this package. This is not officially supported by Windows Installer and cannot be used when creating patches. It otherwise works as long as all components with the same GUID have mutually-exclusive conditions. It is recommended to give each component its own unique GUID.", componentId, guid, type, keyPath);
248 }
249
250 public static Message DuplicatePrimaryKey(SourceLineNumber sourceLineNumbers, string primaryKey, string tableName)
251 {
252 return Message(sourceLineNumbers, Ids.DuplicatePrimaryKey, "The primary key '{0}' is duplicated in table '{1}' and will be ignored. Please remove one of the entries or rename a part of the primary key to avoid the collision.", primaryKey, tableName);
253 }
254
255 public static Message EmptyAttributeValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
256 {
257 return Message(sourceLineNumbers, Ids.EmptyAttributeValue, "The {0}/@{1} attribute's value cannot be an empty string. If you want the value to be null or empty, simply remove the entire attribute.", elementName, attributeName);
258 }
259
260 public static Message EmptyCabinet(SourceLineNumber sourceLineNumbers, string cabinetName)
261 {
262 return Message(sourceLineNumbers, Ids.EmptyCabinet, "The cabinet '{0}' does not contain any files. If this installation contains no files, this warning can likely be safely ignored. Otherwise, please add files to the cabinet or remove it.", cabinetName);
263 }
264
265 public static Message EmptyCabinet(SourceLineNumber sourceLineNumbers, string cabinetName, Boolean isPatch)
266 {
267 return Message(sourceLineNumbers, Ids.EmptyCabinet, "The cabinet '{0}' does not contain any files. If this patch contains no files, this warning can likely be safely ignored. Otherwise, try passing -p to torch.exe when first building the transforms, or add a ComponentRef to your PatchFamily authoring to pull changed files into the cabinet.", cabinetName, isPatch);
268 }
269
270 public static Message ExpectedForeignRow(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, string columnName, string columnValue, string foreignTableName)
271 {
272 return Message(sourceLineNumbers, Ids.ExpectedForeignRow, "The {0} table contains a row with primary key(s) '{1}' whose {2} column contains a value, '{3}', which specifies a foreign key relationship with the {4} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.", tableName, primaryKey, columnName, columnValue, foreignTableName);
273 }
274
275 public static Message ExpectedForeignRow(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, string columnName1, string columnValue1, string columnName2, string columnValue2, string foreignTableName)
276 {
277 return Message(sourceLineNumbers, Ids.ExpectedForeignRow, "The {0} table contains a row with primary key(s) '{1}' whose {2} and {4} columns contain the values, '{3}' and '{5}', which specify a foreign key relationship with the {6} table. However, since the expected foreign row specified by this value does not exist, this will result in some information being left out of the decompiled output.", tableName, primaryKey, columnName1, columnValue1, columnName2, columnValue2, foreignTableName);
278 }
279
280 public static Message ExperimentalBundlePlatform(string platform)
281 {
282 return Message(null, Ids.ExperimentalBundlePlatform, "The platform {0} is experimental for bundles. Use the x86 platform instead.", platform);
283 }
284
285 public static Message ExternalCabsAreNotSigned(string databaseFile)
286 {
287 return Message(null, Ids.ExternalCabsAreNotSigned, "The installer database '{0}' has external cabs, but at least one of them is not signed. Please ensure that all external cabs are signed, if you mean to sign them. If you don't mean to sign them, there is no need to run the insignia tool as part of your build.", databaseFile);
288 }
289
290 public static Message FailedToDeleteTempDir(string directory)
291 {
292 return Message(null, Ids.FailedToDeleteTempDir, "Failed to delete temporary directory: {0}", directory);
293 }
294
295 public static Message FileSearchFileNameIssue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
296 {
297 return Message(sourceLineNumbers, Ids.FileSearchFileNameIssue, "The {0} element's {1} and {2} attributes were found. Due to a bug with the Windows Installer, only the Name or LongName attribute should be used. Use the Name attribute for 8.3 compliant file names and the LongName attribute for longer ones. When using only the LongName attribute, ICE03 should be ignored for the Signature table's FileName column.", elementName, attributeName1, attributeName2);
298 }
299
300 public static Message GeneratedShortFileNameConflict(SourceLineNumber sourceLineNumbers, string shortFileName)
301 {
302 return Message(sourceLineNumbers, Ids.GeneratedShortFileNameConflict, "The short file name '{0}' was generated for multiple files that may be installed to the same directory. This could be due to conflicting long file names specified by the File/@Name attribute. If that is the case, please resolve the conflict in those attributes. Otherwise, please manually set the File/@ShortName attribute on the conflicting row to fix the collision. If one of the colliding files was added via a patch, that short file name should be specified manually to avoid disturbing the original short file name.", shortFileName);
303 }
304
305 public static Message GeneratedShortFileNameConflict2(SourceLineNumber sourceLineNumbers)
306 {
307 return Message(sourceLineNumbers, Ids.GeneratedShortFileNameConflict2, "The location of a conflicting generated short file name related to the previous warning.");
308 }
309
310 public static Message IdentifierCannotBeModularized(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string identifier, int length, int maximumLength)
311 {
312 return Message(sourceLineNumbers, Ids.IdentifierCannotBeModularized, "The {0}/@{1} attribute's value, '{2}', is {3} characters long. It will be too long if modularized. The identifier shouldn't be longer than {4} characters long to allow for modularization (appending a guid for merge modules).", elementName, attributeName, identifier, length, maximumLength);
313 }
314
315 public static Message IdentifierTooLong(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
316 {
317 return Message(sourceLineNumbers, Ids.IdentifierTooLong, "The {0}/@{1} attribute's value, '{2}', is too long for an identifier. Standard identifiers are 72 characters long or less.", elementName, attributeName, value);
318 }
319
320 public static Message IllegalActionInSequence(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
321 {
322 return Message(sourceLineNumbers, Ids.IllegalActionInSequence, "The {0} table contains an action '{1}' which is not allowed in this table. If this is a standard action then it is not valid for this table, if it is a custom action or dialog then this table does not accept actions of that type. This action will be left out of the decompiled output.", sequenceTableName, actionName);
323 }
324
325 public static Message IllegalColumnValue(SourceLineNumber sourceLineNumbers, string tableName, string columnName, Object value)
326 {
327 return Message(sourceLineNumbers, Ids.IllegalColumnValue, "The {0}.{1} column's value, '{2}', is not a recognized legal value. This information will be left out of the decompiled output.", tableName, columnName, value);
328 }
329
330 public static Message IllegalPatchCreationTable(SourceLineNumber sourceLineNumbers, string tableName)
331 {
332 return Message(sourceLineNumbers, Ids.IllegalPatchCreationTable, "The {0} table is not legal in a patch creation file. The information in this table will be left out of the decompiled output.", tableName);
333 }
334
335 public static Message IllegalRegistryKeyPath(SourceLineNumber sourceLineNumbers, string componentName, string registryId)
336 {
337 return Message(sourceLineNumbers, Ids.IllegalRegistryKeyPath, "Component '{0}' specifies an illegal registry keypath of '{1}'. Since this entry actually represents a registry key, not a registry value, it cannot be the keypath.", componentName, registryId);
338 }
339
340 public static Message ImplicitComponentPrimaryFeature(string componentId)
341 {
342 return Message(null, Ids.ImplicitComponentPrimaryFeature, "The component '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the ComponentRef/@Primary, ComponentGroupRef/@Primary, or FeatureGroupRef/@Primary locations for this component.", componentId);
343 }
344
345 public static Message ImplicitlyPerUser(SourceLineNumber sourceLineNumbers, string path)
346 {
347 return Message(sourceLineNumbers, Ids.ImplicitlyPerUser, "The MSI '{0}' does not explicitly indicate that it is a per-user package even though the ALLUSERS Property is blank. This suggests a per-user package so the Bundle will assume the package is per-user. If possible, use the Package/@InstallScope attribute to be explicit instead.", path);
348 }
349
350 public static Message ImplicitMergeModulePrimaryFeature(string componentId)
351 {
352 return Message(null, Ids.ImplicitMergeModulePrimaryFeature, "The merge module '{0}' does not have an explicit primary feature parent specified. If the source files are linked in a different order, the primary parent feature may change. To prevent accidental changes, the primary feature parent should be set to 'yes' in one of the MergeRef/@Primary or FeatureGroupRef/@Primary locations for this component.", componentId);
353 }
354
355 public static Message InsufficientPermissionHarvestTypeLib()
356 {
357 return Message(null, Ids.InsufficientPermissionHarvestTypeLib, "Not enough permissions to harvest type library. On Windows Vista, you must either run Heat elevated, or install Windows Vista SP1 (or higher).");
358 }
359
360 public static Message InvalidAttributeCombination(SourceLineNumber sourceLineNumbers, string attrib1, string attrib2, string name, string value)
361 {
362 return Message(sourceLineNumbers, Ids.InvalidAttributeCombination, "It is invalid to combine attributes {0} and {1}. The decompiled output will set attribute {2} to {3}.", attrib1, attrib2, name, value);
363 }
364
365 public static Message InvalidHigherInstallerVersionInModule(SourceLineNumber sourceLineNumbers, string moduleId, int moduleInstallerVersion, int productInstallerVersion)
366 {
367 return Message(sourceLineNumbers, Ids.InvalidHigherInstallerVersionInModule, "Merge module '{0}' has an installer version of {1} which is greater than the product's installer version of {2}. Merging a module with a higher installer version than the product it is being merged into can result in invalid values in the resulting msi. You must set the Package/@InstallerVersion attribute to {1} or greater to merge this merge module into your product.", moduleId, moduleInstallerVersion, productInstallerVersion);
368 }
369
370 public static Message InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version)
371 {
372 return Message(sourceLineNumbers, Ids.InvalidModuleOrBundleVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", moduleOrBundle, version);
373 }
374
375 public static Message InvalidRemoveFile(SourceLineNumber sourceLineNumbers, string file, string component)
376 {
377 return Message(sourceLineNumbers, Ids.InvalidRemoveFile, "File '{0}' was removed from component '{1}'. Removing a file from a component will not result in the file being removed by a patch. You should author a RemoveFile element in your component to remove the file from the installation if you want the file to be removed.", file, component);
378 }
379
380 public static Message MajorUpgradePatchNotRecommended()
381 {
382 return Message(null, Ids.MajorUpgradePatchNotRecommended, "Changing the ProductCode in a patch is not recommended because the patch cannot be uninstalled nor can it be sequenced along with other patches for the target product. See http://msdn2.microsoft.com/library/aa367571.aspx for more information.");
383 }
384
385 public static Message MediaExternalCabinetFilenameIllegal(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
386 {
387 return Message(sourceLineNumbers, Ids.MediaExternalCabinetFilenameIllegal, "The {0}/@{1} attribute's value, '{2}', is not a valid external cabinet name. Legal cabinet names should follow 8.3 format: they should contain no more than 8 characters followed by an optional extension of no more than 3 characters. Any character except for the following may be used: \\ ? | > < : / * \" + , ; = [ ] (space). The Windows Installer team has recommended following the 8.3 format for external cabinet files and any other naming scheme is officially unsupported (which means it is not guaranteed to work on all platforms).", elementName, attributeName, value);
388 }
389
390 public static Message MergeRescheduledAction(SourceLineNumber sourceLineNumbers, string tableName, string actionName, string mergeModuleFile)
391 {
392 return Message(sourceLineNumbers, Ids.MergeRescheduledAction, "The {0} table contains an action '{1}' which cannot be merged from the merge module '{2}'. This action is likely colliding with an action in the database that is being created. The colliding action may have been authored in the database or merged in from another merge module. If this is a standard action, it is likely colliding due to a difference in the condition for the action in the database and merge module. If this is a custom action, it should only be declared in the database or one merge module.", tableName, actionName, mergeModuleFile);
393 }
394
395 public static Message MergeTableFailed(SourceLineNumber sourceLineNumbers, string tableName, string primaryKeys, string mergeModuleFile)
396 {
397 return Message(sourceLineNumbers, Ids.MergeTableFailed, "The {0} table contains a row with primary key(s) '{1}' which cannot be merged from the merge module '{2}'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.", tableName, primaryKeys, mergeModuleFile);
398 }
399
400 public static Message MissingUpgradeCode(SourceLineNumber sourceLineNumbers)
401 {
402 return Message(sourceLineNumbers, Ids.MissingUpgradeCode, "The Product/@UpgradeCode attribute was not found; it is strongly recommended to ensure that this product can be upgraded.");
403 }
404
405 public static Message MsiTransactionLimitations(SourceLineNumber sourceLineNumbers)
406 {
407 return Message(sourceLineNumbers, Ids.MsiTransactionLimitations, "MSI transactions have limitations that make it hard to use them successfully in a bundle. Test the bundle thoroughly, especially in upgrade scenarios and the scenario that required them in the first place.");
408 }
409
410 public static Message NestedInstall(SourceLineNumber sourceLineNumbers, string tableName, string columnName, Object value)
411 {
412 return Message(sourceLineNumbers, Ids.NestedInstall, "The {0}.{1} column's value, '{2}', indicates a nested install. Nested installations are not supported by the WiX team. This action will be left out of the decompiled output.", tableName, columnName, value);
413 }
414
415 public static Message NewComponentAddedToExistingFeature(SourceLineNumber sourceLineNumbers, string component, string feature, string transformPath)
416 {
417 return Message(sourceLineNumbers, Ids.NewComponentAddedToExistingFeature, "Component '{0}' was added to feature '{1}' in the transform '{2}'. If you cannot guarantee that this feature will always be installed, you should consider adding new components to new top-level features to prevent prompts for source when installing this patch.", component, feature, transformPath);
418 }
419
420 public static Message NoPerMachineDependencies(SourceLineNumber sourceLineNumbers, string packageId)
421 {
422 return Message(sourceLineNumbers, Ids.NoPerMachineDependencies, "Bundle dependencies will not be registered on per-machine package '{0}' for a per-user bundle. Either make sure that all packages are installed per-machine, or author any per-machine dependencies as permanent packages.", packageId);
423 }
424
425 public static Message NotABinaryWixlib(string wixlib)
426 {
427 return Message(null, Ids.NotABinaryWixlib, "'{0}' is not a binary Wixlib and has no embedded files.", wixlib);
428 }
429
430 public static Message NullMsiAssemblyNameValue(SourceLineNumber sourceLineNumbers, string componentName, string name)
431 {
432 return Message(sourceLineNumbers, Ids.NullMsiAssemblyNameValue, "The assembly in component '{0}' has a null or empty {1} assembly name value.", componentName, name);
433 }
434
435 public static Message OrphanedProgId(SourceLineNumber sourceLineNumbers, string progId)
436 {
437 return Message(sourceLineNumbers, Ids.OrphanedProgId, "ProgId '{0}' is orphaned. It has no associated component, so it will never install. Every ProgId should have either a parent Class element or child Extension element (at any distance).", progId);
438 }
439
440 public static Message PackageCodeSet(SourceLineNumber sourceLineNumbers)
441 {
442 return Message(sourceLineNumbers, Ids.PackageCodeSet, "The Package/@Id attribute has been set. Setting this attribute will allow nonidentical .msi files to have the same package code. This may be a problem because the package code is the primary identifier used by the installer to search for and validate the correct package for a given installation. If a package is changed without changing the package code, the installer may not use the newer package if both are still accessible to the installer. Please remove the Id attribute in order to automatically generate a new package code for each new .msi file.");
443 }
444
445 public static Message PatchTable(SourceLineNumber sourceLineNumbers, string tableName)
446 {
447 return Message(sourceLineNumbers, Ids.PatchTable, "The {0} table is added to the install package by a transform from a patch package (.msp) and not authored directly into an install package (.msi). The information in this table will be left out of the decompiled output.", tableName);
448 }
449
450 public static Message PathCanonicalized(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string originalValue, string canonicalValue)
451 {
452 return Message(sourceLineNumbers, Ids.PathCanonicalized, "The {0}/@{1} attribute's value, '{2}', has been canonicalized to '{3}'.", elementName, attributeName, originalValue, canonicalValue);
453 }
454
455 public static Message PerUserButForcingPerMachine(SourceLineNumber sourceLineNumbers, string path)
456 {
457 return Message(sourceLineNumbers, Ids.PerUserButForcingPerMachine, "The MSI '{0}' is a per-user package being forced to per-machine. Verify that the MsiPackage/@ForcePerMachine attribute is expected and that the per-user package works correctly when forced to install per-machine.", path);
458 }
459
460 public static Message PlaceholderValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value)
461 {
462 return Message(sourceLineNumbers, Ids.PlaceholderValue, "The {0}/@{1} attribute's value, '{2}', is a placeholder value used in example files. Please replace this placeholder with the appropriate value.", elementName, attributeName, value);
463 }
464
465 public static Message PossiblyIncorrectTypelibVersion(SourceLineNumber sourceLineNumbers, string id)
466 {
467 return Message(sourceLineNumbers, Ids.PossiblyIncorrectTypelibVersion, "The Typelib table entry with Id '{0}' could have an incorrect version of '256.0'. InstallShield has a bug relating to the Typelib Version column: it will incorrectly set the value '65536' in to represent version '1.0'. However, this number actually corresponds to version '256.0'. This bug will not affect the typelib version that is registered during installation, however, it will prevent the Windows Installer from correctly identifying whether a typelib is already installed and lead to unnecessary reinstallations of the typelib.", id);
468 }
469
470 public static Message PreprocessorUnknownPragma(SourceLineNumber sourceLineNumbers, string pragmaName)
471 {
472 return Message(sourceLineNumbers, Ids.PreprocessorUnknownPragma, "The pragma '{0}' is unknown. Please ensure you have referenced the extension that defines this pragma.", pragmaName);
473 }
474
475 public static Message PreprocessorWarning(SourceLineNumber sourceLineNumbers, string message)
476 {
477 return Message(sourceLineNumbers, Ids.PreprocessorWarning, "{0}", message);
478 }
479
480 public static Message ProductIdAuthored(SourceLineNumber sourceLineNumbers)
481 {
482 return Message(sourceLineNumbers, Ids.ProductIdAuthored, "The 'ProductID' property should not be directly authored because it will prevent the ValidateProductID standard action from performing any validation during the installation. This property will be set by the ValidateProductID standard action or control event.");
483 }
484
485 public static Message PropertyModularizationSuppressed(SourceLineNumber sourceLineNumbers)
486 {
487 return Message(sourceLineNumbers, Ids.PropertyModularizationSuppressed, "The Property/@SuppressModularization attribute has been set to 'yes'. Using this functionality is strongly discouraged; it should only be necessary as a workaround of last resort in rare scenarios.");
488 }
489
490 public static Message PropertyUseless(SourceLineNumber sourceLineNumbers, string id)
491 {
492 return Message(sourceLineNumbers, Ids.PropertyUseless, "Property '{0}' does not contain a Value attribute and is not marked as Admin, Secure, or Hidden. The Property element is being ignored.", id);
493 }
494
495 public static Message PropertyValueContainsPropertyReference(SourceLineNumber sourceLineNumbers, string propertyId, string otherProperty)
496 {
497 return Message(sourceLineNumbers, Ids.PropertyValueContainsPropertyReference, "The '{0}' Property contains '[{1}]' in its value which is an illegal reference to another property. If this value is a string literal, not a property reference, please ignore this warning. To set a property with the value of another property, use a CustomAction with Property and Value attributes.", propertyId, otherProperty);
498 }
499
500 public static Message RelatedAttributeConditionallyIgnored(SourceLineNumber sourceLineNumbers, string recessiveAttribute, string dominantAttribute, string dominantValue)
501 {
502 return Message(sourceLineNumbers, Ids.RelatedAttributeConditionallyIgnored, "Ignoring attribute {0} because attribute {1} is set to {2}.", recessiveAttribute, dominantAttribute, dominantValue);
503 }
504
505 public static Message RemotePayloadsMustNotAlsoBeCompressed(SourceLineNumber sourceLineNumbers, string elementName)
506 {
507 return Message(sourceLineNumbers, Ids.RemotePayloadsMustNotAlsoBeCompressed, "The {0}/@Compressed attribute must have value 'no' when a RemotePayload child element is present. RemotePayload indicates that a package will always be downloaded and cannot be compressed into a bundle. To eliminate this warning, explicitly set the {0}/@Compressed attribute to 'no'.", elementName);
508 }
509
510 public static Message RemoveFileNameRequired(SourceLineNumber sourceLineNumbers)
511 {
512 return Message(sourceLineNumbers, Ids.RemoveFileNameRequired, "The RemoveFile/@Name attribute will soon become required. In order to match the old functionality of not specifying this attribute, please use the new RemoveFolder element instead.");
513 }
514
515 public static Message RequiresMsi200for64bitPackage(SourceLineNumber sourceLineNumbers)
516 {
517 return Message(sourceLineNumbers, Ids.RequiresMsi200for64bitPackage, "Package/@InstallerVersion must be 200 or greater for a 64-bit package. The value will be changed to 200. Please specify a value of 200 or greater in order to eliminate this warning.");
518 }
519
520 public static Message RequiresMsi500forArmPackage(SourceLineNumber sourceLineNumbers)
521 {
522 return Message(sourceLineNumbers, Ids.RequiresMsi500forArmPackage, "Package/@InstallerVersion must be 500 or greater for an ARM64 package. The value will be changed to 500. Please specify a value of 500 or greater in order to eliminate this warning.");
523 }
524
525 public static Message ReservedAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
526 {
527 return Message(sourceLineNumbers, Ids.ReservedAttribute, "The {0}/@{1} attribute is reserved for future use and has no effect in this version of the WiX toolset.", elementName, attributeName);
528 }
529
530 public static Message RetainRangeMismatch(SourceLineNumber sourceLineNumbers, string fileId)
531 {
532 return Message(sourceLineNumbers, Ids.RetainRangeMismatch, "Mismatch in RetainRangeCounts for the file '{0}' - ignoring the retain ranges.", fileId);
533 }
534
535 public static Message ServiceConfigFamilyNotSupported(SourceLineNumber sourceLineNumbers, string elementName)
536 {
537 return Message(sourceLineNumbers, Ids.ServiceConfigFamilyNotSupported, "{0} functionality is documented in the Windows Installer SDK to \"not [work] as expected.\" Consider replacing {0} with the WixUtilExtension ServiceConfig element.", elementName);
538 }
539
540 public static Message SkippingMergeModuleTable(SourceLineNumber sourceLineNumbers, string tableName)
541 {
542 return Message(sourceLineNumbers, Ids.SkippingMergeModuleTable, "The {0} table can only be represented in WiX for merge modules. The information in this table will be left out of the decompiled output.", tableName);
543 }
544
545 public static Message SkippingPatchCreationTable(SourceLineNumber sourceLineNumbers, string tableName)
546 {
547 return Message(sourceLineNumbers, Ids.SkippingPatchCreationTable, "The {0} table can only be represented in WiX for patch creation files. The information in this table will be left out of the decompiled output.", tableName);
548 }
549
550 public static Message StandardDirectoryConflictInMergeModule(SourceLineNumber sourceLineNumbers, string directory, string standardDirectory)
551 {
552 return Message(sourceLineNumbers, Ids.StandardDirectoryConflictInMergeModule, "The Directory '{0}' starts with the same Id as the standard folder in Windows Installer '{1}'. A directory Id that begins with the same Id as a standard folder that is in an MSM may encounter a conflict when merging the MSM into an MSI. This may result in the contents of this merge module being installed to an unexpected location. To eliminate this warning, change your directory Id to not start with the same Id as any standard folders.", directory, standardDirectory);
553 }
554
555 public static Message SuppressAction(SourceLineNumber sourceLineNumbers, string action, string sequenceName)
556 {
557 return Message(sourceLineNumbers, Ids.SuppressAction, "The action '{0}' in the {1} table is being suppressed.", action, sequenceName);
558 }
559
560 public static Message SuppressAction2(SourceLineNumber sourceLineNumbers)
561 {
562 return Message(sourceLineNumbers, Ids.SuppressAction2, "The location of the suppressed action related to previous warning.");
563 }
564
565 public static Message SuppressMergedAction(string action, string sequenceName)
566 {
567 return Message(null, Ids.SuppressMergedAction, "The merged action '{0}' in the {1} table is being suppressed.", action, sequenceName);
568 }
569
570 public static Message TableIncompatibleWithInstallerVersion(SourceLineNumber sourceLineNumbers, string tableName, int productInstallerVersion)
571 {
572 return Message(sourceLineNumbers, Ids.TableIncompatibleWithInstallerVersion, "Using table '{0}' requires a version of Windows Installer greater than specified in your package ('{1}').", tableName, productInstallerVersion);
573 }
574
575 public static Message TargetDirCorrectedDefaultDir()
576 {
577 return Message(null, Ids.TargetDirCorrectedDefaultDir, "The Directory with Id 'TARGETDIR' must have the value 'SourceDir' in its 'DefaultDir' column. This has been automatically corrected for you in the decompiled output.");
578 }
579
580 public static Message TooManyProgIds(SourceLineNumber sourceLineNumbers, string clsId, string progId, string otherClsId)
581 {
582 return Message(sourceLineNumbers, Ids.TooManyProgIds, "Class '{0}' tried to use ProgId '{1}' which has already been associated with class '{2}'. This information will be left out of the decompiled output.", clsId, progId, otherClsId);
583 }
584
585 public static Message SymbolNotTranslatedToOutput(IntermediateSymbol symbol)
586 {
587 var symbolString = $"SymbolName: '{symbol.Definition.Name}', Id: '{symbol.Id?.Id}'";
588 return Message(symbol.SourceLineNumbers, Ids.SymbolNotTranslatedToOutput, "The binder doesn't know how to place the following symbol into the output: {0}", symbolString);
589 }
590
591 public static Message UnableToFindFileFromCabOrImage(SourceLineNumber sourceLineNumbers, string existingFileSpec, string srcFileSpec)
592 {
593 return Message(sourceLineNumbers, Ids.UnableToFindFileFromCabOrImage, "Unable to find existing file {0} to place in src location {1}. Will likely cause a linker break.", existingFileSpec, srcFileSpec);
594 }
595
596 public static Message UnableToResetAcls(string error)
597 {
598 return Message(null, Ids.UnableToResetAcls, "Unable to reset acls on destination files. Exception detail: {0}", error);
599 }
600
601 public static Message UnclearShortcut(SourceLineNumber sourceLineNumbers, string shortcutId, string fileId, string componentId)
602 {
603 return Message(sourceLineNumbers, Ids.UnclearShortcut, "Because it is an advertised shortcut, the target of shortcut '{0}' will be the keypath of component '{2}' rather than parent file '{1}'. To eliminate this warning, you can (1) make the Shortcut element a child of the File element that is the keypath of component '{2}', (2) make file '{1}' the keypath of component '{2}', or (3) remove the @Advertise attribute so the shortcut is a non-advertised shortcut.", shortcutId, fileId, componentId);
604 }
605
606 public static Message UnexpectedEntrySection(SourceLineNumber sourceLineNumbers, string sectionType, string expectedType, string outputExtension)
607 {
608 return Message(sourceLineNumbers, Ids.UnexpectedEntrySection, "Found mismatched entry point <{0}>. Expected <{1}> for specified output package type {2}.", sectionType, expectedType, outputExtension);
609 }
610
611 public static Message UnexpectedTableInProduct(SourceLineNumber sourceLineNumbers, string tableName)
612 {
613 return Message(sourceLineNumbers, Ids.UnexpectedTableInProduct, "An unexpected row in the '{0}' table was found in this product. Products should not contain the '{0}' table.", tableName);
614 }
615
616 public static Message UnknownAction(SourceLineNumber sourceLineNumbers, string sequenceTableName, string actionName)
617 {
618 return Message(sourceLineNumbers, Ids.UnknownAction, "The {0} table contains an action '{1}' which is not a known custom action, dialog, or standard action. This action will be left out of the decompiled output.", sequenceTableName, actionName);
619 }
620
621 public static Message UnknownPermission(SourceLineNumber sourceLineNumbers, string tableName, string primaryKey, int bitPosition)
622 {
623 return Message(sourceLineNumbers, Ids.UnknownPermission, "The {0} table contains a row with primary key '{1}' which has an unknown permission at bit {2}.", tableName, primaryKey, bitPosition);
624 }
625
626 public static Message UnrepresentableColumnValue(SourceLineNumber sourceLineNumbers, string tableName, string columnName, Object value)
627 {
628 return Message(sourceLineNumbers, Ids.UnrepresentableColumnValue, "The {0}.{1} column's value, '{2}', cannot currently be represented in the WiX schema.", tableName, columnName, value);
629 }
630
631 public static Message UnsupportedCommandLineArgument(string arg)
632 {
633 return Message(null, Ids.UnsupportedCommandLineArgument, "'{0}' is not a valid command line argument.", arg);
634 }
635
636 public static Message UpdateOfNonKeyPathFile(string nonKeyPathFileId, string componentId, string keyPathFileId)
637 {
638 return Message(null, Ids.UpdateOfNonKeyPathFile, "File '{0}' in Component '{1}' was changed, but the KeyPath file '{2}' was not. This file will not be patched on the target system if the REINSTALLMODE does not contain 'A'. The KeyPath file should also be changed and included in your patch.", nonKeyPathFileId, componentId, keyPathFileId);
639 }
640
641 public static Message UxPayloadsOnlySupportEmbedding(SourceLineNumber sourceLineNumbers, string sourceFile)
642 {
643 return Message(sourceLineNumbers, Ids.UxPayloadsOnlySupportEmbedding, "A bootstrapper application payload ('{0}') was marked for something other than embedded packaging, possibly because it included a @DownloadUrl attribute. At present, bootstrapper application payloads must be embedded in the bundle, so the requested packaging is being ignored.", sourceFile);
644 }
645
646 public static Message ValidationFailedDueToSystemPolicy()
647 {
648 return Message(null, Ids.ValidationFailedDueToSystemPolicy, "Validation could not run due to system policy. To eliminate this warning, run the process as admin or suppress ICE validation.");
649 }
650
651 public static Message ValidationWarning(SourceLineNumber sourceLineNumbers, string ice, string message)
652 {
653 return Message(sourceLineNumbers, Ids.ValidationWarning, "{0}: {1}", ice, message);
654 }
655
656 public static Message VariableDeclarationCollision(SourceLineNumber sourceLineNumbers, string variableName, string variableValue, string variableCollidingValue)
657 {
658 return Message(sourceLineNumbers, Ids.VariableDeclarationCollision, "The variable '{0}' with value '{1}' was previously declared with value '{2}'.", variableName, variableValue, variableCollidingValue);
659 }
660
661 public static Message VersionTruncated(SourceLineNumber sourceLineNumbers, string originalVersion, string package, string truncatedVersion)
662 {
663 return Message(sourceLineNumbers, Ids.VersionTruncated, "Product version {0} in package '{1}' is not valid per the MSI SDK and cannot be represented in a bundle. It has been truncated to {2}.", originalVersion, package, truncatedVersion);
664 }
665
666 public static Message CollidingModularizationTypes(string tableName, string columnName, string foreignTableName, int foreignColumnNumber, string modularizationType, string foreignModularizationType)
667 {
668 return Message(null, Ids.CollidingModularizationTypes, "The definition for the '{0}' table's '{1}' column is a foreign key relationship to the '{2}' table's column number {3}. The modularization types of the two column definitions differ: table '{0}' uses type {4} and table '{2}' uses type {5}. Change one of the modularization types so that they match.", tableName, columnName, foreignTableName, foreignColumnNumber, modularizationType, foreignModularizationType);
669 }
670
671 public static Message InvalidEnvironmentVariable(string environmentVariable, string value, string defaultValue)
672 {
673 return Message(null, Ids.InvalidEnvironmentVariable, "The {0} environment variable is set to an invalid value of '{1}'. The default value '{2}' will be used instead.", environmentVariable, value, defaultValue);
674 }
675
676 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
677 {
678 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
679 }
680
681 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
682 {
683 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, resourceManager, resourceName, args);
684 }
685
686 public enum Ids
687 {
688 IdentifierCannotBeModularized = 1000,
689 EmptyAttributeValue = 1001,
690 UnableToFindFileFromCabOrImage = 1002,
691 CopyFileFileIdUseless = 1003,
692 NestedInstall = 1004,
693 OrphanedProgId = 1005,
694 PropertyUseless = 1006,
695 RemoveFileNameRequired = 1007,
696 SuppressAction = 1008,
697 SuppressMergedAction = 1009,
698 TargetDirCorrectedDefaultDir = 1010,
699 AccessDeniedForDeletion = 1011,
700 DirectoryInUse = 1012,
701 AccessDeniedForSettingAttributes = 1013,
702 UnknownAction = 1024,
703 IdentifierTooLong = 1026,
704 UnknownPermission = 1030,
705 DirectoryRedundantNames = 1031,
706 UnableToResetAcls = 1032,
707 MediaExternalCabinetFilenameIllegal = 1033,
708 DeprecatedPreProcVariable = 1034,
709 FileSearchFileNameIssue = 1043,
710 AmbiguousFileOrDirectoryName = 1044,
711 PossiblyIncorrectTypelibVersion = 1048,
712 ImplicitComponentPrimaryFeature = 1049,
713 ActionSequenceCollision = 1050,
714 ActionSequenceCollision2 = 1051,
715 SuppressAction2 = 1052,
716 UnexpectedTableInProduct = 1053,
717 DeprecatedAttribute = 1054,
718 MergeRescheduledAction = 1055,
719 MergeTableFailed = 1056,
720 DecompiledStandardActionRelativelyScheduledInModule = 1057,
721 IllegalActionInSequence = 1058,
722 ExpectedForeignRow = 1059,
723 DecompilingAsCustomTable = 1060,
724 IllegalPatchCreationTable = 1061,
725 SkippingMergeModuleTable = 1062,
726 SkippingPatchCreationTable = 1063,
727 UnrepresentableColumnValue = 1064,
728 DeprecatedTable = 1065,
729 PatchTable = 1066,
730 IllegalColumnValue = 1067,
731 DeprecatedLongNameAttribute = 1069,
732 GeneratedShortFileNameConflict = 1070,
733 GeneratedShortFileNameConflict2 = 1071,
734 DangerousTableInMergeModule = 1072,
735 DeprecatedLocalizationVariablePrefix = 1073,
736 PlaceholderValue = 1074,
737 MissingUpgradeCode = 1075,
738 ValidationWarning = 1076,
739 PropertyValueContainsPropertyReference = 1077,
740 DeprecatedUpgradeProperty = 1078,
741 EmptyCabinet = 1079,
742 DeprecatedRegistryElement = 1080,
743 IllegalRegistryKeyPath = 1081,
744 DeprecatedPatchSequenceTargetAttribute = 1082,
745 ProductIdAuthored = 1083,
746 ImplicitMergeModulePrimaryFeature = 1084,
747 DeprecatedIgnoreModularizationElement = 1085,
748 PropertyModularizationSuppressed = 1086,
749 DeprecatedPackageCompressedAttribute = 1087,
750 DeprecatedQuestionMarksGuid = 1090,
751 PackageCodeSet = 1091,
752 InvalidModuleOrBundleVersion = 1093,
753 InvalidRemoveFile = 1095,
754 PreprocessorWarning = 1096,
755 UpdateOfNonKeyPathFile = 1097,
756 UnsupportedCommandLineArgument = 1098,
757 MajorUpgradePatchNotRecommended = 1099,
758 RetainRangeMismatch = 1100,
759 DefaultLanguageUsedForVersionedFile = 1101,
760 DefaultLanguageUsedForUnversionedFile = 1102,
761 DefaultVersionUsedForUnversionedFile = 1103,
762 InvalidHigherInstallerVersionInModule = 1104,
763 ValidationFailedDueToSystemPolicy = 1105,
764 ColumnsIncompatibleWithInstallerVersion = 1106,
765 TableIncompatibleWithInstallerVersion = 1107,
766 DeprecatedCommandLineSwitch = 1108,
767 UnexpectedEntrySection = 1109,
768 NewComponentAddedToExistingFeature = 1110,
769 DeprecatedAttributeValue = 1111,
770 InsufficientPermissionHarvestTypeLib = 1112,
771 UnclearShortcut = 1113,
772 TooManyProgIds = 1114,
773 BadColumnDataIgnored = 1115,
774 NullMsiAssemblyNameValue = 1116,
775 InvalidAttributeCombination = 1117,
776 VariableDeclarationCollision = 1118,
777 DuplicatePrimaryKey = 1119,
778 RequiresMsi200for64bitPackage = 1121,
779 ExternalCabsAreNotSigned = 1122,
780 FailedToDeleteTempDir = 1123,
781 StandardDirectoryConflictInMergeModule = 1124,
782 PreprocessorUnknownPragma = 1125,
783 DeprecatedComponentGroupId = 1126,
784 UxPayloadsOnlySupportEmbedding = 1127,
785 DiscardedRollbackBoundary = 1129,
786 DeprecatedElement = 1130,
787 CannotUpdateCabCache = 1131,
788 DownloadUrlNotSupportedForBAPayloads = 1132,
789 DiscouragedAllUsersValue = 1133,
790 ImplicitlyPerUser = 1134,
791 PerUserButForcingPerMachine = 1135,
792 AttributeShouldContain = 1136,
793 DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions = 1137,
794 DeprecatedRegistryKeyActionAttribute = 1138,
795 NotABinaryWixlib = 1139,
796 NoPerMachineDependencies = 1140,
797 DownloadUrlNotSupportedForAttachedContainers = 1141,
798 ReservedAttribute = 1142,
799 RequiresMsi500forArmPackage = 1143,
800 RemotePayloadsMustNotAlsoBeCompressed = 1144,
801 AllChangesIncludedInPatch = 1145,
802 RelatedAttributeConditionallyIgnored = 1146,
803 BackslashTerminateInlineDirectorySyntax = 1147,
804 VersionTruncated = 1148,
805 ServiceConfigFamilyNotSupported = 1149,
806 SymbolNotTranslatedToOutput = 1150,
807 MsiTransactionLimitations = 1151,
808 PathCanonicalized = 1152,
809 DetectConditionRecommended = 1153,
810 ExperimentalBundlePlatform = 1154,
811
812 CollidingModularizationTypes = 1156,
813 InvalidEnvironmentVariable = 1157,
814 }
815 }
816}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnCategory.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnCategory.cs
new file mode 100644
index 00000000..0d50b7fd
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnCategory.cs
@@ -0,0 +1,91 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 /// <summary>
6 /// Column validation category type
7 /// </summary>
8 public enum ColumnCategory
9 {
10 /// <summary>Unknown category, default and invalid.</summary>
11 Unknown,
12
13 /// <summary>Text category.</summary>
14 Text,
15
16 /// <summary>UpperCase category.</summary>
17 UpperCase,
18
19 /// <summary>LowerCase category.</summary>
20 LowerCase,
21
22 /// <summary>Integer category.</summary>
23 Integer,
24
25 /// <summary>DoubleInteger category.</summary>
26 DoubleInteger,
27
28 /// <summary>TimeDate category.</summary>
29 TimeDate,
30
31 /// <summary>Identifier category.</summary>
32 Identifier,
33
34 /// <summary>Property category.</summary>
35 Property,
36
37 /// <summary>Filename category.</summary>
38 Filename,
39
40 /// <summary>WildCardFilename category.</summary>
41 WildCardFilename,
42
43 /// <summary>Path category.</summary>
44 Path,
45
46 /// <summary>Paths category.</summary>
47 Paths,
48
49 /// <summary>AnyPath category.</summary>
50 AnyPath,
51
52 /// <summary>DefaultDir category.</summary>
53 DefaultDir,
54
55 /// <summary>RegPath category.</summary>
56 RegPath,
57
58 /// <summary>Formatted category.</summary>
59 Formatted,
60
61 /// <summary>Template category.</summary>
62 Template,
63
64 /// <summary>Condition category.</summary>
65 Condition,
66
67 /// <summary>Guid category.</summary>
68 Guid,
69
70 /// <summary>Version category.</summary>
71 Version,
72
73 /// <summary>Language category.</summary>
74 Language,
75
76 /// <summary>Binary category.</summary>
77 Binary,
78
79 /// <summary>CustomSource category.</summary>
80 CustomSource,
81
82 /// <summary>Cabinet category.</summary>
83 Cabinet,
84
85 /// <summary>Shortcut category.</summary>
86 Shortcut,
87
88 /// <summary>Formatted SDDL category.</summary>
89 FormattedSDDLText,
90 }
91}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnDefinition.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnDefinition.cs
new file mode 100644
index 00000000..f4dbab34
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnDefinition.cs
@@ -0,0 +1,702 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Globalization;
7 using System.Xml;
8
9 /// <summary>
10 /// Definition of a table's column.
11 /// </summary>
12 public sealed class ColumnDefinition : IComparable<ColumnDefinition>
13 {
14 /// <summary>
15 /// Creates a new column definition.
16 /// </summary>
17 /// <param name="name">Name of column.</param>
18 /// <param name="type">Type of column</param>
19 /// <param name="length">Length of column.</param>
20 /// <param name="primaryKey">If column is primary key.</param>
21 /// <param name="nullable">If column is nullable.</param>
22 /// <param name="category">Validation category for column.</param>
23 /// <param name="minValue">Optional minimum value for the column.</param>
24 /// <param name="maxValue">Optional maximum value for the colum.</param>
25 /// <param name="keyTable">Optional name of table for foreign key.</param>
26 /// <param name="keyColumn">Optional name of column for foreign key.</param>
27 /// <param name="possibilities">Set of possible values for column.</param>
28 /// <param name="description">Description of column in vaidation table.</param>
29 /// <param name="modularizeType">Type of modularization for column</param>
30 /// <param name="forceLocalizable">If the column is localizable.</param>
31 /// <param name="useCData">If whitespace should be preserved in a CDATA node.</param>
32 /// <param name="unreal">If not saved to MSI.</param>
33 public ColumnDefinition(string name, ColumnType type, int length, bool primaryKey, bool nullable, ColumnCategory category, long? minValue = null, long? maxValue = null, string keyTable = null, int? keyColumn = null, string possibilities = null, string description = null, ColumnModularizeType? modularizeType = null, bool forceLocalizable = false, bool useCData = false, bool unreal = false)
34 {
35 this.Name = name;
36 this.Type = type;
37 this.Length = length;
38 this.PrimaryKey = primaryKey;
39 this.Nullable = nullable;
40 this.ModularizeType = CalculateModularizationType(modularizeType, category);
41 this.IsLocalizable = forceLocalizable || ColumnType.Localized == type;
42 this.MinValue = minValue;
43 this.MaxValue = maxValue;
44 this.KeyTable = keyTable;
45 this.KeyColumn = keyColumn;
46 this.Category = category;
47 this.Possibilities = possibilities;
48 this.Description = description;
49 this.UseCData = useCData;
50 this.Unreal = unreal;
51 }
52
53 /// <summary>
54 /// Gets whether this column was added via a transform.
55 /// </summary>
56 /// <value>Whether this column was added via a transform.</value>
57 public bool Added { get; set; }
58
59 /// <summary>
60 /// Gets the name of the column.
61 /// </summary>
62 /// <value>Name of column.</value>
63 public string Name { get; }
64
65 /// <summary>
66 /// Gets the type of the column.
67 /// </summary>
68 /// <value>Type of column.</value>
69 public ColumnType Type { get; }
70
71 /// <summary>
72 /// Gets the length of the column.
73 /// </summary>
74 /// <value>Length of column.</value>
75 public int Length { get; }
76
77 /// <summary>
78 /// Gets if the column is a primary key.
79 /// </summary>
80 /// <value>true if column is primary key.</value>
81 public bool PrimaryKey { get; }
82
83 /// <summary>
84 /// Gets if the column is nullable.
85 /// </summary>
86 /// <value>true if column is nullable.</value>
87 public bool Nullable { get; }
88
89 /// <summary>
90 /// Gets the type of modularization for this column.
91 /// </summary>
92 /// <value>Column's modularization type.</value>
93 public ColumnModularizeType ModularizeType { get; }
94
95 /// <summary>
96 /// Gets if the column is localizable. Can be because the type is localizable, or because the column
97 /// was explicitly set to be so.
98 /// </summary>
99 /// <value>true if column is localizable.</value>
100 public bool IsLocalizable { get; }
101
102 /// <summary>
103 /// Gets the minimum value for the column.
104 /// </summary>
105 /// <value>Minimum value for the column.</value>
106 public long? MinValue { get; }
107
108 /// <summary>
109 /// Gets the maximum value for the column.
110 /// </summary>
111 /// <value>Maximum value for the column.</value>
112 public long? MaxValue { get; }
113
114 /// <summary>
115 /// Gets the table that has the foreign key for this column
116 /// </summary>
117 /// <value>Foreign key table name.</value>
118 public string KeyTable { get; }
119
120 /// <summary>
121 /// Gets the foreign key column that this column refers to.
122 /// </summary>
123 /// <value>Foreign key column.</value>
124 public int? KeyColumn { get; }
125
126 /// <summary>
127 /// Gets the validation category for this column.
128 /// </summary>
129 /// <value>Validation category.</value>
130 public ColumnCategory Category { get; }
131
132 /// <summary>
133 /// Gets the set of possibilities for this column.
134 /// </summary>
135 /// <value>Set of possibilities for this column.</value>
136 public string Possibilities { get; }
137
138 /// <summary>
139 /// Gets the description for this column.
140 /// </summary>
141 /// <value>Description of column.</value>
142 public string Description { get; }
143
144 /// <summary>
145 /// Gets if whitespace should be preserved in a CDATA node.
146 /// </summary>
147 /// <value>true if whitespace should be preserved in a CDATA node.</value>
148 public bool UseCData { get; }
149
150 /// <summary>
151 /// Gets if column is Unreal.
152 /// </summary>
153 /// <value>true if column should not be included in idts.</value>
154 public bool Unreal { get; }
155
156 /// <summary>
157 /// Parses a column definition in a table definition.
158 /// </summary>
159 /// <param name="reader">Reader to get data from.</param>
160 /// <returns>The ColumnDefintion represented by the Xml.</returns>
161 internal static ColumnDefinition Read(XmlReader reader)
162 {
163 if (!reader.LocalName.Equals("columnDefinition"))
164 {
165 throw new XmlException();
166 }
167
168 bool added = false;
169 ColumnCategory category = ColumnCategory.Unknown;
170 string description = null;
171 bool empty = reader.IsEmptyElement;
172 int? keyColumn = null;
173 string keyTable = null;
174 int length = -1;
175 bool localizable = false;
176 long? maxValue = null;
177 long? minValue = null;
178 var modularize = ColumnModularizeType.None;
179 string name = null;
180 bool nullable = false;
181 string possibilities = null;
182 bool primaryKey = false;
183 var type = ColumnType.Unknown;
184 bool useCData = false;
185 bool unreal = false;
186
187 // parse the attributes
188 while (reader.MoveToNextAttribute())
189 {
190 switch (reader.LocalName)
191 {
192 case "added":
193 added = reader.Value.Equals("yes");
194 break;
195 case "category":
196 switch (reader.Value)
197 {
198 case "anyPath":
199 category = ColumnCategory.AnyPath;
200 break;
201 case "binary":
202 category = ColumnCategory.Binary;
203 break;
204 case "cabinet":
205 category = ColumnCategory.Cabinet;
206 break;
207 case "condition":
208 category = ColumnCategory.Condition;
209 break;
210 case "customSource":
211 category = ColumnCategory.CustomSource;
212 break;
213 case "defaultDir":
214 category = ColumnCategory.DefaultDir;
215 break;
216 case "doubleInteger":
217 category = ColumnCategory.DoubleInteger;
218 break;
219 case "filename":
220 category = ColumnCategory.Filename;
221 break;
222 case "formatted":
223 category = ColumnCategory.Formatted;
224 break;
225 case "formattedSddl":
226 category = ColumnCategory.FormattedSDDLText;
227 break;
228 case "guid":
229 category = ColumnCategory.Guid;
230 break;
231 case "identifier":
232 category = ColumnCategory.Identifier;
233 break;
234 case "integer":
235 category = ColumnCategory.Integer;
236 break;
237 case "language":
238 category = ColumnCategory.Language;
239 break;
240 case "lowerCase":
241 category = ColumnCategory.LowerCase;
242 break;
243 case "path":
244 category = ColumnCategory.Path;
245 break;
246 case "paths":
247 category = ColumnCategory.Paths;
248 break;
249 case "property":
250 category = ColumnCategory.Property;
251 break;
252 case "regPath":
253 category = ColumnCategory.RegPath;
254 break;
255 case "shortcut":
256 category = ColumnCategory.Shortcut;
257 break;
258 case "template":
259 category = ColumnCategory.Template;
260 break;
261 case "text":
262 category = ColumnCategory.Text;
263 break;
264 case "timeDate":
265 category = ColumnCategory.TimeDate;
266 break;
267 case "upperCase":
268 category = ColumnCategory.UpperCase;
269 break;
270 case "version":
271 category = ColumnCategory.Version;
272 break;
273 case "wildCardFilename":
274 category = ColumnCategory.WildCardFilename;
275 break;
276 default:
277 throw new InvalidOperationException();
278 }
279 break;
280 case "description":
281 description = reader.Value;
282 break;
283 case "keyColumn":
284 keyColumn = Convert.ToInt32(reader.Value, 10);
285 break;
286 case "keyTable":
287 keyTable = reader.Value;
288 break;
289 case "length":
290 length = Convert.ToInt32(reader.Value, 10);
291 break;
292 case "localizable":
293 localizable = reader.Value.Equals("yes");
294 break;
295 case "maxValue":
296 maxValue = Convert.ToInt32(reader.Value, 10);
297 break;
298 case "minValue":
299 minValue = Convert.ToInt32(reader.Value, 10);
300 break;
301 case "modularize":
302 switch (reader.Value)
303 {
304 case "column":
305 modularize = ColumnModularizeType.Column;
306 break;
307 case "companionFile":
308 modularize = ColumnModularizeType.CompanionFile;
309 break;
310 case "condition":
311 modularize = ColumnModularizeType.Condition;
312 break;
313 case "controlEventArgument":
314 modularize = ColumnModularizeType.ControlEventArgument;
315 break;
316 case "controlText":
317 modularize = ColumnModularizeType.ControlText;
318 break;
319 case "icon":
320 modularize = ColumnModularizeType.Icon;
321 break;
322 case "none":
323 modularize = ColumnModularizeType.None;
324 break;
325 case "property":
326 modularize = ColumnModularizeType.Property;
327 break;
328 case "semicolonDelimited":
329 modularize = ColumnModularizeType.SemicolonDelimited;
330 break;
331 default:
332 throw new XmlException();
333 }
334 break;
335 case "name":
336 switch (reader.Value)
337 {
338 case "CREATE":
339 case "DELETE":
340 case "DROP":
341 case "INSERT":
342 throw new XmlException();
343 default:
344 name = reader.Value;
345 break;
346 }
347 break;
348 case "nullable":
349 nullable = reader.Value.Equals("yes");
350 break;
351 case "primaryKey":
352 primaryKey = reader.Value.Equals("yes");
353 break;
354 case "set":
355 possibilities = reader.Value;
356 break;
357 case "type":
358 switch (reader.Value)
359 {
360 case "localized":
361 type = ColumnType.Localized;
362 break;
363 case "number":
364 type = ColumnType.Number;
365 break;
366 case "object":
367 type = ColumnType.Object;
368 break;
369 case "string":
370 type = ColumnType.String;
371 break;
372 case "preserved":
373 type = ColumnType.Preserved;
374 break;
375 default:
376 throw new XmlException();
377 }
378 break;
379 case "useCData":
380 useCData = reader.Value.Equals("yes");
381 break;
382 case "unreal":
383 unreal = reader.Value.Equals("yes");
384 break;
385 }
386 }
387
388 // parse the child elements (there should be none)
389 if (!empty)
390 {
391 bool done = false;
392
393 while (!done && reader.Read())
394 {
395 switch (reader.NodeType)
396 {
397 case XmlNodeType.Element:
398 throw new XmlException();
399 case XmlNodeType.EndElement:
400 done = true;
401 break;
402 }
403 }
404
405 if (!done)
406 {
407 throw new XmlException();
408 }
409 }
410
411 ColumnDefinition columnDefinition = new ColumnDefinition(name, type, length, primaryKey, nullable, category, minValue, maxValue, keyTable, keyColumn, possibilities, description, modularize, localizable, useCData, unreal);
412 columnDefinition.Added = added;
413
414 return columnDefinition;
415 }
416
417 /// <summary>
418 /// Persists a ColumnDefinition in an XML format.
419 /// </summary>
420 /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
421 internal void Write(XmlWriter writer)
422 {
423 writer.WriteStartElement("columnDefinition", TableDefinitionCollection.XmlNamespaceUri);
424
425 writer.WriteAttributeString("name", this.Name);
426
427 switch (this.Type)
428 {
429 case ColumnType.Localized:
430 writer.WriteAttributeString("type", "localized");
431 break;
432 case ColumnType.Number:
433 writer.WriteAttributeString("type", "number");
434 break;
435 case ColumnType.Object:
436 writer.WriteAttributeString("type", "object");
437 break;
438 case ColumnType.String:
439 writer.WriteAttributeString("type", "string");
440 break;
441 case ColumnType.Preserved:
442 writer.WriteAttributeString("type", "preserved");
443 break;
444 }
445
446 writer.WriteAttributeString("length", this.Length.ToString(CultureInfo.InvariantCulture.NumberFormat));
447
448 if (this.PrimaryKey)
449 {
450 writer.WriteAttributeString("primaryKey", "yes");
451 }
452
453 if (this.Nullable)
454 {
455 writer.WriteAttributeString("nullable", "yes");
456 }
457
458 if (this.IsLocalizable)
459 {
460 writer.WriteAttributeString("localizable", "yes");
461 }
462
463 if (this.Added)
464 {
465 writer.WriteAttributeString("added", "yes");
466 }
467
468 switch (this.ModularizeType)
469 {
470 case ColumnModularizeType.Column:
471 writer.WriteAttributeString("modularize", "column");
472 break;
473 case ColumnModularizeType.CompanionFile:
474 writer.WriteAttributeString("modularize", "companionFile");
475 break;
476 case ColumnModularizeType.Condition:
477 writer.WriteAttributeString("modularize", "condition");
478 break;
479 case ColumnModularizeType.ControlEventArgument:
480 writer.WriteAttributeString("modularize", "controlEventArgument");
481 break;
482 case ColumnModularizeType.ControlText:
483 writer.WriteAttributeString("modularize", "controlText");
484 break;
485 case ColumnModularizeType.Icon:
486 writer.WriteAttributeString("modularize", "icon");
487 break;
488 case ColumnModularizeType.None:
489 // this is the default value
490 break;
491 case ColumnModularizeType.Property:
492 writer.WriteAttributeString("modularize", "property");
493 break;
494 case ColumnModularizeType.SemicolonDelimited:
495 writer.WriteAttributeString("modularize", "semicolonDelimited");
496 break;
497 }
498
499 if (this.MinValue.HasValue)
500 {
501 writer.WriteAttributeString("minValue", this.MinValue.Value.ToString(CultureInfo.InvariantCulture.NumberFormat));
502 }
503
504 if (this.MaxValue.HasValue)
505 {
506 writer.WriteAttributeString("maxValue", this.MaxValue.Value.ToString(CultureInfo.InvariantCulture.NumberFormat));
507 }
508
509 if (!String.IsNullOrEmpty(this.KeyTable))
510 {
511 writer.WriteAttributeString("keyTable", this.KeyTable);
512 }
513
514 if (this.KeyColumn.HasValue)
515 {
516 writer.WriteAttributeString("keyColumn", this.KeyColumn.Value.ToString(CultureInfo.InvariantCulture.NumberFormat));
517 }
518
519 switch (this.Category)
520 {
521 case ColumnCategory.AnyPath:
522 writer.WriteAttributeString("category", "anyPath");
523 break;
524 case ColumnCategory.Binary:
525 writer.WriteAttributeString("category", "binary");
526 break;
527 case ColumnCategory.Cabinet:
528 writer.WriteAttributeString("category", "cabinet");
529 break;
530 case ColumnCategory.Condition:
531 writer.WriteAttributeString("category", "condition");
532 break;
533 case ColumnCategory.CustomSource:
534 writer.WriteAttributeString("category", "customSource");
535 break;
536 case ColumnCategory.DefaultDir:
537 writer.WriteAttributeString("category", "defaultDir");
538 break;
539 case ColumnCategory.DoubleInteger:
540 writer.WriteAttributeString("category", "doubleInteger");
541 break;
542 case ColumnCategory.Filename:
543 writer.WriteAttributeString("category", "filename");
544 break;
545 case ColumnCategory.Formatted:
546 writer.WriteAttributeString("category", "formatted");
547 break;
548 case ColumnCategory.FormattedSDDLText:
549 writer.WriteAttributeString("category", "formattedSddl");
550 break;
551 case ColumnCategory.Guid:
552 writer.WriteAttributeString("category", "guid");
553 break;
554 case ColumnCategory.Identifier:
555 writer.WriteAttributeString("category", "identifier");
556 break;
557 case ColumnCategory.Integer:
558 writer.WriteAttributeString("category", "integer");
559 break;
560 case ColumnCategory.Language:
561 writer.WriteAttributeString("category", "language");
562 break;
563 case ColumnCategory.LowerCase:
564 writer.WriteAttributeString("category", "lowerCase");
565 break;
566 case ColumnCategory.Path:
567 writer.WriteAttributeString("category", "path");
568 break;
569 case ColumnCategory.Paths:
570 writer.WriteAttributeString("category", "paths");
571 break;
572 case ColumnCategory.Property:
573 writer.WriteAttributeString("category", "property");
574 break;
575 case ColumnCategory.RegPath:
576 writer.WriteAttributeString("category", "regPath");
577 break;
578 case ColumnCategory.Shortcut:
579 writer.WriteAttributeString("category", "shortcut");
580 break;
581 case ColumnCategory.Template:
582 writer.WriteAttributeString("category", "template");
583 break;
584 case ColumnCategory.Text:
585 writer.WriteAttributeString("category", "text");
586 break;
587 case ColumnCategory.TimeDate:
588 writer.WriteAttributeString("category", "timeDate");
589 break;
590 case ColumnCategory.UpperCase:
591 writer.WriteAttributeString("category", "upperCase");
592 break;
593 case ColumnCategory.Version:
594 writer.WriteAttributeString("category", "version");
595 break;
596 case ColumnCategory.WildCardFilename:
597 writer.WriteAttributeString("category", "wildCardFilename");
598 break;
599 }
600
601 if (!String.IsNullOrEmpty(this.Possibilities))
602 {
603 writer.WriteAttributeString("set", this.Possibilities);
604 }
605
606 if (!String.IsNullOrEmpty(this.Description))
607 {
608 writer.WriteAttributeString("description", this.Description);
609 }
610
611 if (this.UseCData)
612 {
613 writer.WriteAttributeString("useCData", "yes");
614 }
615
616 if (this.Unreal)
617 {
618 writer.WriteAttributeString("unreal", "yes");
619 }
620
621 writer.WriteEndElement();
622 }
623
624 /// <summary>
625 /// Compare this column definition to another column definition.
626 /// </summary>
627 /// <remarks>
628 /// Only Windows Installer traits are compared, allowing for updates to WiX-specific table definitions.
629 /// </remarks>
630 /// <param name="other">The <see cref="ColumnDefinition"/> to compare with this one.</param>
631 /// <returns>0 if the columns' core propeties are the same; otherwise, non-0.</returns>
632 public int CompareTo(ColumnDefinition other)
633 {
634 // by definition, this object is greater than null
635 if (null == other)
636 {
637 return 1;
638 }
639
640 // compare column names
641 int ret = String.Compare(this.Name, other.Name, StringComparison.Ordinal);
642
643 // compare column types
644 if (0 == ret)
645 {
646 ret = this.Type == other.Type ? 0 : -1;
647
648 // compare column lengths
649 if (0 == ret)
650 {
651 ret = this.Length == other.Length ? 0 : -1;
652
653 // compare whether both are primary keys
654 if (0 == ret)
655 {
656 ret = this.PrimaryKey == other.PrimaryKey ? 0 : -1;
657
658 // compare nullability
659 if (0 == ret)
660 {
661 ret = this.Nullable == other.Nullable ? 0 : -1;
662 }
663 }
664 }
665 }
666
667 return ret;
668 }
669
670 private static ColumnModularizeType CalculateModularizationType(ColumnModularizeType? modularizeType, ColumnCategory category)
671 {
672 if (modularizeType.HasValue)
673 {
674 return modularizeType.Value;
675 }
676
677 switch (category)
678 {
679 case ColumnCategory.Identifier:
680 case ColumnCategory.CustomSource:
681 return ColumnModularizeType.Column;
682
683 case ColumnCategory.Condition:
684 return ColumnModularizeType.Condition;
685
686 case ColumnCategory.AnyPath:
687 case ColumnCategory.Formatted:
688 case ColumnCategory.FormattedSDDLText:
689 case ColumnCategory.Path:
690 case ColumnCategory.Paths:
691 case ColumnCategory.RegPath:
692 case ColumnCategory.Template:
693 return ColumnModularizeType.Property;
694
695 case ColumnCategory.Shortcut:
696 return ColumnModularizeType.Property;
697 }
698
699 return ColumnModularizeType.None;
700 }
701 }
702}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnModularizeType.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnModularizeType.cs
new file mode 100644
index 00000000..d44f55a7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnModularizeType.cs
@@ -0,0 +1,37 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 /// <summary>
6 /// Specifies if the column should be modularized.
7 /// </summary>
8 public enum ColumnModularizeType
9 {
10 /// <summary>Column should not be modularized.</summary>
11 None,
12
13 /// <summary>Column should be modularized.</summary>
14 Column,
15
16 /// <summary>When the column is an primary or foreign key to the Icon table it should be modularized special.</summary>
17 Icon,
18
19 /// <summary>When the column is a companion file it should be modularized.</summary>
20 CompanionFile,
21
22 /// <summary>Column is a condition and should be modularized.</summary>
23 Condition,
24
25 /// <summary>Special modularization type for the ControlEvent table's Argument column.</summary>
26 ControlEventArgument,
27
28 /// <summary>Special modularization type for the Control table's Text column.</summary>
29 ControlText,
30
31 /// <summary>Any Properties in the column should be modularized.</summary>
32 Property,
33
34 /// <summary>Semi-colon list of keys, all of which need to be modularized.</summary>
35 SemicolonDelimited,
36 }
37}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnType.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnType.cs
new file mode 100644
index 00000000..423125db
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/ColumnType.cs
@@ -0,0 +1,28 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 /// <summary>
6 /// Defines MSI column types.
7 /// </summary>
8 public enum ColumnType
9 {
10 /// <summary>Unknown column type, default and invalid.</summary>
11 Unknown,
12
13 /// <summary>Column is a string.</summary>
14 String,
15
16 /// <summary>Column is a localizable string.</summary>
17 Localized,
18
19 /// <summary>Column is a number.</summary>
20 Number,
21
22 /// <summary>Column is a binary stream.</summary>
23 Object,
24
25 /// <summary>Column is a string that is preserved in transforms (like Object).</summary>
26 Preserved,
27 }
28}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Field.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Field.cs
new file mode 100644
index 00000000..e5edd552
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Field.cs
@@ -0,0 +1,304 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Diagnostics;
7 using System.Globalization;
8 using System.Xml;
9
10 /// <summary>
11 /// Field containing data for a column in a row.
12 /// </summary>
13 public class Field
14 {
15 private object data;
16
17 /// <summary>
18 /// Instantiates a new Field.
19 /// </summary>
20 /// <param name="columnDefinition">Column definition for this field.</param>
21 protected Field(ColumnDefinition columnDefinition)
22 {
23 this.Column = columnDefinition;
24 }
25
26 /// <summary>
27 /// Gets or sets the column definition for this field.
28 /// </summary>
29 /// <value>Column definition.</value>
30 public ColumnDefinition Column { get; private set; }
31
32 /// <summary>
33 /// Gets or sets the data for this field.
34 /// </summary>
35 /// <value>Data in the field.</value>
36 public object Data
37 {
38 get => this.data;
39 set => this.data = this.ValidateValue(this.Column, value);
40 }
41
42 /// <summary>
43 /// Gets or sets whether this field is modified.
44 /// </summary>
45 /// <value>Whether this field is modified.</value>
46 public bool Modified { get; set; }
47
48 /// <summary>
49 /// Gets or sets the previous data.
50 /// </summary>
51 /// <value>The previous data.</value>
52 public string PreviousData { get; set; }
53
54 /// <summary>
55 /// Instantiate a new Field object of the correct type.
56 /// </summary>
57 /// <param name="columnDefinition">The column definition for the field.</param>
58 /// <returns>The new Field object.</returns>
59 public static Field Create(ColumnDefinition columnDefinition)
60 {
61 return (ColumnType.Object == columnDefinition.Type) ? new ObjectField(columnDefinition) : new Field(columnDefinition);
62 }
63
64 /// <summary>
65 /// Sets the value of a particular field in the row without validating.
66 /// </summary>
67 /// <param name="value">Value of a field in the row.</param>
68 /// <returns>True if successful, false if validation failed.</returns>
69 public bool BestEffortSet(object value)
70 {
71 bool success = true;
72 object bestEffortValue = value;
73
74 try
75 {
76 bestEffortValue = this.ValidateValue(this.Column, value);
77 }
78 catch (InvalidOperationException)
79 {
80 success = false;
81 }
82
83 this.data = bestEffortValue;
84 return success;
85 }
86
87 /// <summary>
88 /// Determine if this field is identical to another field.
89 /// </summary>
90 /// <param name="field">The other field to compare to.</param>
91 /// <returns>true if they are equal; false otherwise.</returns>
92 public bool IsIdentical(Field field)
93 {
94 return (this.Column.Name == field.Column.Name &&
95 ((null != this.data && this.data.Equals(field.data)) || (null == this.data && null == field.data)));
96 }
97
98 /// <summary>
99 /// Overrides the built in object implementation to return the field's data as a string.
100 /// </summary>
101 /// <returns>Field's data as a string.</returns>
102 public override string ToString()
103 {
104 return this.AsString();
105 }
106
107 /// <summary>
108 /// Gets the field as an integer.
109 /// </summary>
110 /// <returns>Field's data as an integer.</returns>
111 public int AsInteger()
112 {
113 return (this.data is int) ? (int)this.data : Convert.ToInt32(this.data, CultureInfo.InvariantCulture);
114 }
115
116 /// <summary>
117 /// Gets the field as an integer that could be null.
118 /// </summary>
119 /// <returns>Field's data as an integer that could be null.</returns>
120 public int? AsNullableInteger()
121 {
122 return (null == this.data) ? (int?)null : (this.data is int) ? (int)this.data : Convert.ToInt32(this.data, CultureInfo.InvariantCulture);
123 }
124
125 /// <summary>
126 /// Gets the field as a string.
127 /// </summary>
128 /// <returns>Field's data as a string.</returns>
129 public string AsString()
130 {
131 return (null == this.data) ? null : Convert.ToString(this.data, CultureInfo.InvariantCulture);
132 }
133
134 /// <summary>
135 /// Validate a value for a column.
136 /// </summary>
137 /// <param name="column">The column.</param>
138 /// <param name="value">The value to validate.</param>
139 /// <returns>Validated value.</returns>
140 internal object ValidateValue(ColumnDefinition column, object value)
141 {
142 if (null == value)
143 {
144 if (!column.Nullable)
145 {
146 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with a null value because this is a required field.", column.Name));
147 }
148 }
149 else // check numerical values against their specified minimum and maximum values.
150 {
151 if (ColumnType.Number == column.Type && !column.IsLocalizable)
152 {
153 // For now all enums in the tables can be represented by integers. This if statement would need to
154 // be enhanced if that ever changes.
155 if (value is int || value.GetType().IsEnum)
156 {
157 var intValue = (int)value;
158
159 // validate the value against the minimum allowed value
160 if (column.MinValue.HasValue && column.MinValue > intValue)
161 {
162 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is less than the minimum allowed value for this column, {2}.", column.Name, intValue, column.MinValue));
163 }
164
165 // validate the value against the maximum allowed value
166 if (column.MaxValue.HasValue && column.MaxValue < intValue)
167 {
168 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is greater than the maximum allowed value for this column, {2}.", column.Name, intValue, column.MaxValue));
169 }
170
171 return intValue;
172 }
173 else if (value is long longValue)
174 {
175 // validate the value against the minimum allowed value
176 if (column.MinValue.HasValue && column.MinValue > longValue)
177 {
178 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is less than the minimum allowed value for this column, {2}.", column.Name, longValue, column.MinValue));
179 }
180
181 // validate the value against the maximum allowed value
182 if (column.MaxValue.HasValue && column.MaxValue < longValue)
183 {
184 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is greater than the maximum allowed value for this column, {2}.", column.Name, longValue, column.MaxValue));
185 }
186
187 return longValue;
188 }
189 else
190 {
191 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set number column '{0}' with a value of type '{1}'.", column.Name, value.GetType().ToString()));
192 }
193 }
194 else
195 {
196 if (!(value is string))
197 {
198 //throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set string column '{0}' with a value of type '{1}'.", this.name, value.GetType().ToString()));
199 return value.ToString();
200 }
201 }
202 }
203
204 return value;
205 }
206
207 /// <summary>
208 /// Parse a field from the xml.
209 /// </summary>
210 /// <param name="reader">XmlReader where the intermediate is persisted.</param>
211 internal virtual void Read(XmlReader reader)
212 {
213 Debug.Assert("field" == reader.LocalName);
214
215 bool empty = reader.IsEmptyElement;
216
217 while (reader.MoveToNextAttribute())
218 {
219 switch (reader.LocalName)
220 {
221 case "modified":
222 this.Modified = reader.Value.Equals("yes");
223 break;
224 case "previousData":
225 this.PreviousData = reader.Value;
226 break;
227 }
228 }
229
230 if (!empty)
231 {
232 bool done = false;
233
234 while (!done && reader.Read())
235 {
236 switch (reader.NodeType)
237 {
238 case XmlNodeType.Element:
239 throw new XmlException();
240 case XmlNodeType.CDATA:
241 case XmlNodeType.Text:
242 case XmlNodeType.SignificantWhitespace:
243 if (0 < reader.Value.Length)
244 {
245 if (ColumnType.Number == this.Column.Type && !this.Column.IsLocalizable)
246 {
247 // older wix files could persist data as a long value (which would overflow an int)
248 // since the Convert class always throws exceptions for overflows, read in integral
249 // values as a long to avoid the overflow, then cast it to an int (this operation can
250 // overflow without throwing an exception inside an unchecked block)
251 this.data = unchecked((int)Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));
252 }
253 else
254 {
255 this.data = reader.Value;
256 }
257 }
258 break;
259 case XmlNodeType.EndElement:
260 done = true;
261 break;
262 }
263 }
264
265 if (!done)
266 {
267 throw new XmlException();
268 }
269 }
270 }
271
272 /// <summary>
273 /// Persists a field in an XML format.
274 /// </summary>
275 /// <param name="writer">XmlWriter where the Field should persist itself as XML.</param>
276 internal virtual void Write(XmlWriter writer)
277 {
278 writer.WriteStartElement("field", WindowsInstallerData.XmlNamespaceUri);
279
280 if (this.Modified)
281 {
282 writer.WriteAttributeString("modified", "yes");
283 }
284
285 if (null != this.PreviousData)
286 {
287 writer.WriteAttributeString("previousData", this.PreviousData);
288 }
289
290 // Convert the data to a string that will persist nicely (nulls as String.Empty).
291 string text = Convert.ToString(this.data, CultureInfo.InvariantCulture);
292 if (this.Column.UseCData)
293 {
294 writer.WriteCData(text);
295 }
296 else
297 {
298 writer.WriteString(text);
299 }
300
301 writer.WriteEndElement();
302 }
303 }
304}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/IntermediateLevels.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/IntermediateLevels.cs
new file mode 100644
index 00000000..6ffdf041
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/IntermediateLevels.cs
@@ -0,0 +1,8 @@
1namespace WixToolset.Data.WindowsInstaller
2{
3 public static class IntermediateLevels
4 {
5 // TODO: These are placeholder names until we (hopefully) come up with better ones.
6 public const string FullyBound = "msiFullyBound";
7 }
8}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/ObjectField.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/ObjectField.cs
new file mode 100644
index 00000000..f10837c1
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/ObjectField.cs
@@ -0,0 +1,183 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Diagnostics;
7 using System.Globalization;
8 using System.Xml;
9
10 /// <summary>
11 /// Field containing data for an object column in a row.
12 /// </summary>
13 public sealed class ObjectField : Field
14 {
15 /// <summary>
16 /// Instantiates a new Field.
17 /// </summary>
18 /// <param name="columnDefinition">Column definition for this field.</param>
19 internal ObjectField(ColumnDefinition columnDefinition) :
20 base(columnDefinition)
21 {
22 }
23
24 /// <summary>
25 /// Gets or sets the index of the embedded file in a library.
26 /// </summary>
27 /// <value>The index of the embedded file.</value>
28 public int? EmbeddedFileIndex { get; set; }
29
30 /// <summary>
31 /// Gets or sets the previous index of the embedded file in the library.
32 /// </summary>
33 /// <value>The previous index of the embedded file.</value>
34 public int? PreviousEmbeddedFileIndex { get; set; }
35
36 /// <summary>
37 /// Gets or sets the path to the embedded cabinet of the previous file.
38 /// </summary>
39 /// <value>The path of the cabinet containing the previous file.</value>
40 public Uri PreviousBaseUri { get; set; }
41
42 /// <summary>
43 /// Gets the base URI of the object field.
44 /// </summary>
45 /// <value>The base URI of the object field.</value>
46 public Uri BaseUri { get; private set; }
47
48 /// <summary>
49 /// Gets or sets the unresolved data for this field.
50 /// </summary>
51 /// <value>Unresolved Data in the field.</value>
52 public string UnresolvedData { get; set; }
53
54 /// <summary>
55 /// Gets or sets the unresolved previous data.
56 /// </summary>
57 /// <value>The unresolved previous data.</value>
58 public string UnresolvedPreviousData { get; set; }
59
60 /// <summary>
61 /// Parse a field from the xml.
62 /// </summary>
63 /// <param name="reader">XmlReader where the intermediate is persisted.</param>
64 internal override void Read(XmlReader reader)
65 {
66 Debug.Assert("field" == reader.LocalName);
67
68 bool empty = reader.IsEmptyElement;
69
70 this.BaseUri = new Uri(reader.BaseURI);
71
72 while (reader.MoveToNextAttribute())
73 {
74 switch (reader.LocalName)
75 {
76 case "cabinetFileId":
77 this.EmbeddedFileIndex = Convert.ToInt32(reader.Value);
78 break;
79 case "modified":
80 this.Modified = reader.Value.Equals("yes");
81 break;
82 case "previousData":
83 this.PreviousData = reader.Value;
84 break;
85 case "unresolvedPreviousData":
86 this.UnresolvedPreviousData = reader.Value;
87 break;
88 case "unresolvedData":
89 this.UnresolvedData = reader.Value;
90 break;
91 case "previousCabinetFileId":
92 this.PreviousEmbeddedFileIndex = Convert.ToInt32(reader.Value);
93 break;
94 }
95 }
96
97 if (!empty)
98 {
99 bool done = false;
100
101 while (!done && reader.Read())
102 {
103 switch (reader.NodeType)
104 {
105 case XmlNodeType.Element:
106 throw new XmlException();
107 case XmlNodeType.CDATA:
108 case XmlNodeType.Text:
109 if (0 < reader.Value.Length)
110 {
111 this.Data = reader.Value;
112 }
113 break;
114 case XmlNodeType.EndElement:
115 done = true;
116 break;
117 }
118 }
119
120 if (!done)
121 {
122 throw new XmlException();
123 }
124 }
125 }
126
127 /// <summary>
128 /// Persists a field in an XML format.
129 /// </summary>
130 /// <param name="writer">XmlWriter where the Field should persist itself as XML.</param>
131 internal override void Write(XmlWriter writer)
132 {
133 writer.WriteStartElement("field", WindowsInstallerData.XmlNamespaceUri);
134
135 if (this.EmbeddedFileIndex.HasValue)
136 {
137 writer.WriteStartAttribute("cabinetFileId");
138 writer.WriteValue(this.EmbeddedFileIndex);
139 writer.WriteEndAttribute();
140 }
141
142 if (this.Modified)
143 {
144 writer.WriteAttributeString("modified", "yes");
145 }
146
147 if (null != this.UnresolvedPreviousData)
148 {
149 writer.WriteAttributeString("unresolvedPreviousData", this.UnresolvedPreviousData);
150 }
151
152 if (null != this.PreviousData)
153 {
154 writer.WriteAttributeString("previousData", this.PreviousData);
155 }
156
157 if (null != this.UnresolvedData)
158 {
159 writer.WriteAttributeString("unresolvedData", this.UnresolvedData);
160 }
161
162 if (this.PreviousEmbeddedFileIndex.HasValue)
163 {
164 writer.WriteStartAttribute("previousCabinetFileId");
165 writer.WriteValue(this.PreviousEmbeddedFileIndex);
166 writer.WriteEndAttribute();
167 }
168
169 // Convert the data to a string that will persist nicely (nulls as String.Empty).
170 string text = Convert.ToString(this.Data, CultureInfo.InvariantCulture);
171 if (this.Column.UseCData)
172 {
173 writer.WriteCData(text);
174 }
175 else
176 {
177 writer.WriteString(text);
178 }
179
180 writer.WriteEndElement();
181 }
182 }
183}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Row.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Row.cs
new file mode 100644
index 00000000..f44082d3
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Row.cs
@@ -0,0 +1,390 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Diagnostics;
7 using System.Globalization;
8 using System.Text;
9 using System.Xml;
10
11 /// <summary>
12 /// Row containing data for a table.
13 /// </summary>
14 public class Row
15 {
16 private static long rowCount;
17
18 /// <summary>
19 /// Creates a row that belongs to a table.
20 /// </summary>
21 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
22 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
23 /// <remarks>The compiler should use this constructor exclusively.</remarks>
24 public Row(SourceLineNumber sourceLineNumbers, Table table)
25 : this(sourceLineNumbers, table.Definition)
26 {
27 this.Table = table;
28 }
29
30 /// <summary>
31 /// Creates a row that does not belong to a table.
32 /// </summary>
33 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
34 /// <param name="tableDefinition">TableDefinition this row should get its column definitions from.</param>
35 /// <remarks>This constructor is used in cases where there isn't a clear owner of the row. The linker uses this constructor for the rows it generates.</remarks>
36 public Row(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition)
37 {
38 this.Number = rowCount++;
39 this.SourceLineNumbers = sourceLineNumbers;
40 this.Fields = new Field[tableDefinition.Columns.Length];
41 this.TableDefinition = tableDefinition;
42
43 for (var i = 0; i < this.Fields.Length; ++i)
44 {
45 this.Fields[i] = Field.Create(this.TableDefinition.Columns[i]);
46 }
47 }
48
49 /// <summary>
50 /// Gets or sets the row transform operation.
51 /// </summary>
52 /// <value>The row transform operation.</value>
53 public RowOperation Operation { get; set; }
54
55 /// <summary>
56 /// Gets or sets wether the row is a duplicate of another row thus redundant.
57 /// </summary>
58 public bool Redundant { get; set; }
59
60 /// <summary>
61 /// Gets or sets the SectionId property on the row.
62 /// </summary>
63 /// <value>The SectionId property on the row.</value>
64 public string SectionId { get; set; }
65
66 /// <summary>
67 /// Gets the source file and line number for the row.
68 /// </summary>
69 /// <value>Source file and line number.</value>
70 public SourceLineNumber SourceLineNumbers { get; }
71
72 /// <summary>
73 /// Gets the table this row belongs to.
74 /// </summary>
75 /// <value>null if Row does not belong to a Table, or owner Table otherwise.</value>
76 public Table Table { get; }
77
78 /// <summary>
79 /// Gets the table definition for this row.
80 /// </summary>
81 /// <remarks>A Row always has a TableDefinition, even if the Row does not belong to a Table.</remarks>
82 /// <value>TableDefinition for Row.</value>
83 public TableDefinition TableDefinition { get; }
84
85 /// <summary>
86 /// Gets the fields contained by this row.
87 /// </summary>
88 /// <value>Array of field objects</value>
89 public Field[] Fields { get; }
90
91 /// <summary>
92 /// Gets the unique number for the row.
93 /// </summary>
94 /// <value>Number for row.</value>
95 public long Number { get; }
96
97 /// <summary>
98 /// Gets or sets the value of a particular field in the row.
99 /// </summary>
100 /// <param name="field">field index.</param>
101 /// <value>Value of a field in the row.</value>
102 public object this[int field]
103 {
104 get { return this.Fields[field].Data; }
105 set { this.Fields[field].Data = value; }
106 }
107
108 /// <summary>
109 /// Gets the field as an integer.
110 /// </summary>
111 /// <returns>Field's data as an integer.</returns>
112 public int FieldAsInteger(int field)
113 {
114 return this.Fields[field].AsInteger();
115 }
116
117 /// <summary>
118 /// Gets the field as an integer that could be null.
119 /// </summary>
120 /// <returns>Field's data as an integer that could be null.</returns>
121 public int? FieldAsNullableInteger(int field)
122 {
123 return this.Fields[field].AsNullableInteger();
124 }
125
126 /// <summary>
127 /// Gets the field as a string.
128 /// </summary>
129 /// <returns>Field's data as a string.</returns>
130 public string FieldAsString(int field)
131 {
132 return this.Fields[field].AsString();
133 }
134
135 /// <summary>
136 /// Sets the value of a particular field in the row without validating.
137 /// </summary>
138 /// <param name="field">field index.</param>
139 /// <param name="value">Value of a field in the row.</param>
140 /// <returns>True if successful, false if validation failed.</returns>
141 public bool BestEffortSetField(int field, object value)
142 {
143 return this.Fields[field].BestEffortSet(value);
144 }
145
146 /// <summary>
147 /// Get the value used to represent the row in a keyed row collection.
148 /// </summary>
149 /// <returns>Primary key or row number if no primary key is available.</returns>
150 public string GetKey()
151 {
152 return this.GetPrimaryKey() ?? Convert.ToString(this.Number, CultureInfo.InvariantCulture);
153 }
154
155 /// <summary>
156 /// Get the primary key of this row.
157 /// </summary>
158 /// <param name="delimiter">Delimiter character for multiple column primary keys.</param>
159 /// <returns>The primary key or null if the row's table has no primary key columns.</returns>
160 public string GetPrimaryKey(char delimiter = '/')
161 {
162 return this.GetPrimaryKey(delimiter, String.Empty);
163 }
164
165 /// <summary>
166 /// Get the primary key of this row.
167 /// </summary>
168 /// <param name="delimiter">Delimiter character for multiple column primary keys.</param>
169 /// <param name="nullReplacement">String to represent null values in the primary key.</param>
170 /// <returns>The primary key or null if the row's table has no primary key columns.</returns>
171 public string GetPrimaryKey(char delimiter, string nullReplacement)
172 {
173 var foundPrimaryKey = false;
174 var primaryKey = new StringBuilder();
175
176 foreach (var field in this.Fields)
177 {
178 if (field.Column.PrimaryKey)
179 {
180 if (foundPrimaryKey)
181 {
182 primaryKey.Append(delimiter);
183 }
184
185 primaryKey.Append((null == field.Data) ? nullReplacement : Convert.ToString(field.Data, CultureInfo.InvariantCulture));
186
187 foundPrimaryKey = true;
188 }
189 else // primary keys must be the first columns of a row so the first non-primary key means we can stop looking.
190 {
191 break;
192 }
193 }
194
195 return foundPrimaryKey ? primaryKey.ToString() : null;
196 }
197
198 /// <summary>
199 /// Returns true if the specified field is null.
200 /// </summary>
201 /// <param name="field">Index of the field to check.</param>
202 /// <returns>true if the specified field is null, false otherwise.</returns>
203 public bool IsColumnNull(int field) => this.Fields[field].Data == null;
204
205 /// <summary>
206 /// Returns true if the specified field is null or an empty string.
207 /// </summary>
208 /// <param name="field">Index of the field to check.</param>
209 /// <returns>true if the specified field is null or an empty string, false otherwise.</returns>
210 public bool IsColumnEmpty(int field)
211 {
212 if (this.IsColumnNull(field))
213 {
214 return true;
215 }
216
217 string dataString = this.Fields[field].Data as string;
218 if (null != dataString && 0 == dataString.Length)
219 {
220 return true;
221 }
222
223 return false;
224 }
225
226 /// <summary>
227 /// Tests if the passed in row is identical.
228 /// </summary>
229 /// <param name="row">Row to compare against.</param>
230 /// <returns>True if two rows are identical.</returns>
231 public bool IsIdentical(Row row)
232 {
233 bool identical = (this.TableDefinition.Name == row.TableDefinition.Name && this.Fields.Length == row.Fields.Length);
234
235 for (var i = 0; identical && i < this.Fields.Length; ++i)
236 {
237 if (!(this.Fields[i].IsIdentical(row.Fields[i])))
238 {
239 identical = false;
240 }
241 }
242
243 return identical;
244 }
245
246 /// <summary>
247 /// Copies this row to the target row.
248 /// </summary>
249 /// <param name="target">Row to copy data to.</param>
250 public void CopyTo(Row target)
251 {
252 for (var i = 0; i < this.Fields.Length; i++)
253 {
254 target[i] = this[i];
255 }
256 }
257
258 /// <summary>
259 /// Returns a string representation of the Row.
260 /// </summary>
261 /// <returns>A string representation of the Row.</returns>
262 public override string ToString()
263 {
264 return String.Join("/", (object[])this.Fields);
265 }
266
267 /// <summary>
268 /// Creates a Row from the XmlReader.
269 /// </summary>
270 /// <param name="reader">Reader to get data from.</param>
271 /// <param name="table">Table for this row.</param>
272 /// <returns>New row object.</returns>
273 internal static Row Read(XmlReader reader, Table table)
274 {
275 Debug.Assert("row" == reader.LocalName);
276
277 bool empty = reader.IsEmptyElement;
278 RowOperation operation = RowOperation.None;
279 bool redundant = false;
280 string sectionId = null;
281 SourceLineNumber sourceLineNumbers = null;
282
283 while (reader.MoveToNextAttribute())
284 {
285 switch (reader.LocalName)
286 {
287 case "op":
288 operation = (RowOperation)Enum.Parse(typeof(RowOperation), reader.Value, true);
289 break;
290 case "redundant":
291 redundant = reader.Value.Equals("yes");
292 break;
293 case "sectionId":
294 sectionId = reader.Value;
295 break;
296 case "sourceLineNumber":
297 sourceLineNumbers = SourceLineNumber.CreateFromEncoded(reader.Value);
298 break;
299 }
300 }
301
302 var row = table.CreateRow(sourceLineNumbers);
303 row.Operation = operation;
304 row.Redundant = redundant;
305 row.SectionId = sectionId;
306
307 // loop through all the fields in a row
308 if (!empty)
309 {
310 var done = false;
311 var field = 0;
312
313 // loop through all the fields in a row
314 while (!done && reader.Read())
315 {
316 switch (reader.NodeType)
317 {
318 case XmlNodeType.Element:
319 switch (reader.LocalName)
320 {
321 case "field":
322 if (row.Fields.Length <= field)
323 {
324 if (!reader.IsEmptyElement)
325 {
326 throw new XmlException();
327 }
328 }
329 else
330 {
331 row.Fields[field].Read(reader);
332 }
333 ++field;
334 break;
335 default:
336 throw new XmlException();
337 }
338 break;
339 case XmlNodeType.EndElement:
340 done = true;
341 break;
342 }
343 }
344
345 if (!done)
346 {
347 throw new XmlException();
348 }
349 }
350
351 return row;
352 }
353
354 /// <summary>
355 /// Persists a row in an XML format.
356 /// </summary>
357 /// <param name="writer">XmlWriter where the Row should persist itself as XML.</param>
358 internal void Write(XmlWriter writer)
359 {
360 writer.WriteStartElement("row", WindowsInstallerData.XmlNamespaceUri);
361
362 if (RowOperation.None != this.Operation)
363 {
364 writer.WriteAttributeString("op", this.Operation.ToString().ToLowerInvariant());
365 }
366
367 if (this.Redundant)
368 {
369 writer.WriteAttributeString("redundant", "yes");
370 }
371
372 if (null != this.SectionId)
373 {
374 writer.WriteAttributeString("sectionId", this.SectionId);
375 }
376
377 if (null != this.SourceLineNumbers)
378 {
379 writer.WriteAttributeString("sourceLineNumber", this.SourceLineNumbers.GetEncoded());
380 }
381
382 for (int i = 0; i < this.Fields.Length; ++i)
383 {
384 this.Fields[i].Write(writer);
385 }
386
387 writer.WriteEndElement();
388 }
389 }
390}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/RowOperation.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/RowOperation.cs
new file mode 100644
index 00000000..22908d2b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/RowOperation.cs
@@ -0,0 +1,30 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 /// <summary>
6 /// The row transform operations.
7 /// </summary>
8 public enum RowOperation
9 {
10 /// <summary>
11 /// No operation.
12 /// </summary>
13 None,
14
15 /// <summary>
16 /// Added row.
17 /// </summary>
18 Add,
19
20 /// <summary>
21 /// Deleted row.
22 /// </summary>
23 Delete,
24
25 /// <summary>
26 /// Modified row.
27 /// </summary>
28 Modify
29 }
30}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/BBControlRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/BBControlRow.cs
new file mode 100644
index 00000000..20482560
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/BBControlRow.cs
@@ -0,0 +1,118 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 using System.Diagnostics.CodeAnalysis;
6
7 /// <summary>
8 /// Specialization of a row for the Control table.
9 /// </summary>
10 public sealed class BBControlRow : Row
11 {
12 /// <summary>
13 /// Creates a Control row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Control row belongs to and should get its column definitions from.</param>
17 public BBControlRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 public BBControlRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
23 base(sourceLineNumbers, tableDefinition)
24 {
25 }
26
27 /// <summary>
28 /// Gets or sets the dialog of the Control row.
29 /// </summary>
30 /// <value>Primary key of the Control row.</value>
31 public string Billboard
32 {
33 get { return (string)this.Fields[0].Data; }
34 set { this.Fields[0].Data = value; }
35 }
36
37 /// <summary>
38 /// Gets or sets the identifier for this Control row.
39 /// </summary>
40 /// <value>Identifier for this Control row.</value>
41 public string BBControl
42 {
43 get { return (string)this.Fields[1].Data; }
44 set { this.Fields[1].Data = value; }
45 }
46
47 /// <summary>
48 /// Gets or sets the type of the BBControl.
49 /// </summary>
50 /// <value>Name of the BBControl.</value>
51 [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
52 public string Type
53 {
54 get { return this.Fields[2].AsString(); }
55 set { this.Fields[2].Data = value; }
56 }
57
58 /// <summary>
59 /// Gets or sets the X location of the BBControl.
60 /// </summary>
61 /// <value>X location of the BBControl.</value>
62 public string X
63 {
64 get { return this.Fields[3].AsString(); }
65 set { this.Fields[3].Data = value; }
66 }
67
68 /// <summary>
69 /// Gets or sets the Y location of the BBControl.
70 /// </summary>
71 /// <value>Y location of the BBControl.</value>
72 public string Y
73 {
74 get { return this.Fields[4].AsString(); }
75 set { this.Fields[4].Data = value; }
76 }
77
78 /// <summary>
79 /// Gets or sets the width of the BBControl.
80 /// </summary>
81 /// <value>Width of the BBControl.</value>
82 public string Width
83 {
84 get { return this.Fields[5].AsString(); }
85 set { this.Fields[5].Data = value; }
86 }
87
88 /// <summary>
89 /// Gets or sets the height of the BBControl.
90 /// </summary>
91 /// <value>Height of the BBControl.</value>
92 public string Height
93 {
94 get { return this.Fields[6].AsString(); }
95 set { this.Fields[6].Data = value; }
96 }
97
98 /// <summary>
99 /// Gets or sets the attributes for the BBControl.
100 /// </summary>
101 /// <value>Attributes for the BBControl.</value>
102 public int Attributes
103 {
104 get { return (int)this.Fields[7].Data; }
105 set { this.Fields[7].Data = value; }
106 }
107
108 /// <summary>
109 /// Gets or sets the text of the BBControl.
110 /// </summary>
111 /// <value>Text of the BBControl.</value>
112 public string Text
113 {
114 get { return (string)this.Fields[8].Data; }
115 set { this.Fields[8].Data = value; }
116 }
117 }
118}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs
new file mode 100644
index 00000000..b7836241
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs
@@ -0,0 +1,247 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Component table.
7 /// </summary>
8 public sealed class ComponentRow : Row
9 {
10 private string sourceFile;
11
12 /// <summary>
13 /// Creates a Control row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Component row belongs to and should get its column definitions from.</param>
17 public ComponentRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 public ComponentRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
23 base(sourceLineNumbers, tableDefinition)
24 {
25 }
26
27 /// <summary>
28 /// Gets or sets the identifier for this Component row.
29 /// </summary>
30 /// <value>Identifier for this Component row.</value>
31 public string Component
32 {
33 get { return (string)this.Fields[0].Data; }
34 set { this.Fields[0].Data = value; }
35 }
36
37 /// <summary>
38 /// Gets or sets the ComponentId for this Component row.
39 /// </summary>
40 /// <value>guid for this Component row.</value>
41 public string Guid
42 {
43 get { return (string)this.Fields[1].Data; }
44 set { this.Fields[1].Data = value; }
45 }
46
47 /// <summary>
48 /// Gets or sets the Directory_ of the Component.
49 /// </summary>
50 /// <value>Directory of the Component.</value>
51 public string Directory
52 {
53 get { return (string)this.Fields[2].Data; }
54 set { this.Fields[2].Data = value; }
55 }
56
57 /// <summary>
58 /// Gets or sets the local only attribute of the Component.
59 /// </summary>
60 /// <value>Local only attribute of the component.</value>
61 public bool IsLocalOnly
62 {
63 get { return WindowsInstallerConstants.MsidbComponentAttributesLocalOnly == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesLocalOnly); }
64 set
65 {
66 if (value)
67 {
68 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesLocalOnly;
69 }
70 else
71 {
72 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesLocalOnly;
73 }
74 }
75 }
76
77 /// <summary>
78 /// Gets or sets the source only attribute of the Component.
79 /// </summary>
80 /// <value>Source only attribute of the component.</value>
81 public bool IsSourceOnly
82 {
83 get { return WindowsInstallerConstants.MsidbComponentAttributesSourceOnly == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesSourceOnly); }
84 set
85 {
86 if (value)
87 {
88 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesSourceOnly;
89 }
90 else
91 {
92 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesSourceOnly;
93 }
94 }
95 }
96
97 /// <summary>
98 /// Gets or sets the optional attribute of the Component.
99 /// </summary>
100 /// <value>Optional attribute of the component.</value>
101 public bool IsOptional
102 {
103 get { return WindowsInstallerConstants.MsidbComponentAttributesOptional == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesOptional); }
104 set
105 {
106 if (value)
107 {
108 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesOptional;
109 }
110 else
111 {
112 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesOptional;
113 }
114 }
115 }
116
117 /// <summary>
118 /// Gets or sets the registry key path attribute of the Component.
119 /// </summary>
120 /// <value>Registry key path attribute of the component.</value>
121 public bool IsRegistryKeyPath
122 {
123 get { return WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath); }
124 set
125 {
126 if (value)
127 {
128 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath;
129 }
130 else
131 {
132 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath;
133 }
134 }
135 }
136
137 /// <summary>
138 /// Gets or sets the shared dll ref count attribute of the Component.
139 /// </summary>
140 /// <value>Shared dll ref countattribute of the component.</value>
141 public bool IsSharedDll
142 {
143 get { return WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount); }
144 set
145 {
146 if (value)
147 {
148 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount;
149 }
150 else
151 {
152 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount;
153 }
154 }
155 }
156
157 /// <summary>
158 /// Gets or sets the permanent attribute of the Component.
159 /// </summary>
160 /// <value>Permanent attribute of the component.</value>
161 public bool IsPermanent
162 {
163 get { return WindowsInstallerConstants.MsidbComponentAttributesPermanent == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesPermanent); }
164 set
165 {
166 if (value)
167 {
168 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesPermanent;
169 }
170 else
171 {
172 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesPermanent;
173 }
174 }
175 }
176
177 /// <summary>
178 /// Gets or sets the ODBC data source key path attribute of the Component.
179 /// </summary>
180 /// <value>ODBC data source key path attribute of the component.</value>
181 public bool IsOdbcDataSourceKeyPath
182 {
183 get { return WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource); }
184 set
185 {
186 if (value)
187 {
188 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource;
189 }
190 else
191 {
192 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource;
193 }
194 }
195 }
196
197 /// <summary>
198 /// Gets or sets the 64 bit attribute of the Component.
199 /// </summary>
200 /// <value>64-bitness of the component.</value>
201 public bool Is64Bit
202 {
203 get { return WindowsInstallerConstants.MsidbComponentAttributes64bit == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributes64bit); }
204 set
205 {
206 if (value)
207 {
208 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributes64bit;
209 }
210 else
211 {
212 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributes64bit;
213 }
214 }
215 }
216
217 /// <summary>
218 /// Gets or sets the condition of the Component.
219 /// </summary>
220 /// <value>Condition of the Component.</value>
221 public string Condition
222 {
223 get { return (string)this.Fields[4].Data; }
224 set { this.Fields[4].Data = value; }
225 }
226
227 /// <summary>
228 /// Gets or sets the key path of the Component.
229 /// </summary>
230 /// <value>Key path of the Component.</value>
231 public string KeyPath
232 {
233 get { return (string)this.Fields[5].Data; }
234 set { this.Fields[5].Data = value; }
235 }
236
237 /// <summary>
238 /// Gets or sets the source location to the file to fill in the Text of the control.
239 /// </summary>
240 /// <value>Source location to the file to fill in the Text of the control.</value>
241 public string SourceFile
242 {
243 get { return this.sourceFile; }
244 set { this.sourceFile = value; }
245 }
246 }
247}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ControlRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ControlRow.cs
new file mode 100644
index 00000000..e0ae2de0
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/ControlRow.cs
@@ -0,0 +1,148 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 using System.Diagnostics.CodeAnalysis;
6
7 /// <summary>
8 /// Specialization of a row for the Control table.
9 /// </summary>
10 public sealed class ControlRow : Row
11 {
12 /// <summary>
13 /// Creates a Control row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Control row belongs to and should get its column definitions from.</param>
17 public ControlRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 public ControlRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
23 base(sourceLineNumbers, tableDefinition)
24 {
25 }
26
27 /// <summary>
28 /// Gets or sets the dialog of the Control row.
29 /// </summary>
30 /// <value>Primary key of the Control row.</value>
31 public string Dialog
32 {
33 get { return (string)this.Fields[0].Data; }
34 set { this.Fields[0].Data = value; }
35 }
36
37 /// <summary>
38 /// Gets or sets the identifier for this Control row.
39 /// </summary>
40 /// <value>Identifier for this Control row.</value>
41 public string Control
42 {
43 get { return (string)this.Fields[1].Data; }
44 set { this.Fields[1].Data = value; }
45 }
46
47 /// <summary>
48 /// Gets or sets the type of the control.
49 /// </summary>
50 /// <value>Name of the control.</value>
51 [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
52 public string Type
53 {
54 get { return (string)this.Fields[2].Data; }
55 set { this.Fields[2].Data = value; }
56 }
57
58 /// <summary>
59 /// Gets or sets the X location of the control.
60 /// </summary>
61 /// <value>X location of the control.</value>
62 public string X
63 {
64 get { return this.Fields[3].AsString(); }
65 set { this.Fields[3].Data = value; }
66 }
67
68 /// <summary>
69 /// Gets or sets the Y location of the control.
70 /// </summary>
71 /// <value>Y location of the control.</value>
72 public string Y
73 {
74 get { return this.Fields[4].AsString(); }
75 set { this.Fields[4].Data = value; }
76 }
77
78 /// <summary>
79 /// Gets or sets the width of the control.
80 /// </summary>
81 /// <value>Width of the control.</value>
82 public string Width
83 {
84 get { return this.Fields[5].AsString(); }
85 set { this.Fields[5].Data = value; }
86 }
87
88 /// <summary>
89 /// Gets or sets the height of the control.
90 /// </summary>
91 /// <value>Height of the control.</value>
92 public string Height
93 {
94 get { return this.Fields[6].AsString(); }
95 set { this.Fields[6].Data = value; }
96 }
97
98 /// <summary>
99 /// Gets or sets the attributes for the control.
100 /// </summary>
101 /// <value>Attributes for the control.</value>
102 public int Attributes
103 {
104 get { return (int)this.Fields[7].Data; }
105 set { this.Fields[7].Data = value; }
106 }
107
108 /// <summary>
109 /// Gets or sets the Property associated with the control.
110 /// </summary>
111 /// <value>Property associated with the control.</value>
112 public string Property
113 {
114 get { return (string)this.Fields[8].Data; }
115 set { this.Fields[8].Data = value; }
116 }
117
118 /// <summary>
119 /// Gets or sets the text of the control.
120 /// </summary>
121 /// <value>Text of the control.</value>
122 public string Text
123 {
124 get { return (string)this.Fields[9].Data; }
125 set { this.Fields[9].Data = value; }
126 }
127
128 /// <summary>
129 /// Gets or sets the next control.
130 /// </summary>
131 /// <value>Next control.</value>
132 public string Next
133 {
134 get { return (string)this.Fields[10].Data; }
135 set { this.Fields[10].Data = value; }
136 }
137
138 /// <summary>
139 /// Gets or sets the help for the control.
140 /// </summary>
141 /// <value>Help for the control.</value>
142 public string Help
143 {
144 get { return (string)this.Fields[11].Data; }
145 set { this.Fields[11].Data = value; }
146 }
147 }
148}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs
new file mode 100644
index 00000000..1cf8cf12
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs
@@ -0,0 +1,214 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 using System.Diagnostics;
6
7 /// <summary>
8 /// Specialization of a row for the file table.
9 /// </summary>
10 public sealed class FileRow : Row
11 {
12 /// <summary>
13 /// Creates a File row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this File row belongs to and should get its column definitions from.</param>
17 public FileRow(SourceLineNumber sourceLineNumbers, Table table)
18 : base(sourceLineNumbers, table)
19 {
20 }
21
22 /// <summary>
23 /// Creates a File row that does not belong to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="tableDefinition">TableDefinition this Media row belongs to and should get its column definitions from.</param>
27 public FileRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition)
28 : base(sourceLineNumbers, tableDefinition)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the primary key of the file row.
34 /// </summary>
35 /// <value>Primary key of the file row.</value>
36 public string File
37 {
38 get => this.FieldAsString(0);
39 set => this.Fields[0].Data = value;
40 }
41
42 /// <summary>
43 /// Gets or sets the component this file row belongs to.
44 /// </summary>
45 /// <value>Component this file row belongs to.</value>
46 public string Component
47 {
48 get => this.FieldAsString(1);
49 set => this.Fields[1].Data = value;
50 }
51
52 /// <summary>
53 /// Gets or sets the name of the file.
54 /// </summary>
55 /// <value>Name of the file.</value>
56 public string FileName
57 {
58 get => this.FieldAsString(2);
59 set => this.Fields[2].Data = value;
60 }
61
62 /// <summary>
63 /// Gets or sets the real filesystem name of the file (without a pipe). This is typically the long name of the file.
64 /// However, if no long name is available, falls back to the short name.
65 /// </summary>
66 /// <value>Long Name of the file - or if no long name is available, falls back to the short name.</value>
67 public string LongFileName
68 {
69 get
70 {
71 var fileName = this.FileName;
72 var index = fileName.IndexOf('|');
73
74 // If it doesn't contain a pipe, just return the whole string
75 // otherwise, extract the part of the string after the pipe.
76 return (-1 == index) ? fileName : fileName.Substring(index + 1);
77 }
78 }
79
80 /// <summary>
81 /// Gets or sets the size of the file.
82 /// </summary>
83 /// <value>Size of the file.</value>
84 public int FileSize
85 {
86 get => this.FieldAsInteger(3);
87 set => this.Fields[3].Data = value;
88 }
89
90 /// <summary>
91 /// Gets or sets the version of the file.
92 /// </summary>
93 /// <value>Version of the file.</value>
94 public string Version
95 {
96 get => this.FieldAsString(4);
97 set => this.Fields[4].Data = value;
98 }
99
100 /// <summary>
101 /// Gets or sets the LCID of the file.
102 /// </summary>
103 /// <value>LCID of the file.</value>
104 public string Language
105 {
106 get => this.FieldAsString(5);
107 set => this.Fields[5].Data = value;
108 }
109
110 /// <summary>
111 /// Gets or sets the attributes on a file.
112 /// </summary>
113 /// <value>Attributes on a file.</value>
114 public int Attributes
115 {
116 get => this.FieldAsInteger(6);
117 set => this.Fields[6].Data = value;
118 }
119
120 /// <summary>
121 /// Gets or sets whether this file should be compressed.
122 /// </summary>
123 /// <value>Whether this file should be compressed.</value>
124 public YesNoType Compressed
125 {
126 get
127 {
128 var compressedFlag = (0 < (this.Attributes & WindowsInstallerConstants.MsidbFileAttributesCompressed));
129 var noncompressedFlag = (0 < (this.Attributes & WindowsInstallerConstants.MsidbFileAttributesNoncompressed));
130
131 if (compressedFlag && noncompressedFlag)
132 {
133 throw new WixException(ErrorMessages.IllegalFileCompressionAttributes(this.SourceLineNumbers));
134 }
135 else if (compressedFlag)
136 {
137 return YesNoType.Yes;
138 }
139 else if (noncompressedFlag)
140 {
141 return YesNoType.No;
142 }
143 else
144 {
145 return YesNoType.NotSet;
146 }
147 }
148
149 set
150 {
151 if (YesNoType.Yes == value)
152 {
153 // these are mutually exclusive
154 this.Attributes |= WindowsInstallerConstants.MsidbFileAttributesCompressed;
155 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
156 }
157 else if (YesNoType.No == value)
158 {
159 // these are mutually exclusive
160 this.Attributes |= WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
161 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesCompressed;
162 }
163 else // not specified
164 {
165 Debug.Assert(YesNoType.NotSet == value);
166
167 // clear any compression bits
168 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesCompressed;
169 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
170 }
171 }
172 }
173
174 /// <summary>
175 /// Gets or sets the sequence of the file row.
176 /// </summary>
177 /// <value>Sequence of the file row.</value>
178 public int Sequence
179 {
180 get => this.FieldAsInteger(7);
181 set => this.Fields[7].Data = value;
182 }
183
184 /// <summary>
185 /// Gets or sets the disk id for this file.
186 /// </summary>
187 /// <value>Disk id for the file.</value>
188 public int DiskId
189 {
190 get => this.FieldAsInteger(8);
191 set => this.Fields[8].Data = value;
192 }
193
194 /// <summary>
195 /// Gets or sets the source location to the file.
196 /// </summary>
197 /// <value>Source location to the file.</value>
198 public string Source
199 {
200 get => this.FieldAsString(9);
201 set => this.Fields[9].Data = value;
202 }
203
204 /// <summary>
205 /// Gets or sets the source location to the previous file.
206 /// </summary>
207 /// <value>Source location to the previous file.</value>
208 public string PreviousSource
209 {
210 get => this.Fields[9].PreviousData;
211 set => this.Fields[9].PreviousData = value;
212 }
213 }
214}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/MediaRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/MediaRow.cs
new file mode 100644
index 00000000..b8fa5e83
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/MediaRow.cs
@@ -0,0 +1,85 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Media table.
7 /// </summary>
8 public sealed class MediaRow : Row
9 {
10 /// <summary>
11 /// Creates a Media row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
15 public MediaRow(SourceLineNumber sourceLineNumbers, Table table)
16 : base(sourceLineNumbers, table)
17 {
18 }
19
20 public MediaRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
21 base(sourceLineNumbers, tableDefinition)
22 {
23 }
24
25 /// <summary>
26 /// Gets or sets the disk id for this media row.
27 /// </summary>
28 /// <value>Disk id.</value>
29 public int DiskId
30 {
31 get { return (int)this.Fields[0].Data; }
32 set { this.Fields[0].Data = value; }
33 }
34
35 /// <summary>
36 /// Gets or sets the last sequence number for this media row.
37 /// </summary>
38 /// <value>Last sequence number.</value>
39 public int LastSequence
40 {
41 get { return (int)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 /// <summary>
46 /// Gets or sets the disk prompt for this media row.
47 /// </summary>
48 /// <value>Disk prompt.</value>
49 public string DiskPrompt
50 {
51 get { return (string)this.Fields[2].Data; }
52 set { this.Fields[2].Data = value; }
53 }
54
55 /// <summary>
56 /// Gets or sets the cabinet name for this media row.
57 /// </summary>
58 /// <value>Cabinet name.</value>
59 public string Cabinet
60 {
61 get { return (string)this.Fields[3].Data; }
62 set { this.Fields[3].Data = value; }
63 }
64
65 /// <summary>
66 /// Gets or sets the volume label for this media row.
67 /// </summary>
68 /// <value>Volume label.</value>
69 public string VolumeLabel
70 {
71 get { return (string)this.Fields[4].Data; }
72 set { this.Fields[4].Data = value; }
73 }
74
75 /// <summary>
76 /// Gets or sets the source for this media row.
77 /// </summary>
78 /// <value>Source.</value>
79 public string Source
80 {
81 get { return (string)this.Fields[5].Data; }
82 set { this.Fields[5].Data = value; }
83 }
84 }
85}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/PropertyRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/PropertyRow.cs
new file mode 100644
index 00000000..b4212430
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/PropertyRow.cs
@@ -0,0 +1,45 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Property table.
7 /// </summary>
8 public sealed class PropertyRow : Row
9 {
10 /// <summary>
11 /// Creates an Property row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this Upgrade row belongs to and should get its column definitions from.</param>
15 public PropertyRow(SourceLineNumber sourceLineNumbers, Table table) :
16 base(sourceLineNumbers, table)
17 {
18 }
19
20 public PropertyRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
21 base(sourceLineNumbers, tableDefinition)
22 {
23 }
24
25 /// <summary>
26 /// Gets and sets the property name for the row.
27 /// </summary>
28 /// <value>Property identifier for the row.</value>
29 public string Property
30 {
31 get { return (string)this.Fields[0].Data; }
32 set { this.Fields[0].Data = value; }
33 }
34
35 /// <summary>
36 /// Gets and sets the property value for the row.
37 /// </summary>
38 /// <value>Property value for the row.</value>
39 public string Value
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44 }
45}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/SummaryInfoRowCollection.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/SummaryInfoRowCollection.cs
new file mode 100644
index 00000000..4b2ce129
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/SummaryInfoRowCollection.cs
@@ -0,0 +1,41 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 using System;
6 using System.Collections.ObjectModel;
7
8 /// <summary>
9 /// Indexed container class for summary information rows.
10 /// </summary>
11 public sealed class SummaryInfoRowCollection : KeyedCollection<int, Row>
12 {
13 /// <summary>
14 /// Creates the keyed collection from existing rows in a table.
15 /// </summary>
16 /// <param name="table">The summary information table to index.</param>
17 public SummaryInfoRowCollection(Table table)
18 {
19 if (0 != String.CompareOrdinal("_SummaryInformation", table.Name))
20 {
21 string message = string.Format(WixDataStrings.EXP_UnsupportedTable, table.Name);
22 throw new ArgumentException(message, "table");
23 }
24
25 foreach (Row row in table.Rows)
26 {
27 this.Add(row);
28 }
29 }
30
31 /// <summary>
32 /// Gets the summary property ID for the <paramref name="row"/>.
33 /// </summary>
34 /// <param name="row">The row to index.</param>
35 /// <returns>The summary property ID for the <paramref name="row"/>.</returns>
36 protected override int GetKeyForItem(Row row)
37 {
38 return (int)row[0];
39 }
40 }
41}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/UpgradeRow.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/UpgradeRow.cs
new file mode 100644
index 00000000..dbbfa0f9
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Rows/UpgradeRow.cs
@@ -0,0 +1,95 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the upgrade table.
7 /// </summary>
8 public sealed class UpgradeRow : Row
9 {
10 /// <summary>
11 /// Creates an Upgrade row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this Upgrade row belongs to and should get its column definitions from.</param>
15 public UpgradeRow(SourceLineNumber sourceLineNumbers, Table table) :
16 base(sourceLineNumbers, table)
17 {
18 }
19
20 public UpgradeRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) :
21 base(sourceLineNumbers, tableDefinition)
22 {
23 }
24
25 /// <summary>
26 /// Gets and sets the upgrade code for the row.
27 /// </summary>
28 /// <value>Upgrade code for the row.</value>
29 public string UpgradeCode
30 {
31 get { return (string)this.Fields[0].Data; }
32 set { this.Fields[0].Data = value; }
33 }
34
35 /// <summary>
36 /// Gets and sets the version minimum for the row.
37 /// </summary>
38 /// <value>Version minimum for the row.</value>
39 public string VersionMin
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 /// <summary>
46 /// Gets and sets the version maximum for the row.
47 /// </summary>
48 /// <value>Version maximum for the row.</value>
49 public string VersionMax
50 {
51 get { return (string)this.Fields[2].Data; }
52 set { this.Fields[2].Data = value; }
53 }
54
55 /// <summary>
56 /// Gets and sets the language for the row.
57 /// </summary>
58 /// <value>Language for the row.</value>
59 public string Language
60 {
61 get { return (string)this.Fields[3].Data; }
62 set { this.Fields[3].Data = value; }
63 }
64
65 /// <summary>
66 /// Gets and sets the attributes for the row.
67 /// </summary>
68 /// <value>Attributes for the row.</value>
69 public int Attributes
70 {
71 get { return (int)this.Fields[4].Data; }
72 set { this.Fields[4].Data = value; }
73 }
74
75 /// <summary>
76 /// Gets and sets the remove code for the row.
77 /// </summary>
78 /// <value>Remove code for the row.</value>
79 public string Remove
80 {
81 get { return (string)this.Fields[5].Data; }
82 set { this.Fields[5].Data = value; }
83 }
84
85 /// <summary>
86 /// Gets and sets the action property for the row.
87 /// </summary>
88 /// <value>Action property for the row.</value>
89 public string ActionProperty
90 {
91 get { return (string)this.Fields[6].Data; }
92 set { this.Fields[6].Data = value; }
93 }
94 }
95}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/SequenceTableExtensions.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/SequenceTableExtensions.cs
new file mode 100644
index 00000000..9131a374
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/SequenceTableExtensions.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
3namespace WixToolset.Data.WindowsInstaller
4{
5 using WixToolset.Data.Symbols;
6
7 /// <summary>
8 /// Enhancements to the SequenceTable enum.
9 /// </summary>
10 public static class SequenceTableExtensions
11 {
12 /// <summary>
13 /// Gets the SequenceTable enum as the Windows Installer table name.
14 /// </summary>
15 public static string WindowsInstallerTableName(this SequenceTable sequence) => (sequence == SequenceTable.AdvertiseExecuteSequence) ? "AdvtExecuteSequence" : sequence.ToString();
16 }
17}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/SubStorage.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/SubStorage.cs
new file mode 100644
index 00000000..76b1b795
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/SubStorage.cs
@@ -0,0 +1,112 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System.Xml;
6
7 /// <summary>
8 /// Substorage inside an output.
9 /// </summary>
10 public sealed class SubStorage
11 {
12 /// <summary>
13 /// Instantiate a new substorage.
14 /// </summary>
15 /// <param name="name">The substorage name.</param>
16 /// <param name="data">The substorage data.</param>
17 public SubStorage(string name, WindowsInstallerData data)
18 {
19 this.Name = name;
20 this.Data = data;
21 }
22
23 /// <summary>
24 /// Gets the substorage name.
25 /// </summary>
26 /// <value>The substorage name.</value>
27 public string Name { get; }
28
29 /// <summary>
30 /// Gets the substorage data.
31 /// </summary>
32 /// <value>The substorage data.</value>
33 public WindowsInstallerData Data { get; }
34
35 /// <summary>
36 /// Creates a SubStorage from the XmlReader.
37 /// </summary>
38 /// <param name="reader">Reader to get data from.</param>
39 /// <param name="tableDefinitions">Table definitions to use for strongly-typed rows.</param>
40 /// <returns>New SubStorage object.</returns>
41 internal static SubStorage Read(XmlReader reader, TableDefinitionCollection tableDefinitions)
42 {
43 if (reader.LocalName != "subStorage")
44 {
45 throw new XmlException();
46 }
47
48 WindowsInstallerData data = null;
49 string name = null;
50
51 var empty = reader.IsEmptyElement;
52
53 while (reader.MoveToNextAttribute())
54 {
55 switch (reader.LocalName)
56 {
57 case "name":
58 name = reader.Value;
59 break;
60 }
61 }
62
63 if (!empty)
64 {
65 var done = false;
66
67 while (!done && reader.Read())
68 {
69 switch (reader.NodeType)
70 {
71 case XmlNodeType.Element:
72 switch (reader.LocalName)
73 {
74 case WindowsInstallerData.XmlElementName:
75 data = WindowsInstallerData.Read(reader, tableDefinitions, true);
76 break;
77 default:
78 throw new XmlException();
79 }
80 break;
81
82 case XmlNodeType.EndElement:
83 done = true;
84 break;
85 }
86 }
87
88 if (!done)
89 {
90 throw new XmlException();
91 }
92 }
93
94 return new SubStorage(name, data);
95 }
96
97 /// <summary>
98 /// Persists a SubStorage in an XML format.
99 /// </summary>
100 /// <param name="writer">XmlWriter where the SubStorage should persist itself as XML.</param>
101 internal void Write(XmlWriter writer)
102 {
103 writer.WriteStartElement("subStorage", WindowsInstallerData.XmlNamespaceUri);
104
105 writer.WriteAttributeString("name", this.Name);
106
107 this.Data.Write(writer);
108
109 writer.WriteEndElement();
110 }
111 }
112}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Table.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/Table.cs
new file mode 100644
index 00000000..714be20f
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Table.cs
@@ -0,0 +1,190 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Diagnostics;
8 using System.Xml;
9
10 /// <summary>
11 /// Object that represents a table in a database.
12 /// </summary>
13 [DebuggerDisplay("{Name}")]
14 public class Table
15 {
16 /// <summary>
17 /// Creates a table.
18 /// </summary>
19 /// <param name="tableDefinition">Definition of the table.</param>
20 public Table(TableDefinition tableDefinition)
21 {
22 this.Definition = tableDefinition;
23 this.Rows = new List<Row>();
24 }
25
26 /// <summary>
27 /// Gets the table definition.
28 /// </summary>
29 /// <value>Definition of the table.</value>
30 public TableDefinition Definition { get; }
31
32 /// <summary>
33 /// Gets the name of the table.
34 /// </summary>
35 /// <value>Name of the table.</value>
36 public string Name => this.Definition.Name;
37
38 /// <summary>
39 /// Gets or sets the table transform operation.
40 /// </summary>
41 /// <value>The table transform operation.</value>
42 public TableOperation Operation { get; set; }
43
44 /// <summary>
45 /// Gets the rows contained in the table.
46 /// </summary>
47 /// <value>Rows contained in the table.</value>
48 public IList<Row> Rows { get; }
49
50 /// <summary>
51 /// Creates a new row and adds it to the table.
52 /// </summary>
53 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
54 /// <returns>Row created in table.</returns>
55 public Row CreateRow(SourceLineNumber sourceLineNumbers)
56 {
57 var row = this.Definition.CreateRow(sourceLineNumbers, this);
58 this.Rows.Add(row);
59 return row;
60 }
61
62 /// <summary>
63 /// Validates the rows of this OutputTable and throws if it collides on
64 /// primary keys.
65 /// </summary>
66 public void ValidateRows()
67 {
68 var primaryKeys = new Dictionary<string, SourceLineNumber>();
69
70 foreach (var row in this.Rows)
71 {
72 var primaryKey = row.GetPrimaryKey();
73
74 if (primaryKeys.TryGetValue(primaryKey, out var collisionSourceLineNumber))
75 {
76 throw new WixException(ErrorMessages.DuplicatePrimaryKey(collisionSourceLineNumber, primaryKey, this.Definition.Name));
77 }
78
79 primaryKeys.Add(primaryKey, row.SourceLineNumbers);
80 }
81 }
82
83 /// <summary>
84 /// Parse a table from the xml.
85 /// </summary>
86 /// <param name="reader">XmlReader where the intermediate is persisted.</param>
87 /// <param name="tableDefinitions">TableDefinitions to use in the intermediate.</param>
88 /// <returns>The parsed table.</returns>
89 internal static Table Read(XmlReader reader, TableDefinitionCollection tableDefinitions)
90 {
91 Debug.Assert("table" == reader.LocalName);
92
93 bool empty = reader.IsEmptyElement;
94 TableOperation operation = TableOperation.None;
95 string name = null;
96
97 while (reader.MoveToNextAttribute())
98 {
99 switch (reader.LocalName)
100 {
101 case "name":
102 name = reader.Value;
103 break;
104 case "op":
105 switch (reader.Value)
106 {
107 case "add":
108 operation = TableOperation.Add;
109 break;
110 case "drop":
111 operation = TableOperation.Drop;
112 break;
113 default:
114 throw new XmlException();
115 }
116 break;
117 }
118 }
119
120 if (null == name)
121 {
122 throw new XmlException();
123 }
124
125 TableDefinition tableDefinition = tableDefinitions[name];
126 Table table = new Table(tableDefinition);
127 table.Operation = operation;
128
129 if (!empty)
130 {
131 bool done = false;
132
133 // loop through all the rows in a table
134 while (!done && reader.Read())
135 {
136 switch (reader.NodeType)
137 {
138 case XmlNodeType.Element:
139 switch (reader.LocalName)
140 {
141 case "row":
142 Row.Read(reader, table);
143 break;
144 default:
145 throw new XmlException();
146 }
147 break;
148 case XmlNodeType.EndElement:
149 done = true;
150 break;
151 }
152 }
153
154 if (!done)
155 {
156 throw new XmlException();
157 }
158 }
159
160 return table;
161 }
162
163 /// <summary>
164 /// Persists a row in an XML format.
165 /// </summary>
166 /// <param name="writer">XmlWriter where the Row should persist itself as XML.</param>
167 internal void Write(XmlWriter writer)
168 {
169 if (null == writer)
170 {
171 throw new ArgumentNullException("writer");
172 }
173
174 writer.WriteStartElement("table", WindowsInstallerData.XmlNamespaceUri);
175 writer.WriteAttributeString("name", this.Name);
176
177 if (TableOperation.None != this.Operation)
178 {
179 writer.WriteAttributeString("op", this.Operation.ToString().ToLowerInvariant());
180 }
181
182 foreach (var row in this.Rows)
183 {
184 row.Write(writer);
185 }
186
187 writer.WriteEndElement();
188 }
189 }
190}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinition.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinition.cs
new file mode 100644
index 00000000..a7602d05
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinition.cs
@@ -0,0 +1,267 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Linq;
8 using System.Xml;
9
10 /// <summary>
11 /// Definition of a table in a database.
12 /// </summary>
13 public sealed class TableDefinition : IComparable<TableDefinition>
14 {
15 /// <summary>
16 /// Tracks the maximum number of columns supported in a real table.
17 /// This is a Windows Installer limitation.
18 /// </summary>
19 public const int MaxColumnsInRealTable = 32;
20
21 /// <summary>
22 /// Creates a table definition.
23 /// </summary>
24 /// <param name="name">Name of table to create.</param>
25 /// <param name="symbolDefinition">Optional symbol definition for this table.</param>
26 /// <param name="columns">Column definitions for the table.</param>
27 /// <param name="unreal">Flag if table is unreal.</param>
28 /// <param name="symbolIdIsPrimaryKey">Whether the primary key is the id of the symbol definition associated with this table.</param>
29 /// <param name="strongRowType">The specialized type for the rows.</param>
30 public TableDefinition(string name, IntermediateSymbolDefinition symbolDefinition, IEnumerable<ColumnDefinition> columns, bool unreal = false, bool symbolIdIsPrimaryKey = false, Type strongRowType = null)
31 {
32 this.Name = name;
33 this.SymbolDefinition = symbolDefinition;
34 this.SymbolIdIsPrimaryKey = symbolIdIsPrimaryKey;
35 this.Unreal = unreal;
36 this.Columns = columns?.ToArray();
37 this.StrongRowType = strongRowType ?? typeof(Row);
38
39 if (this.Columns == null || this.Columns.Length == 0)
40 {
41 throw new ArgumentOutOfRangeException(nameof(columns));
42 }
43#if DEBUG
44 if (this.StrongRowType != typeof(Row) && !this.StrongRowType.IsSubclassOf(typeof(Row))) { throw new ArgumentException(nameof(strongRowType)); }
45#endif
46 }
47
48 /// <summary>
49 /// Gets the name of the table.
50 /// </summary>
51 /// <value>Name of the table.</value>
52 public string Name { get; }
53
54 /// <summary>
55 /// Gets the symbol definition associated with this table.
56 /// </summary>
57 /// <value>The symbol definition.</value>
58 public IntermediateSymbolDefinition SymbolDefinition { get; }
59
60 /// <summary>
61 /// Gets if the table is unreal.
62 /// </summary>
63 /// <value>Flag if table is unreal.</value>
64 public bool Unreal { get; }
65
66 /// <summary>
67 /// Gets the collection of column definitions for this table.
68 /// </summary>
69 /// <value>Collection of column definitions for this table.</value>
70 public ColumnDefinition[] Columns { get; }
71
72 /// <summary>
73 /// Gets if the primary key is the id of the symbol definition associated with this table.
74 /// </summary>
75 /// <value>Flag if table is unreal.</value>
76 public bool SymbolIdIsPrimaryKey { get; }
77
78 private Type StrongRowType { get; }
79
80 /// <summary>
81 /// Gets the column definition in the table by index.
82 /// </summary>
83 /// <param name="columnIndex">Index of column to locate.</param>
84 /// <value>Column definition in the table by index.</value>
85 public ColumnDefinition this[int columnIndex] => this.Columns[columnIndex];
86
87 /// <summary>
88 /// In general this method shouldn't be used - create rows from a Table instead.
89 /// Creates a new row object of the type specified in this definition.
90 /// </summary>
91 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
92 /// <returns>Created row.</returns>
93 public Row CreateRow(SourceLineNumber sourceLineNumbers)
94 {
95 var result = (Row)Activator.CreateInstance(this.StrongRowType, sourceLineNumbers, this);
96 return result;
97 }
98
99 /// <summary>
100 /// Creates a new row object of the type specified in this definition for the given table.
101 /// External callers should create the row from the table.
102 /// </summary>
103 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
104 /// <param name="table">The owning table for this row.</param>
105 /// <returns>Created row.</returns>
106 internal Row CreateRow(SourceLineNumber sourceLineNumbers, Table table)
107 {
108 var result = (Row)Activator.CreateInstance(this.StrongRowType, sourceLineNumbers, table);
109 return result;
110 }
111
112 /// <summary>
113 /// Compares this table definition to another table definition.
114 /// </summary>
115 /// <remarks>
116 /// Only Windows Installer traits are compared, allowing for updates to WiX-specific table definitions.
117 /// </remarks>
118 /// <param name="updated">The updated <see cref="TableDefinition"/> to compare with this target definition.</param>
119 /// <returns>0 if the tables' core properties are the same; otherwise, non-0.</returns>
120 public int CompareTo(TableDefinition updated)
121 {
122 // by definition, this object is greater than null
123 if (null == updated)
124 {
125 return 1;
126 }
127
128 // compare the table names
129 var ret = String.Compare(this.Name, updated.Name, StringComparison.Ordinal);
130
131 // compare the column count
132 if (0 == ret)
133 {
134 // transforms can only add columns
135 ret = Math.Min(0, updated.Columns.Length - this.Columns.Length);
136
137 // compare name, type, and length of each column
138 for (var i = 0; 0 == ret && this.Columns.Length > i; i++)
139 {
140 var thisColumnDef = this.Columns[i];
141 var updatedColumnDef = updated.Columns[i];
142
143 // Igmore unreal columns when comparing table definitions.
144 if (thisColumnDef.Unreal || updatedColumnDef.Unreal)
145 {
146 continue;
147 }
148
149 ret = thisColumnDef.CompareTo(updatedColumnDef);
150 }
151 }
152
153 return ret;
154 }
155
156 /// <summary>
157 /// Parses table definition from xml reader.
158 /// </summary>
159 /// <param name="reader">Reader to get data from.</param>
160 /// <param name="tableDefinitions">Table definitions to use for strongly-typed rows.</param>
161 /// <returns>The TableDefintion represented by the Xml.</returns>
162 internal static TableDefinition Read(XmlReader reader, TableDefinitionCollection tableDefinitions)
163 {
164 var empty = reader.IsEmptyElement;
165 string name = null;
166 IntermediateSymbolDefinition symbolDefinition = null;
167 var unreal = false;
168 var symbolIdIsPrimaryKey = false;
169 Type strongRowType = null;
170
171 while (reader.MoveToNextAttribute())
172 {
173 switch (reader.LocalName)
174 {
175 case "name":
176 name = reader.Value;
177 break;
178 case "unreal":
179 unreal = reader.Value.Equals("yes");
180 break;
181 }
182 }
183
184 if (null == name)
185 {
186 throw new XmlException();
187 }
188
189 if (tableDefinitions.TryGet(name, out var tableDefinition))
190 {
191 symbolDefinition = tableDefinition.SymbolDefinition;
192 symbolIdIsPrimaryKey = tableDefinition.SymbolIdIsPrimaryKey;
193 strongRowType = tableDefinition.StrongRowType;
194 }
195
196 var columns = new List<ColumnDefinition>();
197 var hasPrimaryKeyColumn = false;
198
199 // parse the child elements
200 if (!empty)
201 {
202 var done = false;
203
204 while (!done && reader.Read())
205 {
206 switch (reader.NodeType)
207 {
208 case XmlNodeType.Element:
209 switch (reader.LocalName)
210 {
211 case "columnDefinition":
212 var columnDefinition = ColumnDefinition.Read(reader);
213 columns.Add(columnDefinition);
214
215 if (columnDefinition.PrimaryKey)
216 {
217 hasPrimaryKeyColumn = true;
218 }
219 break;
220 default:
221 throw new XmlException();
222 }
223 break;
224 case XmlNodeType.EndElement:
225 done = true;
226 break;
227 }
228 }
229
230 if (!unreal && !hasPrimaryKeyColumn)
231 {
232 throw new WixException(ErrorMessages.RealTableMissingPrimaryKeyColumn(SourceLineNumber.CreateFromUri(reader.BaseURI), name));
233 }
234
235 if (!done)
236 {
237 throw new XmlException();
238 }
239 }
240
241 return new TableDefinition(name, symbolDefinition, columns.ToArray(), unreal, symbolIdIsPrimaryKey, strongRowType);
242 }
243
244 /// <summary>
245 /// Persists an output in an XML format.
246 /// </summary>
247 /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
248 internal void Write(XmlWriter writer)
249 {
250 writer.WriteStartElement("tableDefinition", TableDefinitionCollection.XmlNamespaceUri);
251
252 writer.WriteAttributeString("name", this.Name);
253
254 if (this.Unreal)
255 {
256 writer.WriteAttributeString("unreal", "yes");
257 }
258
259 foreach (var columnDefinition in this.Columns)
260 {
261 columnDefinition.Write(writer);
262 }
263
264 writer.WriteEndElement();
265 }
266 }
267}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinitionCollection.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinitionCollection.cs
new file mode 100644
index 00000000..fcc2b1f6
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/TableDefinitionCollection.cs
@@ -0,0 +1,201 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System.Collections;
6 using System.Collections.Generic;
7 using System.Linq;
8 using System.Xml;
9
10 /// <summary>
11 /// Collection for table definitions indexed by table name.
12 /// </summary>
13 public sealed class TableDefinitionCollection : ICollection<TableDefinition>
14 {
15 public const string XmlNamespaceUri = "http://wixtoolset.org/schemas/v4/wi/tables";
16
17 private Dictionary<string, TableDefinition> collection;
18
19 /// <summary>
20 /// Instantiate a new TableDefinitionCollection class.
21 /// </summary>
22 public TableDefinitionCollection()
23 {
24 this.collection = new Dictionary<string, TableDefinition>();
25 }
26
27 /// <summary>
28 /// Creates a shallow copy of the provided table definition collection.
29 /// </summary>
30 public TableDefinitionCollection(TableDefinitionCollection tableDefinitions)
31 {
32 this.collection = new Dictionary<string, TableDefinition>(tableDefinitions.collection);
33 }
34
35 /// <summary>
36 /// Creates a table definition collection with the given table definitions.
37 /// </summary>
38 public TableDefinitionCollection(IEnumerable<TableDefinition> tableDefinitions)
39 {
40 this.collection = tableDefinitions.ToDictionary(t => t.Name);
41 }
42
43 /// <summary>
44 /// Gets the number of items in the collection.
45 /// </summary>
46 /// <value>Number of items in collection.</value>
47 public int Count => this.collection.Count;
48
49 /// <summary>
50 /// Table definition collections are never read-only.
51 /// </summary>
52 public bool IsReadOnly => false;
53
54 /// <summary>
55 /// Gets a table definition by name.
56 /// </summary>
57 /// <param name="tableName">Name of table to locate.</param>
58 public TableDefinition this[string tableName]
59 {
60 get
61 {
62 if (!this.collection.TryGetValue(tableName, out var table))
63 {
64 throw new WixMissingTableDefinitionException(ErrorMessages.MissingTableDefinition(tableName));
65 }
66
67 return table;
68 }
69 }
70
71 /// <summary>
72 /// Tries to get a table definition by name.
73 /// </summary>
74 /// <param name="tableName">Name of table to locate.</param>
75 /// <param name="table">Table definition if found.</param>
76 /// <returns>True if table definition was found otherwise false.</returns>
77 public bool TryGet(string tableName, out TableDefinition table) => this.collection.TryGetValue(tableName, out table);
78
79 /// <summary>
80 /// Adds a table definition to the collection.
81 /// </summary>
82 /// <param name="tableDefinition">Table definition to add to the collection.</param>
83 /// <value>Indexes by table definition name.</value>
84 public void Add(TableDefinition tableDefinition) => this.collection.Add(tableDefinition.Name, tableDefinition);
85
86 /// <summary>
87 /// Removes all table definitions from the collection.
88 /// </summary>
89 public void Clear() => this.collection.Clear();
90
91 /// <summary>
92 /// Checks if the collection contains a table name.
93 /// </summary>
94 /// <param name="tableName">The table to check in the collection.</param>
95 /// <returns>True if collection contains the table.</returns>
96 public bool Contains(string tableName) => this.collection.ContainsKey(tableName);
97
98 /// <summary>
99 /// Checks if the collection contains a table.
100 /// </summary>
101 /// <param name="table">The table to check in the collection.</param>
102 /// <returns>True if collection contains the table.</returns>
103 public bool Contains(TableDefinition table) => this.collection.ContainsKey(table.Name);
104
105 /// <summary>
106 /// Copies table definitions to an arry.
107 /// </summary>
108 /// <param name="array">Array to copy the table definitions to.</param>
109 /// <param name="index">Index in the array to start copying at.</param>
110 public void CopyTo(TableDefinition[] array, int index) => this.collection.Values.CopyTo(array, index);
111
112 /// <summary>
113 /// Removes a table definition from the collection.
114 /// </summary>
115 /// <param name="table">Table to remove from the collection.</param>
116 /// <returns>True if the table definition existed in the collection and was removed.</returns>
117 public bool Remove(TableDefinition table) => this.collection.Remove(table.Name);
118
119 /// <summary>
120 /// Gets enumerator for the collection.
121 /// </summary>
122 /// <returns>Enumerator for the collection.</returns>
123 public IEnumerator<TableDefinition> GetEnumerator() => this.collection.Values.GetEnumerator();
124
125 /// <summary>
126 /// Gets the untyped enumerator for the collection.
127 /// </summary>
128 /// <returns>Untyped enumerator for the collection.</returns>
129 IEnumerator IEnumerable.GetEnumerator() => this.collection.Values.GetEnumerator();
130
131 /// <summary>
132 /// Loads a collection of table definitions from a XmlReader in memory.
133 /// </summary>
134 /// <param name="reader">Reader to get data from.</param>
135 /// <param name="tableDefinitions">Table definitions to use for strongly-typed rows.</param>
136 /// <returns>The TableDefinitionCollection represented by the xml.</returns>
137 internal static TableDefinitionCollection Read(XmlReader reader, TableDefinitionCollection tableDefinitions)
138 {
139 if ("tableDefinitions" != reader.LocalName)
140 {
141 throw new XmlException();
142 }
143
144 var empty = reader.IsEmptyElement;
145 var tableDefinitionCollection = new TableDefinitionCollection();
146
147 while (reader.MoveToNextAttribute())
148 {
149 }
150
151 // parse the child elements
152 if (!empty)
153 {
154 var done = false;
155
156 while (!done && reader.Read())
157 {
158 switch (reader.NodeType)
159 {
160 case XmlNodeType.Element:
161 switch (reader.LocalName)
162 {
163 case "tableDefinition":
164 tableDefinitionCollection.Add(TableDefinition.Read(reader, tableDefinitions));
165 break;
166 default:
167 throw new XmlException();
168 }
169 break;
170 case XmlNodeType.EndElement:
171 done = true;
172 break;
173 }
174 }
175
176 if (!done)
177 {
178 throw new XmlException();
179 }
180 }
181
182 return tableDefinitionCollection;
183 }
184
185 /// <summary>
186 /// Persists a TableDefinitionCollection in an XML format.
187 /// </summary>
188 /// <param name="writer">XmlWriter where the TableDefinitionCollection should persist itself as XML.</param>
189 internal void Write(XmlWriter writer)
190 {
191 writer.WriteStartElement("tableDefinitions", XmlNamespaceUri);
192
193 foreach (var tableDefinition in this.collection.Values.OrderBy(t => t.Name))
194 {
195 tableDefinition.Write(writer);
196 }
197
198 writer.WriteEndElement();
199 }
200 }
201}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/TableIndexedCollection.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/TableIndexedCollection.cs
new file mode 100644
index 00000000..a399c6fa
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/TableIndexedCollection.cs
@@ -0,0 +1,105 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System.Collections.Generic;
6 using System.Linq;
7
8 /// <summary>
9 /// Collection for tables.
10 /// </summary>
11 public sealed class TableIndexedCollection : ICollection<Table>
12 {
13 private Dictionary<string, Table> collection;
14
15 /// <summary>
16 /// Instantiate a new empty collection.
17 /// </summary>
18 public TableIndexedCollection() => this.collection = new Dictionary<string, Table>();
19
20 /// <summary>
21 /// Instantiate a new collection populated with a set of tables.
22 /// </summary>
23 /// <param name="tables">Set of tables.</param>
24 public TableIndexedCollection(IEnumerable<Table> tables) => this.collection = tables.ToDictionary(t => t.Name);
25
26 /// <summary>
27 /// Gets the number of items in the collection.
28 /// </summary>
29 /// <value>Number of items in collection.</value>
30 public int Count => this.collection.Count;
31
32 /// <summary>
33 /// Table indexed collection is never read only.
34 /// </summary>
35 public bool IsReadOnly => false;
36
37 /// <summary>
38 /// Adds a table to the collection.
39 /// </summary>
40 /// <param name="table">Table to add to the collection.</param>
41 /// <remarks>Indexes the table by name.</remarks>
42 public void Add(Table table) => this.collection.Add(table.Name, table);
43
44 /// <summary>
45 /// Clear the tables from the collection.
46 /// </summary>
47 public void Clear() => this.collection.Clear();
48
49 /// <summary>
50 /// Determines if a table is in the collection.
51 /// </summary>
52 /// <param name="table">Table to check if it is in the collection.</param>
53 /// <returns>True if the table name is in the collection, otherwise false.</returns>
54 public bool Contains(Table table) => this.collection.ContainsKey(table.Name);
55
56 /// <summary>
57 /// Copies the collection into an array.
58 /// </summary>
59 /// <param name="array">Array to copy the collection into.</param>
60 /// <param name="arrayIndex">Index to start copying from.</param>
61 public void CopyTo(Table[] array, int arrayIndex) => this.collection.Values.CopyTo(array, arrayIndex);
62
63 /// <summary>
64 /// Remove a table from the collection by name.
65 /// </summary>
66 /// <param name="tableName">Table name to remove from the collection.</param>
67 public void Remove(string tableName) => _ = this.collection.Remove(tableName);
68
69 /// <summary>
70 /// Remove a table from the collection.
71 /// </summary>
72 /// <param name="table">Table with matching name to remove from the collection.</param>
73 public bool Remove(Table table) => this.collection.Remove(table.Name);
74
75 /// <summary>
76 /// Gets an enumerator over the whole collection.
77 /// </summary>
78 /// <returns>Collection enumerator.</returns>
79 public IEnumerator<Table> GetEnumerator() => this.collection.Values.GetEnumerator();
80
81 /// <summary>
82 /// Gets an untyped enumerator over the whole collection.
83 /// </summary>
84 /// <returns>Untyped collection enumerator.</returns>
85 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => this.collection.Values.GetEnumerator();
86
87 /// <summary>
88 /// Gets a table by name.
89 /// </summary>
90 /// <param name="tableName">Name of table to locate.</param>
91 public Table this[string tableName]
92 {
93 get => this.collection.TryGetValue(tableName, out var table) ? table : null;
94 set => this.collection[tableName] = value;
95 }
96
97 /// <summary>
98 /// Tries to find a table by name.
99 /// </summary>
100 /// <param name="tableName">Table name to locate.</param>
101 /// <param name="table">Found table.</param>
102 /// <returns>True if table with table name was found, otherwise false.</returns>
103 public bool TryGetTable(string tableName, out Table table) => this.collection.TryGetValue(tableName, out table);
104 }
105}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/TableOperation.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/TableOperation.cs
new file mode 100644
index 00000000..ccd0ebca
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/TableOperation.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 /// <summary>
6 /// The table transform operations.
7 /// </summary>
8 public enum TableOperation
9 {
10 /// <summary>
11 /// No operation.
12 /// </summary>
13 None,
14
15 /// <summary>
16 /// Added table.
17 /// </summary>
18 Add,
19
20 /// <summary>
21 /// Dropped table.
22 /// </summary>
23 Drop,
24 }
25}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs
new file mode 100644
index 00000000..c60f2c0d
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs
@@ -0,0 +1,259 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 public static class WindowsInstallerConstants
6 {
7 // Component.Attributes
8 public const int MsidbComponentAttributesLocalOnly = 0;
9 public const int MsidbComponentAttributesSourceOnly = 1;
10 public const int MsidbComponentAttributesOptional = 2;
11 public const int MsidbComponentAttributesRegistryKeyPath = 4;
12 public const int MsidbComponentAttributesSharedDllRefCount = 8;
13 public const int MsidbComponentAttributesPermanent = 16;
14 public const int MsidbComponentAttributesODBCDataSource = 32;
15 public const int MsidbComponentAttributesTransitive = 64;
16 public const int MsidbComponentAttributesNeverOverwrite = 128;
17 public const int MsidbComponentAttributes64bit = 256;
18 public const int MsidbComponentAttributesDisableRegistryReflection = 512;
19 public const int MsidbComponentAttributesUninstallOnSupersedence = 1024;
20 public const int MsidbComponentAttributesShared = 2048;
21
22 // BBControl.Attributes & Control.Attributes
23 public const int MsidbControlAttributesVisible = 0x00000001;
24 public const int MsidbControlAttributesEnabled = 0x00000002;
25 public const int MsidbControlAttributesSunken = 0x00000004;
26 public const int MsidbControlAttributesIndirect = 0x00000008;
27 public const int MsidbControlAttributesInteger = 0x00000010;
28 public const int MsidbControlAttributesRTLRO = 0x00000020;
29 public const int MsidbControlAttributesRightAligned = 0x00000040;
30 public const int MsidbControlAttributesLeftScroll = 0x00000080;
31 public const int MsidbControlAttributesBiDi = MsidbControlAttributesRTLRO | MsidbControlAttributesRightAligned | MsidbControlAttributesLeftScroll;
32
33 // Text controls
34 public const int MsidbControlAttributesTransparent = 0x00010000;
35 public const int MsidbControlAttributesNoPrefix = 0x00020000;
36 public const int MsidbControlAttributesNoWrap = 0x00040000;
37 public const int MsidbControlAttributesFormatSize = 0x00080000;
38 public const int MsidbControlAttributesUsersLanguage = 0x00100000;
39
40 // Edit controls
41 public const int MsidbControlAttributesMultiline = 0x00010000;
42 public const int MsidbControlAttributesPasswordInput = 0x00200000;
43
44 // ProgressBar controls
45 public const int MsidbControlAttributesProgress95 = 0x00010000;
46
47 // VolumeSelectCombo and DirectoryCombo controls
48 public const int MsidbControlAttributesRemovableVolume = 0x00010000;
49 public const int MsidbControlAttributesFixedVolume = 0x00020000;
50 public const int MsidbControlAttributesRemoteVolume = 0x00040000;
51 public const int MsidbControlAttributesCDROMVolume = 0x00080000;
52 public const int MsidbControlAttributesRAMDiskVolume = 0x00100000;
53 public const int MsidbControlAttributesFloppyVolume = 0x00200000;
54
55 // VolumeCostList controls
56 public const int MsidbControlShowRollbackCost = 0x00400000;
57
58 // ListBox and ComboBox controls
59 public const int MsidbControlAttributesSorted = 0x00010000;
60 public const int MsidbControlAttributesComboList = 0x00020000;
61
62 // picture button controls
63 public const int MsidbControlAttributesImageHandle = 0x00010000;
64 public const int MsidbControlAttributesPushLike = 0x00020000;
65 public const int MsidbControlAttributesBitmap = 0x00040000;
66 public const int MsidbControlAttributesIcon = 0x00080000;
67 public const int MsidbControlAttributesFixedSize = 0x00100000;
68 public const int MsidbControlAttributesIconSize16 = 0x00200000;
69 public const int MsidbControlAttributesIconSize32 = 0x00400000;
70 public const int MsidbControlAttributesIconSize48 = 0x00600000;
71 public const int MsidbControlAttributesElevationShield = 0x00800000;
72
73 // RadioButton controls
74 public const int MsidbControlAttributesHasBorder = 0x01000000;
75
76 // CustomAction.Type
77 // executable types
78 public const int MsidbCustomActionTypeDll = 0x00000001; // Target = entry point name
79 public const int MsidbCustomActionTypeExe = 0x00000002; // Target = command line args
80 public const int MsidbCustomActionTypeTextData = 0x00000003; // Target = text string to be formatted and set into property
81 public const int MsidbCustomActionTypeJScript = 0x00000005; // Target = entry point name; null if none to call
82 public const int MsidbCustomActionTypeVBScript = 0x00000006; // Target = entry point name; null if none to call
83 public const int MsidbCustomActionTypeInstall = 0x00000007; // Target = property list for nested engine initialization
84 public const int MsidbCustomActionTypeSourceBits = 0x00000030;
85 public const int MsidbCustomActionTypeTargetBits = 0x00000007;
86 public const int MsidbCustomActionTypeReturnBits = 0x000000C0;
87 public const int MsidbCustomActionTypeExecuteBits = 0x00000700;
88
89 // source of code
90 public const int MsidbCustomActionTypeBinaryData = 0x00000000; // Source = Binary.Name; data stored in stream
91 public const int MsidbCustomActionTypeSourceFile = 0x00000010; // Source = File.File; file part of installation
92 public const int MsidbCustomActionTypeDirectory = 0x00000020; // Source = Directory.Directory; folder containing existing file
93 public const int MsidbCustomActionTypeProperty = 0x00000030; // Source = Property.Property; full path to executable
94
95 // return processing; default is syncronous execution; process return code
96 public const int MsidbCustomActionTypeContinue = 0x00000040; // ignore action return status; continue running
97 public const int MsidbCustomActionTypeAsync = 0x00000080; // run asynchronously
98
99 // execution scheduling flags; default is execute whenever sequenced
100 public const int MsidbCustomActionTypeFirstSequence = 0x00000100; // skip if UI sequence already run
101 public const int MsidbCustomActionTypeOncePerProcess = 0x00000200; // skip if UI sequence already run in same process
102 public const int MsidbCustomActionTypeClientRepeat = 0x00000300; // run on client only if UI already run on client
103 public const int MsidbCustomActionTypeInScript = 0x00000400; // queue for execution within script
104 public const int MsidbCustomActionTypeRollback = 0x00000100; // in conjunction with InScript: queue in Rollback script
105 public const int MsidbCustomActionTypeCommit = 0x00000200; // in conjunction with InScript: run Commit ops from script on success
106
107 // security context flag; default to impersonate as user; valid only if InScript
108 public const int MsidbCustomActionTypeNoImpersonate = 0x00000800; // no impersonation; run in system context
109 public const int MsidbCustomActionTypeTSAware = 0x00004000; // impersonate for per-machine installs on TS machines
110 public const int MsidbCustomActionType64BitScript = 0x00001000; // script should run in 64bit process
111 public const int MsidbCustomActionTypeHideTarget = 0x00002000; // don't record the contents of the Target field in the log file.
112
113 public const int MsidbCustomActionTypePatchUninstall = 0x00008000; // run on patch uninstall
114
115 // Dialog.Attributes
116 public const int MsidbDialogAttributesVisible = 0x00000001;
117 public const int MsidbDialogAttributesModal = 0x00000002;
118 public const int MsidbDialogAttributesMinimize = 0x00000004;
119 public const int MsidbDialogAttributesSysModal = 0x00000008;
120 public const int MsidbDialogAttributesKeepModeless = 0x00000010;
121 public const int MsidbDialogAttributesTrackDiskSpace = 0x00000020;
122 public const int MsidbDialogAttributesUseCustomPalette = 0x00000040;
123 public const int MsidbDialogAttributesRTLRO = 0x00000080;
124 public const int MsidbDialogAttributesRightAligned = 0x00000100;
125 public const int MsidbDialogAttributesLeftScroll = 0x00000200;
126 public const int MsidbDialogAttributesBiDi = MsidbDialogAttributesRTLRO | MsidbDialogAttributesRightAligned | MsidbDialogAttributesLeftScroll;
127 public const int MsidbDialogAttributesError = 0x00010000;
128 public const int CommonControlAttributesInvert = MsidbControlAttributesVisible + MsidbControlAttributesEnabled;
129 public const int DialogAttributesInvert = MsidbDialogAttributesVisible + MsidbDialogAttributesModal + MsidbDialogAttributesMinimize;
130
131 // Feature.Attributes
132 public const int MsidbFeatureAttributesFavorLocal = 0;
133 public const int MsidbFeatureAttributesFavorSource = 1;
134 public const int MsidbFeatureAttributesFollowParent = 2;
135 public const int MsidbFeatureAttributesFavorAdvertise = 4;
136 public const int MsidbFeatureAttributesDisallowAdvertise = 8;
137 public const int MsidbFeatureAttributesUIDisallowAbsent = 16;
138 public const int MsidbFeatureAttributesNoUnsupportedAdvertise = 32;
139
140 // File.Attributes
141 public const int MsidbFileAttributesReadOnly = 1;
142 public const int MsidbFileAttributesHidden = 2;
143 public const int MsidbFileAttributesSystem = 4;
144 public const int MsidbFileAttributesVital = 512;
145 public const int MsidbFileAttributesChecksum = 1024;
146 public const int MsidbFileAttributesPatchAdded = 4096;
147 public const int MsidbFileAttributesNoncompressed = 8192;
148 public const int MsidbFileAttributesCompressed = 16384;
149
150 // IniFile.Action & RemoveIniFile.Action
151 public const int MsidbIniFileActionAddLine = 0;
152 public const int MsidbIniFileActionCreateLine = 1;
153 public const int MsidbIniFileActionRemoveLine = 2;
154 public const int MsidbIniFileActionAddTag = 3;
155 public const int MsidbIniFileActionRemoveTag = 4;
156
157 // MoveFile.Options
158 public const int MsidbMoveFileOptionsMove = 1;
159
160 // ServiceInstall.Attributes
161 public const int MsidbServiceInstallOwnProcess = 0x00000010;
162 public const int MsidbServiceInstallShareProcess = 0x00000020;
163 public const int MsidbServiceInstallInteractive = 0x00000100;
164 public const int MsidbServiceInstallAutoStart = 0x00000002;
165 public const int MsidbServiceInstallDemandStart = 0x00000003;
166 public const int MsidbServiceInstallDisabled = 0x00000004;
167 public const int MsidbServiceInstallErrorIgnore = 0x00000000;
168 public const int MsidbServiceInstallErrorNormal = 0x00000001;
169 public const int MsidbServiceInstallErrorCritical = 0x00000003;
170 public const int MsidbServiceInstallErrorControlVital = 0x00008000;
171
172 // ServiceConfig.Event
173 public const int MsidbServiceConfigEventInstall = 0x00000001;
174 public const int MsidbServiceConfigEventUninstall = 0x00000002;
175 public const int MsidbServiceConfigEventReinstall = 0x00000004;
176
177 // ServiceControl.Attributes
178 public const int MsidbServiceControlEventStart = 0x00000001;
179 public const int MsidbServiceControlEventStop = 0x00000002;
180 public const int MsidbServiceControlEventDelete = 0x00000008;
181 public const int MsidbServiceControlEventUninstallStart = 0x00000010;
182 public const int MsidbServiceControlEventUninstallStop = 0x00000020;
183 public const int MsidbServiceControlEventUninstallDelete = 0x00000080;
184
185 // TextStyle.StyleBits
186 public const int MsidbTextStyleStyleBitsBold = 1;
187 public const int MsidbTextStyleStyleBitsItalic = 2;
188 public const int MsidbTextStyleStyleBitsUnderline = 4;
189 public const int MsidbTextStyleStyleBitsStrike = 8;
190
191 // Upgrade.Attributes
192 public const int MsidbUpgradeAttributesMigrateFeatures = 0x00000001;
193 public const int MsidbUpgradeAttributesOnlyDetect = 0x00000002;
194 public const int MsidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004;
195 public const int MsidbUpgradeAttributesVersionMinInclusive = 0x00000100;
196 public const int MsidbUpgradeAttributesVersionMaxInclusive = 0x00000200;
197 public const int MsidbUpgradeAttributesLanguagesExclusive = 0x00000400;
198
199 // Registry Hive Roots
200 public const int MsidbRegistryRootClassesRoot = 0;
201 public const int MsidbRegistryRootCurrentUser = 1;
202 public const int MsidbRegistryRootLocalMachine = 2;
203 public const int MsidbRegistryRootUsers = 3;
204
205 // Locator Types
206 public const int MsidbLocatorTypeDirectory = 0;
207 public const int MsidbLocatorTypeFileName = 1;
208 public const int MsidbLocatorTypeRawValue = 2;
209 public const int MsidbLocatorType64bit = 16;
210
211 public const int MsidbClassAttributesRelativePath = 1;
212
213 // RemoveFile.InstallMode
214 public const int MsidbRemoveFileInstallModeOnInstall = 0x00000001;
215 public const int MsidbRemoveFileInstallModeOnRemove = 0x00000002;
216 public const int MsidbRemoveFileInstallModeOnBoth = 0x00000003;
217
218 // ODBCDataSource.Registration
219 public const int MsidbODBCDataSourceRegistrationPerMachine = 0;
220 public const int MsidbODBCDataSourceRegistrationPerUser = 1;
221
222 // ModuleConfiguration.Format
223 public const int MsidbModuleConfigurationFormatText = 0;
224 public const int MsidbModuleConfigurationFormatKey = 1;
225 public const int MsidbModuleConfigurationFormatInteger = 2;
226 public const int MsidbModuleConfigurationFormatBitfield = 3;
227
228 // ModuleConfiguration.Attributes
229 public const int MsidbMsmConfigurableOptionKeyNoOrphan = 1;
230 public const int MsidbMsmConfigurableOptionNonNullable = 2;
231
232 // ' Windows API function ShowWindow constants - used in Shortcut table
233 public const int SWSHOWNORMAL = 0x00000001;
234 public const int SWSHOWMAXIMIZED = 0x00000003;
235 public const int SWSHOWMINNOACTIVE = 0x00000007;
236
237 public const int MsidbEmbeddedUI = 0x01;
238 public const int MsidbEmbeddedHandlesBasic = 0x02;
239
240 public const int INSTALLLOGMODE_FATALEXIT = 0x00001;
241 public const int INSTALLLOGMODE_ERROR = 0x00002;
242 public const int INSTALLLOGMODE_WARNING = 0x00004;
243 public const int INSTALLLOGMODE_USER = 0x00008;
244 public const int INSTALLLOGMODE_INFO = 0x00010;
245 public const int INSTALLLOGMODE_FILESINUSE = 0x00020;
246 public const int INSTALLLOGMODE_RESOLVESOURCE = 0x00040;
247 public const int INSTALLLOGMODE_OUTOFDISKSPACE = 0x00080;
248 public const int INSTALLLOGMODE_ACTIONSTART = 0x00100;
249 public const int INSTALLLOGMODE_ACTIONDATA = 0x00200;
250 public const int INSTALLLOGMODE_PROGRESS = 0x00400;
251 public const int INSTALLLOGMODE_COMMONDATA = 0x00800;
252 public const int INSTALLLOGMODE_INITIALIZE = 0x01000;
253 public const int INSTALLLOGMODE_TERMINATE = 0x02000;
254 public const int INSTALLLOGMODE_SHOWDIALOG = 0x04000;
255 public const int INSTALLLOGMODE_RMFILESINUSE = 0x02000000;
256 public const int INSTALLLOGMODE_INSTALLSTART = 0x04000000;
257 public const int INSTALLLOGMODE_INSTALLEND = 0x08000000;
258 }
259}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerData.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerData.cs
new file mode 100644
index 00000000..8d69cd08
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerData.cs
@@ -0,0 +1,323 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.Linq;
9 using System.Xml;
10
11 /// <summary>
12 /// Output is generated by the linker.
13 /// </summary>
14 public sealed class WindowsInstallerData
15 {
16 internal const string XmlNamespaceUri = "http://wixtoolset.org/schemas/v4/windowsinstallerdata";
17 internal const string XmlElementName = "windowsInstallerData";
18
19 private static readonly Version CurrentVersion = new Version("4.0.0.0");
20 private const string WixOutputStreamName = "wix-wid.xml";
21 private static readonly XmlWriterSettings WriterSettings = new XmlWriterSettings
22 {
23 CheckCharacters = false,
24 CloseOutput = false,
25 OmitXmlDeclaration = true,
26 };
27
28 /// <summary>
29 /// Creates a new empty output object.
30 /// </summary>
31 /// <param name="sourceLineNumbers">The source line information for the output.</param>
32 public WindowsInstallerData(SourceLineNumber sourceLineNumbers)
33 {
34 this.SourceLineNumbers = sourceLineNumbers;
35 this.SubStorages = new List<SubStorage>();
36 this.Tables = new TableIndexedCollection();
37 }
38
39 /// <summary>
40 /// Gets the type of the output.
41 /// </summary>
42 /// <value>Type of the output.</value>
43 public OutputType Type { get; set; }
44
45 /// <summary>
46 /// Gets or sets the codepage for this output.
47 /// </summary>
48 /// <value>Codepage of the output.</value>
49 public int Codepage { get; set; }
50
51 /// <summary>
52 /// Gets the source line information for this output.
53 /// </summary>
54 /// <value>The source line information for this output.</value>
55 public SourceLineNumber SourceLineNumbers { get; private set; }
56
57 /// <summary>
58 /// Gets the substorages in this output.
59 /// </summary>
60 /// <value>The substorages in this output.</value>
61 public ICollection<SubStorage> SubStorages { get; private set; }
62
63 /// <summary>
64 /// Gets the tables contained in this output.
65 /// </summary>
66 /// <value>Collection of tables.</value>
67 public TableIndexedCollection Tables { get; private set; }
68
69 /// <summary>
70 /// Ensure this output contains a particular table.
71 /// </summary>
72 /// <param name="tableDefinition">Definition of the table that should exist.</param>
73 /// <returns>The table in this output.</returns>
74 public Table EnsureTable(TableDefinition tableDefinition)
75 {
76 if (!this.Tables.TryGetTable(tableDefinition.Name, out var table))
77 {
78 table = new Table(tableDefinition);
79 this.Tables.Add(table);
80 }
81
82 return table;
83 }
84
85 /// <summary>
86 /// Saves an output to a <c>WixOutput</c> container.
87 /// </summary>
88 /// <param name="wixout">Container to save to.</param>
89 public void Save(WixOutput wixout)
90 {
91 using (var writer = XmlWriter.Create(wixout.CreateDataStream(WixOutputStreamName), WriterSettings))
92 {
93 this.Save(writer);
94 }
95 }
96
97 /// <summary>
98 /// Saves an output to an <c>XmlWriter</c>.
99 /// </summary>
100 /// <param name="writer">XmlWriter to save to.</param>
101 public void Save(XmlWriter writer)
102 {
103 writer.WriteStartDocument();
104 this.Write(writer);
105 writer.WriteEndDocument();
106 }
107
108 /// <summary>
109 /// Gets table by name.
110 /// </summary>
111 public bool TryGetTable(string tableName, out Table table) => this.Tables.TryGetTable(tableName, out table);
112
113 /// <summary>
114 /// Loads an output from a path on disk.
115 /// </summary>
116 /// <param name="path">Path to output file saved on disk.</param>
117 /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
118 /// <returns>Output object.</returns>
119 public static WindowsInstallerData Load(string path, bool suppressVersionCheck = false)
120 {
121 var tableDefinitions = new TableDefinitionCollection(WindowsInstallerTableDefinitions.All);
122 return WindowsInstallerData.Load(path, tableDefinitions, suppressVersionCheck);
123 }
124
125 /// <summary>
126 /// Loads an output from a path on disk.
127 /// </summary>
128 /// <param name="path">Path to output file saved on disk.</param>
129 /// <param name="tableDefinitions">Table definitions to use for creating strongly-typed rows.</param>
130 /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
131 /// <returns>Output object.</returns>
132 public static WindowsInstallerData Load(string path, TableDefinitionCollection tableDefinitions, bool suppressVersionCheck = false)
133 {
134 using (var wixOutput = WixOutput.Read(path))
135 {
136 return WindowsInstallerData.Load(wixOutput, tableDefinitions, suppressVersionCheck);
137 }
138 }
139
140 /// <summary>
141 /// Loads an output from a WixOutput object.
142 /// </summary>
143 /// <param name="wixOutput">WixOutput object.</param>
144 /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
145 /// <returns>Output object.</returns>
146 public static WindowsInstallerData Load(WixOutput wixOutput, bool suppressVersionCheck = false)
147 {
148 var tableDefinitions = new TableDefinitionCollection(WindowsInstallerTableDefinitions.All);
149 return WindowsInstallerData.Load(wixOutput, tableDefinitions, suppressVersionCheck);
150 }
151
152 /// <summary>
153 /// Loads an output from a WixOutput object.
154 /// </summary>
155 /// <param name="wixOutput">WixOutput object.</param>
156 /// <param name="tableDefinitions">Table definitions to use for creating strongly-typed rows.</param>
157 /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
158 /// <returns>Output object.</returns>
159 public static WindowsInstallerData Load(WixOutput wixOutput, TableDefinitionCollection tableDefinitions, bool suppressVersionCheck = false)
160 {
161 using (var stream = wixOutput.GetDataStream(WixOutputStreamName))
162 using (var reader = XmlReader.Create(stream, null, wixOutput.Uri.AbsoluteUri))
163 {
164 try
165 {
166 reader.MoveToContent();
167 return WindowsInstallerData.Read(reader, tableDefinitions, suppressVersionCheck);
168 }
169 catch (XmlException xe)
170 {
171 throw new WixCorruptFileException(wixOutput.Uri.AbsoluteUri, "wixout", xe);
172 }
173 }
174 }
175
176 /// <summary>
177 /// Processes an XmlReader and builds up the output object.
178 /// </summary>
179 /// <param name="reader">Reader to get data from.</param>
180 /// <param name="tableDefinitions">Table definitions to use for creating strongly-typed rows.</param>
181 /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
182 /// <returns>The Output represented by the Xml.</returns>
183 internal static WindowsInstallerData Read(XmlReader reader, TableDefinitionCollection tableDefinitions, bool suppressVersionCheck)
184 {
185 if (!reader.LocalName.Equals(WindowsInstallerData.XmlElementName))
186 {
187 throw new XmlException();
188 }
189
190 var empty = reader.IsEmptyElement;
191 var output = new WindowsInstallerData(SourceLineNumber.CreateFromUri(reader.BaseURI));
192 Version version = null;
193
194 while (reader.MoveToNextAttribute())
195 {
196 switch (reader.LocalName)
197 {
198 case "codepage":
199 output.Codepage = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture.NumberFormat);
200 break;
201 case "type":
202 switch (reader.Value)
203 {
204 case "Bundle":
205 output.Type = OutputType.Bundle;
206 break;
207 case "Module":
208 output.Type = OutputType.Module;
209 break;
210 case "Patch":
211 output.Type = OutputType.Patch;
212 break;
213 case "PatchCreation":
214 output.Type = OutputType.PatchCreation;
215 break;
216 case "Product":
217 output.Type = OutputType.Product;
218 break;
219 case "Transform":
220 output.Type = OutputType.Transform;
221 break;
222 default:
223 throw new XmlException();
224 }
225 break;
226 case "version":
227 version = new Version(reader.Value);
228 break;
229 }
230 }
231
232 if (!suppressVersionCheck && null != version && !WindowsInstallerData.CurrentVersion.Equals(version))
233 {
234 throw new WixException(ErrorMessages.VersionMismatch(SourceLineNumber.CreateFromUri(reader.BaseURI), WindowsInstallerData.XmlElementName, version.ToString(), WindowsInstallerData.CurrentVersion.ToString()));
235 }
236
237 // loop through the rest of the xml building up the Output object
238 TableDefinitionCollection xmlTableDefinitions = null;
239 var tables = new List<Table>();
240 if (!empty)
241 {
242 var done = false;
243
244 // loop through all the fields in a row
245 while (!done && reader.Read())
246 {
247 switch (reader.NodeType)
248 {
249 case XmlNodeType.Element:
250 switch (reader.LocalName)
251 {
252 case "subStorage":
253 output.SubStorages.Add(SubStorage.Read(reader, tableDefinitions));
254 break;
255 case "table":
256 if (null == xmlTableDefinitions)
257 {
258 throw new XmlException();
259 }
260 tables.Add(Table.Read(reader, xmlTableDefinitions));
261 break;
262 case "tableDefinitions":
263 xmlTableDefinitions = TableDefinitionCollection.Read(reader, tableDefinitions);
264 break;
265 default:
266 throw new XmlException();
267 }
268 break;
269 case XmlNodeType.EndElement:
270 done = true;
271 break;
272 }
273 }
274
275 if (!done)
276 {
277 throw new XmlException();
278 }
279 }
280
281 output.Tables = new TableIndexedCollection(tables);
282 return output;
283 }
284
285 /// <summary>
286 /// Persists an output in an XML format.
287 /// </summary>
288 /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
289 internal void Write(XmlWriter writer)
290 {
291 writer.WriteStartElement(WindowsInstallerData.XmlElementName, XmlNamespaceUri);
292
293 writer.WriteAttributeString("type", this.Type.ToString());
294
295 if (0 != this.Codepage)
296 {
297 writer.WriteAttributeString("codepage", this.Codepage.ToString(CultureInfo.InvariantCulture));
298 }
299
300 writer.WriteAttributeString("version", WindowsInstallerData.CurrentVersion.ToString());
301
302 // Collect all the table definitions and write them.
303 var tableDefinitions = new TableDefinitionCollection();
304 foreach (var table in this.Tables)
305 {
306 tableDefinitions.Add(table.Definition);
307 }
308 tableDefinitions.Write(writer);
309
310 foreach (var table in this.Tables.OrderBy(t => t.Name))
311 {
312 table.Write(writer);
313 }
314
315 foreach (var subStorage in this.SubStorages)
316 {
317 subStorage.Write(writer);
318 }
319
320 writer.WriteEndElement();
321 }
322 }
323}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs
new file mode 100644
index 00000000..b6930b79
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs
@@ -0,0 +1,478 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Linq;
8 using WixToolset.Data.Symbols;
9
10 public static class WindowsInstallerStandard
11 {
12 private static readonly Dictionary<string, WixActionSymbol> standardActionsById;
13 private static readonly HashSet<string> standardActionNames;
14 private static readonly Dictionary<string, DirectorySymbol> standardDirectoriesById;
15
16 /// <summary>
17 /// References:
18 /// Title: Property Reference [Windows Installer]:
19 /// URL: http://msdn.microsoft.com/library/en-us/msi/setup/property_reference.asp
20 /// </summary>
21 private static readonly HashSet<string> standardProperties = new HashSet<string>
22 {
23 "~", // REG_MULTI_SZ/NULL marker
24 "ACTION",
25 "ADDDEFAULT",
26 "ADDLOCAL",
27 "ADDDSOURCE",
28 "AdminProperties",
29 "AdminUser",
30 "ADVERTISE",
31 "AFTERREBOOT",
32 "AllowProductCodeMismatches",
33 "AllowProductVersionMajorMismatches",
34 "ALLUSERS",
35 "Alpha",
36 "ApiPatchingSymbolFlags",
37 "ARPAUTHORIZEDCDFPREFIX",
38 "ARPCOMMENTS",
39 "ARPCONTACT",
40 "ARPHELPLINK",
41 "ARPHELPTELEPHONE",
42 "ARPINSTALLLOCATION",
43 "ARPNOMODIFY",
44 "ARPNOREMOVE",
45 "ARPNOREPAIR",
46 "ARPPRODUCTIONICON",
47 "ARPREADME",
48 "ARPSIZE",
49 "ARPSYSTEMCOMPONENT",
50 "ARPULRINFOABOUT",
51 "ARPURLUPDATEINFO",
52 "AVAILABLEFREEREG",
53 "BorderSize",
54 "BorderTop",
55 "CaptionHeight",
56 "CCP_DRIVE",
57 "ColorBits",
58 "COMPADDLOCAL",
59 "COMPADDSOURCE",
60 "COMPANYNAME",
61 "ComputerName",
62 "CostingComplete",
63 "Date",
64 "DefaultUIFont",
65 "DISABLEADVTSHORTCUTS",
66 "DISABLEMEDIA",
67 "DISABLEROLLBACK",
68 "DiskPrompt",
69 "DontRemoveTempFolderWhenFinished",
70 "EnableUserControl",
71 "EXECUTEACTION",
72 "EXECUTEMODE",
73 "FASTOEM",
74 "FILEADDDEFAULT",
75 "FILEADDLOCAL",
76 "FILEADDSOURCE",
77 "IncludeWholeFilesOnly",
78 "Installed",
79 "INSTALLLEVEL",
80 "Intel",
81 "Intel64",
82 "IsAdminPackage",
83 "LeftUnit",
84 "LIMITUI",
85 "ListOfPatchGUIDsToReplace",
86 "ListOfTargetProductCode",
87 "LOGACTION",
88 "LogonUser",
89 "Manufacturer",
90 "MEDIAPACKAGEPATH",
91 "MediaSourceDir",
92 "MinimumRequiredMsiVersion",
93 "MsiAMD64",
94 "MSIAPRSETTINGSIDENTIFIER",
95 "MSICHECKCRCS",
96 "MSIDISABLERMRESTART",
97 "MSIENFORCEUPGRADECOMPONENTRULES",
98 "MSIFASTINSTALL",
99 "MsiFileToUseToCreatePatchTables",
100 "MsiHiddenProperties",
101 "MSIINSTALLPERUSER",
102 "MSIINSTANCEGUID",
103 "MsiLogFileLocation",
104 "MsiLogging",
105 "MsiNetAssemblySupport",
106 "MSINEWINSTANCE",
107 "MSINODISABLEMEDIA",
108 "MsiNTProductType",
109 "MsiNTSuiteBackOffice",
110 "MsiNTSuiteDataCenter",
111 "MsiNTSuiteEnterprise",
112 "MsiNTSuiteSmallBusiness",
113 "MsiNTSuiteSmallBusinessRestricted",
114 "MsiNTSuiteWebServer",
115 "MsiNTSuitePersonal",
116 "MsiPatchRemovalList",
117 "MSIPATCHREMOVE",
118 "MSIRESTARTMANAGERCONTROL",
119 "MsiRestartManagerSessionKey",
120 "MSIRMSHUTDOWN",
121 "MsiRunningElevated",
122 "MsiUIHideCancel",
123 "MsiUIProgressOnly",
124 "MsiUISourceResOnly",
125 "MsiSystemRebootPending",
126 "MsiWin32AssemblySupport",
127 "NOCOMPANYNAME",
128 "NOUSERNAME",
129 "OLEAdvtSupport",
130 "OptimizePatchSizeForLargeFiles",
131 "OriginalDatabase",
132 "OutOfDiskSpace",
133 "OutOfNoRbDiskSpace",
134 "ParentOriginalDatabase",
135 "ParentProductCode",
136 "PATCH",
137 "PATCH_CACHE_DIR",
138 "PATCH_CACHE_ENABLED",
139 "PatchGUID",
140 "PATCHNEWPACKAGECODE",
141 "PATCHNEWSUMMARYCOMMENTS",
142 "PATCHNEWSUMMARYSUBJECT",
143 "PatchOutputPath",
144 "PatchSourceList",
145 "PhysicalMemory",
146 "PIDKEY",
147 "PIDTemplate",
148 "Preselected",
149 "PRIMARYFOLDER",
150 "PrimaryVolumePath",
151 "PrimaryVolumeSpaceAvailable",
152 "PrimaryVolumeSpaceRemaining",
153 "PrimaryVolumeSpaceRequired",
154 "Privileged",
155 "ProductCode",
156 "ProductID",
157 "ProductLanguage",
158 "ProductName",
159 "ProductState",
160 "ProductVersion",
161 "PROMPTROLLBACKCOST",
162 "REBOOT",
163 "REBOOTPROMPT",
164 "RedirectedDllSupport",
165 "REINSTALL",
166 "REINSTALLMODE",
167 "RemoveAdminTS",
168 "REMOVE",
169 "ReplacedInUseFiles",
170 "RestrictedUserControl",
171 "RESUME",
172 "RollbackDisabled",
173 "ROOTDRIVE",
174 "ScreenX",
175 "ScreenY",
176 "SecureCustomProperties",
177 "ServicePackLevel",
178 "ServicePackLevelMinor",
179 "SEQUENCE",
180 "SharedWindows",
181 "ShellAdvtSupport",
182 "SHORTFILENAMES",
183 "SourceDir",
184 "SOURCELIST",
185 "SystemLanguageID",
186 "TARGETDIR",
187 "TerminalServer",
188 "TextHeight",
189 "Time",
190 "TRANSFORMS",
191 "TRANSFORMSATSOURCE",
192 "TRANSFORMSSECURE",
193 "TTCSupport",
194 "UILevel",
195 "UpdateStarted",
196 "UpgradeCode",
197 "UPGRADINGPRODUCTCODE",
198 "UserLanguageID",
199 "USERNAME",
200 "UserSID",
201 "Version9X",
202 "VersionDatabase",
203 "VersionMsi",
204 "VersionNT",
205 "VersionNT64",
206 "VirtualMemory",
207 "WindowsBuild",
208 "WindowsVolume",
209 };
210
211 static WindowsInstallerStandard()
212 {
213 var standardActions = new[]
214 {
215 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
216 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
217 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
218
219 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallExecute")) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" },
220
221 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallExecuteAgain")) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" },
222
223 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
224 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
225 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
226
227 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
228 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
229
230 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage", Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
231
232 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
233 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
234 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
235 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
236
237 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
238 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
239 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
240 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
241 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
242
243 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
244 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
245 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
246 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
247 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
248
249 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
250 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
251 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
252
253 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
254 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
255
256 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
257 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
258
259 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
260 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
261
262 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
263 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
264
265 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
266 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
267
268 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
269 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
270
271 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
272 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
273
274 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
275 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
276
277 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
278 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
279
280 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
281 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
282
283 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
284
285 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
286 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
287
288 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
289 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
290 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
291
292 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
293 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
294
295 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
296
297 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallServices")) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
298 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT>=600" },
299
300 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
301 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
302
303 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
304 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
305 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
306 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
307
308 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
309 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
310
311 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
312
313 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
314 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
315
316 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
317
318 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
319 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
320 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
321 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
322 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
323
324 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
325 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
326 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
327 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
328 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
329 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
330 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
331 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
332
333 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
334 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
335 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
336
337 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" },
338 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Overridable = true, Condition="NOT Installed" },
339
340 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
341
342 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" },
343 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Overridable = true, Condition="NOT Installed" },
344
345 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StartServices")) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
346 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StopServices")) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
347
348 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
349 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
350 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
351 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
352 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
353 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
354 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
355 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
356 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
357 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
358
359 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
360 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
361
362 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
363 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
364 new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
365 };
366
367 var standardDirectories = new[]
368 {
369 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TARGETDIR")) { Name = "SourceDir" },
370 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AdminToolsFolder")) { Name = "Admin" },
371 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AppDataFolder")) { Name = "AppData" },
372 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonAppDataFolder")) { Name = "CommApp" },
373 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFilesFolder")) { Name = "CFiles" },
374 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles64Folder")) { Name = "CFiles64" },
375 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles6432Folder")) { Name = "." },
376 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "DesktopFolder")) { Name = "Desktop" },
377 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FavoritesFolder")) { Name = "Favs" },
378 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FontsFolder")) { Name = "Fonts" },
379 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "LocalAppDataFolder")) { Name = "LocalApp" },
380 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "MyPicturesFolder")) { Name = "Pictures" },
381 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "NetHoodFolder")) { Name = "NetHood" },
382 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PersonalFolder")) { Name = "Personal" },
383 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PrintHoodFolder")) { Name = "Printers" },
384 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFilesFolder")) { Name = "PFiles" },
385 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles64Folder")) { Name = "PFiles64" },
386 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles6432Folder")) { Name = "." },
387 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramMenuFolder")) { Name = "PMenu" },
388 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "RecentFolder")) { Name = "Recent" },
389 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SendToFolder")) { Name = "SendTo" },
390 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartMenuFolder")) { Name = "StrtMenu" },
391 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartupFolder")) { Name = "StartUp" },
392 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SystemFolder")) { Name = "System" },
393 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System16Folder")) { Name = "System16" },
394 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System64Folder")) { Name = "System64" },
395 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System6432Folder")) { Name = "." },
396 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TempFolder")) { Name = "Temp" },
397 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TemplateFolder")) { Name = "Template" },
398 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "WindowsFolder")) { Name = "Windows" },
399 new DirectorySymbol(null, new Identifier(AccessModifier.Global, "WindowsVolume")) { Name = "WinVol" },
400 };
401
402 standardActionNames = new HashSet<string>(standardActions.Select(a => a.Action));
403 standardActionsById = standardActions.ToDictionary(a => a.Id.Id);
404 standardDirectoriesById = standardDirectories.ToDictionary(d => d.Id.Id);
405 }
406
407 /// <summary>
408 /// Find out if an action is a standard action.
409 /// </summary>
410 /// <param name="actionName">Name of the action.</param>
411 /// <returns>true if the action is standard, false otherwise.</returns>
412 public static bool IsStandardAction(string actionName) => standardActionNames.Contains(actionName);
413
414 /// <summary>
415 /// Standard actions.
416 /// </summary>
417 public static IReadOnlyCollection<WixActionSymbol> StandardActions() => standardActionsById.Values;
418
419 /// <summary>
420 /// Standard directories.
421 /// </summary>
422 public static IReadOnlyCollection<DirectorySymbol> StandardDirectories() => standardDirectoriesById.Values;
423
424 /// <summary>
425 /// Gets the platform specific directory id for a directory. Most directories are not platform
426 /// specific and return themselves.
427 /// </summary>
428 /// <param name="directoryId">Directory id to get platform specific.</param>
429 /// <param name="platform">Platform to use.</param>
430 /// <returns>Platform specific directory id.</returns>
431 public static string GetPlatformSpecificDirectoryId(string directoryId, Platform platform)
432 {
433 switch (directoryId)
434 {
435 case "CommonFiles6432Folder":
436 return platform == Platform.X86 ? "CommonFilesFolder" : "CommonFiles64Folder";
437
438 case "ProgramFiles6432Folder":
439 return platform == Platform.X86 ? "ProgramFilesFolder" : "ProgramFiles64Folder";
440
441 case "System6432Folder":
442 return platform == Platform.X86 ? "SystemFolder" : "System64Folder";
443
444 default:
445 return directoryId;
446 }
447 }
448
449 /// <summary>
450 /// Find out if a directory is a standard directory.
451 /// </summary>
452 /// <param name="directoryId">Name of the directory.</param>
453 /// <returns>true if the directory is standard, false otherwise.</returns>
454 public static bool IsStandardDirectory(string directoryId) => standardDirectoriesById.ContainsKey(directoryId);
455
456 /// <summary>
457 /// Find out if a property is a standard property.
458 /// </summary>
459 /// <param name="propertyName">Name of the property.</param>
460 /// <returns>true if a property is standard, false otherwise.</returns>
461 public static bool IsStandardProperty(string propertyName) => standardProperties.Contains(propertyName);
462
463 /// <summary>
464 /// Try to get standard action by id.
465 /// </summary>
466 public static bool TryGetStandardAction(string id, out WixActionSymbol standardAction) => standardActionsById.TryGetValue(id, out standardAction);
467
468 /// <summary>
469 /// Try to get standard action by sequence and action name.
470 /// </summary>
471 public static bool TryGetStandardAction(string sequenceName, string actioname, out WixActionSymbol standardAction) => standardActionsById.TryGetValue(String.Concat(sequenceName, "/", actioname), out standardAction);
472
473 /// <summary>
474 /// Try to get standard directory symbol by id.
475 /// </summary>
476 public static bool TryGetStandardDirectory(string directoryId, out DirectorySymbol symbol) => standardDirectoriesById.TryGetValue(directoryId, out symbol);
477 }
478}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs
new file mode 100644
index 00000000..a64593ec
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs
@@ -0,0 +1,1907 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using WixToolset.Data.WindowsInstaller.Rows;
6
7 public static class WindowsInstallerTableDefinitions
8 {
9 public static readonly TableDefinition ActionText = new TableDefinition(
10 "ActionText",
11 SymbolDefinitions.ActionText,
12 new[]
13 {
14 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to be described.", modularizeType: ColumnModularizeType.Column),
15 new ColumnDefinition("Description", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Localized description displayed in progress dialog and log when action is executing."),
16 new ColumnDefinition("Template", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Template, description: "Optional localized format template used to format action data records for display during action execution.", modularizeType: ColumnModularizeType.Property),
17 },
18 symbolIdIsPrimaryKey: false
19 );
20
21 public static readonly TableDefinition AdminExecuteSequence = new TableDefinition(
22 "AdminExecuteSequence",
23 null,
24 new[]
25 {
26 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
27 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
28 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
29 },
30 symbolIdIsPrimaryKey: true
31 );
32
33 public static readonly TableDefinition Condition = new TableDefinition(
34 "Condition",
35 SymbolDefinitions.Condition,
36 new[]
37 {
38 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Reference to a Feature entry in Feature table."),
39 new ColumnDefinition("Level", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "New selection Level to set in Feature table if Condition evaluates to TRUE."),
40 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Expression evaluated to determine if Level in the Feature table is to change.", forceLocalizable: true),
41 },
42 symbolIdIsPrimaryKey: false
43 );
44
45 public static readonly TableDefinition AdminUISequence = new TableDefinition(
46 "AdminUISequence",
47 null,
48 new[]
49 {
50 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
51 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
52 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
53 },
54 symbolIdIsPrimaryKey: true
55 );
56
57 public static readonly TableDefinition AdvtExecuteSequence = new TableDefinition(
58 "AdvtExecuteSequence",
59 null,
60 new[]
61 {
62 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
63 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
64 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
65 },
66 symbolIdIsPrimaryKey: true
67 );
68
69 public static readonly TableDefinition AdvtUISequence = new TableDefinition(
70 "AdvtUISequence",
71 null,
72 new[]
73 {
74 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
75 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
76 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
77 },
78 symbolIdIsPrimaryKey: true
79 );
80
81 public static readonly TableDefinition AppId = new TableDefinition(
82 "AppId",
83 SymbolDefinitions.AppId,
84 new[]
85 {
86 new ColumnDefinition("AppId", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid),
87 new ColumnDefinition("RemoteServerName", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, modularizeType: ColumnModularizeType.Property),
88 new ColumnDefinition("LocalService", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
89 new ColumnDefinition("ServiceParameters", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
90 new ColumnDefinition("DllSurrogate", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
91 new ColumnDefinition("ActivateAtStorage", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1),
92 new ColumnDefinition("RunAsInteractiveUser", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1),
93 },
94 symbolIdIsPrimaryKey: false
95 );
96
97 public static readonly TableDefinition AppSearch = new TableDefinition(
98 "AppSearch",
99 SymbolDefinitions.AppSearch,
100 new[]
101 {
102 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The property associated with a Signature", modularizeType: ColumnModularizeType.Column),
103 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Signature;RegLocator;IniLocator;DrLocator;CompLocator", keyColumn: 1, description: "The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables.", modularizeType: ColumnModularizeType.Column),
104 },
105 symbolIdIsPrimaryKey: false
106 );
107
108 public static readonly TableDefinition Property = new TableDefinition(
109 "Property",
110 SymbolDefinitions.Property,
111 new[]
112 {
113 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of property, uppercase if settable by launcher or loader.", modularizeType: ColumnModularizeType.Column),
114 new ColumnDefinition("Value", ColumnType.Localized, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "String value for property. Never null or empty."),
115 },
116 strongRowType: typeof(PropertyRow),
117 symbolIdIsPrimaryKey: true
118 );
119
120 public static readonly TableDefinition BBControl = new TableDefinition(
121 "BBControl",
122 SymbolDefinitions.BBControl,
123 new[]
124 {
125 new ColumnDefinition("Billboard_", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Billboard", keyColumn: 1, description: "External key to the Billboard table, name of the billboard.", modularizeType: ColumnModularizeType.Column),
126 new ColumnDefinition("BBControl", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the control. This name must be unique within a billboard, but can repeat on different billboard."),
127 new ColumnDefinition("Type", ColumnType.String, 50, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "The type of the control."),
128 new ColumnDefinition("X", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Horizontal coordinate of the upper left corner of the bounding rectangle of the control.", forceLocalizable: true),
129 new ColumnDefinition("Y", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Vertical coordinate of the upper left corner of the bounding rectangle of the control.", forceLocalizable: true),
130 new ColumnDefinition("Width", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Width of the bounding rectangle of the control.", forceLocalizable: true),
131 new ColumnDefinition("Height", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Height of the bounding rectangle of the control.", forceLocalizable: true),
132 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A 32-bit word that specifies the attribute flags to be applied to this control."),
133 new ColumnDefinition("Text", ColumnType.Localized, 50, primaryKey: false, nullable: true, ColumnCategory.Text, description: "A string used to set the initial text contained within a control (if appropriate)."),
134 },
135 strongRowType: typeof(BBControlRow),
136 symbolIdIsPrimaryKey: false
137 );
138
139 public static readonly TableDefinition Billboard = new TableDefinition(
140 "Billboard",
141 SymbolDefinitions.Billboard,
142 new[]
143 {
144 new ColumnDefinition("Billboard", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the billboard.", modularizeType: ColumnModularizeType.Column),
145 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "An external key to the Feature Table. The billboard is shown only if this feature is being installed."),
146 new ColumnDefinition("Action", ColumnType.String, 50, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "The name of an action. The billboard is displayed during the progress messages received from this action."),
147 new ColumnDefinition("Ordering", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "A positive integer. If there is more than one billboard corresponding to an action they will be shown in the order defined by this column."),
148 },
149 symbolIdIsPrimaryKey: true
150 );
151
152 public static readonly TableDefinition Feature = new TableDefinition(
153 "Feature",
154 SymbolDefinitions.Feature,
155 new[]
156 {
157 new ColumnDefinition("Feature", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key used to identify a particular feature record."),
158 new ColumnDefinition("Feature_Parent", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Optional key of a parent record in the same table. If the parent is not selected, then the record will not be installed. Null indicates a root item."),
159 new ColumnDefinition("Title", ColumnType.Localized, 64, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Short text identifying a visible feature item."),
160 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Longer descriptive text describing a visible feature item."),
161 new ColumnDefinition("Display", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Numeric sort order, used to force a specific display ordering."),
162 new ColumnDefinition("Level", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The install level at which record will be initially selected. An install level of 0 will disable an item and prevent its display."),
163 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.UpperCase, keyTable: "Directory", keyColumn: 1, description: "The name of the Directory that can be configured by the UI. A non-null value will enable the browse button.", modularizeType: ColumnModularizeType.Column),
164 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "0;1;2;4;5;6;8;9;10;16;17;18;20;21;22;24;25;26;32;33;34;36;37;38;48;49;50;52;53;54", description: "Feature attributes"),
165 },
166 symbolIdIsPrimaryKey: true
167 );
168
169 public static readonly TableDefinition Binary = new TableDefinition(
170 "Binary",
171 SymbolDefinitions.Binary,
172 new[]
173 {
174 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Unique key identifying the binary data.", modularizeType: ColumnModularizeType.Column),
175 new ColumnDefinition("Data", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "The unformatted binary data."),
176 },
177 symbolIdIsPrimaryKey: true
178 );
179
180 public static readonly TableDefinition BindImage = new TableDefinition(
181 "BindImage",
182 null,
183 new[]
184 {
185 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "The index into the File table. This must be an executable file.", modularizeType: ColumnModularizeType.Column),
186 new ColumnDefinition("Path", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Paths, description: "A list of ; delimited paths that represent the paths to be searched for the import DLLS. The list is usually a list of properties each enclosed within square brackets [] .", modularizeType: ColumnModularizeType.Property),
187 },
188 symbolIdIsPrimaryKey: false
189 );
190
191 public static readonly TableDefinition File = new TableDefinition(
192 "File",
193 SymbolDefinitions.File,
194 new[]
195 {
196 new ColumnDefinition("File", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token, must match identifier in cabinet. For uncompressed files, this field is ignored.", modularizeType: ColumnModularizeType.Column),
197 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the file.", modularizeType: ColumnModularizeType.Column),
198 new ColumnDefinition("FileName", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Filename, description: "File name used for installation, may be localized. This may contain a \"short name|long name\" pair."),
199 new ColumnDefinition("FileSize", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Size of file in bytes (long integer)."),
200 new ColumnDefinition("Version", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Version, keyTable: "File", keyColumn: 1, description: "Version string for versioned files; Blank for unversioned files.", modularizeType: ColumnModularizeType.CompanionFile),
201 new ColumnDefinition("Language", ColumnType.String, 20, primaryKey: false, nullable: true, ColumnCategory.Language, description: "List of decimal language Ids, comma-separated if more than one."),
202 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Integer containing bit flags representing file attributes (with the decimal value of each bit position in parentheses)"),
203 new ColumnDefinition("Sequence", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 2147483647, description: "Sequence with respect to the media images; order must track cabinet order."),
204 new ColumnDefinition("DiskId", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "Disk identifier for the file.", unreal: true),
205 new ColumnDefinition("Source", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "Path to source of file.", unreal: true),
206 },
207 strongRowType: typeof(FileRow),
208 symbolIdIsPrimaryKey: true
209 );
210
211 public static readonly TableDefinition CCPSearch = new TableDefinition(
212 "CCPSearch",
213 SymbolDefinitions.CCPSearch,
214 new[]
215 {
216 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Signature;RegLocator;IniLocator;DrLocator;CompLocator", keyColumn: 1, description: "The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables."),
217 },
218 symbolIdIsPrimaryKey: true
219 );
220
221 public static readonly TableDefinition CheckBox = new TableDefinition(
222 "CheckBox",
223 SymbolDefinitions.CheckBox,
224 new[]
225 {
226 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A named property to be tied to the item.", modularizeType: ColumnModularizeType.Column),
227 new ColumnDefinition("Value", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The value string associated with the item.", modularizeType: ColumnModularizeType.Property),
228 },
229 symbolIdIsPrimaryKey: false
230 );
231
232 public static readonly TableDefinition Class = new TableDefinition(
233 "Class",
234 SymbolDefinitions.Class,
235 new[]
236 {
237 new ColumnDefinition("CLSID", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid, description: "The CLSID of an OLE factory."),
238 new ColumnDefinition("Context", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The numeric server context for this server. CLSCTX_xxxx"),
239 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.", modularizeType: ColumnModularizeType.Column),
240 new ColumnDefinition("ProgId_Default", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, keyTable: "ProgId", keyColumn: 1, description: "Optional ProgId associated with this CLSID."),
241 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Localized description for the Class."),
242 new ColumnDefinition("AppId_", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Guid, keyTable: "AppId", keyColumn: 1, description: "Optional AppID containing DCOM information for associated application (string GUID)."),
243 new ColumnDefinition("FileTypeMask", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Optional string containing information for the HKCRthis CLSID) key. If multiple patterns exist, they must be delimited by a semicolon, and numeric subkeys will be generated: 0,1,2..."),
244 new ColumnDefinition("Icon_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Icon", keyColumn: 1, description: "Optional foreign key into the Icon Table, specifying the icon file associated with this CLSID. Will be written under the DefaultIcon key.", modularizeType: ColumnModularizeType.Icon),
245 new ColumnDefinition("IconIndex", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -32767, maxValue: 32767, description: "Optional icon index."),
246 new ColumnDefinition("DefInprocHandler", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Filename, possibilities: "1;2;3", description: "Optional default inproc handler. Only optionally provided if Context=CLSCTX_LOCAL_SERVER. Typically \"ole32.dll\" or \"mapi32.dll\""),
247 new ColumnDefinition("Argument", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "optional argument for LocalServers."),
248 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational."),
249 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, maxValue: 32767, description: "Class registration attributes."),
250 },
251 symbolIdIsPrimaryKey: false
252 );
253
254 public static readonly TableDefinition Component = new TableDefinition(
255 "Component",
256 SymbolDefinitions.Component,
257 new[]
258 {
259 new ColumnDefinition("Component", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key used to identify a particular component record.", modularizeType: ColumnModularizeType.Column),
260 new ColumnDefinition("ComponentId", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Guid, description: "A string GUID unique to this component, version, and language."),
261 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Required key of a Directory table record. This is actually a property name whose value contains the actual path, set either by the AppSearch action or with the default setting obtained from the Directory table.", modularizeType: ColumnModularizeType.Column),
262 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Remote execution option, one of irsEnum"),
263 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "A conditional statement that will disable this component if the specified condition evaluates to the 'True' state. If a component is disabled, it will not be installed, regardless of the 'Action' state associated with the component.", modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
264 new ColumnDefinition("KeyPath", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File;Registry;ODBCDataSource", keyColumn: 1, description: "Either the primary key into the File table, Registry table, or ODBCDataSource table. This extract path is stored when the component is installed, and is used to detect the presence of the component and to return the path to it.", modularizeType: ColumnModularizeType.Column),
265 },
266 strongRowType: typeof(ComponentRow),
267 symbolIdIsPrimaryKey: true
268 );
269
270 public static readonly TableDefinition Icon = new TableDefinition(
271 "Icon",
272 SymbolDefinitions.Icon,
273 new[]
274 {
275 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. Name of the icon file.", modularizeType: ColumnModularizeType.Icon),
276 new ColumnDefinition("Data", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "Binary stream. The binary icon data in PE (.DLL or .EXE) or icon (.ICO) format."),
277 },
278 symbolIdIsPrimaryKey: true
279 );
280
281 public static readonly TableDefinition ProgId = new TableDefinition(
282 "ProgId",
283 SymbolDefinitions.ProgId,
284 new[]
285 {
286 new ColumnDefinition("ProgId", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, description: "The Program Identifier. Primary key."),
287 new ColumnDefinition("ProgId_Parent", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, keyTable: "ProgId", keyColumn: 1, description: "The Parent Program Identifier. If specified, the ProgId column becomes a version independent prog id."),
288 new ColumnDefinition("Class_", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Guid, keyTable: "Class", keyColumn: 1, description: "The CLSID of an OLE factory corresponding to the ProgId."),
289 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Localized description for the Program identifier."),
290 new ColumnDefinition("Icon_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Icon", keyColumn: 1, description: "Optional foreign key into the Icon Table, specifying the icon file associated with this ProgId. Will be written under the DefaultIcon key.", modularizeType: ColumnModularizeType.Icon),
291 new ColumnDefinition("IconIndex", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -32767, maxValue: 32767, description: "Optional icon index."),
292 },
293 symbolIdIsPrimaryKey: false
294 );
295
296 public static readonly TableDefinition ComboBox = new TableDefinition(
297 "ComboBox",
298 SymbolDefinitions.ComboBox,
299 new[]
300 {
301 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A named property to be tied to this item. All the items tied to the same property become part of the same combobox.", modularizeType: ColumnModularizeType.Column),
302 new ColumnDefinition("Order", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "A positive integer used to determine the ordering of the items within one list. The integers do not have to be consecutive."),
303 new ColumnDefinition("Value", ColumnType.String, 64, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The value string associated with this item. Selecting the line will set the associated property to this value.", modularizeType: ColumnModularizeType.Property, forceLocalizable: true),
304 new ColumnDefinition("Text", ColumnType.Localized, 64, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.", modularizeType: ColumnModularizeType.Property),
305 },
306 symbolIdIsPrimaryKey: false
307 );
308
309 public static readonly TableDefinition CompLocator = new TableDefinition(
310 "CompLocator",
311 SymbolDefinitions.CompLocator,
312 new[]
313 {
314 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.", modularizeType: ColumnModularizeType.Column),
315 new ColumnDefinition("ComponentId", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Guid, description: "A string GUID unique to this component, version, and language."),
316 new ColumnDefinition("Type", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "A boolean value that determines if the registry value is a filename or a directory location."),
317 },
318 symbolIdIsPrimaryKey: false
319 );
320
321 public static readonly TableDefinition Complus = new TableDefinition(
322 "Complus",
323 SymbolDefinitions.Complus,
324 new[]
325 {
326 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the ComPlus component.", modularizeType: ColumnModularizeType.Column),
327 new ColumnDefinition("ExpType", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "ComPlus component attributes."),
328 },
329 symbolIdIsPrimaryKey: false
330 );
331
332 public static readonly TableDefinition Directory = new TableDefinition(
333 "Directory",
334 SymbolDefinitions.Directory,
335 new[]
336 {
337 new ColumnDefinition("Directory", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Unique identifier for directory entry, primary key. If a property by this name is defined, it contains the full path to the directory.", modularizeType: ColumnModularizeType.Column),
338 new ColumnDefinition("Directory_Parent", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Reference to the entry in this table specifying the default parent directory. A record parented to itself or with a Null parent represents a root of the install tree.", modularizeType: ColumnModularizeType.Column),
339 new ColumnDefinition("DefaultDir", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.DefaultDir, description: "The default sub-path under parent's path."),
340 },
341 symbolIdIsPrimaryKey: true
342 );
343
344 public static readonly TableDefinition Control = new TableDefinition(
345 "Control",
346 SymbolDefinitions.Control,
347 new[]
348 {
349 new ColumnDefinition("Dialog_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Dialog", keyColumn: 1, description: "External key to the Dialog table, name of the dialog.", modularizeType: ColumnModularizeType.Column),
350 new ColumnDefinition("Control", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the control. This name must be unique within a dialog, but can repeat on different dialogs. "),
351 new ColumnDefinition("Type", ColumnType.String, 20, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "The type of the control."),
352 new ColumnDefinition("X", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Horizontal coordinate of the upper left corner of the bounding rectangle of the control.", forceLocalizable: true),
353 new ColumnDefinition("Y", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Vertical coordinate of the upper left corner of the bounding rectangle of the control.", forceLocalizable: true),
354 new ColumnDefinition("Width", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Width of the bounding rectangle of the control.", forceLocalizable: true),
355 new ColumnDefinition("Height", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Height of the bounding rectangle of the control.", forceLocalizable: true),
356 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A 32-bit word that specifies the attribute flags to be applied to this control."),
357 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "The name of a defined property to be linked to this control. ", modularizeType: ColumnModularizeType.Column),
358 new ColumnDefinition("Text", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "A string used to set the initial text contained within a control (if appropriate).", modularizeType: ColumnModularizeType.ControlText),
359 new ColumnDefinition("Control_Next", ColumnType.String, 50, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "The name of an other control on the same dialog. This link defines the tab order of the controls. The links have to form one or more cycles!"),
360 new ColumnDefinition("Help", ColumnType.Localized, 50, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The help strings used with the button. The text is optional. "),
361 },
362 strongRowType: typeof(ControlRow),
363 symbolIdIsPrimaryKey: false
364 );
365
366 public static readonly TableDefinition Dialog = new TableDefinition(
367 "Dialog",
368 SymbolDefinitions.Dialog,
369 new[]
370 {
371 new ColumnDefinition("Dialog", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the dialog.", modularizeType: ColumnModularizeType.Column),
372 new ColumnDefinition("HCentering", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 100, description: "Horizontal position of the dialog on a 0-100 scale. 0 means left end, 100 means right end of the screen, 50 center."),
373 new ColumnDefinition("VCentering", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 100, description: "Vertical position of the dialog on a 0-100 scale. 0 means top end, 100 means bottom end of the screen, 50 center."),
374 new ColumnDefinition("Width", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Width of the bounding rectangle of the dialog."),
375 new ColumnDefinition("Height", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Height of the bounding rectangle of the dialog."),
376 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A 32-bit word that specifies the attribute flags to be applied to this dialog."),
377 new ColumnDefinition("Title", ColumnType.Localized, 128, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "A text string specifying the title to be displayed in the title bar of the dialog's window.", modularizeType: ColumnModularizeType.Property),
378 new ColumnDefinition("Control_First", ColumnType.String, 50, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "Defines the control that has the focus when the dialog is created."),
379 new ColumnDefinition("Control_Default", ColumnType.String, 50, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "Defines the default control. Hitting return is equivalent to pushing this button."),
380 new ColumnDefinition("Control_Cancel", ColumnType.String, 50, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "Defines the cancel control. Hitting escape or clicking on the close icon on the dialog is equivalent to pushing this button."),
381 },
382 symbolIdIsPrimaryKey: true
383 );
384
385 public static readonly TableDefinition ControlCondition = new TableDefinition(
386 "ControlCondition",
387 SymbolDefinitions.ControlCondition,
388 new[]
389 {
390 new ColumnDefinition("Dialog_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Dialog", keyColumn: 1, description: "A foreign key to the Dialog table, name of the dialog.", modularizeType: ColumnModularizeType.Column),
391 new ColumnDefinition("Control_", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "A foreign key to the Control table, name of the control."),
392 new ColumnDefinition("Action", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Unknown, possibilities: "Default;Disable;Enable;Hide;Show", description: "The desired action to be taken on the specified control."),
393 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Condition, description: "A standard conditional statement that specifies under which conditions the action should be triggered.", modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
394 },
395 symbolIdIsPrimaryKey: false
396 );
397
398 public static readonly TableDefinition ControlEvent = new TableDefinition(
399 "ControlEvent",
400 SymbolDefinitions.ControlEvent,
401 new[]
402 {
403 new ColumnDefinition("Dialog_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Dialog", keyColumn: 1, description: "A foreign key to the Dialog table, name of the dialog.", modularizeType: ColumnModularizeType.Column),
404 new ColumnDefinition("Control_", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "A foreign key to the Control table, name of the control"),
405 new ColumnDefinition("Event", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Formatted, description: "An identifier that specifies the type of the event that should take place when the user interacts with control specified by the first two entries.", modularizeType: ColumnModularizeType.Property),
406 new ColumnDefinition("Argument", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Formatted, description: "A value to be used as a modifier when triggering a particular event.", modularizeType: ColumnModularizeType.ControlEventArgument, forceLocalizable: true),
407 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: true, nullable: true, ColumnCategory.Condition, description: "A standard conditional statement that specifies under which conditions an event should be triggered.", modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
408 new ColumnDefinition("Ordering", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "An integer used to order several events tied to the same control. Can be left blank."),
409 },
410 symbolIdIsPrimaryKey: false
411 );
412
413 public static readonly TableDefinition CreateFolder = new TableDefinition(
414 "CreateFolder",
415 SymbolDefinitions.CreateFolder,
416 new[]
417 {
418 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Primary key, could be foreign key into the Directory table.", modularizeType: ColumnModularizeType.Column),
419 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table.", modularizeType: ColumnModularizeType.Column),
420 },
421 symbolIdIsPrimaryKey: false
422 );
423
424 public static readonly TableDefinition CustomAction = new TableDefinition(
425 "CustomAction",
426 SymbolDefinitions.CustomAction,
427 new[]
428 {
429 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, name of action, normally appears in sequence table unless private use.", modularizeType: ColumnModularizeType.Column),
430 new ColumnDefinition("Type", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "The numeric custom action type, consisting of source location, code type, entry, option flags."),
431 new ColumnDefinition("Source", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.CustomSource, description: "The table reference of the source of the code.", modularizeType: ColumnModularizeType.Column),
432 new ColumnDefinition("Target", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Excecution parameter, depends on the type of custom action", modularizeType: ColumnModularizeType.Property, forceLocalizable: true),
433 new ColumnDefinition("ExtendedType", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A numeric custom action type that extends code type or option flags of the Type column."),
434 },
435 symbolIdIsPrimaryKey: true
436 );
437
438 public static readonly TableDefinition DrLocator = new TableDefinition(
439 "DrLocator",
440 SymbolDefinitions.DrLocator,
441 new[]
442 {
443 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The Signature_ represents a unique file signature and is also the foreign key in the Signature table.", modularizeType: ColumnModularizeType.Column),
444 new ColumnDefinition("Parent", ColumnType.String, 72, primaryKey: true, nullable: true, ColumnCategory.Identifier, description: "The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.", modularizeType: ColumnModularizeType.Column),
445 new ColumnDefinition("Path", ColumnType.String, 255, primaryKey: true, nullable: true, ColumnCategory.AnyPath, description: "The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.", modularizeType: ColumnModularizeType.Property),
446 new ColumnDefinition("Depth", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0."),
447 },
448 symbolIdIsPrimaryKey: false
449 );
450
451 public static readonly TableDefinition DuplicateFile = new TableDefinition(
452 "DuplicateFile",
453 SymbolDefinitions.DuplicateFile,
454 new[]
455 {
456 new ColumnDefinition("FileKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key used to identify a particular file entry", modularizeType: ColumnModularizeType.Column),
457 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the duplicate file.", modularizeType: ColumnModularizeType.Column),
458 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Foreign key referencing the source file to be duplicated.", modularizeType: ColumnModularizeType.Column),
459 new ColumnDefinition("DestName", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Filename, description: "Filename to be given to the duplicate file."),
460 new ColumnDefinition("DestFolder", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Name of a property whose value is assumed to resolve to the full pathname to a destination folder.", modularizeType: ColumnModularizeType.Column),
461 },
462 symbolIdIsPrimaryKey: true
463 );
464
465 public static readonly TableDefinition Environment = new TableDefinition(
466 "Environment",
467 SymbolDefinitions.Environment,
468 new[]
469 {
470 new ColumnDefinition("Environment", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Unique identifier for the environmental variable setting", modularizeType: ColumnModularizeType.Column),
471 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The name of the environmental value."),
472 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The value to set in the environmental settings.", modularizeType: ColumnModularizeType.Property),
473 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the installing of the environmental value.", modularizeType: ColumnModularizeType.Column),
474 },
475 symbolIdIsPrimaryKey: true
476 );
477
478 public static readonly TableDefinition Error = new TableDefinition(
479 "Error",
480 SymbolDefinitions.Error,
481 new[]
482 {
483 new ColumnDefinition("Error", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Integer error number, obtained from header file IError(...) macros."),
484 new ColumnDefinition("Message", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Template, description: "Error formatting template, obtained from user ed. or localizers.", modularizeType: ColumnModularizeType.Property, useCData: true),
485 },
486 symbolIdIsPrimaryKey: true
487 );
488
489 public static readonly TableDefinition EventMapping = new TableDefinition(
490 "EventMapping",
491 SymbolDefinitions.EventMapping,
492 new[]
493 {
494 new ColumnDefinition("Dialog_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Dialog", keyColumn: 1, description: "A foreign key to the Dialog table, name of the Dialog.", modularizeType: ColumnModularizeType.Column),
495 new ColumnDefinition("Control_", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Control", keyColumn: 2, description: "A foreign key to the Control table, name of the control."),
496 new ColumnDefinition("Event", ColumnType.String, 50, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "An identifier that specifies the type of the event that the control subscribes to."),
497 new ColumnDefinition("Attribute", ColumnType.String, 50, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "The name of the control attribute, that is set when this event is received."),
498 },
499 symbolIdIsPrimaryKey: false
500 );
501
502 public static readonly TableDefinition Extension = new TableDefinition(
503 "Extension",
504 SymbolDefinitions.Extension,
505 new[]
506 {
507 new ColumnDefinition("Extension", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, description: "The extension associated with the table row."),
508 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.", modularizeType: ColumnModularizeType.Column),
509 new ColumnDefinition("ProgId_", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, keyTable: "ProgId", keyColumn: 1, description: "Optional ProgId associated with this extension."),
510 new ColumnDefinition("MIME_", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Text, keyTable: "MIME", keyColumn: 1, description: "Optional Context identifier, typically \"type/format\" associated with the extension"),
511 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational."),
512 },
513 symbolIdIsPrimaryKey: false
514 );
515
516 public static readonly TableDefinition MIME = new TableDefinition(
517 "MIME",
518 SymbolDefinitions.MIME,
519 new[]
520 {
521 new ColumnDefinition("ContentType", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Primary key. Context identifier, typically \"type/format\"."),
522 new ColumnDefinition("Extension_", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, keyTable: "Extension", keyColumn: 1, description: "Optional associated extension (without dot)"),
523 new ColumnDefinition("CLSID", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Guid, description: "Optional associated CLSID."),
524 },
525 symbolIdIsPrimaryKey: false
526 );
527
528 public static readonly TableDefinition FeatureComponents = new TableDefinition(
529 "FeatureComponents",
530 SymbolDefinitions.FeatureComponents,
531 new[]
532 {
533 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Foreign key into Feature table."),
534 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into Component table.", modularizeType: ColumnModularizeType.Column),
535 },
536 symbolIdIsPrimaryKey: false
537 );
538
539 public static readonly TableDefinition FileSFPCatalog = new TableDefinition(
540 "FileSFPCatalog",
541 SymbolDefinitions.FileSFPCatalog,
542 new[]
543 {
544 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "File associated with the catalog", modularizeType: ColumnModularizeType.Column),
545 new ColumnDefinition("SFPCatalog_", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Filename, keyTable: "SFPCatalog", keyColumn: 1, description: "Catalog associated with the file"),
546 },
547 symbolIdIsPrimaryKey: false
548 );
549
550 public static readonly TableDefinition SFPCatalog = new TableDefinition(
551 "SFPCatalog",
552 SymbolDefinitions.SFPCatalog,
553 new[]
554 {
555 new ColumnDefinition("SFPCatalog", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Filename, description: "File name for the catalog."),
556 new ColumnDefinition("Catalog", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "SFP Catalog"),
557 new ColumnDefinition("Dependency", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Parent catalog - only used by SFP", modularizeType: ColumnModularizeType.Property),
558 },
559 symbolIdIsPrimaryKey: false
560 );
561
562 public static readonly TableDefinition Font = new TableDefinition(
563 "Font",
564 null,
565 new[]
566 {
567 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Primary key, foreign key into File table referencing font file.", modularizeType: ColumnModularizeType.Column),
568 new ColumnDefinition("FontTitle", ColumnType.String, 128, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Font name."),
569 },
570 symbolIdIsPrimaryKey: false
571 );
572
573 public static readonly TableDefinition IniFile = new TableDefinition(
574 "IniFile",
575 SymbolDefinitions.IniFile,
576 new[]
577 {
578 new ColumnDefinition("IniFile", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
579 new ColumnDefinition("FileName", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Filename, description: "The .INI file name in which to write the information"),
580 new ColumnDefinition("DirProperty", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Foreign key into the Directory table denoting the directory where the .INI file is.", modularizeType: ColumnModularizeType.Column),
581 new ColumnDefinition("Section", ColumnType.Localized, 96, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The .INI file Section.", modularizeType: ColumnModularizeType.Property),
582 new ColumnDefinition("Key", ColumnType.Localized, 128, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The .INI file key below Section.", modularizeType: ColumnModularizeType.Property),
583 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The value to be written.", modularizeType: ColumnModularizeType.Property),
584 new ColumnDefinition("Action", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "0;1;3", description: "The type of modification to be made, one of iifEnum"),
585 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the installing of the .INI value.", modularizeType: ColumnModularizeType.Column),
586 },
587 symbolIdIsPrimaryKey: true
588 );
589
590 public static readonly TableDefinition IniLocator = new TableDefinition(
591 "IniLocator",
592 SymbolDefinitions.IniLocator,
593 new[]
594 {
595 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.", modularizeType: ColumnModularizeType.Column),
596 new ColumnDefinition("FileName", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Filename, description: "The .INI file name."),
597 new ColumnDefinition("Section", ColumnType.String, 96, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Section name within in file (within square brackets in INI file)."),
598 new ColumnDefinition("Key", ColumnType.String, 128, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Key value (followed by an equals sign in INI file)."),
599 new ColumnDefinition("Field", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The field in the .INI line. If Field is null or 0 the entire line is read."),
600 new ColumnDefinition("Type", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2, description: "An integer value that determines if the .INI value read is a filename or a directory location or to be used as is w/o interpretation."),
601 },
602 symbolIdIsPrimaryKey: false
603 );
604
605 public static readonly TableDefinition InstallExecuteSequence = new TableDefinition(
606 "InstallExecuteSequence",
607 null,
608 new[]
609 {
610 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
611 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
612 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
613 },
614 symbolIdIsPrimaryKey: true
615 );
616
617 public static readonly TableDefinition InstallUISequence = new TableDefinition(
618 "InstallUISequence",
619 null,
620 new[]
621 {
622 new ColumnDefinition("Action", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of action to invoke, either in the engine or the handler DLL."),
623 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.", forceLocalizable: true),
624 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action."),
625 },
626 symbolIdIsPrimaryKey: true
627 );
628
629 public static readonly TableDefinition IsolatedComponent = new TableDefinition(
630 "IsolatedComponent",
631 SymbolDefinitions.IsolatedComponent,
632 new[]
633 {
634 new ColumnDefinition("Component_Shared", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Key to Component table item to be isolated", modularizeType: ColumnModularizeType.Column),
635 new ColumnDefinition("Component_Application", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Key to Component table item for application", modularizeType: ColumnModularizeType.Column),
636 },
637 symbolIdIsPrimaryKey: false
638 );
639
640 public static readonly TableDefinition LaunchCondition = new TableDefinition(
641 "LaunchCondition",
642 SymbolDefinitions.LaunchCondition,
643 new[]
644 {
645 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Condition, description: "Expression which must evaluate to TRUE in order for install to commence.", forceLocalizable: true),
646 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Localizable text to display when condition fails and install must abort."),
647 },
648 symbolIdIsPrimaryKey: false
649 );
650
651 public static readonly TableDefinition ListBox = new TableDefinition(
652 "ListBox",
653 SymbolDefinitions.ListBox,
654 new[]
655 {
656 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A named property to be tied to this item. All the items tied to the same property become part of the same listbox.", modularizeType: ColumnModularizeType.Column),
657 new ColumnDefinition("Order", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive."),
658 new ColumnDefinition("Value", ColumnType.String, 64, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The value string associated with this item. Selecting the line will set the associated property to this value.", modularizeType: ColumnModularizeType.Property),
659 new ColumnDefinition("Text", ColumnType.Localized, 64, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value."),
660 },
661 symbolIdIsPrimaryKey: false
662 );
663
664 public static readonly TableDefinition ListView = new TableDefinition(
665 "ListView",
666 SymbolDefinitions.ListView,
667 new[]
668 {
669 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A named property to be tied to this item. All the items tied to the same property become part of the same listview.", modularizeType: ColumnModularizeType.Column),
670 new ColumnDefinition("Order", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive."),
671 new ColumnDefinition("Value", ColumnType.String, 64, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The value string associated with this item. Selecting the line will set the associated property to this value.", modularizeType: ColumnModularizeType.Property),
672 new ColumnDefinition("Text", ColumnType.Localized, 64, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.", modularizeType: ColumnModularizeType.Property),
673 new ColumnDefinition("Binary_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Binary", keyColumn: 1, description: "The name of the icon to be displayed with the icon. The binary information is looked up from the Binary Table.", modularizeType: ColumnModularizeType.Column),
674 },
675 symbolIdIsPrimaryKey: false
676 );
677
678 public static readonly TableDefinition LockPermissions = new TableDefinition(
679 "LockPermissions",
680 SymbolDefinitions.LockPermissions,
681 new[]
682 {
683 new ColumnDefinition("LockObject", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Foreign key into Registry or File table", modularizeType: ColumnModularizeType.Column),
684 new ColumnDefinition("Table", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Identifier, possibilities: "Directory;File;Registry", description: "Reference to another table name"),
685 new ColumnDefinition("Domain", ColumnType.String, 255, primaryKey: true, nullable: true, ColumnCategory.Formatted, description: "Domain name for user whose permissions are being set. (usually a property)", modularizeType: ColumnModularizeType.Property),
686 new ColumnDefinition("User", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Formatted, description: "User for permissions to be set. (usually a property)", modularizeType: ColumnModularizeType.Property),
687 new ColumnDefinition("Permission", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Permission Access mask. Full Control = 268435456 (GENERIC_ALL = 0x10000000)"),
688 },
689 symbolIdIsPrimaryKey: false
690 );
691
692 public static readonly TableDefinition MsiLockPermissionsEx = new TableDefinition(
693 "MsiLockPermissionsEx",
694 SymbolDefinitions.MsiLockPermissionsEx,
695 new[]
696 {
697 new ColumnDefinition("MsiLockPermissionsEx", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
698 new ColumnDefinition("LockObject", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Foreign key into Registry, File, CreateFolder, or ServiceInstall table", modularizeType: ColumnModularizeType.Column),
699 new ColumnDefinition("Table", ColumnType.String, 32, primaryKey: false, nullable: false, ColumnCategory.Identifier, possibilities: "CreateFolder;File;Registry;ServiceInstall", description: "Reference to another table name"),
700 new ColumnDefinition("SDDLText", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.FormattedSDDLText, description: "String to indicate permissions to be applied to the LockObject", modularizeType: ColumnModularizeType.Property),
701 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Expression which must evaluate to TRUE in order for this set of permissions to be applied", modularizeType: ColumnModularizeType.Property),
702 },
703 symbolIdIsPrimaryKey: true
704 );
705
706 public static readonly TableDefinition Media = new TableDefinition(
707 "Media",
708 SymbolDefinitions.Media,
709 new[]
710 {
711 new ColumnDefinition("DiskId", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "Primary key, integer to determine sort order for table."),
712 new ColumnDefinition("LastSequence", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "File sequence number for the last file for this media."),
713 new ColumnDefinition("DiskPrompt", ColumnType.Localized, 64, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Disk name: the visible text actually printed on the disk. This will be used to prompt the user when this disk needs to be inserted."),
714 new ColumnDefinition("Cabinet", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Cabinet, description: "If some or all of the files stored on the media are compressed in a cabinet, the name of that cabinet."),
715 new ColumnDefinition("VolumeLabel", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The label attributed to the volume."),
716 new ColumnDefinition("Source", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Property, description: "The property defining the location of the cabinet file."),
717 },
718 strongRowType: typeof(MediaRow),
719 symbolIdIsPrimaryKey: false
720 );
721
722 public static readonly TableDefinition MoveFile = new TableDefinition(
723 "MoveFile",
724 SymbolDefinitions.MoveFile,
725 new[]
726 {
727 new ColumnDefinition("FileKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key that uniquely identifies a particular MoveFile record", modularizeType: ColumnModularizeType.Column),
728 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "If this component is not \"selected\" for installation or removal, no action will be taken on the associated MoveFile entry", modularizeType: ColumnModularizeType.Column),
729 new ColumnDefinition("SourceName", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Name of the source file(s) to be moved or copied. Can contain the '*' or '?' wildcards."),
730 new ColumnDefinition("DestName", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Filename, description: "Name to be given to the original file after it is moved or copied. If blank, the destination file will be given the same name as the source file"),
731 new ColumnDefinition("SourceFolder", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Name of a property whose value is assumed to resolve to the full path to the source directory", modularizeType: ColumnModularizeType.Column),
732 new ColumnDefinition("DestFolder", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Name of a property whose value is assumed to resolve to the full path to the destination directory", modularizeType: ColumnModularizeType.Column),
733 new ColumnDefinition("Options", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Integer value specifying the MoveFile operating mode, one of imfoEnum"),
734 },
735 symbolIdIsPrimaryKey: true
736 );
737
738 public static readonly TableDefinition MsiAssembly = new TableDefinition(
739 "MsiAssembly",
740 SymbolDefinitions.Assembly,
741 new[]
742 {
743 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into Component table.", modularizeType: ColumnModularizeType.Column),
744 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Foreign key into Feature table."),
745 new ColumnDefinition("File_Manifest", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Foreign key into the File table denoting the manifest file for the assembly.", modularizeType: ColumnModularizeType.Column),
746 new ColumnDefinition("File_Application", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Foreign key into File table, denoting the application context for private assemblies. Null for global assemblies.", modularizeType: ColumnModularizeType.Column),
747 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Assembly attributes"),
748 },
749 symbolIdIsPrimaryKey: false
750 );
751
752 public static readonly TableDefinition MsiAssemblyName = new TableDefinition(
753 "MsiAssemblyName",
754 SymbolDefinitions.MsiAssemblyName,
755 new[]
756 {
757 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into Component table.", modularizeType: ColumnModularizeType.Column),
758 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, description: "The name part of the name-value pairs for the assembly name."),
759 new ColumnDefinition("Value", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The value part of the name-value pairs for the assembly name."),
760 },
761 symbolIdIsPrimaryKey: false
762 );
763
764 public static readonly TableDefinition MsiDigitalCertificate = new TableDefinition(
765 "MsiDigitalCertificate",
766 SymbolDefinitions.MsiDigitalCertificate,
767 new[]
768 {
769 new ColumnDefinition("DigitalCertificate", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A unique identifier for the row"),
770 new ColumnDefinition("CertData", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "A certificate context blob for a signer certificate"),
771 },
772 symbolIdIsPrimaryKey: true
773 );
774
775 public static readonly TableDefinition MsiDigitalSignature = new TableDefinition(
776 "MsiDigitalSignature",
777 SymbolDefinitions.MsiDigitalSignature,
778 new[]
779 {
780 new ColumnDefinition("Table", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Unknown, possibilities: "Media", description: "Reference to another table name (only Media table is supported)"),
781 new ColumnDefinition("SignObject", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Foreign key to Media table"),
782 new ColumnDefinition("DigitalCertificate_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "MsiDigitalCertificate", keyColumn: 1, description: "Foreign key to MsiDigitalCertificate table identifying the signer certificate"),
783 new ColumnDefinition("Hash", ColumnType.Object, 0, primaryKey: false, nullable: true, ColumnCategory.Binary, description: "The encoded hash blob from the digital signature"),
784 },
785 symbolIdIsPrimaryKey: false
786 );
787
788 public static readonly TableDefinition MsiEmbeddedChainer = new TableDefinition(
789 "MsiEmbeddedChainer",
790 SymbolDefinitions.MsiEmbeddedChainer,
791 new[]
792 {
793 new ColumnDefinition("MsiEmbeddedChainer", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The primary key for the table.", modularizeType: ColumnModularizeType.Column),
794 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "A conditional statement for running the user-defined function.", forceLocalizable: true),
795 new ColumnDefinition("CommandLine", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The value in this field is a part of the command line string passed to the executable file identified in the Source column.", modularizeType: ColumnModularizeType.Property),
796 new ColumnDefinition("Source", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.CustomSource, description: "The location of the executable file for the user-defined function.", modularizeType: ColumnModularizeType.Column),
797 new ColumnDefinition("Type", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "2;18;50", description: "The functions listed in the MsiEmbeddedChainer table are described using the following custom action numeric types."),
798 },
799 symbolIdIsPrimaryKey: true
800 );
801
802 public static readonly TableDefinition MsiEmbeddedUI = new TableDefinition(
803 "MsiEmbeddedUI",
804 SymbolDefinitions.MsiEmbeddedUI,
805 new[]
806 {
807 new ColumnDefinition("MsiEmbeddedUI", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The primary key for the table.", modularizeType: ColumnModularizeType.Column),
808 new ColumnDefinition("FileName", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The name of the file that receives the binary information in the Data column."),
809 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "0;1;2;3", description: "Information about the data in the Data column."),
810 new ColumnDefinition("MessageFilter", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Specifies the types of messages that are sent to the user interface DLL."),
811 new ColumnDefinition("Data", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "This column contains binary information."),
812 },
813 symbolIdIsPrimaryKey: true
814 );
815
816 public static readonly TableDefinition MsiFileHash = new TableDefinition(
817 "MsiFileHash",
818 SymbolDefinitions.MsiFileHash,
819 new[]
820 {
821 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Primary key, foreign key into File table referencing file with this hash", modularizeType: ColumnModularizeType.Column),
822 new ColumnDefinition("Options", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Various options and attributes for this hash."),
823 new ColumnDefinition("HashPart1", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Size of file in bytes (long integer)."),
824 new ColumnDefinition("HashPart2", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Size of file in bytes (long integer)."),
825 new ColumnDefinition("HashPart3", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Size of file in bytes (long integer)."),
826 new ColumnDefinition("HashPart4", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Size of file in bytes (long integer)."),
827 },
828 symbolIdIsPrimaryKey: true
829 );
830
831 public static readonly TableDefinition MsiPackageCertificate = new TableDefinition(
832 "MsiPackageCertificate",
833 SymbolDefinitions.MsiPackageCertificate,
834 new[]
835 {
836 new ColumnDefinition("PackageCertificate", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. A unique identifier for the row."),
837 new ColumnDefinition("DigitalCertificate_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "MsiDigitalCertificate", keyColumn: 1, description: "Foreign key to MsiDigitalCertificate table identifying the signer certificate."),
838 },
839 symbolIdIsPrimaryKey: false
840 );
841
842 public static readonly TableDefinition MsiPatchCertificate = new TableDefinition(
843 "MsiPatchCertificate",
844 SymbolDefinitions.MsiPatchCertificate,
845 new[]
846 {
847 new ColumnDefinition("PatchCertificate", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. A unique identifier for the row."),
848 new ColumnDefinition("DigitalCertificate_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "MsiDigitalCertificate", keyColumn: 1, description: "Foreign key to MsiDigitalCertificate table identifying the signer certificate."),
849 },
850 symbolIdIsPrimaryKey: false
851 );
852
853 public static readonly TableDefinition MsiPatchHeaders = new TableDefinition(
854 "MsiPatchHeaders",
855 SymbolDefinitions.MsiPatchHeaders,
856 new[]
857 {
858 new ColumnDefinition("StreamRef", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. A unique identifier for the row."),
859 new ColumnDefinition("Header", ColumnType.Object, 0, primaryKey: false, nullable: false, ColumnCategory.Binary, description: "Binary stream. The patch header, used for patch validation."),
860 },
861 symbolIdIsPrimaryKey: false
862 );
863
864 public static readonly TableDefinition PatchMetadata = new TableDefinition(
865 "PatchMetadata",
866 SymbolDefinitions.PatchMetadata,
867 new[]
868 {
869 new ColumnDefinition("Company", ColumnType.String, 72, primaryKey: true, nullable: true, ColumnCategory.Identifier, description: "Primary key. The name of the company."),
870 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. The name of the property."),
871 new ColumnDefinition("Value", ColumnType.Localized, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Non-null, non-empty value of the metadata property."),
872 },
873 symbolIdIsPrimaryKey: false
874 );
875
876 public static readonly TableDefinition MsiPatchMetadata = new TableDefinition(
877 "MsiPatchMetadata",
878 SymbolDefinitions.MsiPatchMetadata,
879 new[]
880 {
881 new ColumnDefinition("Company", ColumnType.String, 72, primaryKey: true, nullable: true, ColumnCategory.Unknown),
882 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Unknown),
883 new ColumnDefinition("Value", ColumnType.Localized, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown),
884 },
885 symbolIdIsPrimaryKey: false
886 );
887
888 public static readonly TableDefinition MsiPatchOldAssemblyFile = new TableDefinition(
889 "MsiPatchOldAssemblyFile",
890 SymbolDefinitions.MsiPatchOldAssemblyFile,
891 new[]
892 {
893 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Foreign key into File table. Patch-only table.", modularizeType: ColumnModularizeType.Column),
894 new ColumnDefinition("Assembly_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "MsiPatchOldAssemblyName", keyColumn: 1, description: "Foreign key into MsiPatchOldAssemblyName table.", modularizeType: ColumnModularizeType.Column),
895 },
896 symbolIdIsPrimaryKey: false
897 );
898
899 public static readonly TableDefinition MsiPatchOldAssemblyName = new TableDefinition(
900 "MsiPatchOldAssemblyName",
901 SymbolDefinitions.MsiPatchOldAssemblyName,
902 new[]
903 {
904 new ColumnDefinition("Assembly", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A unique identifier for the row.", modularizeType: ColumnModularizeType.Column),
905 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, description: "The name part of the name-value pairs for the assembly name. This represents the old name for the assembly."),
906 new ColumnDefinition("Value", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The value part of the name-value pairs for the assembly name. This represents the old name for the assembly."),
907 },
908 symbolIdIsPrimaryKey: false
909 );
910
911 public static readonly TableDefinition PatchSequence = new TableDefinition(
912 "PatchSequence",
913 SymbolDefinitions.PatchSequence,
914 new[]
915 {
916 new ColumnDefinition("PatchFamily", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key. The name of the family for the patch."),
917 new ColumnDefinition("Target", ColumnType.String, 72, primaryKey: true, nullable: true, ColumnCategory.Text, description: "Primary key. Determines product code filtering for family."),
918 new ColumnDefinition("Sequence", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Sequence information in version (x.x.x.x) format."),
919 new ColumnDefinition("Supersede", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Indicates that this patch supersedes earlier patches."),
920 },
921 symbolIdIsPrimaryKey: false
922 );
923
924 public static readonly TableDefinition MsiPatchSequence = new TableDefinition(
925 "MsiPatchSequence",
926 SymbolDefinitions.MsiPatchSequence,
927 new[]
928 {
929 new ColumnDefinition("PatchFamily", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Unknown),
930 new ColumnDefinition("ProductCode", ColumnType.String, 38, primaryKey: true, nullable: true, ColumnCategory.Unknown),
931 new ColumnDefinition("Sequence", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Unknown),
932 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown),
933 },
934 symbolIdIsPrimaryKey: false
935 );
936
937 public static readonly TableDefinition ODBCAttribute = new TableDefinition(
938 "ODBCAttribute",
939 SymbolDefinitions.ODBCAttribute,
940 new[]
941 {
942 new ColumnDefinition("Driver_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "ODBCDriver", keyColumn: 1, description: "Reference to ODBC driver in ODBCDriver table", modularizeType: ColumnModularizeType.Column),
943 new ColumnDefinition("Attribute", ColumnType.String, 40, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Name of ODBC driver attribute"),
944 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Value for ODBC driver attribute"),
945 },
946 symbolIdIsPrimaryKey: false
947 );
948
949 public static readonly TableDefinition ODBCDriver = new TableDefinition(
950 "ODBCDriver",
951 SymbolDefinitions.ODBCDriver,
952 new[]
953 {
954 new ColumnDefinition("Driver", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized.internal token for driver", modularizeType: ColumnModularizeType.Column),
955 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Reference to associated component", modularizeType: ColumnModularizeType.Column),
956 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Text used as registered name for driver, non-localized"),
957 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Reference to key driver file", modularizeType: ColumnModularizeType.Column),
958 new ColumnDefinition("File_Setup", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Optional reference to key driver setup DLL", modularizeType: ColumnModularizeType.Column),
959 },
960 symbolIdIsPrimaryKey: true
961 );
962
963 public static readonly TableDefinition ODBCDataSource = new TableDefinition(
964 "ODBCDataSource",
965 SymbolDefinitions.ODBCDataSource,
966 new[]
967 {
968 new ColumnDefinition("DataSource", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized.internal token for data source", modularizeType: ColumnModularizeType.Column),
969 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Reference to associated component", modularizeType: ColumnModularizeType.Column),
970 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Text used as registered name for data source"),
971 new ColumnDefinition("DriverDescription", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Reference to driver description, may be existing driver"),
972 new ColumnDefinition("Registration", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Registration option: 0=machine, 1=user, others t.b.d."),
973 },
974 symbolIdIsPrimaryKey: true
975 );
976
977 public static readonly TableDefinition ODBCSourceAttribute = new TableDefinition(
978 "ODBCSourceAttribute",
979 SymbolDefinitions.ODBCSourceAttribute,
980 new[]
981 {
982 new ColumnDefinition("DataSource_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "ODBCDataSource", keyColumn: 1, description: "Reference to ODBC data source in ODBCDataSource table", modularizeType: ColumnModularizeType.Column),
983 new ColumnDefinition("Attribute", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Name of ODBC data source attribute"),
984 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Value for ODBC data source attribute"),
985 },
986 symbolIdIsPrimaryKey: false
987 );
988
989 public static readonly TableDefinition ODBCTranslator = new TableDefinition(
990 "ODBCTranslator",
991 SymbolDefinitions.ODBCTranslator,
992 new[]
993 {
994 new ColumnDefinition("Translator", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized.internal token for translator", modularizeType: ColumnModularizeType.Column),
995 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Reference to associated component", modularizeType: ColumnModularizeType.Column),
996 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Text used as registered name for translator"),
997 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Reference to key translator file", modularizeType: ColumnModularizeType.Column),
998 new ColumnDefinition("File_Setup", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Optional reference to key translator setup DLL", modularizeType: ColumnModularizeType.Column),
999 },
1000 symbolIdIsPrimaryKey: true
1001 );
1002
1003 public static readonly TableDefinition Patch = new TableDefinition(
1004 "Patch",
1005 SymbolDefinitions.Patch,
1006 new[]
1007 {
1008 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token, foreign key to File table, must match identifier in cabinet.", modularizeType: ColumnModularizeType.Column),
1009 new ColumnDefinition("Sequence", ColumnType.Number, 4, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Primary key, sequence with respect to the media images; order must track cabinet order."),
1010 new ColumnDefinition("PatchSize", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Size of patch in bytes (long integer)."),
1011 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Integer containing bit flags representing patch attributes"),
1012 new ColumnDefinition("Header", ColumnType.Object, 0, primaryKey: false, nullable: true, ColumnCategory.Binary, description: "Binary stream. The patch header, used for patch validation."),
1013 new ColumnDefinition("StreamRef_", ColumnType.String, 38, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Identifier. Foreign key to the StreamRef column of the MsiPatchHeaders table."),
1014 },
1015 symbolIdIsPrimaryKey: false
1016 );
1017
1018 public static readonly TableDefinition PatchPackage = new TableDefinition(
1019 "PatchPackage",
1020 SymbolDefinitions.PatchPackage,
1021 new[]
1022 {
1023 new ColumnDefinition("PatchId", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid, description: "A unique string GUID representing this patch."),
1024 new ColumnDefinition("Media_", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Foreign key to DiskId column of Media table. Indicates the disk containing the patch package."),
1025 },
1026 symbolIdIsPrimaryKey: false
1027 );
1028
1029 public static readonly TableDefinition PublishComponent = new TableDefinition(
1030 "PublishComponent",
1031 SymbolDefinitions.PublishComponent,
1032 new[]
1033 {
1034 new ColumnDefinition("ComponentId", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid, description: "A string GUID that represents the component id that will be requested by the alien product."),
1035 new ColumnDefinition("Qualifier", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, description: "This is defined only when the ComponentId column is an Qualified Component Id. This is the Qualifier for ProvideComponentIndirect."),
1036 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table.", modularizeType: ColumnModularizeType.Column),
1037 new ColumnDefinition("AppData", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "This is localisable Application specific data that can be associated with a Qualified Component."),
1038 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Foreign key into the Feature table."),
1039 },
1040 symbolIdIsPrimaryKey: false
1041 );
1042
1043 public static readonly TableDefinition RadioButton = new TableDefinition(
1044 "RadioButton",
1045 SymbolDefinitions.RadioButton,
1046 new[]
1047 {
1048 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A named property to be tied to this radio button. All the buttons tied to the same property become part of the same group.", modularizeType: ColumnModularizeType.Column),
1049 new ColumnDefinition("Order", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 32767, description: "A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive."),
1050 new ColumnDefinition("Value", ColumnType.String, 64, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The value string associated with this button. Selecting the button will set the associated property to this value.", modularizeType: ColumnModularizeType.Property),
1051 new ColumnDefinition("X", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The horizontal coordinate of the upper left corner of the bounding rectangle of the radio button.", forceLocalizable: true),
1052 new ColumnDefinition("Y", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The vertical coordinate of the upper left corner of the bounding rectangle of the radio button.", forceLocalizable: true),
1053 new ColumnDefinition("Width", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The width of the button.", forceLocalizable: true),
1054 new ColumnDefinition("Height", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The height of the button.", forceLocalizable: true),
1055 new ColumnDefinition("Text", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The visible title to be assigned to the radio button."),
1056 new ColumnDefinition("Help", ColumnType.Localized, 50, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The help strings used with the button. The text is optional."),
1057 },
1058 symbolIdIsPrimaryKey: false
1059 );
1060
1061 public static readonly TableDefinition Registry = new TableDefinition(
1062 "Registry",
1063 SymbolDefinitions.Registry,
1064 new[]
1065 {
1066 new ColumnDefinition("Registry", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1067 new ColumnDefinition("Root", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: -1, maxValue: 3, description: "The predefined root key for the registry value, one of rrkEnum."),
1068 new ColumnDefinition("Key", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.RegPath, description: "The key for the registry value.", modularizeType: ColumnModularizeType.Property),
1069 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The registry value name.", modularizeType: ColumnModularizeType.Property),
1070 new ColumnDefinition("Value", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The registry value.", modularizeType: ColumnModularizeType.Property),
1071 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the installing of the registry value.", modularizeType: ColumnModularizeType.Column),
1072 },
1073 symbolIdIsPrimaryKey: true
1074 );
1075
1076 public static readonly TableDefinition RegLocator = new TableDefinition(
1077 "RegLocator",
1078 SymbolDefinitions.RegLocator,
1079 new[]
1080 {
1081 new ColumnDefinition("Signature_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table. If the type is 0, the registry values refers a directory, and _Signature is not a foreign key.", modularizeType: ColumnModularizeType.Column),
1082 new ColumnDefinition("Root", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 3, description: "The predefined root key for the registry value, one of rrkEnum."),
1083 new ColumnDefinition("Key", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.RegPath, description: "The key for the registry value.", modularizeType: ColumnModularizeType.Property, forceLocalizable: true),
1084 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The registry value name.", modularizeType: ColumnModularizeType.Property, forceLocalizable: true),
1085 new ColumnDefinition("Type", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 18, description: "An integer value that determines if the registry value is a filename or a directory location or to be used as is w/o interpretation."),
1086 },
1087 symbolIdIsPrimaryKey: true
1088 );
1089
1090 public static readonly TableDefinition RemoveFile = new TableDefinition(
1091 "RemoveFile",
1092 SymbolDefinitions.RemoveFile,
1093 new[]
1094 {
1095 new ColumnDefinition("FileKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key used to identify a particular file entry", modularizeType: ColumnModularizeType.Column),
1096 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the file to be removed.", modularizeType: ColumnModularizeType.Column),
1097 new ColumnDefinition("FileName", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.WildCardFilename, description: "Name of the file to be removed."),
1098 new ColumnDefinition("DirProperty", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Name of a property whose value is assumed to resolve to the full pathname to the folder of the file to be removed.", modularizeType: ColumnModularizeType.Column),
1099 new ColumnDefinition("InstallMode", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "1;2;3", description: "Installation option, one of iimEnum."),
1100 },
1101 symbolIdIsPrimaryKey: true
1102 );
1103
1104 public static readonly TableDefinition RemoveIniFile = new TableDefinition(
1105 "RemoveIniFile",
1106 null,
1107 new[]
1108 {
1109 new ColumnDefinition("RemoveIniFile", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1110 new ColumnDefinition("FileName", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Filename, description: "The .INI file name in which to delete the information"),
1111 new ColumnDefinition("DirProperty", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Foreign key into the Directory table denoting the directory where the .INI file is.", modularizeType: ColumnModularizeType.Column),
1112 new ColumnDefinition("Section", ColumnType.Localized, 96, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The .INI file Section.", modularizeType: ColumnModularizeType.Property),
1113 new ColumnDefinition("Key", ColumnType.Localized, 128, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "The .INI file key below Section.", modularizeType: ColumnModularizeType.Property),
1114 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The value to be deleted. The value is required when Action is iifIniRemoveTag", modularizeType: ColumnModularizeType.Property),
1115 new ColumnDefinition("Action", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "2;4", description: "The type of modification to be made, one of iifEnum."),
1116 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the deletion of the .INI value.", modularizeType: ColumnModularizeType.Column),
1117 },
1118 symbolIdIsPrimaryKey: true
1119 );
1120
1121 public static readonly TableDefinition RemoveRegistry = new TableDefinition(
1122 "RemoveRegistry",
1123 SymbolDefinitions.RemoveRegistry,
1124 new[]
1125 {
1126 new ColumnDefinition("RemoveRegistry", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1127 new ColumnDefinition("Root", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: -1, maxValue: 3, description: "The predefined root key for the registry value, one of rrkEnum"),
1128 new ColumnDefinition("Key", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.RegPath, description: "The key for the registry value.", modularizeType: ColumnModularizeType.Property),
1129 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The registry value name.", modularizeType: ColumnModularizeType.Property),
1130 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the deletion of the registry value.", modularizeType: ColumnModularizeType.Column),
1131 },
1132 symbolIdIsPrimaryKey: true
1133 );
1134
1135 public static readonly TableDefinition ReserveCost = new TableDefinition(
1136 "ReserveCost",
1137 SymbolDefinitions.ReserveCost,
1138 new[]
1139 {
1140 new ColumnDefinition("ReserveKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key that uniquely identifies a particular ReserveCost record", modularizeType: ColumnModularizeType.Column),
1141 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Reserve a specified amount of space if this component is to be installed.", modularizeType: ColumnModularizeType.Column),
1142 new ColumnDefinition("ReserveFolder", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Name of a property whose value is assumed to resolve to the full path to the destination directory", modularizeType: ColumnModularizeType.Column),
1143 new ColumnDefinition("ReserveLocal", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Disk space to reserve if linked component is installed locally."),
1144 new ColumnDefinition("ReserveSource", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Disk space to reserve if linked component is installed to run from the source location."),
1145 },
1146 symbolIdIsPrimaryKey: true
1147 );
1148
1149 public static readonly TableDefinition SelfReg = new TableDefinition(
1150 "SelfReg",
1151 null,
1152 new[]
1153 {
1154 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Foreign key into the File table denoting the module that needs to be registered.", modularizeType: ColumnModularizeType.Column),
1155 new ColumnDefinition("Cost", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The cost of registering the module."),
1156 },
1157 symbolIdIsPrimaryKey: false
1158 );
1159
1160 public static readonly TableDefinition ServiceControl = new TableDefinition(
1161 "ServiceControl",
1162 SymbolDefinitions.ServiceControl,
1163 new[]
1164 {
1165 new ColumnDefinition("ServiceControl", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1166 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of a service. /, \\, comma and space are invalid", modularizeType: ColumnModularizeType.Property),
1167 new ColumnDefinition("Event", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 187, description: "Bit field: Install: 0x1 = Start, 0x2 = Stop, 0x8 = Delete, Uninstall: 0x10 = Start, 0x20 = Stop, 0x80 = Delete"),
1168 new ColumnDefinition("Arguments", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Arguments for the service. Separate by [~].", modularizeType: ColumnModularizeType.Property),
1169 new ColumnDefinition("Wait", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Boolean for whether to wait for the service to fully start"),
1170 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table that controls the startup of the service", modularizeType: ColumnModularizeType.Column),
1171 },
1172 symbolIdIsPrimaryKey: true
1173 );
1174
1175 public static readonly TableDefinition ServiceInstall = new TableDefinition(
1176 "ServiceInstall",
1177 SymbolDefinitions.ServiceInstall,
1178 new[]
1179 {
1180 new ColumnDefinition("ServiceInstall", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1181 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Internal Name of the Service", modularizeType: ColumnModularizeType.Property),
1182 new ColumnDefinition("DisplayName", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "External Name of the Service", modularizeType: ColumnModularizeType.Property),
1183 new ColumnDefinition("ServiceType", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Type of the service"),
1184 new ColumnDefinition("StartType", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 4, description: "Type of the service"),
1185 new ColumnDefinition("ErrorControl", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Severity of error if service fails to start"),
1186 new ColumnDefinition("LoadOrderGroup", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "LoadOrderGroup", modularizeType: ColumnModularizeType.Property),
1187 new ColumnDefinition("Dependencies", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Other services this depends on to start. Separate by [~], and end with [~][~]", modularizeType: ColumnModularizeType.Property),
1188 new ColumnDefinition("StartName", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "User or object name to run service as", modularizeType: ColumnModularizeType.Property),
1189 new ColumnDefinition("Password", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "password to run service with. (with StartName)", modularizeType: ColumnModularizeType.Property),
1190 new ColumnDefinition("Arguments", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Arguments to include in every start of the service, passed to WinMain", modularizeType: ColumnModularizeType.Property),
1191 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table that controls the startup of the service", modularizeType: ColumnModularizeType.Column),
1192 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Description of service.", modularizeType: ColumnModularizeType.Property),
1193 },
1194 symbolIdIsPrimaryKey: true
1195 );
1196
1197 public static readonly TableDefinition MsiServiceConfig = new TableDefinition(
1198 "MsiServiceConfig",
1199 SymbolDefinitions.MsiServiceConfig,
1200 new[]
1201 {
1202 new ColumnDefinition("MsiServiceConfig", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1203 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of a service. /, \\, comma and space are invalid", modularizeType: ColumnModularizeType.Property),
1204 new ColumnDefinition("Event", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 7, description: "Bit field: 0x1 = Install, 0x2 = Uninstall, 0x4 = Reinstall"),
1205 new ColumnDefinition("ConfigType", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Service Configuration Option"),
1206 new ColumnDefinition("Argument", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Argument(s) for service configuration. Value depends on the content of the ConfigType field"),
1207 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table that controls the configuration of the service", modularizeType: ColumnModularizeType.Column),
1208 },
1209 symbolIdIsPrimaryKey: true
1210 );
1211
1212 public static readonly TableDefinition MsiServiceConfigFailureActions = new TableDefinition(
1213 "MsiServiceConfigFailureActions",
1214 SymbolDefinitions.MsiServiceConfigFailureActions,
1215 new[]
1216 {
1217 new ColumnDefinition("MsiServiceConfigFailureActions", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
1218 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of a service. /, \\, comma and space are invalid", modularizeType: ColumnModularizeType.Property),
1219 new ColumnDefinition("Event", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 7, description: "Bit field: 0x1 = Install, 0x2 = Uninstall, 0x4 = Reinstall"),
1220 new ColumnDefinition("ResetPeriod", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Time in seconds after which to reset the failure count to zero. Leave blank if it should never be reset"),
1221 new ColumnDefinition("RebootMessage", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Message to be broadcast to server users before rebooting"),
1222 new ColumnDefinition("Command", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Command line of the process to CreateProcess function to execute"),
1223 new ColumnDefinition("Actions", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "A list of integer actions separated by [~] delimiters: 0 = SC_ACTION_NONE, 1 = SC_ACTION_RESTART, 2 = SC_ACTION_REBOOT, 3 = SC_ACTION_RUN_COMMAND. Terminate with [~][~]"),
1224 new ColumnDefinition("DelayActions", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "A list of delays (time in milli-seconds), separated by [~] delmiters, to wait before taking the corresponding Action. Terminate with [~][~]"),
1225 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table that controls the configuration of failure actions for the service", modularizeType: ColumnModularizeType.Column),
1226 },
1227 symbolIdIsPrimaryKey: true
1228 );
1229
1230 public static readonly TableDefinition Shortcut = new TableDefinition(
1231 "Shortcut",
1232 SymbolDefinitions.Shortcut,
1233 new[]
1234 {
1235 new ColumnDefinition("Shortcut", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token.", modularizeType: ColumnModularizeType.Column),
1236 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Foreign key into the Directory table denoting the directory where the shortcut file is created.", modularizeType: ColumnModularizeType.Column),
1237 new ColumnDefinition("Name", ColumnType.Localized, 128, primaryKey: false, nullable: false, ColumnCategory.Filename, description: "The name of the shortcut to be created."),
1238 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table denoting the component whose selection gates the the shortcut creation/deletion.", modularizeType: ColumnModularizeType.Column),
1239 new ColumnDefinition("Target", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Shortcut, description: "The shortcut target. This is usually a property that is expanded to a file or a folder that the shortcut points to.", modularizeType: ColumnModularizeType.Property),
1240 new ColumnDefinition("Arguments", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The command-line arguments for the shortcut.", modularizeType: ColumnModularizeType.Property),
1241 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The description for the shortcut."),
1242 new ColumnDefinition("Hotkey", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The hotkey for the shortcut. It has the virtual-key code for the key in the low-order byte, and the modifier flags in the high-order byte. "),
1243 new ColumnDefinition("Icon_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Icon", keyColumn: 1, description: "Foreign key into the File table denoting the external icon file for the shortcut.", modularizeType: ColumnModularizeType.Icon),
1244 new ColumnDefinition("IconIndex", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -32767, maxValue: 32767, description: "The icon index for the shortcut."),
1245 new ColumnDefinition("ShowCmd", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "1;3;7", description: "The show command for the application window.The following values may be used."),
1246 new ColumnDefinition("WkDir", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Name of property defining location of working directory.", modularizeType: ColumnModularizeType.Column),
1247 new ColumnDefinition("DisplayResourceDLL", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The Formatted string providing the full path to the language neutral file containing the MUI Manifest.", modularizeType: ColumnModularizeType.Property),
1248 new ColumnDefinition("DisplayResourceId", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The display name index for the shortcut. This must be a non-negative number."),
1249 new ColumnDefinition("DescriptionResourceDLL", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The Formatted string providing the full path to the language neutral file containing the MUI Manifest.", modularizeType: ColumnModularizeType.Property),
1250 new ColumnDefinition("DescriptionResourceId", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The description name index for the shortcut. This must be a non-negative number."),
1251 },
1252 symbolIdIsPrimaryKey: true
1253 );
1254
1255 public static readonly TableDefinition MsiShortcutProperty = new TableDefinition(
1256 "MsiShortcutProperty",
1257 SymbolDefinitions.MsiShortcutProperty,
1258 new[]
1259 {
1260 new ColumnDefinition("MsiShortcutProperty", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
1261 new ColumnDefinition("Shortcut_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Shortcut", keyColumn: 1, description: "Foreign key into the Shortcut table", modularizeType: ColumnModularizeType.Column),
1262 new ColumnDefinition("PropertyKey", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Canonical string representation of the Property Key being set", modularizeType: ColumnModularizeType.Property),
1263 new ColumnDefinition("PropVariantValue", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "String representation of the value in the property", modularizeType: ColumnModularizeType.Property),
1264 },
1265 symbolIdIsPrimaryKey: true
1266 );
1267
1268 public static readonly TableDefinition Signature = new TableDefinition(
1269 "Signature",
1270 SymbolDefinitions.Signature,
1271 new[]
1272 {
1273 new ColumnDefinition("Signature", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The table key. The Signature represents a unique file signature.", modularizeType: ColumnModularizeType.Column),
1274 new ColumnDefinition("FileName", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The name of the file. This may contain a \"short name|long name\" pair."),
1275 new ColumnDefinition("MinVersion", ColumnType.String, 20, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The minimum version of the file."),
1276 new ColumnDefinition("MaxVersion", ColumnType.String, 20, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The maximum version of the file."),
1277 new ColumnDefinition("MinSize", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The minimum size of the file."),
1278 new ColumnDefinition("MaxSize", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The maximum size of the file. "),
1279 new ColumnDefinition("MinDate", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The minimum creation date of the file."),
1280 new ColumnDefinition("MaxDate", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The maximum creation date of the file."),
1281 new ColumnDefinition("Languages", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Language, description: "The languages supported by the file."),
1282 },
1283 symbolIdIsPrimaryKey: true
1284 );
1285
1286 public static readonly TableDefinition SoftwareIdentificationTag = new TableDefinition(
1287 "SoftwareIdentificationTag",
1288 SymbolDefinitions.SoftwareIdentificationTag,
1289 new[]
1290 {
1291 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "The file that installs the software id tag.", modularizeType: ColumnModularizeType.Column),
1292 new ColumnDefinition("Regid", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The regid for the software id tag."),
1293 new ColumnDefinition("TagId", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The unique id for the software id tag."),
1294 new ColumnDefinition("PersistentId", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The type of the software id tag."),
1295 new ColumnDefinition("Alias", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Alias for the software id tag."),
1296 },
1297 symbolIdIsPrimaryKey: false
1298 );
1299
1300 public static readonly TableDefinition TextStyle = new TableDefinition(
1301 "TextStyle",
1302 SymbolDefinitions.TextStyle,
1303 new[]
1304 {
1305 new ColumnDefinition("TextStyle", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the style. The primary key of this table. This name is embedded in the texts to indicate a style change."),
1306 new ColumnDefinition("FaceName", ColumnType.String, 32, primaryKey: false, nullable: false, ColumnCategory.Text, description: "A string indicating the name of the font used. Required. The string must be at most 31 characters long.", forceLocalizable: true),
1307 new ColumnDefinition("Size", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The size of the font used. This size is given in our units (1/12 of the system font height). Assuming that the system font is set to 12 point size, this is equivalent to the point size.", forceLocalizable: true),
1308 new ColumnDefinition("Color", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 16777215, description: "A long integer indicating the color of the string in the RGB format (Red, Green, Blue each 0-255, RGB = R + 256*G + 256^2*B)."),
1309 new ColumnDefinition("StyleBits", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 15, description: "A combination of style bits."),
1310 },
1311 symbolIdIsPrimaryKey: true
1312 );
1313
1314 public static readonly TableDefinition TypeLib = new TableDefinition(
1315 "TypeLib",
1316 SymbolDefinitions.TypeLib,
1317 new[]
1318 {
1319 new ColumnDefinition("LibID", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid, description: "The GUID that represents the library."),
1320 new ColumnDefinition("Language", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "The language of the library."),
1321 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.", modularizeType: ColumnModularizeType.Column),
1322 new ColumnDefinition("Version", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 16777215, description: "The version of the library. The minor version is in the lower 8 bits of the integer. The major version is in the next 16 bits. "),
1323 new ColumnDefinition("Description", ColumnType.Localized, 128, primaryKey: false, nullable: true, ColumnCategory.Text),
1324 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Optional. The foreign key into the Directory table denoting the path to the help file for the type library.", modularizeType: ColumnModularizeType.Column),
1325 new ColumnDefinition("Feature_", ColumnType.String, 38, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Feature", keyColumn: 1, description: "Required foreign key into the Feature Table, specifying the feature to validate or install in order for the type library to be operational."),
1326 new ColumnDefinition("Cost", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The cost associated with the registration of the typelib. This column is currently optional."),
1327 },
1328 symbolIdIsPrimaryKey: false
1329 );
1330
1331 public static readonly TableDefinition UIText = new TableDefinition(
1332 "UIText",
1333 SymbolDefinitions.UIText,
1334 new[]
1335 {
1336 new ColumnDefinition("Key", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "A unique key that identifies the particular string."),
1337 new ColumnDefinition("Text", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The localized version of the string."),
1338 },
1339 symbolIdIsPrimaryKey: true
1340 );
1341
1342 public static readonly TableDefinition Upgrade = new TableDefinition(
1343 "Upgrade",
1344 SymbolDefinitions.Upgrade,
1345 new[]
1346 {
1347 new ColumnDefinition("UpgradeCode", ColumnType.String, 38, primaryKey: true, nullable: false, ColumnCategory.Guid, description: "The UpgradeCode GUID belonging to the products in this set."),
1348 new ColumnDefinition("VersionMin", ColumnType.String, 20, primaryKey: true, nullable: true, ColumnCategory.Text, description: "The minimum ProductVersion of the products in this set. The set may or may not include products with this particular version."),
1349 new ColumnDefinition("VersionMax", ColumnType.String, 20, primaryKey: true, nullable: true, ColumnCategory.Text, description: "The maximum ProductVersion of the products in this set. The set may or may not include products with this particular version."),
1350 new ColumnDefinition("Language", ColumnType.String, 255, primaryKey: true, nullable: true, ColumnCategory.Language, description: "A comma-separated list of languages for either products in this set or products not in this set.", forceLocalizable: true),
1351 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "The attributes of this product set."),
1352 new ColumnDefinition("Remove", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The list of features to remove when uninstalling a product from this set. The default is \"ALL\"."),
1353 new ColumnDefinition("ActionProperty", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.UpperCase, description: "The property to set when a product in this set is found."),
1354 },
1355 strongRowType: typeof(UpgradeRow),
1356 symbolIdIsPrimaryKey: false
1357 );
1358
1359 public static readonly TableDefinition Verb = new TableDefinition(
1360 "Verb",
1361 SymbolDefinitions.Verb,
1362 new[]
1363 {
1364 new ColumnDefinition("Extension_", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "Extension", keyColumn: 1, description: "The extension associated with the table row."),
1365 new ColumnDefinition("Verb", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Text, description: "The verb for the command."),
1366 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 32767, description: "Order within the verbs for a particular extension. Also used simply to specify the default verb."),
1367 new ColumnDefinition("Command", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The command text.", modularizeType: ColumnModularizeType.Property),
1368 new ColumnDefinition("Argument", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Optional value for the command arguments.", modularizeType: ColumnModularizeType.Property),
1369 },
1370 symbolIdIsPrimaryKey: false
1371 );
1372
1373 public static readonly TableDefinition ModuleAdminExecuteSequence = new TableDefinition(
1374 "ModuleAdminExecuteSequence",
1375 null,
1376 new[]
1377 {
1378 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1379 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1380 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleAdminExecuteSequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1381 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1382 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1383 },
1384 symbolIdIsPrimaryKey: true
1385 );
1386
1387 public static readonly TableDefinition ModuleAdminUISequence = new TableDefinition(
1388 "ModuleAdminUISequence",
1389 null,
1390 new[]
1391 {
1392 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1393 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1394 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleAdminUISequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1395 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1396 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1397 },
1398 symbolIdIsPrimaryKey: true
1399 );
1400
1401 public static readonly TableDefinition ModuleAdvtExecuteSequence = new TableDefinition(
1402 "ModuleAdvtExecuteSequence",
1403 null,
1404 new[]
1405 {
1406 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1407 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1408 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleAdvtExecuteSequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1409 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1410 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1411 },
1412 symbolIdIsPrimaryKey: true
1413 );
1414
1415 public static readonly TableDefinition ModuleAdvtUISequence = new TableDefinition(
1416 "ModuleAdvtUISequence",
1417 null,
1418 new[]
1419 {
1420 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1421 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1422 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleAdvtUISequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1423 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1424 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1425 },
1426 symbolIdIsPrimaryKey: true
1427 );
1428
1429 public static readonly TableDefinition ModuleComponents = new TableDefinition(
1430 "ModuleComponents",
1431 SymbolDefinitions.ModuleComponents,
1432 new[]
1433 {
1434 new ColumnDefinition("Component", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Component contained in the module.", modularizeType: ColumnModularizeType.Column),
1435 new ColumnDefinition("ModuleID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "ModuleSignature", keyColumn: 1, description: "Module containing the component.", modularizeType: ColumnModularizeType.Column),
1436 new ColumnDefinition("Language", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, keyTable: "ModuleSignature", keyColumn: 2, description: "Default language ID for module (may be changed by transform).", forceLocalizable: true),
1437 },
1438 symbolIdIsPrimaryKey: false
1439 );
1440
1441 public static readonly TableDefinition ModuleSignature = new TableDefinition(
1442 "ModuleSignature",
1443 SymbolDefinitions.WixModule,
1444 new[]
1445 {
1446 new ColumnDefinition("ModuleID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Module identifier (String.GUID).", modularizeType: ColumnModularizeType.Column),
1447 new ColumnDefinition("Language", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "Default decimal language of module.", forceLocalizable: true),
1448 new ColumnDefinition("Version", ColumnType.String, 32, primaryKey: false, nullable: false, ColumnCategory.Version, description: "Version of the module."),
1449 },
1450 symbolIdIsPrimaryKey: false
1451 );
1452
1453 public static readonly TableDefinition ModuleConfiguration = new TableDefinition(
1454 "ModuleConfiguration",
1455 SymbolDefinitions.ModuleConfiguration,
1456 new[]
1457 {
1458 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Unique identifier for this row."),
1459 new ColumnDefinition("Format", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 3, description: "Format of this item."),
1460 new ColumnDefinition("Type", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "Additional type information for this item."),
1461 new ColumnDefinition("ContextData", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Additional context information about this item."),
1462 new ColumnDefinition("DefaultValue", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Default value for this item."),
1463 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 3, description: "Additional type-specific attributes."),
1464 new ColumnDefinition("DisplayName", ColumnType.Localized, 72, primaryKey: false, nullable: true, ColumnCategory.Text, description: "A short human-readable name for this item."),
1465 new ColumnDefinition("Description", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "A human-readable description."),
1466 new ColumnDefinition("HelpLocation", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Filename or namespace of the context-sensitive help for this item."),
1467 new ColumnDefinition("HelpKeyword", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Keyword index into the HelpLocation for this item."),
1468 },
1469 symbolIdIsPrimaryKey: true
1470 );
1471
1472 public static readonly TableDefinition ModuleDependency = new TableDefinition(
1473 "ModuleDependency",
1474 SymbolDefinitions.ModuleDependency,
1475 new[]
1476 {
1477 new ColumnDefinition("ModuleID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "ModuleSignature", keyColumn: 1, description: "Module requiring the dependency.", modularizeType: ColumnModularizeType.Column),
1478 new ColumnDefinition("ModuleLanguage", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, keyTable: "ModuleSignature", keyColumn: 2, description: "Language of module requiring the dependency.", forceLocalizable: true),
1479 new ColumnDefinition("RequiredID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "String.GUID of required module."),
1480 new ColumnDefinition("RequiredLanguage", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "LanguageID of the required module.", forceLocalizable: true),
1481 new ColumnDefinition("RequiredVersion", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Version, description: "Version of the required version."),
1482 },
1483 symbolIdIsPrimaryKey: false
1484 );
1485
1486 public static readonly TableDefinition ModuleExclusion = new TableDefinition(
1487 "ModuleExclusion",
1488 SymbolDefinitions.ModuleExclusion,
1489 new[]
1490 {
1491 new ColumnDefinition("ModuleID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "ModuleSignature", keyColumn: 1, description: "String.GUID of module with exclusion requirement.", modularizeType: ColumnModularizeType.Column),
1492 new ColumnDefinition("ModuleLanguage", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, keyTable: "ModuleSignature", keyColumn: 2, description: "LanguageID of module with exclusion requirement.", forceLocalizable: true),
1493 new ColumnDefinition("ExcludedID", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "String.GUID of excluded module."),
1494 new ColumnDefinition("ExcludedLanguage", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "Language of excluded module.", forceLocalizable: true),
1495 new ColumnDefinition("ExcludedMinVersion", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Version, description: "Minimum version of excluded module."),
1496 new ColumnDefinition("ExcludedMaxVersion", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Version, description: "Maximum version of excluded module."),
1497 },
1498 symbolIdIsPrimaryKey: false
1499 );
1500
1501 public static readonly TableDefinition ModuleIgnoreTable = new TableDefinition(
1502 "ModuleIgnoreTable",
1503 SymbolDefinitions.ModuleIgnoreTable,
1504 new[]
1505 {
1506 new ColumnDefinition("Table", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Table name to ignore during merge operation."),
1507 },
1508 symbolIdIsPrimaryKey: true
1509 );
1510
1511 public static readonly TableDefinition ModuleInstallExecuteSequence = new TableDefinition(
1512 "ModuleInstallExecuteSequence",
1513 null,
1514 new[]
1515 {
1516 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1517 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1518 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleInstallExecuteSequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1519 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1520 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1521 },
1522 symbolIdIsPrimaryKey: true
1523 );
1524
1525 public static readonly TableDefinition ModuleInstallUISequence = new TableDefinition(
1526 "ModuleInstallUISequence",
1527 null,
1528 new[]
1529 {
1530 new ColumnDefinition("Action", ColumnType.String, 64, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Action to insert", modularizeType: ColumnModularizeType.Column),
1531 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -4, maxValue: 32767, description: "Standard Sequence number"),
1532 new ColumnDefinition("BaseAction", ColumnType.String, 64, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "ModuleInstallUISequence", keyColumn: 1, description: "Base action to determine insert location.", modularizeType: ColumnModularizeType.Column),
1533 new ColumnDefinition("After", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 1, description: "Before (0) or After (1)"),
1534 new ColumnDefinition("Condition", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Condition, modularizeType: ColumnModularizeType.Condition, forceLocalizable: true),
1535 },
1536 symbolIdIsPrimaryKey: true
1537 );
1538
1539 public static readonly TableDefinition ModuleSubstitution = new TableDefinition(
1540 "ModuleSubstitution",
1541 SymbolDefinitions.ModuleSubstitution,
1542 new[]
1543 {
1544 new ColumnDefinition("Table", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Table containing the data to be modified."),
1545 new ColumnDefinition("Row", ColumnType.String, 0, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Row containing the data to be modified.", modularizeType: ColumnModularizeType.SemicolonDelimited),
1546 new ColumnDefinition("Column", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Column containing the data to be modified."),
1547 new ColumnDefinition("Value", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Template for modification data."),
1548 },
1549 symbolIdIsPrimaryKey: false
1550 );
1551
1552 public static readonly TableDefinition Properties = new TableDefinition(
1553 "Properties",
1554 SymbolDefinitions.Properties,
1555 new[]
1556 {
1557 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Primary key, non-localized token"),
1558 new ColumnDefinition("Value", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Value of the property"),
1559 },
1560 symbolIdIsPrimaryKey: false
1561 );
1562
1563 public static readonly TableDefinition ImageFamilies = new TableDefinition(
1564 "ImageFamilies",
1565 SymbolDefinitions.ImageFamilies,
1566 new[]
1567 {
1568 new ColumnDefinition("Family", ColumnType.String, 8, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Primary key"),
1569 new ColumnDefinition("MediaSrcPropName", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Text),
1570 new ColumnDefinition("MediaDiskId", ColumnType.Number, 0, primaryKey: false, nullable: true, ColumnCategory.Integer),
1571 new ColumnDefinition("FileSequenceStart", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Integer, minValue: 1, maxValue: 214743647),
1572 new ColumnDefinition("DiskPrompt", ColumnType.String, 128, primaryKey: false, nullable: true, ColumnCategory.Text, forceLocalizable: true),
1573 new ColumnDefinition("VolumeLabel", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Text),
1574 },
1575 symbolIdIsPrimaryKey: false
1576 );
1577
1578 public static readonly TableDefinition UpgradedImages = new TableDefinition(
1579 "UpgradedImages",
1580 SymbolDefinitions.UpgradedImages,
1581 new[]
1582 {
1583 new ColumnDefinition("Upgraded", ColumnType.String, 13, primaryKey: true, nullable: false, ColumnCategory.Text, description: "Primary key"),
1584 new ColumnDefinition("MsiPath", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text),
1585 new ColumnDefinition("PatchMsiPath", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1586 new ColumnDefinition("SymbolPaths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1587 new ColumnDefinition("Family", ColumnType.String, 8, primaryKey: false, nullable: false, ColumnCategory.Text, keyTable: "ImageFamilies", keyColumn: 1, description: "Foreign key, Family to which this image belongs"),
1588 },
1589 symbolIdIsPrimaryKey: false
1590 );
1591
1592 public static readonly TableDefinition UpgradedFilesToIgnore = new TableDefinition(
1593 "UpgradedFilesToIgnore",
1594 SymbolDefinitions.UpgradedFilesToIgnore,
1595 new[]
1596 {
1597 new ColumnDefinition("Upgraded", ColumnType.String, 13, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "UpgradedImages", keyColumn: 1, description: "Foreign key, Upgraded image"),
1598 new ColumnDefinition("FTK", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "File", keyColumn: 1, description: "Foreign key, File to ignore", modularizeType: ColumnModularizeType.Column),
1599 },
1600 symbolIdIsPrimaryKey: false
1601 );
1602
1603 public static readonly TableDefinition UpgradedFilesOptionalData = new TableDefinition(
1604 "UpgradedFiles_OptionalData",
1605 SymbolDefinitions.UpgradedFilesOptionalData,
1606 new[]
1607 {
1608 new ColumnDefinition("Upgraded", ColumnType.String, 13, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "UpgradedImages", keyColumn: 1, description: "Foreign key, Upgraded image"),
1609 new ColumnDefinition("FTK", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "File", keyColumn: 1, description: "Foreign key, File to ignore", modularizeType: ColumnModularizeType.Column),
1610 new ColumnDefinition("SymbolPaths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1611 new ColumnDefinition("AllowIgnoreOnPatchError", ColumnType.Number, 0, primaryKey: false, nullable: true, ColumnCategory.Integer),
1612 new ColumnDefinition("IncludeWholeFile", ColumnType.Number, 0, primaryKey: false, nullable: true, ColumnCategory.Integer),
1613 },
1614 symbolIdIsPrimaryKey: false
1615 );
1616
1617 public static readonly TableDefinition TargetImages = new TableDefinition(
1618 "TargetImages",
1619 SymbolDefinitions.TargetImages,
1620 new[]
1621 {
1622 new ColumnDefinition("Target", ColumnType.String, 13, primaryKey: true, nullable: false, ColumnCategory.Text),
1623 new ColumnDefinition("MsiPath", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text),
1624 new ColumnDefinition("SymbolPaths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1625 new ColumnDefinition("Upgraded", ColumnType.String, 13, primaryKey: false, nullable: false, ColumnCategory.Text, keyTable: "UpgradedImages", keyColumn: 1, description: "Foreign key, Upgraded image"),
1626 new ColumnDefinition("Order", ColumnType.Number, 0, primaryKey: false, nullable: false, ColumnCategory.Integer),
1627 new ColumnDefinition("ProductValidateFlags", ColumnType.String, 16, primaryKey: false, nullable: true, ColumnCategory.Text),
1628 new ColumnDefinition("IgnoreMissingSrcFiles", ColumnType.Number, 0, primaryKey: false, nullable: false, ColumnCategory.Integer),
1629 },
1630 symbolIdIsPrimaryKey: false
1631 );
1632
1633 public static readonly TableDefinition TargetFilesOptionalData = new TableDefinition(
1634 "TargetFiles_OptionalData",
1635 SymbolDefinitions.TargetFilesOptionalData,
1636 new[]
1637 {
1638 new ColumnDefinition("Target", ColumnType.String, 13, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "TargetImages", keyColumn: 1, description: "Foreign key, Target image"),
1639 new ColumnDefinition("FTK", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "File", keyColumn: 1, description: "Foreign key, File to ignore", modularizeType: ColumnModularizeType.Column),
1640 new ColumnDefinition("SymbolPaths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1641 new ColumnDefinition("IgnoreOffsets", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1642 new ColumnDefinition("IgnoreLengths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1643 new ColumnDefinition("RetainOffsets", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1644 },
1645 symbolIdIsPrimaryKey: false
1646 );
1647
1648 public static readonly TableDefinition FamilyFileRanges = new TableDefinition(
1649 "FamilyFileRanges",
1650 SymbolDefinitions.FamilyFileRanges,
1651 new[]
1652 {
1653 new ColumnDefinition("Family", ColumnType.String, 8, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "ImageFamilies", keyColumn: 1, description: "Foreign key, Family"),
1654 new ColumnDefinition("FTK", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "File", keyColumn: 1, description: "Foreign key, File to ignore", modularizeType: ColumnModularizeType.Column),
1655 new ColumnDefinition("RetainOffsets", ColumnType.String, 128, primaryKey: false, nullable: false, ColumnCategory.Text),
1656 new ColumnDefinition("RetainLengths", ColumnType.String, 128, primaryKey: false, nullable: false, ColumnCategory.Text),
1657 },
1658 symbolIdIsPrimaryKey: false
1659 );
1660
1661 public static readonly TableDefinition ExternalFiles = new TableDefinition(
1662 "ExternalFiles",
1663 SymbolDefinitions.ExternalFiles,
1664 new[]
1665 {
1666 new ColumnDefinition("Family", ColumnType.String, 8, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "ImageFamilies", keyColumn: 1, description: "Foreign key, Family"),
1667 new ColumnDefinition("FTK", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "File", keyColumn: 1, description: "Foreign key, File to ignore", modularizeType: ColumnModularizeType.Column),
1668 new ColumnDefinition("FilePath", ColumnType.String, 255, primaryKey: true, nullable: false, ColumnCategory.Text),
1669 new ColumnDefinition("SymbolPaths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1670 new ColumnDefinition("IgnoreOffsets", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1671 new ColumnDefinition("IgnoreLengths", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1672 new ColumnDefinition("RetainOffsets", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text),
1673 new ColumnDefinition("Order", ColumnType.Number, 0, primaryKey: false, nullable: false, ColumnCategory.Integer),
1674 },
1675 symbolIdIsPrimaryKey: false
1676 );
1677
1678 public static readonly TableDefinition Streams = new TableDefinition(
1679 "_Streams",
1680 null,
1681 new[]
1682 {
1683 new ColumnDefinition("Name", ColumnType.String, 62, primaryKey: true, nullable: false, ColumnCategory.Unknown),
1684 new ColumnDefinition("Data", ColumnType.Object, 0, primaryKey: false, nullable: true, ColumnCategory.Unknown),
1685 },
1686 unreal: true,
1687 symbolIdIsPrimaryKey: false
1688 );
1689
1690 public static readonly TableDefinition SummaryInformation = new TableDefinition(
1691 "_SummaryInformation",
1692 SymbolDefinitions.SummaryInformation,
1693 new[]
1694 {
1695 new ColumnDefinition("PropertyId", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown),
1696 new ColumnDefinition("Value", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Unknown),
1697 },
1698 symbolIdIsPrimaryKey: false
1699 );
1700
1701 public static readonly TableDefinition TransformView = new TableDefinition(
1702 "_TransformView",
1703 null,
1704 new[]
1705 {
1706 new ColumnDefinition("Table", ColumnType.String, 0, primaryKey: true, nullable: false, ColumnCategory.Unknown),
1707 new ColumnDefinition("Column", ColumnType.String, 0, primaryKey: true, nullable: false, ColumnCategory.Unknown),
1708 new ColumnDefinition("Row", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown),
1709 new ColumnDefinition("Data", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown),
1710 new ColumnDefinition("Current", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown),
1711 },
1712 unreal: true,
1713 symbolIdIsPrimaryKey: false
1714 );
1715
1716 public static readonly TableDefinition Validation = new TableDefinition(
1717 "_Validation",
1718 null,
1719 new[]
1720 {
1721 new ColumnDefinition("Table", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of table"),
1722 new ColumnDefinition("Column", ColumnType.String, 32, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of column"),
1723 new ColumnDefinition("Nullable", ColumnType.String, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "Y;N", description: "Whether the column is nullable"),
1724 new ColumnDefinition("MinValue", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Minimum value allowed"),
1725 new ColumnDefinition("MaxValue", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: -2147483647, maxValue: 2147483647, description: "Maximum value allowed"),
1726 new ColumnDefinition("KeyTable", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Identifier, description: "For foreign key, Name of table to which data must link"),
1727 new ColumnDefinition("KeyColumn", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 1, maxValue: 32, description: "Column to which foreign key connects"),
1728 new ColumnDefinition("Category", ColumnType.String, 32, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "Text;Formatted;Template;Condition;Guid;Path;Version;Language;Identifier;Binary;UpperCase;LowerCase;Filename;Paths;AnyPath;WildCardFilename;RegPath;CustomSource;Property;Cabinet;Shortcut;FormattedSDDLText;Integer;DoubleInteger;TimeDate;DefaultDir", description: "String category"),
1729 new ColumnDefinition("Set", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Set of values that are permitted"),
1730 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Description of column"),
1731 },
1732 symbolIdIsPrimaryKey: false
1733 );
1734
1735 public static readonly TableDefinition WixDependencyProvider = new TableDefinition(
1736 "WixDependencyProvider",
1737 SymbolDefinitions.WixDependencyProvider,
1738 new[]
1739 {
1740 new ColumnDefinition("WixDependencyProvider", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The non-localized primary key for the table.", modularizeType: ColumnModularizeType.Column),
1741 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "The foreign key into the Component table used to determine install state.", modularizeType: ColumnModularizeType.Column),
1742 new ColumnDefinition("ProviderKey", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The name of the registry key that holds the provider identity."),
1743 new ColumnDefinition("Version", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Version, description: "The version of the package."),
1744 new ColumnDefinition("DisplayName", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "The display name of the package."),
1745 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A 32-bit word that specifies the attribute flags to be applied."),
1746 },
1747 symbolIdIsPrimaryKey: true
1748 );
1749
1750 public static readonly TableDefinition WixDependency = new TableDefinition(
1751 "WixDependency",
1752 SymbolDefinitions.WixDependency,
1753 new[]
1754 {
1755 new ColumnDefinition("WixDependency", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The non-localized primary key for the table.", modularizeType: ColumnModularizeType.Column),
1756 new ColumnDefinition("ProviderKey", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "The name of the registry key that holds the provider identity."),
1757 new ColumnDefinition("MinVersion", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Version, description: "The minimum version of the provider supported."),
1758 new ColumnDefinition("MaxVersion", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Version, description: "The maximum version of the provider supported."),
1759 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "A 32-bit word that specifies the attribute flags to be applied."),
1760 },
1761 symbolIdIsPrimaryKey: true
1762 );
1763
1764 public static readonly TableDefinition WixDependencyRef = new TableDefinition(
1765 "WixDependencyRef",
1766 SymbolDefinitions.WixDependencyRef,
1767 new[]
1768 {
1769 new ColumnDefinition("WixDependencyProvider_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "WixDependencyProvider", keyColumn: 1, description: "Foreign key into the Component table.", modularizeType: ColumnModularizeType.Column),
1770 new ColumnDefinition("WixDependency_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "WixDependency", keyColumn: 1, description: "Foreign key into the WixDependency table.", modularizeType: ColumnModularizeType.Column),
1771 },
1772 symbolIdIsPrimaryKey: false
1773 );
1774
1775 public static readonly TableDefinition[] All = new[]
1776 {
1777 ActionText,
1778 AdminExecuteSequence,
1779 Condition,
1780 AdminUISequence,
1781 AdvtExecuteSequence,
1782 AdvtUISequence,
1783 AppId,
1784 AppSearch,
1785 Property,
1786 BBControl,
1787 Billboard,
1788 Feature,
1789 Binary,
1790 BindImage,
1791 File,
1792 CCPSearch,
1793 CheckBox,
1794 Class,
1795 Component,
1796 Icon,
1797 ProgId,
1798 ComboBox,
1799 CompLocator,
1800 Complus,
1801 Directory,
1802 Control,
1803 Dialog,
1804 ControlCondition,
1805 ControlEvent,
1806 CreateFolder,
1807 CustomAction,
1808 DrLocator,
1809 DuplicateFile,
1810 Environment,
1811 Error,
1812 EventMapping,
1813 Extension,
1814 MIME,
1815 FeatureComponents,
1816 FileSFPCatalog,
1817 SFPCatalog,
1818 Font,
1819 IniFile,
1820 IniLocator,
1821 InstallExecuteSequence,
1822 InstallUISequence,
1823 IsolatedComponent,
1824 LaunchCondition,
1825 ListBox,
1826 ListView,
1827 LockPermissions,
1828 MsiLockPermissionsEx,
1829 Media,
1830 MoveFile,
1831 MsiAssembly,
1832 MsiAssemblyName,
1833 MsiDigitalCertificate,
1834 MsiDigitalSignature,
1835 MsiEmbeddedChainer,
1836 MsiEmbeddedUI,
1837 MsiFileHash,
1838 MsiPackageCertificate,
1839 MsiPatchCertificate,
1840 MsiPatchHeaders,
1841 PatchMetadata,
1842 MsiPatchMetadata,
1843 MsiPatchOldAssemblyFile,
1844 MsiPatchOldAssemblyName,
1845 PatchSequence,
1846 MsiPatchSequence,
1847 ODBCAttribute,
1848 ODBCDriver,
1849 ODBCDataSource,
1850 ODBCSourceAttribute,
1851 ODBCTranslator,
1852 Patch,
1853 PatchPackage,
1854 PublishComponent,
1855 RadioButton,
1856 Registry,
1857 RegLocator,
1858 RemoveFile,
1859 RemoveIniFile,
1860 RemoveRegistry,
1861 ReserveCost,
1862 SelfReg,
1863 ServiceControl,
1864 ServiceInstall,
1865 MsiServiceConfig,
1866 MsiServiceConfigFailureActions,
1867 Shortcut,
1868 MsiShortcutProperty,
1869 Signature,
1870 SoftwareIdentificationTag,
1871 TextStyle,
1872 TypeLib,
1873 UIText,
1874 Upgrade,
1875 Verb,
1876 ModuleAdminExecuteSequence,
1877 ModuleAdminUISequence,
1878 ModuleAdvtExecuteSequence,
1879 ModuleAdvtUISequence,
1880 ModuleComponents,
1881 ModuleSignature,
1882 ModuleConfiguration,
1883 ModuleDependency,
1884 ModuleExclusion,
1885 ModuleIgnoreTable,
1886 ModuleInstallExecuteSequence,
1887 ModuleInstallUISequence,
1888 ModuleSubstitution,
1889 Properties,
1890 ImageFamilies,
1891 UpgradedImages,
1892 UpgradedFilesToIgnore,
1893 UpgradedFilesOptionalData,
1894 TargetImages,
1895 TargetFilesOptionalData,
1896 FamilyFileRanges,
1897 ExternalFiles,
1898 Streams,
1899 SummaryInformation,
1900 TransformView,
1901 Validation,
1902 WixDependency,
1903 WixDependencyProvider,
1904 WixDependencyRef,
1905 };
1906 }
1907}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WixMissingTableDefinitionException.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WixMissingTableDefinitionException.cs
new file mode 100644
index 00000000..9f7e5fa8
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WixMissingTableDefinitionException.cs
@@ -0,0 +1,22 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data.WindowsInstaller
4{
5 using System;
6
7 /// <summary>
8 /// Exception thrown when a table definition is missing.
9 /// </summary>
10 [Serializable]
11 public class WixMissingTableDefinitionException : WixException
12 {
13 /// <summary>
14 /// Instantiate new WixMissingTableDefinitionException.
15 /// </summary>
16 /// <param name="error">Localized error information.</param>
17 public WixMissingTableDefinitionException(Message error)
18 : base(error)
19 {
20 }
21 }
22}
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/data.xsd b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/data.xsd
new file mode 100644
index 00000000..a3dc7e2b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/data.xsd
@@ -0,0 +1,66 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 targetNamespace="http://wixtoolset.org/schemas/v4/windowsinstallerdata"
7 xmlns="http://wixtoolset.org/schemas/v4/windowsinstallerdata"
8 xmlns:objs="http://wixtoolset.org/schemas/v4/wixobj"
9 xmlns:tbls="http://wixtoolset.org/schemas/v4/wi/tables">
10 <xs:annotation>
11 <xs:documentation>
12 Schema for describing WiX Windows Installer Data files.
13 </xs:documentation>
14 </xs:annotation>
15
16 <xs:import namespace="http://wixtoolset.org/schemas/v4/wixobj" schemaLocation="objects.xsd" />
17 <xs:import namespace="http://wixtoolset.org/schemas/v4/wi/tables" schemaLocation="tables.xsd" />
18
19 <xs:element name="windowsInstallerData">
20 <xs:complexType>
21 <xs:sequence>
22 <xs:element ref="tbls:tableDefinitions" />
23 <xs:element ref="objs:table" maxOccurs="unbounded" />
24 <xs:element ref="subStorage" minOccurs="0" maxOccurs="unbounded" />
25 </xs:sequence>
26 <xs:attribute name="codepage" type="xs:unsignedInt">
27 <xs:annotation>
28 <xs:documentation>Codepage of the output.</xs:documentation>
29 </xs:annotation>
30 </xs:attribute>
31 <xs:attribute name="type" use="required">
32 <xs:annotation>
33 <xs:documentation>Type of the output.</xs:documentation>
34 </xs:annotation>
35 <xs:simpleType>
36 <xs:restriction base="xs:NMTOKEN">
37 <xs:enumeration value="Bundle" />
38 <xs:enumeration value="Module" />
39 <xs:enumeration value="Patch" />
40 <xs:enumeration value="PatchCreation" />
41 <xs:enumeration value="Product" />
42 <xs:enumeration value="Transform" />
43 </xs:restriction>
44 </xs:simpleType>
45 </xs:attribute>
46 <xs:attribute name="version" type="xs:string" use="required">
47 <xs:annotation>
48 <xs:documentation>Version of WiX used to create this output file.</xs:documentation>
49 </xs:annotation>
50 </xs:attribute>
51 </xs:complexType>
52 </xs:element>
53
54 <xs:element name="subStorage">
55 <xs:complexType>
56 <xs:sequence minOccurs="1" maxOccurs="1">
57 <xs:element ref="windowsInstallerData" />
58 </xs:sequence>
59 <xs:attribute name="name" type="xs:string">
60 <xs:annotation>
61 <xs:documentation>Name of the substorage.</xs:documentation>
62 </xs:annotation>
63 </xs:attribute>
64 </xs:complexType>
65 </xs:element>
66</xs:schema>
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/libraries.xsd b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/libraries.xsd
new file mode 100644
index 00000000..a4504c01
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/libraries.xsd
@@ -0,0 +1,66 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 targetNamespace="http://wixtoolset.org/schemas/v4/wixlib"
7 xmlns="http://wixtoolset.org/schemas/v4/wixlib"
8 xmlns:loc="http://wixtoolset.org/schemas/v4/wxl"
9 xmlns:objs="http://wixtoolset.org/schemas/v4/wixobj">
10 <xs:annotation>
11 <xs:documentation>
12 Schema for describing WiX Library files (.wixlib).
13 </xs:documentation>
14 </xs:annotation>
15
16 <xs:import namespace="http://wixtoolset.org/schemas/v4/wixobj" schemaLocation="objects.xsd" />
17
18 <xs:element name="wixLibrary">
19 <xs:complexType>
20 <xs:sequence>
21 <xs:element ref="localization" minOccurs="0" maxOccurs="unbounded" />
22 <xs:element ref="objs:section" minOccurs="0" maxOccurs="unbounded" />
23 </xs:sequence>
24
25 <xs:attribute name="id" type="xs:string" use="required" />
26 <xs:attribute name="version" type="xs:string" use="required">
27 <xs:annotation>
28 <xs:documentation>Version of WiX used to create this library file</xs:documentation>
29 </xs:annotation>
30 </xs:attribute>
31 </xs:complexType>
32 </xs:element>
33
34 <xs:element name="localization">
35 <xs:complexType>
36 <xs:sequence>
37 <xs:element ref="string" minOccurs="0" maxOccurs="unbounded" />
38 <xs:element ref="ui" minOccurs="0" maxOccurs="unbounded" />
39 </xs:sequence>
40
41 <xs:attribute name="codepage" type="xs:string" use="required" />
42 <xs:attribute name="culture" type="xs:string" />
43 </xs:complexType>
44 </xs:element>
45
46 <xs:element name="string">
47 <xs:complexType mixed="true">
48 <xs:attribute name="id" type="xs:string" use="required" />
49 <xs:attribute name="overridable" type="xs:string" />
50 </xs:complexType>
51 </xs:element>
52
53 <xs:element name="ui">
54 <xs:complexType>
55 <xs:attribute name="dialog" type="xs:string" />
56 <xs:attribute name="control" type="xs:string" />
57 <xs:attribute name="x" type="xs:int" />
58 <xs:attribute name="y" type="xs:int" />
59 <xs:attribute name="width" type="xs:int" />
60 <xs:attribute name="height" type="xs:int" />
61 <xs:attribute name="rightToLeft" type="xs:string" />
62 <xs:attribute name="rightAligned" type="xs:string" />
63 <xs:attribute name="leftScroll" type="xs:string" />
64 </xs:complexType>
65 </xs:element>
66</xs:schema>
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/objects.xsd b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/objects.xsd
new file mode 100644
index 00000000..5d95a59c
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WindowsInstaller/Xsd/objects.xsd
@@ -0,0 +1,143 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 targetNamespace="http://wixtoolset.org/schemas/v4/wixobj"
7 xmlns="http://wixtoolset.org/schemas/v4/wixobj">
8 <xs:annotation>
9 <xs:documentation>
10 Schema for describing WiX Object files (.wixobj).
11 </xs:documentation>
12 </xs:annotation>
13
14 <xs:element name="wixObject">
15 <xs:complexType>
16 <xs:sequence minOccurs="0" maxOccurs="unbounded">
17 <xs:element ref="section" />
18 </xs:sequence>
19 <xs:attribute name="id" type="xs:string" use="required" />
20 <xs:attribute name="version" type="xs:string" use="required">
21 <xs:annotation>
22 <xs:documentation>Version of WiX used to create this object file.</xs:documentation>
23 </xs:annotation>
24 </xs:attribute>
25 </xs:complexType>
26 </xs:element>
27
28 <xs:element name="section">
29 <xs:complexType>
30 <xs:sequence>
31 <xs:element ref="table" minOccurs="0" maxOccurs="unbounded" />
32 </xs:sequence>
33 <xs:attribute name="id" type="xs:string">
34 <xs:annotation>
35 <xs:documentation>Identifier for section (optional for Fragments)</xs:documentation>
36 </xs:annotation>
37 </xs:attribute>
38 <xs:attribute name="type" type="SectionType" use="required">
39 <xs:annotation>
40 <xs:documentation>Type of section</xs:documentation>
41 </xs:annotation>
42 </xs:attribute>
43 <xs:attribute name="codepage" type="xs:integer" use="optional">
44 <xs:annotation>
45 <xs:documentation>Codepage for output file, only valid on entry sections.</xs:documentation>
46 </xs:annotation>
47 </xs:attribute>
48 </xs:complexType>
49 </xs:element>
50
51 <xs:element name="table">
52 <xs:complexType>
53 <xs:sequence minOccurs="0" maxOccurs="unbounded">
54 <xs:element ref="row" />
55 </xs:sequence>
56 <xs:attribute name="name" type="TableNameType" use="required">
57 <xs:annotation>
58 <xs:documentation>Name of table in Windows Installer database</xs:documentation>
59 </xs:annotation>
60 </xs:attribute>
61 <xs:attribute name="op">
62 <xs:simpleType>
63 <xs:restriction base="xs:string">
64 <xs:enumeration value="add" />
65 <xs:enumeration value="drop" />
66 </xs:restriction>
67 </xs:simpleType>
68 </xs:attribute>
69 </xs:complexType>
70 </xs:element>
71
72 <xs:element name="row">
73 <xs:annotation>
74 <xs:documentation>Row in a table</xs:documentation>
75 </xs:annotation>
76 <xs:complexType>
77 <xs:sequence maxOccurs="unbounded">
78 <xs:element ref="field" />
79 </xs:sequence>
80 <xs:attribute name="access">
81 <xs:simpleType>
82 <xs:restriction base="xs:string">
83 <xs:enumeration value="public" />
84 <xs:enumeration value="internal" />
85 <xs:enumeration value="protected" />
86 <xs:enumeration value="private" />
87 </xs:restriction>
88 </xs:simpleType>
89 </xs:attribute>
90 <xs:attribute name="op">
91 <xs:simpleType>
92 <xs:restriction base="xs:string">
93 <xs:enumeration value="add" />
94 <xs:enumeration value="delete" />
95 <xs:enumeration value="modify" />
96 </xs:restriction>
97 </xs:simpleType>
98 </xs:attribute>
99 <xs:attribute name="redundant" type="YesNoType" />
100 <xs:attribute name="sectionId" type="xs:string" />
101 <xs:attribute name="sourceLineNumber" type="xs:string" />
102 </xs:complexType>
103 </xs:element>
104
105 <xs:element name="field">
106 <xs:annotation>
107 <xs:documentation>Data for a particular field in a row.</xs:documentation>
108 </xs:annotation>
109 <xs:complexType mixed="true">
110 <xs:attribute name="cabinetFileId" type="xs:string" />
111 <xs:attribute name="modified" type="YesNoType" />
112 <xs:attribute name="previousData" type="xs:string" />
113 <xs:attribute name="unresolvedData" type="xs:string" />
114 <xs:attribute name="unresolvedPreviousData" type="xs:string" />
115 <xs:attribute name="previousCabinetFileId" type="xs:string" />
116 </xs:complexType>
117 </xs:element>
118
119 <xs:simpleType name="SectionType">
120 <xs:restriction base="xs:NMTOKEN">
121 <xs:enumeration value="bundle"/>
122 <xs:enumeration value="fragment" />
123 <xs:enumeration value="module" />
124 <xs:enumeration value="product" />
125 <xs:enumeration value="patchCreation" />
126 <xs:enumeration value="patch" />
127 </xs:restriction>
128 </xs:simpleType>
129
130 <xs:simpleType name="TableNameType">
131 <xs:restriction base="xs:string">
132 <xs:minLength value="1" />
133 <xs:maxLength value="62" />
134 </xs:restriction>
135 </xs:simpleType>
136
137 <xs:simpleType name="YesNoType">
138 <xs:restriction base="xs:NMTOKEN">
139 <xs:enumeration value="yes" />
140 <xs:enumeration value="no" />
141 </xs:restriction>
142 </xs:simpleType>
143</xs:schema>
diff --git a/src/api/wix/WixToolset.Data/WixCorruptFileException.cs b/src/api/wix/WixToolset.Data/WixCorruptFileException.cs
new file mode 100644
index 00000000..83c3eb80
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixCorruptFileException.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
3namespace WixToolset.Data
4{
5 using System;
6
7 /// <summary>
8 /// Exception when file does not match the expected format.
9 /// </summary>
10 public class WixCorruptFileException : WixException
11 {
12 public WixCorruptFileException(string path, string format, Exception innerException = null)
13 : base(ErrorMessages.CorruptFileFormat(path, format), innerException)
14 {
15 this.Path = path;
16 this.FileFormat = format;
17 }
18
19 /// <summary>
20 /// Gets the actual file format found in the file.
21 /// </summary>
22 public string FileFormat { get; }
23
24 /// <summary>
25 /// Gets the path to the file with unexpected format.
26 /// </summary>
27 public string Path { get; }
28 }
29}
diff --git a/src/api/wix/WixToolset.Data/WixDataStrings.Designer.cs b/src/api/wix/WixToolset.Data/WixDataStrings.Designer.cs
new file mode 100644
index 00000000..de26156a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixDataStrings.Designer.cs
@@ -0,0 +1,90 @@
1//------------------------------------------------------------------------------
2// <auto-generated>
3// This code was generated by a tool.
4// Runtime Version:4.0.30319.42000
5//
6// Changes to this file may cause incorrect behavior and will be lost if
7// the code is regenerated.
8// </auto-generated>
9//------------------------------------------------------------------------------
10
11namespace WixToolset.Data {
12 using System;
13
14
15 /// <summary>
16 /// A strongly-typed resource class, for looking up localized strings, etc.
17 /// </summary>
18 // This class was auto-generated by the StronglyTypedResourceBuilder
19 // class via a tool like ResGen or Visual Studio.
20 // To add or remove a member, edit your .ResX file then rerun ResGen
21 // with the /str option, or rebuild your VS project.
22 [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
23 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 public class WixDataStrings {
26
27 private static global::System.Resources.ResourceManager resourceMan;
28
29 private static global::System.Globalization.CultureInfo resourceCulture;
30
31 [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 internal WixDataStrings() {
33 }
34
35 /// <summary>
36 /// Returns the cached ResourceManager instance used by this class.
37 /// </summary>
38 [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 public static global::System.Resources.ResourceManager ResourceManager {
40 get {
41 if (object.ReferenceEquals(resourceMan, null)) {
42 global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WixToolset.Data.WixDataStrings", typeof(WixDataStrings).Assembly);
43 resourceMan = temp;
44 }
45 return resourceMan;
46 }
47 }
48
49 /// <summary>
50 /// Overrides the current thread's CurrentUICulture property for all
51 /// resource lookups using this strongly typed resource class.
52 /// </summary>
53 [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 public static global::System.Globalization.CultureInfo Culture {
55 get {
56 return resourceCulture;
57 }
58 set {
59 resourceCulture = value;
60 }
61 }
62
63 /// <summary>
64 /// Looks up a localized string similar to The value &apos;{0}&apos; is not a legal identifier and therefore cannot be modularized..
65 /// </summary>
66 public static string EXP_CannotModularizeIllegalID {
67 get {
68 return ResourceManager.GetString("EXP_CannotModularizeIllegalID", resourceCulture);
69 }
70 }
71
72 /// <summary>
73 /// Looks up a localized string similar to Unknown column type: {0}.
74 /// </summary>
75 public static string EXP_UnknownColumnType {
76 get {
77 return ResourceManager.GetString("EXP_UnknownColumnType", resourceCulture);
78 }
79 }
80
81 /// <summary>
82 /// Looks up a localized string similar to The table {0} is not supported..
83 /// </summary>
84 public static string EXP_UnsupportedTable {
85 get {
86 return ResourceManager.GetString("EXP_UnsupportedTable", resourceCulture);
87 }
88 }
89 }
90}
diff --git a/src/api/wix/WixToolset.Data/WixDataStrings.resx b/src/api/wix/WixToolset.Data/WixDataStrings.resx
new file mode 100644
index 00000000..999f5057
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixDataStrings.resx
@@ -0,0 +1,129 @@
1<?xml version="1.0" encoding="utf-8"?>
2<root>
3 <!--
4 Microsoft ResX Schema
5
6 Version 2.0
7
8 The primary goals of this format is to allow a simple XML format
9 that is mostly human readable. The generation and parsing of the
10 various data types are done through the TypeConverter classes
11 associated with the data types.
12
13 Example:
14
15 ... ado.net/XML headers & schema ...
16 <resheader name="resmimetype">text/microsoft-resx</resheader>
17 <resheader name="version">2.0</resheader>
18 <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19 <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20 <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21 <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22 <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23 <value>[base64 mime encoded serialized .NET Framework object]</value>
24 </data>
25 <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26 <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27 <comment>This is a comment</comment>
28 </data>
29
30 There are any number of "resheader" rows that contain simple
31 name/value pairs.
32
33 Each data row contains a name, and value. The row also contains a
34 type or mimetype. Type corresponds to a .NET class that support
35 text/value conversion through the TypeConverter architecture.
36 Classes that don't support this are serialized and stored with the
37 mimetype set.
38
39 The mimetype is used for serialized objects, and tells the
40 ResXResourceReader how to depersist the object. This is currently not
41 extensible. For a given mimetype the value must be set accordingly:
42
43 Note - application/x-microsoft.net.object.binary.base64 is the format
44 that the ResXResourceWriter will generate, however the reader can
45 read any of the formats listed below.
46
47 mimetype: application/x-microsoft.net.object.binary.base64
48 value : The object must be serialized with
49 : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50 : and then encoded with base64 encoding.
51
52 mimetype: application/x-microsoft.net.object.soap.base64
53 value : The object must be serialized with
54 : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55 : and then encoded with base64 encoding.
56
57 mimetype: application/x-microsoft.net.object.bytearray.base64
58 value : The object must be serialized into a byte array
59 : using a System.ComponentModel.TypeConverter
60 : and then encoded with base64 encoding.
61 -->
62 <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63 <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64 <xsd:element name="root" msdata:IsDataSet="true">
65 <xsd:complexType>
66 <xsd:choice maxOccurs="unbounded">
67 <xsd:element name="metadata">
68 <xsd:complexType>
69 <xsd:sequence>
70 <xsd:element name="value" type="xsd:string" minOccurs="0" />
71 </xsd:sequence>
72 <xsd:attribute name="name" use="required" type="xsd:string" />
73 <xsd:attribute name="type" type="xsd:string" />
74 <xsd:attribute name="mimetype" type="xsd:string" />
75 <xsd:attribute ref="xml:space" />
76 </xsd:complexType>
77 </xsd:element>
78 <xsd:element name="assembly">
79 <xsd:complexType>
80 <xsd:attribute name="alias" type="xsd:string" />
81 <xsd:attribute name="name" type="xsd:string" />
82 </xsd:complexType>
83 </xsd:element>
84 <xsd:element name="data">
85 <xsd:complexType>
86 <xsd:sequence>
87 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89 </xsd:sequence>
90 <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91 <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92 <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93 <xsd:attribute ref="xml:space" />
94 </xsd:complexType>
95 </xsd:element>
96 <xsd:element name="resheader">
97 <xsd:complexType>
98 <xsd:sequence>
99 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100 </xsd:sequence>
101 <xsd:attribute name="name" type="xsd:string" use="required" />
102 </xsd:complexType>
103 </xsd:element>
104 </xsd:choice>
105 </xsd:complexType>
106 </xsd:element>
107 </xsd:schema>
108 <resheader name="resmimetype">
109 <value>text/microsoft-resx</value>
110 </resheader>
111 <resheader name="version">
112 <value>2.0</value>
113 </resheader>
114 <resheader name="reader">
115 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116 </resheader>
117 <resheader name="writer">
118 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119 </resheader>
120 <data name="EXP_UnsupportedTable" xml:space="preserve">
121 <value>The table {0} is not supported.</value>
122 </data>
123 <data name="EXP_CannotModularizeIllegalID" xml:space="preserve">
124 <value>The value '{0}' is not a legal identifier and therefore cannot be modularized.</value>
125 </data>
126 <data name="EXP_UnknownColumnType" xml:space="preserve">
127 <value>Unknown column type: {0}</value>
128 </data>
129</root> \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/WixException.cs b/src/api/wix/WixToolset.Data/WixException.cs
new file mode 100644
index 00000000..77dadcd2
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixException.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6
7 /// <summary>
8 /// Base class for all WiX exceptions.
9 /// </summary>
10 [Serializable]
11 public class WixException : Exception
12 {
13 /// <summary>
14 /// Instantiate a new WixException.
15 /// </summary>
16 public WixException()
17 {
18 }
19
20 /// <summary>
21 /// Instantiate a new WixException with a simple string message.
22 /// </summary>
23 /// <param name="message">Simple string message.</param>
24 public WixException(string message) : base(message)
25 {
26 }
27
28 /// <summary>
29 /// Instantiate a new WixException with a simple message and exception.
30 /// </summary>
31 /// <param name="message">Simple string message.</param>
32 /// <param name="innerException">Inner exception.</param>
33 public WixException(string message, Exception innerException) : base(message, innerException)
34 {
35 }
36
37 /// <summary>
38 /// Instantiate a new WixException with a given WixError.
39 /// </summary>
40 /// <param name="error">The localized error information.</param>
41 public WixException(Message error)
42 : this(error, null)
43 {
44 }
45
46 /// <summary>
47 /// Instantiate a new WixException with a given WixError.
48 /// </summary>
49 /// <param name="error">The localized error information.</param>
50 /// <param name="exception">Original exception.</param>
51 public WixException(Message error, Exception exception) :
52 base(error.ToString(), exception)
53 {
54 this.Error = error;
55 }
56
57 /// <summary>
58 /// Gets the error message.
59 /// </summary>
60 /// <value>The error message.</value>
61 public Message Error { get; }
62 }
63}
diff --git a/src/api/wix/WixToolset.Data/WixOutput.cs b/src/api/wix/WixToolset.Data/WixOutput.cs
new file mode 100644
index 00000000..43359f24
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixOutput.cs
@@ -0,0 +1,279 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.IO;
7 using System.IO.Compression;
8 using System.Reflection;
9 using System.Text;
10
11 /// <summary>
12 /// Class that understands the standard file structure of the WiX toolset.
13 /// </summary>
14 public class WixOutput : IDisposable
15 {
16 private readonly Stream stream;
17 private ZipArchive archive;
18 private bool disposed;
19
20 private WixOutput(Uri uri, ZipArchive archive, Stream stream)
21 {
22 this.Uri = uri;
23 this.archive = archive;
24 this.stream = stream;
25 }
26
27 /// <summary>
28 ///
29 /// </summary>
30 public Uri Uri { get; }
31
32 /// <summary>
33 /// Creates a new file structure in memory.
34 /// </summary>
35 /// <returns>Newly created <c>WixOutput</c>.</returns>
36 public static WixOutput Create()
37 {
38 var uri = new Uri("memorystream:");
39
40 var stream = new MemoryStream();
41
42 return WixOutput.Create(uri, stream);
43 }
44
45 /// <summary>
46 /// Creates a new file structure on disk.
47 /// </summary>
48 /// <param name="path">Path to write file structure to.</param>
49 /// <returns>Newly created <c>WixOutput</c>.</returns>
50 public static WixOutput Create(string path)
51 {
52 var fullPath = Path.GetFullPath(path);
53
54 Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
55
56 var uri = new Uri(fullPath);
57
58 var stream = File.Create(path);
59
60 return WixOutput.Create(uri, stream);
61 }
62
63 /// <summary>
64 /// Creates a new file structure.
65 /// </summary>
66 /// <param name="uri"></param>
67 /// <param name="stream">Stream to write the file structure to.</param>
68 /// <returns>Newly created <c>WixOutput</c>.</returns>
69 public static WixOutput Create(Uri uri, Stream stream)
70 {
71 var archive = new ZipArchive(stream, ZipArchiveMode.Update, leaveOpen: true);
72
73 return new WixOutput(uri, archive, stream);
74 }
75
76 /// <summary>
77 /// Loads a wixout from a path on disk.
78 /// </summary>
79 /// <param name="path">Path to wixout file saved on disk.</param>
80 /// <returns>Loaded created <c>WixOutput</c>.</returns>
81 public static WixOutput Read(string path)
82 {
83 var uri = new Uri(Path.GetFullPath(path));
84
85 var stream = File.OpenRead(path);
86
87 return Read(uri, stream);
88 }
89
90 /// <summary>
91 /// Loads a wixout from a path on disk or embedded resource in assembly.
92 /// </summary>
93 /// <param name="baseUri">Uri with local path to wixout file saved on disk or embedded resource in assembly.</param>
94 /// <returns>Loaded created <c>WixOutput</c>.</returns>
95 public static WixOutput Read(Uri baseUri)
96 {
97 // If the embedded files are stored in an assembly resource stream (usually
98 // a .wixlib embedded in a WixExtension).
99 if ("embeddedresource" == baseUri.Scheme)
100 {
101 var assemblyPath = Path.GetFullPath(baseUri.LocalPath);
102 var resourceName = baseUri.Fragment.TrimStart('#');
103
104 var assembly = Assembly.LoadFile(assemblyPath);
105 return WixOutput.Read(assembly, resourceName);
106 }
107 else // normal file (usually a binary .wixlib on disk).
108 {
109 var stream = File.OpenRead(baseUri.LocalPath);
110 return WixOutput.Read(baseUri, stream);
111 }
112 }
113
114 /// <summary>
115 /// Loads a wixout from an assembly resource stream.
116 /// </summary>
117 /// <param name="assembly"></param>
118 /// <param name="resourceName"></param>
119 /// <returns>Loaded created <c>WixOutput</c>.</returns>
120 public static WixOutput Read(Assembly assembly, string resourceName)
121 {
122 var resourceStream = assembly.GetManifestResourceStream(resourceName);
123
124 var uriBuilder = new UriBuilder(assembly.CodeBase)
125 {
126 Scheme = "embeddedresource",
127 Fragment = resourceName
128 };
129
130 return Read(uriBuilder.Uri, resourceStream);
131 }
132
133 /// <summary>
134 /// Reads a file structure from an open stream.
135 /// </summary>
136 /// <param name="uri"></param>
137 /// <param name="stream">Stream to read from.</param>
138 /// <returns>Loaded created <c>WixOutput</c>.</returns>
139 public static WixOutput Read(Uri uri, Stream stream)
140 {
141 try
142 {
143 var archive = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: true);
144
145 return new WixOutput(uri, archive, stream);
146 }
147 catch (InvalidDataException)
148 {
149 throw new WixException(ErrorMessages.CorruptFileFormat(uri.AbsoluteUri, "wixout"));
150 }
151 }
152
153 /// <summary>
154 /// Reopen the underlying archive for read-only or read-write access.
155 /// </summary>
156 /// <param name="writable">Indicates whether the output can be modified. Defaults to false.</param>
157 public void Reopen(bool writable = false)
158 {
159 this.archive?.Dispose();
160 this.archive = null;
161
162 this.archive = new ZipArchive(this.stream, writable ? ZipArchiveMode.Update : ZipArchiveMode.Read, leaveOpen: true);
163 }
164
165 /// <summary>
166 /// Extracts an embedded file.
167 /// </summary>
168 /// <param name="embeddedId">Id to the file to extract.</param>
169 /// <param name="outputPath">Path to write the extracted file to.</param>
170 public void ExtractEmbeddedFile(string embeddedId, string outputPath)
171 {
172 var entry = this.archive.GetEntry(embeddedId);
173
174 if (entry == null)
175 {
176 throw new ArgumentOutOfRangeException(nameof(embeddedId));
177 }
178
179 var folder = Path.GetDirectoryName(outputPath);
180
181 Directory.CreateDirectory(folder);
182
183 entry.ExtractToFile(outputPath, overwrite: true);
184 }
185
186 /// <summary>
187 /// Creates a data stream in the wixout.
188 /// </summary>
189 /// <returns>Stream to the data of the file.</returns>
190 public Stream CreateDataStream(string name)
191 {
192 this.DeleteExistingEntry(name);
193
194 var entry = this.archive.CreateEntry(name);
195
196 return entry.Open();
197 }
198
199 /// <summary>
200 /// Imports a file from disk into the output.
201 /// </summary>
202 /// <param name="name">Name of the stream in the output.</param>
203 /// <param name="path">Path to file on disk to include in the output.</param>
204 public void ImportDataStream(string name, string path)
205 {
206 this.DeleteExistingEntry(name);
207
208 this.archive.CreateEntryFromFile(path, name, System.IO.Compression.CompressionLevel.Optimal);
209 }
210
211 /// <summary>
212 /// Gets a non-closing stream to the data of the file.
213 /// </summary>
214 /// <returns>Stream to the data of the file.</returns>
215 public Stream GetDataStream(string name)
216 {
217 var entry = this.archive.GetEntry(name);
218
219 if (entry == null)
220 {
221 throw new ArgumentOutOfRangeException(nameof(name));
222 }
223
224 return entry.Open();
225 }
226
227 /// <summary>
228 /// Gets the data of the file as a string.
229 /// </summary>
230 /// <returns>String contents data of the file.</returns>
231 public string GetData(string name)
232 {
233 var entry = this.archive.GetEntry(name);
234
235 // Use StreamReader to "swallow" BOM if present.
236 using (var stream = entry.Open())
237 using (var streamReader = new StreamReader(stream, Encoding.UTF8))
238 {
239 return streamReader.ReadToEnd();
240 }
241 }
242
243 /// <summary>
244 /// Disposes of the internal state of the file structure.
245 /// </summary>
246 public void Dispose()
247 {
248 this.Dispose(true);
249 GC.SuppressFinalize(this);
250 }
251
252 /// <summary>
253 /// Disposes of the internsl state of the file structure.
254 /// </summary>
255 /// <param name="disposing">True if disposing.</param>
256 protected virtual void Dispose(bool disposing)
257 {
258 if (!this.disposed)
259 {
260 if (disposing)
261 {
262 this.archive?.Dispose();
263 this.stream?.Dispose();
264 }
265 }
266
267 this.disposed = true;
268 }
269
270 private void DeleteExistingEntry(string name)
271 {
272 var entry = this.archive.GetEntry(name);
273 if (entry != null)
274 {
275 entry.Delete();
276 }
277 }
278 }
279}
diff --git a/src/api/wix/WixToolset.Data/WixToolset.Data.csproj b/src/api/wix/WixToolset.Data/WixToolset.Data.csproj
new file mode 100644
index 00000000..24b0917b
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixToolset.Data.csproj
@@ -0,0 +1,40 @@
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 <TargetFrameworks>netstandard2.0</TargetFrameworks>
7 <TargetFrameworks Condition=" '$(Configuration)'=='Release' ">$(TargetFrameworks);net461;net472</TargetFrameworks>
8 <LangVersion>7.3</LangVersion>
9 <Description>WiX Toolset Data</Description>
10 <DebugType>embedded</DebugType>
11 <PublishRepositoryUrl>true</PublishRepositoryUrl>
12 <CreateDocumentationFile>true</CreateDocumentationFile>
13 <!-- TODO: This shouldn't be ignored because this is public-facing -->
14 <NoWarn>CS1591</NoWarn>
15 </PropertyGroup>
16
17 <ItemGroup>
18 <PackageReference Include="System.IO.Compression" Version="4.3.0" />
19 </ItemGroup>
20
21 <ItemGroup>
22 <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
23 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="all" />
24 </ItemGroup>
25
26 <ItemGroup>
27 <Compile Update="WixDataStrings.Designer.cs">
28 <DesignTime>True</DesignTime>
29 <AutoGen>True</AutoGen>
30 <DependentUpon>WixDataStrings.resx</DependentUpon>
31 </Compile>
32 </ItemGroup>
33
34 <ItemGroup>
35 <EmbeddedResource Update="WixDataStrings.resx">
36 <Generator>PublicResXFileCodeGenerator</Generator>
37 <LastGenOutput>WixDataStrings.Designer.cs</LastGenOutput>
38 </EmbeddedResource>
39 </ItemGroup>
40</Project>
diff --git a/src/api/wix/WixToolset.Data/WixToolset.Data.v3.ncrunchproject b/src/api/wix/WixToolset.Data/WixToolset.Data.v3.ncrunchproject
new file mode 100644
index 00000000..c6001ebe
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixToolset.Data.v3.ncrunchproject
@@ -0,0 +1,7 @@
1<ProjectConfiguration>
2 <Settings>
3 <AdditionalFilesToIncludeForProject>
4 <Value>..\..\version.json</Value>
5 </AdditionalFilesToIncludeForProject>
6 </Settings>
7</ProjectConfiguration> \ No newline at end of file
diff --git a/src/api/wix/WixToolset.Data/WixUnexpectedFileFormatException.cs b/src/api/wix/WixToolset.Data/WixUnexpectedFileFormatException.cs
new file mode 100644
index 00000000..4bd6ba4a
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/WixUnexpectedFileFormatException.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
3namespace WixToolset.Data
4{
5 using System;
6
7 /// <summary>
8 /// Exception when file does not match the expected format.
9 /// </summary>
10 public class WixUnexpectedFileFormatException : WixException
11 {
12 public WixUnexpectedFileFormatException(string path, string expectedFormat, string format, Exception innerException = null)
13 : base(ErrorMessages.UnexpectedFileFormat(path, expectedFormat, format), innerException)
14 {
15 this.Path = path;
16 this.ExpectedFileFormat = expectedFormat;
17 this.FileFormat = format;
18 }
19
20 /// <summary>
21 /// Gets the expected file format.
22 /// </summary>
23 public string ExpectedFileFormat { get; }
24
25 /// <summary>
26 /// Gets the actual file format found in the file.
27 /// </summary>
28 public string FileFormat { get; }
29
30 /// <summary>
31 /// Gets the path to the file with unexpected format.
32 /// </summary>
33 public string Path { get; set; }
34 }
35}
diff --git a/src/api/wix/WixToolset.Data/YesNoAlwaysType.cs b/src/api/wix/WixToolset.Data/YesNoAlwaysType.cs
new file mode 100644
index 00000000..3b4ca5d7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/YesNoAlwaysType.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Yes, No, Always xml simple type.
7 /// </summary>
8 public enum YesNoAlwaysType
9 {
10 /// <summary>Not a valid yes, no or always value.</summary>
11 IllegalValue = -2,
12
13 /// <summary>Value not set; equivalent to null for reference types.</summary>
14 NotSet = -1,
15
16 /// <summary>The no value.</summary>
17 No,
18
19 /// <summary>The yes value.</summary>
20 Yes,
21
22 /// <summary>The always value.</summary>
23 Always,
24 }
25}
diff --git a/src/api/wix/WixToolset.Data/YesNoDefaultType.cs b/src/api/wix/WixToolset.Data/YesNoDefaultType.cs
new file mode 100644
index 00000000..fd782d46
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/YesNoDefaultType.cs
@@ -0,0 +1,25 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Yes, No, Default xml simple type.
7 /// </summary>
8 public enum YesNoDefaultType
9 {
10 /// <summary>Not a valid yes, no or default value.</summary>
11 IllegalValue = -2,
12
13 /// <summary>Value not set; equivalent to null for reference types.</summary>
14 NotSet = -1,
15
16 /// <summary>The no value.</summary>
17 No,
18
19 /// <summary>The yes value.</summary>
20 Yes,
21
22 /// <summary>The default value.</summary>
23 Default,
24 }
25}
diff --git a/src/api/wix/WixToolset.Data/YesNoType.cs b/src/api/wix/WixToolset.Data/YesNoType.cs
new file mode 100644
index 00000000..9c1cc9a7
--- /dev/null
+++ b/src/api/wix/WixToolset.Data/YesNoType.cs
@@ -0,0 +1,22 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 /// <summary>
6 /// Yes/no type (kinda like a boolean).
7 /// </summary>
8 public enum YesNoType
9 {
10 /// <summary>Not a valid yes or no value.</summary>
11 IllegalValue = -2,
12
13 /// <summary>Value not set; equivalent to null for reference types.</summary>
14 NotSet = -1,
15
16 /// <summary>The no value.</summary>
17 No,
18
19 /// <summary>The yes value.</summary>
20 Yes,
21 }
22}
diff --git a/src/api/wix/appveyor.cmd b/src/api/wix/appveyor.cmd
new file mode 100644
index 00000000..5e5debc9
--- /dev/null
+++ b/src/api/wix/appveyor.cmd
@@ -0,0 +1,19 @@
1@setlocal
2@pushd %~dp0
3@set _C=Release
4@if /i "%1"=="debug" set _C=Debug
5
6:: Restore
7msbuild -p:Configuration=%_C% -t:Restore || exit /b
8
9:: Build
10msbuild -p:Configuration=%_C% || exit /b
11
12:: Test
13dotnet test -c %_C% --no-build || exit /b
14
15:: Pack
16msbuild -p:Configuration=%_C% -p:NoBuild=true -t:Pack || exit /b
17
18@popd
19@endlocal
diff --git a/src/api/wix/appveyor.yml b/src/api/wix/appveyor.yml
new file mode 100644
index 00000000..c53cc9cc
--- /dev/null
+++ b/src/api/wix/appveyor.yml
@@ -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# Do NOT modify this file. Update the canonical version in Home\repo-template\src\appveyor.yml
4# then update all of the repos.
5
6branches:
7 only:
8 - master
9 - develop
10
11image: Visual Studio 2019
12
13version: 0.0.0.{build}
14configuration: Release
15
16environment:
17 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
18 DOTNET_CLI_TELEMETRY_OPTOUT: 1
19 NUGET_XMLDOC_MODE: skip
20
21build_script:
22 - appveyor.cmd
23
24pull_requests:
25 do_not_increment_build_number: true
26
27nuget:
28 disable_publish_on_pr: true
29
30skip_branch_with_pr: true
31skip_tags: true
32
33artifacts:
34- path: build\Release\**\*.nupkg
35 name: nuget
36- path: build\Release\**\*.snupkg
37 name: snupkg
38
39notifications:
40- provider: Slack
41 incoming_webhook:
42 secure: p5xuu+4x2JHfwGDMDe5KcG1k7gZxqYc4jWVwvyNZv5cvkubPD2waJs5yXMAXZNN7Z63/3PWHb7q4KoY/99AjauYa1nZ4c5qYqRPFRBKTHfA=
diff --git a/src/api/wix/nuget.config b/src/api/wix/nuget.config
new file mode 100644
index 00000000..d5ef8952
--- /dev/null
+++ b/src/api/wix/nuget.config
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="utf-8"?>
2<configuration>
3 <packageSources>
4 <clear />
5 <add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
6 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
7 </packageSources>
8</configuration> \ No newline at end of file
diff --git a/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs b/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs
new file mode 100644
index 00000000..8a65c2d4
--- /dev/null
+++ b/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs
@@ -0,0 +1,427 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.Data
4{
5 using System;
6 using System.IO;
7 using System.Linq;
8 using WixToolset.Data;
9 using WixToolset.Data.Bind;
10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller.Rows;
12 using Xunit;
13
14 using Wid = WixToolset.Data.WindowsInstaller;
15
16 public class SerializeFixture
17 {
18 [Fact]
19 public void CanSaveAndLoadIntermediate()
20 {
21 var sln = new SourceLineNumber("test.wxs", 1);
22
23 var section = new IntermediateSection("test", SectionType.Product);
24
25 section.AddSymbol(new ComponentSymbol(sln, new Identifier(AccessModifier.Global, "TestComponent"))
26 {
27 ComponentId = new Guid(1, 0, 0, new byte[8]).ToString("B"),
28 DirectoryRef = "TestFolder",
29 Location = ComponentLocation.Either,
30 });
31
32 var intermediate = new Intermediate("TestIntermediate", IntermediateLevels.Compiled, new[] { section }, null);
33
34 intermediate.UpdateLevel(IntermediateLevels.Linked);
35 intermediate.UpdateLevel(IntermediateLevels.Resolved);
36
37 var path = Path.GetTempFileName();
38 try
39 {
40 intermediate.Save(path);
41
42 var loaded = Intermediate.Load(path);
43
44 Assert.True(loaded.HasLevel(IntermediateLevels.Compiled));
45 Assert.True(loaded.HasLevel(IntermediateLevels.Linked));
46 Assert.True(loaded.HasLevel(IntermediateLevels.Resolved));
47
48 var symbol = (ComponentSymbol)loaded.Sections.Single().Symbols.Single();
49
50 Assert.Equal("TestComponent", symbol.Id.Id);
51 Assert.Equal(AccessModifier.Global, symbol.Id.Access);
52 Assert.Equal("TestFolder", symbol.DirectoryRef);
53 Assert.Equal(ComponentLocation.Either, symbol.Location);
54 }
55 finally
56 {
57 File.Delete(path);
58 }
59 }
60
61 [Fact]
62 public void CanUpdateIntermediate()
63 {
64 var sln = new SourceLineNumber("test.wxs", 1);
65 var section = new IntermediateSection("test", SectionType.Product);
66
67 section.AddSymbol(new ComponentSymbol(sln, new Identifier(AccessModifier.Global, "TestComponent"))
68 {
69 ComponentId = new Guid(1, 0, 0, new byte[8]).ToString("B"),
70 DirectoryRef = "TestFolder",
71 Location = ComponentLocation.Either,
72 });
73
74 var intermediate = new Intermediate("TestIntermediate", IntermediateLevels.Compiled, new[] { section }, null);
75
76 var path = Path.GetTempFileName();
77 try
78 {
79 intermediate.Save(path);
80
81 var uri = new Uri(Path.GetFullPath(path));
82 var stream = File.Open(path, FileMode.Open, FileAccess.ReadWrite);
83
84 using (var wixout = WixOutput.Read(uri, stream))
85 {
86 var loaded = Intermediate.Load(wixout);
87 var symbol = (ComponentSymbol)loaded.Sections.Single().Symbols.Single();
88
89 Assert.Equal("TestComponent", symbol.Id.Id);
90 Assert.Equal(AccessModifier.Global, symbol.Id.Access);
91
92 wixout.Reopen(writable: true);
93
94 section.AddSymbol(new ComponentSymbol(sln, new Identifier(AccessModifier.Global, "NewComponent"))
95 {
96 ComponentId = new Guid(1, 0, 0, new byte[8]).ToString("B"),
97 });
98
99 intermediate.Save(wixout);
100 loaded = Intermediate.Load(wixout);
101
102 var newSymbol = loaded.Sections.Single().Symbols.Where(t => t.Id.Id == "NewComponent");
103 Assert.Single(newSymbol);
104 }
105
106 var loadedAfterDispose = Intermediate.Load(path);
107 var newSymbolStillThere = loadedAfterDispose.Sections.Single().Symbols.Where(t => t.Id.Id == "NewComponent");
108 Assert.Single(newSymbolStillThere);
109
110 }
111 finally
112 {
113 File.Delete(path);
114 }
115 }
116
117 [Fact]
118 public void CanSaveAndLoadIntermediateWithCustomDefinitions()
119 {
120 var sln = new SourceLineNumber("test.wxs", 1);
121
122 var section = new IntermediateSection("test", SectionType.Product);
123
124 var fieldDefs = new[]
125 {
126 new IntermediateFieldDefinition("A", IntermediateFieldType.String),
127 new IntermediateFieldDefinition("B", IntermediateFieldType.Number),
128 new IntermediateFieldDefinition("C", IntermediateFieldType.Bool),
129 };
130
131 var symbolDef = new IntermediateSymbolDefinition("CustomDef2", fieldDefs, null);
132
133 var symbol = symbolDef.CreateSymbol(sln, new Identifier(AccessModifier.Global, "customT"));
134 symbol.Set(0, "foo");
135 symbol.Set(1, 2);
136 symbol.Set(2, true);
137
138 section.AddSymbol(symbol);
139
140 var intermediate = new Intermediate("TestIntermediate", new[] { section }, null);
141
142 var path = Path.GetTempFileName();
143 try
144 {
145 intermediate.Save(path);
146
147 var loaded = Intermediate.Load(path);
148 var loadedSection = loaded.Sections.Single();
149 var loadedSymbol = loadedSection.Symbols.Single();
150
151 Assert.Equal("foo", loadedSymbol.AsString(0));
152 Assert.Equal(2, loadedSymbol[1].AsNumber());
153 Assert.True(loadedSymbol[2].AsBool());
154 }
155 finally
156 {
157 File.Delete(path);
158 }
159 }
160
161 [Fact]
162 public void CanSaveAndLoadMultipleIntermediateWithCustomDefinitions()
163 {
164 var sln = new SourceLineNumber("test.wxs", 1);
165
166 // Intermediate #1
167 var fieldDefs = new[]
168 {
169 new IntermediateFieldDefinition("A", IntermediateFieldType.String),
170 new IntermediateFieldDefinition("B", IntermediateFieldType.Number),
171 new IntermediateFieldDefinition("C", IntermediateFieldType.Bool),
172 };
173
174 var symbolDef = new IntermediateSymbolDefinition("CustomDef", fieldDefs, null);
175
176 var symbol = symbolDef.CreateSymbol(sln, new Identifier(AccessModifier.Global, "customT"));
177 symbol.Set(0, "foo");
178 symbol.Set(1, 2);
179 symbol.Set(2, true);
180
181 var section = new IntermediateSection("test", SectionType.Product);
182 section.AddSymbol(symbol);
183
184 var intermediate1 = new Intermediate("TestIntermediate", new[] { section }, null);
185
186 // Intermediate #2
187 var fieldDefs2 = new[]
188 {
189 new IntermediateFieldDefinition("A", IntermediateFieldType.String),
190 new IntermediateFieldDefinition("B", IntermediateFieldType.Number),
191 new IntermediateFieldDefinition("C", IntermediateFieldType.Bool),
192 new IntermediateFieldDefinition("D", IntermediateFieldType.String),
193 };
194
195 var symbolDef2 = new IntermediateSymbolDefinition("CustomDef2", 1, fieldDefs2, null);
196
197 var symbol2 = symbolDef2.CreateSymbol(sln, new Identifier(AccessModifier.Global, "customT2"));
198 symbol2.Set(0, "bar");
199 symbol2.Set(1, 3);
200 symbol2.Set(2, false);
201 symbol2.Set(3, "baz");
202
203 var section2 = new IntermediateSection("test2", SectionType.Fragment);
204 section2.AddSymbol(symbol2);
205
206 var intermediate2 = new Intermediate("TestIntermediate2", new[] { section2 }, null);
207
208 // Save
209 var path1 = Path.GetTempFileName();
210 var path2 = Path.GetTempFileName();
211 try
212 {
213 intermediate1.Save(path1);
214 intermediate2.Save(path2);
215
216 var loaded = Intermediate.Load(new[] { path1, path2 });
217
218 var loaded1 = loaded.First();
219 var loaded2 = loaded.Skip(1).Single();
220
221 var loadedSymbol1 = loaded1.Sections.Single().Symbols.Single();
222 var loadedSymbol2 = loaded2.Sections.Single().Symbols.Single();
223
224 Assert.Equal("foo", loadedSymbol1.AsString(0));
225 Assert.Equal(2, loadedSymbol1[1].AsNumber());
226 Assert.True(loadedSymbol1[2].AsBool());
227
228 Assert.Equal("bar", loadedSymbol2.AsString(0));
229 Assert.Equal(3, loadedSymbol2[1].AsNumber());
230 Assert.False(loadedSymbol2[2].AsBool());
231 Assert.Equal("baz", loadedSymbol2.AsString(3));
232 }
233 finally
234 {
235 File.Delete(path2);
236 File.Delete(path1);
237 }
238 }
239
240 [Fact]
241 public void CanSaveAndLoadMultipleIntermediateWithCustomDefinitionsAndTags()
242 {
243 var sln = new SourceLineNumber("test.wxs", 1);
244
245 // Intermediate #1
246 var fieldDefs = new[]
247 {
248 new IntermediateFieldDefinition("A", IntermediateFieldType.String),
249 new IntermediateFieldDefinition("B", IntermediateFieldType.Number),
250 new IntermediateFieldDefinition("C", IntermediateFieldType.Bool),
251 };
252
253 var symbolDef = new IntermediateSymbolDefinition("CustomDef", fieldDefs, null);
254
255 symbolDef.AddTag("customDef");
256
257 var symbol = symbolDef.CreateSymbol(sln, new Identifier(AccessModifier.Global, "customT"));
258 symbol.Set(0, "foo");
259 symbol.Set(1, 2);
260 symbol.Set(2, true);
261
262 symbol.AddTag("symbol1tag");
263
264 var section = new IntermediateSection("test", SectionType.Product);
265 section.AddSymbol(symbol);
266
267 var intermediate1 = new Intermediate("TestIntermediate", new[] { section }, null);
268
269 // Intermediate #2
270 var fieldDefs2 = new[]
271 {
272 new IntermediateFieldDefinition("A", IntermediateFieldType.String),
273 new IntermediateFieldDefinition("B", IntermediateFieldType.Number),
274 new IntermediateFieldDefinition("C", IntermediateFieldType.Bool),
275 new IntermediateFieldDefinition("D", IntermediateFieldType.String),
276 };
277
278 var symbolDef2 = new IntermediateSymbolDefinition("CustomDef2", 1, fieldDefs2, null);
279
280 symbolDef2.AddTag("customDef2");
281 symbolDef2.AddTag("customDef2 tag2");
282
283 var symbol2 = symbolDef2.CreateSymbol(sln, new Identifier(AccessModifier.Global, "customT2"));
284 symbol2.Set(0, "bar");
285 symbol2.Set(1, 3);
286 symbol2.Set(2, false);
287 symbol2.Set(3, "baz");
288
289 symbol2.AddTag("symbol2tag1");
290 symbol2.AddTag("symbol2tag2");
291
292 var section2 = new IntermediateSection("test2", SectionType.Fragment);
293 section2.AddSymbol(symbol2);
294
295 var intermediate2 = new Intermediate("TestIntermediate2", new[] { section2 }, null);
296
297 // Save
298 var path1 = Path.GetTempFileName();
299 var path2 = Path.GetTempFileName();
300 try
301 {
302 intermediate1.Save(path1);
303 intermediate2.Save(path2);
304
305 var loaded = Intermediate.Load(new[] { path1, path2 });
306
307 var loaded1 = loaded.First();
308 var loaded2 = loaded.Skip(1).Single();
309
310 var loadedSymbol1 = loaded1.Sections.Single().Symbols.Single();
311 var loadedSymbol2 = loaded2.Sections.Single().Symbols.Single();
312
313 Assert.True(loadedSymbol1.Definition.HasTag("customDef"));
314 Assert.Equal("foo", loadedSymbol1.AsString(0));
315 Assert.Equal(2, loadedSymbol1[1].AsNumber());
316 Assert.True(loadedSymbol1[2].AsBool());
317 Assert.True(loadedSymbol1.HasTag("symbol1tag"));
318
319 Assert.True(loadedSymbol2.Definition.HasTag("customDef2"));
320 Assert.True(loadedSymbol2.Definition.HasTag("customDef2 tag2"));
321 Assert.Equal("bar", loadedSymbol2.AsString(0));
322 Assert.Equal(3, loadedSymbol2[1].AsNumber());
323 Assert.False(loadedSymbol2[2].AsBool());
324 Assert.Equal("baz", loadedSymbol2.AsString(3));
325 Assert.True(loadedSymbol2.HasTag("symbol2tag1"));
326 Assert.True(loadedSymbol2.HasTag("symbol2tag2"));
327 }
328 finally
329 {
330 File.Delete(path2);
331 File.Delete(path1);
332 }
333 }
334
335 [Fact]
336 public void CanSaveAndLoadIntermediateWithLocalization()
337 {
338 var sln = new SourceLineNumber("test.wxs", 10);
339
340 var bindVariables = new[]
341 {
342 new BindVariable { Id = "TestVar1", Value = "TestValue1", SourceLineNumbers = sln },
343 new BindVariable { Id = "TestVar2", Value = "TestValue2", Overridable = true, SourceLineNumbers = sln },
344 };
345
346 var controls = new[]
347 {
348 new LocalizedControl("TestDlg1", "TestControl1", 10, 10, 100, 100, false, false, false, null),
349 new LocalizedControl("TestDlg1", "TestControl2", 100, 90, 50, 70, false, false, false, "localized"),
350 };
351
352 var localizations = new[]
353 {
354 new Localization(65001, 1252, null, bindVariables.ToDictionary(b => b.Id), controls.ToDictionary(c => c.GetKey()))
355 };
356
357 var section = new IntermediateSection("test", SectionType.Product);
358
359 section.AddSymbol(new ComponentSymbol(sln, new Identifier(AccessModifier.Global, "TestComponent"))
360 {
361 ComponentId = new Guid(1, 0, 0, new byte[8]).ToString("B"),
362 DirectoryRef = "TestFolder",
363 Location = ComponentLocation.Either,
364 });
365
366 var intermediate = new Intermediate("TestIntermediate", new[] { section }, localizations.ToDictionary(l => l.Culture));
367
368 var path = Path.GetTempFileName();
369 try
370 {
371 intermediate.Save(path);
372
373 var loaded = Intermediate.Load(path);
374
375 var loc = loaded.Localizations.Single();
376 Assert.Equal(65001, loc.Codepage);
377 Assert.Empty(loc.Culture);
378 Assert.Equal(new[]
379 {
380 "TestVar1/TestValue1/False",
381 "TestVar2/TestValue2/True",
382 }, loc.Variables.Select(v => String.Join("/", v.Id, v.Value, v.Overridable)).ToArray());
383 }
384 finally
385 {
386 File.Delete(path);
387 }
388 }
389
390 [Fact]
391 public void CanSaveAndLoadWindowsInstallerData()
392 {
393 var sln = new SourceLineNumber("test.wxs", 1);
394 var windowsInstallerData = new Wid.WindowsInstallerData(sln)
395 {
396 Type = OutputType.Product,
397 };
398
399 var fileTable = windowsInstallerData.EnsureTable(Wid.WindowsInstallerTableDefinitions.File);
400 var fileRow = (FileRow)fileTable.CreateRow(sln);
401 fileRow.File = "TestFile";
402
403 var path = Path.GetTempFileName();
404 try
405 {
406 using (var wixout = WixOutput.Create(path))
407 {
408 windowsInstallerData.Save(wixout);
409 }
410
411 var loaded = Wid.WindowsInstallerData.Load(path);
412
413 var loadedTable = Assert.Single(loaded.Tables);
414 Assert.Equal(Wid.WindowsInstallerTableDefinitions.File.Name, loadedTable.Name);
415
416 var loadedRow = Assert.Single(loadedTable.Rows);
417 var loadedFileRow = Assert.IsType<FileRow>(loadedRow);
418
419 Assert.Equal("TestFile", loadedFileRow.File);
420 }
421 finally
422 {
423 File.Delete(path);
424 }
425 }
426 }
427}
diff --git a/src/api/wix/test/WixToolsetTest.Data/TagFixture.cs b/src/api/wix/test/WixToolsetTest.Data/TagFixture.cs
new file mode 100644
index 00000000..5527c978
--- /dev/null
+++ b/src/api/wix/test/WixToolsetTest.Data/TagFixture.cs
@@ -0,0 +1,101 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.Data
4{
5 using WixToolset.Data;
6 using Xunit;
7
8 public class TagFixture
9 {
10 [Fact]
11 public void CanAddSingleTag()
12 {
13 var symbol = SymbolDefinitions.File.CreateSymbol();
14 Assert.True(symbol.AddTag("test"));
15 Assert.True(symbol.HasTag("test"));
16 }
17
18 [Fact]
19 public void CanAddDuplicateTag()
20 {
21 var symbol = SymbolDefinitions.File.CreateSymbol();
22 Assert.True(symbol.AddTag("test"));
23 Assert.False(symbol.AddTag("test"));
24 }
25
26 [Fact]
27 public void CanAddRemoveSingleTag()
28 {
29 var symbol = SymbolDefinitions.File.CreateSymbol();
30 Assert.True(symbol.AddTag("test"));
31 Assert.True(symbol.RemoveTag("test"));
32 Assert.False(symbol.HasTag("test"));
33 }
34
35 [Fact]
36 public void CanAddMultipleTags()
37 {
38 var symbol = SymbolDefinitions.File.CreateSymbol();
39 Assert.True(symbol.AddTag("test1"));
40 Assert.True(symbol.AddTag("test2"));
41 Assert.True(symbol.HasTag("test1"));
42 Assert.True(symbol.HasTag("test2"));
43 }
44
45 [Fact]
46 public void CanAddRemoveMultipleTags()
47 {
48 var symbol = SymbolDefinitions.File.CreateSymbol();
49 Assert.True(symbol.AddTag("test1"));
50 Assert.True(symbol.AddTag("test2"));
51 Assert.True(symbol.RemoveTag("test2"));
52 Assert.False(symbol.HasTag("test2"));
53 Assert.True(symbol.RemoveTag("test1"));
54 Assert.False(symbol.HasTag("test1"));
55 }
56
57 [Fact]
58 public void CanAddRemoveMissingTags()
59 {
60 var symbol = SymbolDefinitions.File.CreateSymbol();
61 Assert.True(symbol.AddTag("test1"));
62 Assert.True(symbol.AddTag("test2"));
63 Assert.False(symbol.RemoveTag("test3"));
64 }
65
66 [Fact]
67 public void CanAdd2AndRemoveAllTags()
68 {
69 var symbol = SymbolDefinitions.File.CreateSymbol();
70 Assert.True(symbol.AddTag("test1"));
71 Assert.True(symbol.AddTag("test2"));
72 Assert.True(symbol.RemoveTag("test1"));
73 Assert.True(symbol.RemoveTag("test2"));
74 }
75
76 [Fact]
77 public void CanAdd3AndRemoveAllTags()
78 {
79 var symbol = SymbolDefinitions.File.CreateSymbol();
80 Assert.True(symbol.AddTag("test1"));
81 Assert.True(symbol.AddTag("test2"));
82 Assert.True(symbol.AddTag("test3"));
83 Assert.True(symbol.RemoveTag("test1"));
84 Assert.True(symbol.RemoveTag("test3"));
85 Assert.True(symbol.RemoveTag("test2"));
86 }
87
88 [Fact]
89 public void CanAdd3AndRemoveMissingTags()
90 {
91 var symbol = SymbolDefinitions.File.CreateSymbol();
92 Assert.True(symbol.AddTag("test1"));
93 Assert.True(symbol.AddTag("test2"));
94 Assert.True(symbol.AddTag("test3"));
95 Assert.False(symbol.RemoveTag("test4"));
96 Assert.True(symbol.RemoveTag("test1"));
97 Assert.True(symbol.RemoveTag("test3"));
98 Assert.True(symbol.RemoveTag("test2"));
99 }
100 }
101}
diff --git a/src/api/wix/test/WixToolsetTest.Data/TupleDefinitionFixture.cs b/src/api/wix/test/WixToolsetTest.Data/TupleDefinitionFixture.cs
new file mode 100644
index 00000000..cde4a675
--- /dev/null
+++ b/src/api/wix/test/WixToolsetTest.Data/TupleDefinitionFixture.cs
@@ -0,0 +1,135 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.Data
4{
5 using WixToolset.Data;
6 using WixToolset.Data.Symbols;
7 using Xunit;
8
9 public class SymbolDefinitionFixture
10 {
11 [Fact]
12 public void CanCreateFileSymbol()
13 {
14 var symbol = SymbolDefinitions.File.CreateSymbol();
15 Assert.IsType<FileSymbol>(symbol);
16 Assert.Same(SymbolDefinitions.File, symbol.Definition);
17 }
18
19 [Fact]
20 public void CanCreateFileSymbolByName()
21 {
22 var symbol = SymbolDefinitions.ByName("File").CreateSymbol();
23 Assert.IsType<FileSymbol>(symbol);
24 Assert.Same(SymbolDefinitions.File, symbol.Definition);
25 }
26
27 //[Fact]
28 //public void CanCreateFileSymbolByType()
29 //{
30 // var symbol = SymbolDefinitions.CreateSymbol<FileSymbol>();
31 // Assert.Same(SymbolDefinitions.File, symbol.Definition);
32 //}
33
34 [Fact]
35 public void CanSetComponentFieldInFileSymbolByCasting()
36 {
37 var fileSymbol = (FileSymbol)SymbolDefinitions.File.CreateSymbol();
38 fileSymbol.ComponentRef = "Foo";
39 Assert.Equal("Foo", fileSymbol.ComponentRef);
40 }
41
42 [Fact]
43 public void CanCheckNameofField()
44 {
45 var fileSymbol = new FileSymbol();
46 Assert.Equal("ComponentRef", fileSymbol.Definition.FieldDefinitions[0].Name);
47 Assert.Null(fileSymbol.Fields[0]);
48 fileSymbol.ComponentRef = "Foo";
49 Assert.Equal("ComponentRef", fileSymbol.Fields[0].Name);
50 Assert.Same(fileSymbol.Definition.FieldDefinitions[0].Name, fileSymbol.Fields[0].Name);
51 }
52
53 [Fact]
54 public void CanSetComponentFieldInFileSymbolByNew()
55 {
56 var fileSymbol = new FileSymbol();
57 fileSymbol.ComponentRef = "Foo";
58 Assert.Equal("Foo", fileSymbol.ComponentRef);
59 }
60
61 [Fact]
62 public void CanGetContext()
63 {
64 using (new IntermediateFieldContext("bar"))
65 {
66 var fileSymbol = new FileSymbol();
67 fileSymbol.ComponentRef = "Foo";
68
69 var field = fileSymbol[FileSymbolFields.ComponentRef];
70 Assert.Equal("Foo", field.AsString());
71 Assert.Equal("bar", field.Context);
72 }
73 }
74
75 [Fact]
76 public void CanSetInNestedContext()
77 {
78 var fileSymbol = new FileSymbol();
79
80 using (new IntermediateFieldContext("bar"))
81 {
82 fileSymbol.ComponentRef = "Foo";
83
84 var field = fileSymbol[FileSymbolFields.ComponentRef];
85 Assert.Equal("Foo", field.AsString());
86 Assert.Equal("bar", field.Context);
87
88 using (new IntermediateFieldContext("baz"))
89 {
90 fileSymbol.ComponentRef = "Foo2";
91
92 field = fileSymbol[FileSymbolFields.ComponentRef];
93 Assert.Equal("Foo2", field.AsString());
94 Assert.Equal("baz", field.Context);
95
96 Assert.Equal("Foo", (string)field.PreviousValue);
97 Assert.Equal("bar", field.PreviousValue.Context);
98 }
99
100 fileSymbol.ComponentRef = "Foo3";
101
102 field = fileSymbol[FileSymbolFields.ComponentRef];
103 Assert.Equal("Foo3", field.AsString());
104 Assert.Equal("bar", field.Context);
105
106 Assert.Equal("Foo2", (string)field.PreviousValue);
107 Assert.Equal("baz", field.PreviousValue.Context);
108
109 Assert.Equal("Foo", (string)field.PreviousValue.PreviousValue);
110 Assert.Equal("bar", field.PreviousValue.PreviousValue.Context);
111 }
112
113 fileSymbol.ComponentRef = "Foo4";
114
115 var fieldOutside = fileSymbol[FileSymbolFields.ComponentRef];
116 Assert.Equal("Foo4", fieldOutside.AsString());
117 Assert.Null(fieldOutside.Context);
118 }
119
120 //[Fact]
121 //public void CanSetComponentFieldInFileSymbol()
122 //{
123 // var fileSymbol = SymbolDefinitions.File.CreateSymbol<FileSymbol>();
124 // fileSymbol.Component_ = "Foo";
125 // Assert.Equal("Foo", fileSymbol.Component_);
126 //}
127
128 //[Fact]
129 //public void CanThrowOnMismatchSymbolType()
130 //{
131 // var e = Assert.Throws<InvalidCastException>(() => SymbolDefinitions.File.CreateSymbol<ComponentSymbol>());
132 // Assert.Equal("Requested wrong type WixToolset.Data.Symbols.ComponentSymbol, actual type WixToolset.Data.Symbols.FileSymbol", e.Message);
133 //}
134 }
135}
diff --git a/src/api/wix/test/WixToolsetTest.Data/WindowsInstallerTableDefinitionsFixture.cs b/src/api/wix/test/WixToolsetTest.Data/WindowsInstallerTableDefinitionsFixture.cs
new file mode 100644
index 00000000..5621a756
--- /dev/null
+++ b/src/api/wix/test/WixToolsetTest.Data/WindowsInstallerTableDefinitionsFixture.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
3namespace WixToolsetTest.Data
4{
5 using WixToolset.Data.WindowsInstaller;
6 using Xunit;
7
8 public class WindowsInstallerTableDefinitionsFixture
9 {
10 [Fact]
11 public void CanCreateWindowsInstallerRows()
12 {
13 foreach (var tableDefinition in WindowsInstallerTableDefinitions.All)
14 {
15 var table = new Table(tableDefinition);
16 var rowFromTable = table.CreateRow(null);
17 var rowFromTableDefinition = tableDefinition.CreateRow(null);
18 var expectedRowTypeName = tableDefinition.Name.Replace("_", "") + "Row";
19 var expectedRowType = rowFromTable.GetType();
20
21 Assert.Equal(expectedRowType, rowFromTableDefinition.GetType());
22 if (typeof(Row) != expectedRowType)
23 {
24 Assert.Equal(expectedRowTypeName, expectedRowType.Name);
25 }
26 }
27 }
28 }
29}
diff --git a/src/api/wix/test/WixToolsetTest.Data/WixToolsetTest.Data.csproj b/src/api/wix/test/WixToolsetTest.Data/WixToolsetTest.Data.csproj
new file mode 100644
index 00000000..fb0f8594
--- /dev/null
+++ b/src/api/wix/test/WixToolsetTest.Data/WixToolsetTest.Data.csproj
@@ -0,0 +1,19 @@
1<Project Sdk="Microsoft.NET.Sdk">
2
3 <PropertyGroup>
4 <TargetFramework>netcoreapp3.1</TargetFramework>
5
6 <IsPackable>false</IsPackable>
7 </PropertyGroup>
8
9 <ItemGroup>
10 <ProjectReference Include="..\..\WixToolset.Data\WixToolset.Data.csproj" />
11 </ItemGroup>
12
13 <ItemGroup>
14 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
15 <PackageReference Include="xunit" Version="2.4.1" />
16 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
17 </ItemGroup>
18
19</Project>