From 6d9d582b68515636c50e84b24b8e31520f2ba037 Mon Sep 17 00:00:00 2001 From: Mugesh Date: Thu, 9 Jul 2026 20:00:33 +0530 Subject: [PATCH 1/3] Updated the licensing documentation using AI --- .../licensing-faq/CI-license-validation.md | 118 ++++++++++++------ .../license-validation-method_v31.png | Bin 0 -> 35090 bytes .../license-validation-method_v34.png | Bin 0 -> 38318 bytes 3 files changed, 77 insertions(+), 41 deletions(-) create mode 100644 Document-Processing/Licensing/licensing-faq/licensing-images/license-validation-method_v31.png create mode 100644 Document-Processing/Licensing/licensing-faq/licensing-images/license-validation-method_v34.png diff --git a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md index f393b77a33..5da4d51949 100644 --- a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md +++ b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md @@ -1,7 +1,7 @@ --- layout: post title: Overview of Syncfusion license validation in CI services - Syncfusion -description: Learn here about how to register Syncfusion license key for Syncfusion application for license validation. +description: Learn how to register and validate the Syncfusion license key for your application in CI services. platform: file-formats control: Essential Studio documentation: ug @@ -17,18 +17,19 @@ margin-top: 1.5em; margin-bottom: 1.5em; -# Syncfusion® license key validation in CI services +# Overview of Syncfusion license validation in CI services -Syncfusion® license key validation in CI services ensures that Syncfusion® Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. Set up the continuous integration process to fail in case the license key validation fails. Validate the passed parameters and the registered license key again to resolve the issue. +Validating the Syncfusion® license key as part of your CI pipeline ensures that Syncfusion® Essential Studio components are properly licensed before deployment and helps prevent licensing errors in production. The following sections describe how to validate the license key in Azure Pipelines, GitHub Actions, and Jenkins, and how to validate it programmatically using the `ValidateLicense()` method or a unit test project. The following section shows how to validate the Syncfusion® license key in CI services. * Download and extract the LicenseKeyValidator.zip utility from the following link: [LicenseKeyValidator](https://s3.amazonaws.com/files2.syncfusion.com/Installs/LicenseKeyValidation/LicenseKeyValidator.zip). -* Open the LicenseKeyValidation.ps1 PowerShell script in a text\code editor as shown in the below example. +* Open the LicenseKeyValidation.ps1 PowerShell script in a text or code editor as shown in the following example. + {% tabs %} -{% highlight c# tabtitle="PowerShell" %} +{% highlight powershell tabtitle="PowerShell" %} # Replace the parameters with the desired platform, version, and actual license key. $result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"FileFormats" /version:"26.2.4" /licensekey:"Your License Key" @@ -41,24 +42,26 @@ Write-Host $result * Update the parameters in the LicenseKeyValidation.ps1 script file as described below. - **Platform:** Modify the value for /platform: to the actual platform "FileFormats". - - **Version:** Change the value for /version: to the required version (e.g., "26.2.4"). - - **License Key:** Replace the value for /licensekey: with your actual license key (e.g., "Your License Key"). - - N> This feature is supported only from the 16.2.0.41 version of the Essential Studio®. + **Platform:** Modify the value for `/platform:` to the platform you are using (for example, `FileFormats`). + + **Version:** Change the value for `/version:` to the required version (for example, `26.2.4`). + + **License Key:** Replace the value for `/licensekey:` with your actual license key (for example, `Your License Key`). To keep the key out of source control, store it as a CI secret and read it in the script (for example, `$env:SYNCFUSION_LICENSE_KEY`). + + N> This feature is supported starting with version 16.2.0.41 of Essential Studio®. + + N> On Windows agents, if script execution is blocked by policy, run the script with `-ExecutionPolicy Bypass` (for example, `powershell -ExecutionPolicy Bypass -File .\LicenseKeyValidation.ps1`). The script returns a non-zero exit code when validation fails so the pipeline step fails. ## Azure Pipelines (YAML) -* Create a new [User-defined Variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#user-defined-variables) named `LICENSE_VALIDATION` in the Azure Pipeline. Use the path of the LicenseKeyValidation.ps1 script file as a value (e.g., D:\LicenseKeyValidator\LicenseKeyValidation.ps1). +* Create a new [User-defined Variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#user-defined-variables) named `LICENSE_VALIDATION` in the Azure Pipeline. Use the path of the LicenseKeyValidation.ps1 script file as the value (for example, `D:\LicenseKeyValidator\LicenseKeyValidation.ps1`). -* Integrate the PowerShell task in the pipeline and execute the script to validate the license key. +* Add a PowerShell task to the pipeline that runs the script. The script returns a non-zero exit code on failure, so add `failOnStderr: true` (or use the script's exit code) to fail the build when validation fails. The license key should be read from a secret variable (for example, `$(SYNCFUSION_LICENSE_KEY)`) and passed to the script. The following example shows the syntax for Windows build agents. {% tabs %} -{% highlight c# tabtitle="YAML" %} +{% highlight yaml tabtitle="YAML" %} pool: vmImage: 'windows-latest' @@ -75,21 +78,21 @@ steps: ## Azure Pipelines (Classic) -* Create a new [User-defined Variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#user-defined-variables) named `LICENSE_VALIDATION` in the Azure Pipeline. Use the path of the LicenseKeyValidation.ps1 script file as a value (e.g., D:\LicenseKeyValidator\LicenseKeyValidation.ps1). +* Create a new [User-defined Variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#user-defined-variables) named `LICENSE_VALIDATION` in the Azure Pipeline. Use the path of the LicenseKeyValidation.ps1 script file as the value (for example, `D:\LicenseKeyValidator\LicenseKeyValidation.ps1`). Store the license key as a secret variable (for example, `SYNCFUSION_LICENSE_KEY`). -* Include the PowerShell task in the pipeline and execute the script to validate the license key. +* Add a PowerShell task that runs the script. Mark the build to fail when the script's exit code is non-zero so the pipeline reflects validation failures. ![LicenseKeyValidation script](licensing-images/license-validation-classic.png) -## GitHub actions +## GitHub Actions -* To execute the script in PowerShell as part of a GitHub Actions workflow, include a step in the configuration file and update the path of the LicenseKeyValidation.ps1 script file (e.g., D:\LicenseKeyValidator\LicenseKeyValidation.ps1). +* To execute the script in PowerShell as part of a GitHub Actions workflow, add a step in the workflow YAML file. Update the path of the LicenseKeyValidation.ps1 script file (for example, `./path/LicenseKeyValidator/LicenseKeyValidation.ps1`) and store the license key in a repository or organization secret named `SYNCFUSION_LICENSE_KEY`. -The following example shows the syntax for validating the Syncfusion® license key in GitHub actions. +The following example shows the syntax for validating the Syncfusion® license key in GitHub Actions. {% tabs %} -{% highlight c# tabtitle="YAML" %} - steps: +{% highlight yaml tabtitle="YAML" %} +steps: - name: Syncfusion License Validation shell: pwsh run: | @@ -99,9 +102,9 @@ The following example shows the syntax for validating the Syncfusion®® license key in the Jenkins pipeline. @@ -125,46 +128,79 @@ pipeline { ## Validate the License Key By Using the ValidateLicense() Method -* Register the license key properly by calling RegisterLicense("License Key") method with the license key. +* Register the license key by calling `SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY")` before any Syncfusion control is instantiated. -* Once the license key is registered, it can be validated by using the ValidateLicense("Platform.FileFormats") method. This ensures that the license key is valid for the platform and version you are using. For reference, please check the following example. +* After registration, validate the key with `SyncfusionLicenseProvider.ValidateLicense(Platform.FileFormats)`, passing the `Platform` enum value that matches your application. This confirms the license is valid for the platform and version in use. The method returns `true` on success and `false` on failure; in overloads that include an `out string validationMessage` parameter, the message describes the failure reason. See the following examples for the correct signature by version. {% tabs %} -{% highlight c# %} +{% highlight csharp tabtitle="v34.1.29 and later" %} +using Syncfusion.Licensing; + +// Register the Syncfusion license key +SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); + +// Validate the registered license key. +// The array overload allows validating against multiple platforms in a single call. +bool isValid = SyncfusionLicenseProvider.ValidateLicense(new[] { Platform.FileFormats }); +{% endhighlight %} + +{% highlight csharp tabtitle="v31.1.17 to v33.2.3" %} using Syncfusion.Licensing; -//Register Syncfusion license key -Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); +// Register the Syncfusion license key +SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); -//Validate the registered license key +// Validate the registered license key +bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.FileFormats); +{% endhighlight %} + +{% highlight csharp tabtitle="Before v31.1.17" %} +using Syncfusion.Licensing; + +// Register the Syncfusion license key +SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); + +// Validate the registered license key bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.FileFormats); {% endhighlight %} {% endtabs %} -![LicenseKeyValidationMethod](licensing-images/license-validation-method.png) +**v34.1.29 and later:** +![License key validation - v34.1.29 and later](licensing-images/license-validation-method_v34.png) + +**v31.1.17 to v33.2.3:** +![License key validation - v31.1.17 to v33.2.3](licensing-images/license-validation-method_v31.png) + +**Before v31.1.17:** +![License key validation - Before v31.1.17](licensing-images/license-validation-method.png) -* If the ValidateLicense() method returns true, registered license key is valid and can proceed with deployment. +* If the `ValidateLicense()` method returns `true`, the registered license key is valid and the build can proceed with deployment. -* If the ValidateLicense() method returns false, there will be invalid license errors in deployment due to either an invalid license key or an incorrect assembly or package version that is referenced in the project. Please ensure that all the referenced Syncfusion® assemblies or NuGet packages are all on the same version as the license key’s version before deployment. +* If the `ValidateLicense()` method returns `false`, the build produces invalid license errors. Validation fails when the license key is invalid or the referenced Syncfusion assembly or package versions do not match the version of the license key. Ensure that all referenced Syncfusion® assemblies or NuGet packages share the same version as the license key before deployment. -## Validate the License Key By Using the Unit Test Project +## Validate the License Key By Using the Unit Test Project -* To create a unit test project in Visual Studio, choose **File -> New -> Project** from the menu. This opens a new dialog for creating a new project. Filtering the project type by Test or typing Test as a keyword in the search option can help you to find available unit test projects. Select the appropriate test framework (such as MSTest, NUnit, or xUnit) that best suits your need. +* To create a unit test project in Visual Studio, choose **File -> New -> Project** from the menu. This opens a new dialog for creating a new project. Filter the project type by Test, or type **Test** as a keyword in the search option, to find available unit test projects. Select the appropriate test framework (such as MSTest, NUnit, or xUnit) that best suits your need. + +* Add the required Syncfusion references to the test project. The example below uses NUnit, so install the NUnit and NUnit3TestAdapter NuGet packages, then add the `Syncfusion.Licensing` package and the File-Formats platform package (for example, `Syncfusion.PdfToPdfAConverter` or the platform package relevant to your project) at the same version as your license key. ![Unit Test Projects](licensing-images/unit-test-projects.png) * For more details on creating unit test projects in Visual Studio, refer to the [Getting Started with Unit Testing guide](https://learn.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2022&tabs=dotnet%2Cmstest#create-unit-tests). -* Register the license key by calling the RegisterLicense("Your License Key") method with the license key in the unit test project. +* Register the license key by calling `SyncfusionLicenseProvider.RegisterLicense("Your License Key")` in the unit test project. Register the key before any Syncfusion control is instantiated so the validation reflects the runtime configuration. -N> * Place the license key between double quotes. Also, ensure that Syncfusion.Licensing.dll is referenced in your project where the license key is being registered. +N> Enclose the license key in double quotes. Also, ensure that `Syncfusion.Licensing` (the `Syncfusion.Licensing.dll` assembly) is referenced in the project where the license key is registered. For .NET Core/5+ projects, add the `Syncfusion.Licensing` NuGet package; for .NET Framework projects, reference `Syncfusion.Licensing.dll` from the installed Essential Studio assemblies. -* Once the license key is registered, it can be validated by using the ValidateLicense("Platform.FileFormats", out var validationMessage) method. This ensures that the license key is valid for the platform and version you are using. +* Once the license key is registered, it can be validated by using the `ValidateLicense(Platform.FileFormats, out string validationMessage)` method. The `validationMessage` out parameter describes the failure reason when the result is `false`, which makes troubleshooting easier in unit-test output. * For reference, please check the following example that demonstrates how to register and validate the license key in the unit test project. {% tabs %} {% highlight c# %} +using NUnit.Framework; +using Syncfusion.Licensing; + public void TestSyncfusionFileFormatsLicense() { var platform = Platform.FileFormats; @@ -183,12 +219,12 @@ public void TestSyncfusionFileFormatsLicense() {% endhighlight %} {% endtabs %} -* Once the unit test is executed, if the license key validation passes for the specified platform, the output similar to the following will be displayed in the Test Explorer window. +* Once the unit test is executed, if the license key validation passes for the specified platform, output similar to the following is displayed in the **Test Explorer** window. ![License Validation Success Message](licensing-images/unit-test-success-message.png) -* If the license validation fails during unit testing, the following output will be displayed in the Test Explorer window. +* If the license validation fails during unit testing, output similar to the following is displayed in the **Test Explorer** window. ![License Validation Failure Message](licensing-images/unit-test-failure-message.png) -* License validation fails due to either an invalid license key or an incorrect assembly or package version that is referenced in the project. In such cases, verify that you are using the valid license key for the platform, and ensure the assembly or package versions referenced in the project match the version of the license key. \ No newline at end of file +* Validation fails when the license key is invalid or the referenced Syncfusion assembly or package versions do not match the version of the license key. Verify that you are using a valid key for the platform and that all referenced Syncfusion packages share the same version as the license key. \ No newline at end of file diff --git a/Document-Processing/Licensing/licensing-faq/licensing-images/license-validation-method_v31.png b/Document-Processing/Licensing/licensing-faq/licensing-images/license-validation-method_v31.png new file mode 100644 index 0000000000000000000000000000000000000000..cddd60c93faffa079e1f96790b6442ec9fe7e226 GIT binary patch literal 35090 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 ClC@O; literal 0 HcmV?d00001 From e0909c07bb02ef87f7b18e3d95152ebf4c481f09 Mon Sep 17 00:00:00 2001 From: Mugesh Date: Thu, 9 Jul 2026 20:29:18 +0530 Subject: [PATCH 2/3] Fixed spelling issue --- .../Licensing/licensing-faq/CI-license-validation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md index 5da4d51949..732e583ae9 100644 --- a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md +++ b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md @@ -29,7 +29,7 @@ The following section shows how to validate the Syncfusion® licen {% tabs %} -{% highlight powershell tabtitle="PowerShell" %} +{% highlight c# tabtitle="PowerShell" %} # Replace the parameters with the desired platform, version, and actual license key. $result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"FileFormats" /version:"26.2.4" /licensekey:"Your License Key" @@ -56,7 +56,7 @@ Write-Host $result * Create a new [User-defined Variable](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#user-defined-variables) named `LICENSE_VALIDATION` in the Azure Pipeline. Use the path of the LicenseKeyValidation.ps1 script file as the value (for example, `D:\LicenseKeyValidator\LicenseKeyValidation.ps1`). -* Add a PowerShell task to the pipeline that runs the script. The script returns a non-zero exit code on failure, so add `failOnStderr: true` (or use the script's exit code) to fail the build when validation fails. The license key should be read from a secret variable (for example, `$(SYNCFUSION_LICENSE_KEY)`) and passed to the script. +Integrate the PowerShell task in the pipeline and execute the script to validate the license key. The following example shows the syntax for Windows build agents. From cba8a6ac2810688ac14237e700c0bf715aa5429b Mon Sep 17 00:00:00 2001 From: Mugesh Date: Mon, 13 Jul 2026 11:48:05 +0530 Subject: [PATCH 3/3] Updated Licensing Documentation Page --- .../Licensing/how-to-generate.md | 11 ++++-- .../licensing-faq/CI-license-validation.md | 34 ++++++++----------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Document-Processing/Licensing/how-to-generate.md b/Document-Processing/Licensing/how-to-generate.md index 3ed184b9af..c7ac4764d9 100644 --- a/Document-Processing/Licensing/how-to-generate.md +++ b/Document-Processing/Licensing/how-to-generate.md @@ -13,8 +13,15 @@ License keys for Document Processing can be generated from the [License & Downlo ![Get License Key](licensing-images/generate-license.png) -I> * Syncfusion® license keys are **version and platform specific**, refer to the [KB](https://www.syncfusion.com/kb/8976/how-to-generate-license-key-for-licensed-products) to generate the license key for the required version and platform. -* Refer this [KB](https://www.syncfusion.com/kb/8951/which-version-syncfusion-license-key-should-i-use-in-my-application) to know about which version of the Syncfusion® license key should be used in the application. +I> * Syncfusion® license keys are **version‑specific and edition‑specific**, refer to the [KB](https://www.syncfusion.com/kb/8976/how-to-generate-license-key-for-licensed-products) to generate the license key for the required version and platform. +* **Starting from v31.1.17 (2025 Volume 3 release)**, Syncfusion® introduced a new licensing model where license keys are generated **per edition rather than per platform.** The editions include: + - **Essential Studio UI Edition** + - **Essential Studio Document SDK** + - **Essential Studio PDF Viewer SDK** + - **Essential Studio DOCX Editor SDK** + - **Essential Studio Spreadsheet Editor SDK** + - **Essential Studio Enterprise Edition** (includes all the above) +* **Previously (before v31.x)**, Syncfusion® generated license keys **per platform** (e.g., File Formats). ## Claim License key diff --git a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md index 732e583ae9..d81dba9fff 100644 --- a/Document-Processing/Licensing/licensing-faq/CI-license-validation.md +++ b/Document-Processing/Licensing/licensing-faq/CI-license-validation.md @@ -29,20 +29,26 @@ The following section shows how to validate the Syncfusion® licen {% tabs %} -{% highlight c# tabtitle="PowerShell" %} +{% highlight c# tabtitle="v34.1.29 and later" %} # Replace the parameters with the desired platform, version, and actual license key. -$result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"FileFormats" /version:"26.2.4" /licensekey:"Your License Key" +$result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"WordToPDF" /version:"34.1.29" /licensekey:"Your License Key" Write-Host $result {% endhighlight %} -{% endtabs %} -![LicenseKeyValidation script](licensing-images/license-validation.png) +{% highlight c# tabtitle="Before v34.1.29" %} +# Replace the parameters with the desired platform, version, and actual license key. -* Update the parameters in the LicenseKeyValidation.ps1 script file as described below. +$result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"FileFormats" /version:"26.2.4" /licensekey:"Your License Key" + +Write-Host $result +{% endhighlight %} +{% endtabs %} - **Platform:** Modify the value for `/platform:` to the platform you are using (for example, `FileFormats`). +* Update the parameters in the script: + + **Platform:** Set /platform:"**WordToPDF**" for v34.1.29 and later, or /platform:"**FileFormats**" for earlier versions (use the relevant Syncfusion platform as needed). **Version:** Change the value for `/version:` to the required version (for example, `26.2.4`). @@ -141,7 +147,7 @@ SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); // Validate the registered license key. // The array overload allows validating against multiple platforms in a single call. -bool isValid = SyncfusionLicenseProvider.ValidateLicense(new[] { Platform.FileFormats }); +bool isValid = SyncfusionLicenseProvider.ValidateLicense(new[] { Platform.WordToPDF }); {% endhighlight %} {% highlight csharp tabtitle="v31.1.17 to v33.2.3" %} @@ -151,7 +157,7 @@ using Syncfusion.Licensing; SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); // Validate the registered license key -bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.FileFormats); +bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.WordToPDF); {% endhighlight %} {% highlight csharp tabtitle="Before v31.1.17" %} @@ -165,14 +171,7 @@ bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.FileFormats); {% endhighlight %} {% endtabs %} -**v34.1.29 and later:** -![License key validation - v34.1.29 and later](licensing-images/license-validation-method_v34.png) - -**v31.1.17 to v33.2.3:** -![License key validation - v31.1.17 to v33.2.3](licensing-images/license-validation-method_v31.png) - -**Before v31.1.17:** -![License key validation - Before v31.1.17](licensing-images/license-validation-method.png) +N> Use the specific platform enum (`PDF`, `Word`, `Excel`, `PowerPoint`, `WordToPDF`, `ExcelToPDF`, `PowerPointToPDF`, `PDFViewer`, `WordEditor`, or `SpreadsheetEditor`) for license validation from v31.1.17 and later. `Platform.FileFormats` is not supported from v31.1.17 onwards. * If the `ValidateLicense()` method returns `true`, the registered license key is valid and the build can proceed with deployment. @@ -198,9 +197,6 @@ N> Enclose the license key in double quotes. Also, ensure that `Syncfusion.Licen {% tabs %} {% highlight c# %} -using NUnit.Framework; -using Syncfusion.Licensing; - public void TestSyncfusionFileFormatsLicense() { var platform = Platform.FileFormats;