Skip to content

Commit d099a44

Browse files
Merge pull request #138 from iron-software/releases/2025.7
[master] Releases/2025.7 Changes
2 parents 5872fe9 + 0e6400d commit d099a44

File tree

8 files changed

+91
-43
lines changed

8 files changed

+91
-43
lines changed

CI/azure-pipelines-build.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ parameters:
1717
displayName: NuGet-Version
1818
type: string
1919
default: '0'
20+
21+
# Required Pipeline Variables for Code Signing:
22+
# - AZURE_KEY_VAULT_URL: Azure Key Vault URL (e.g., https://your-vault.vault.azure.net/)
23+
# - AZURE_KEY_VAULT_APPLICATION_ID: Azure AD Application Client ID
24+
# - AZURE_KEY_VAULT_CLIENT_SECRET: Azure AD Application Client Secret (Pipeline Secret Variable)
25+
# - AZURE_KEY_VAULT_TENANT_ID: Azure AD Tenant ID
26+
# - AZURE_KEY_VAULT_CERTIFICATE_NAME: Name of the certificate in Key Vault
2027
variables:
2128
- group: IronDrawingVersions
2229

@@ -36,6 +43,9 @@ variables:
3643
value: ${{ parameters.inputNuGetVersion }}-prerelease
3744
${{ if eq(parameters.preRelease, false) }}:
3845
value: ${{ parameters.inputNuGetVersion }}
46+
47+
- name: TimestampUrl
48+
value: http://timestamp.digicert.com
3949
# Build Trigger
4050
trigger:
4151
branches:

CI/job_templates/deploy_drawing_libraries.yml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ jobs:
77
- job: DeployDrawingLibraries
88
steps:
99
- checkout: none
10-
- task: DownloadSecureFile@1
11-
displayName: Download IronBarCode Code-Signing Cert
12-
name: DownloadSigningCert
13-
inputs:
14-
secureFile: 'ironcert.pfx'
1510
- task: DownloadPipelineArtifact@2
1611
inputs:
1712
buildType: 'current'
@@ -35,14 +30,28 @@ jobs:
3530
buildProperties: 'version=${{ parameters.NuGetVersion }};IncludeSymbols=true;SymbolPackageFormat=snupkg'
3631
includeSymbols: true
3732
# Sign NuGet Packages
38-
- task: NuGetCommand@2
39-
displayName: Sign IronDrawing NuGet Package
33+
- task: DotNetCoreCLI@2
34+
displayName: INSTALL NuGetKeyVaultSignTool
4035
inputs:
41-
command: 'custom'
42-
arguments: >-
43-
sign $(Build.ArtifactStagingDirectory)\IronSoftware.System.Drawing.${{ parameters.NuGetVersion }}.symbols.nupkg
44-
-CertificatePath $(Agent.TempDirectory)\ironcert.pfx
45-
-Timestamper http://timestamp.digicert.com -NonInteractive -CertificatePassword $(CertificatePassword)
36+
command: custom
37+
custom: tool
38+
arguments: install --global NuGetKeyVaultSignTool
39+
- task: PowerShell@2
40+
displayName: Sign IronDrawing NuGet Package with NuGetKeyVaultSignTool
41+
inputs:
42+
targetType: 'inline'
43+
script: |
44+
NuGetKeyVaultSignTool sign "$(Build.ArtifactStagingDirectory)\IronSoftware.System.Drawing.${{ parameters.NuGetVersion }}.symbols.nupkg" `
45+
--azure-key-vault-url "$(AZURE_KEY_VAULT_URL)" `
46+
--azure-key-vault-client-id "$(AZURE_KEY_VAULT_APPLICATION_ID)" `
47+
--azure-key-vault-client-secret "$(AZURE_KEY_VAULT_CLIENT_SECRET)" `
48+
--azure-key-vault-tenant-id "$(AZURE_KEY_VAULT_TENANT_ID)" `
49+
--azure-key-vault-certificate "$(AZURE_KEY_VAULT_CERTIFICATE_NAME)" `
50+
--timestamp-rfc3161 "$(TimestampUrl)" `
51+
--timestamp-digest sha256 `
52+
--file-digest sha256 `
53+
--verbose
54+
4655
- task: NuGetCommand@2
4756
inputs:
4857
command: 'push'
Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,47 @@
11
steps:
2-
- task: CmdLine@2
2+
# Install .NET 8 SDK for AzureSignTool
3+
- task: UseDotNet@2
4+
displayName: INSTALL .NET 8 SDK
5+
inputs:
6+
packageType: sdk
7+
version: 8.x
8+
- task: DotNetCoreCLI@2
9+
displayName: INSTALL AzureSignTool
10+
inputs:
11+
command: custom
12+
custom: tool
13+
arguments: install --global AzureSignTool
14+
- task: PowerShell@2
315
displayName: 'Sign IronSoftware.Drawing.Common.dll .NET6'
416
inputs:
517
workingDirectory: 'bin\$(Configuration)\netstandard2.0'
6-
script: >-
7-
$(Build.SourcesDirectory)\NuGet\signtool.exe sign
8-
/v /d IronDrawing /f $(Agent.TempDirectory)/ironcert.pfx /p $(CertificatePassword)
9-
/t http://timestamp.digicert.com /fd SHA256 "IronSoftware.Drawing.Common.dll"
10-
- task: CmdLine@2
18+
targetType: 'inline'
19+
script: |
20+
azuresigntool sign `
21+
--azure-key-vault-url "$(AZURE_KEY_VAULT_URL)" `
22+
--azure-key-vault-client-id "$(AZURE_KEY_VAULT_APPLICATION_ID)" `
23+
--azure-key-vault-client-secret "$(AZURE_KEY_VAULT_CLIENT_SECRET)" `
24+
--azure-key-vault-tenant-id "$(AZURE_KEY_VAULT_TENANT_ID)" `
25+
--azure-key-vault-certificate "$(AZURE_KEY_VAULT_CERTIFICATE_NAME)" `
26+
--timestamp-rfc3161 "$(TimestampUrl)" `
27+
--timestamp-digest sha256 `
28+
--file-digest sha256 `
29+
--verbose `
30+
"IronSoftware.Drawing.Common.dll"
31+
- task: PowerShell@2
1132
displayName: 'Sign IronSoftware.Drawing.Common.dll .NET6'
1233
inputs:
1334
workingDirectory: 'bin\$(Configuration)\net60'
14-
script: >-
15-
$(Build.SourcesDirectory)\NuGet\signtool.exe sign
16-
/v /d IronDrawing /f $(Agent.TempDirectory)/ironcert.pfx /p $(CertificatePassword)
17-
/t http://timestamp.digicert.com /fd SHA256 "IronSoftware.Drawing.Common.dll"
35+
targetType: 'inline'
36+
script: |
37+
azuresigntool sign `
38+
--azure-key-vault-url "$(AZURE_KEY_VAULT_URL)" `
39+
--azure-key-vault-client-id "$(AZURE_KEY_VAULT_APPLICATION_ID)" `
40+
--azure-key-vault-client-secret "$(AZURE_KEY_VAULT_CLIENT_SECRET)" `
41+
--azure-key-vault-tenant-id "$(AZURE_KEY_VAULT_TENANT_ID)" `
42+
--azure-key-vault-certificate "$(AZURE_KEY_VAULT_CERTIFICATE_NAME)" `
43+
--timestamp-rfc3161 "$(TimestampUrl)" `
44+
--timestamp-digest sha256 `
45+
--file-digest sha256 `
46+
--verbose `
47+
"IronSoftware.Drawing.Common.dll"

IronSoftware.Drawing/IronSoftware.Drawing.Common/AnyBitmap.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -469,28 +469,28 @@ public static AnyBitmap FromSpan(ReadOnlySpan<byte> span)
469469
}
470470

471471
/// <summary>
472-
/// Create a new Bitmap from a a Byte Span.
472+
/// Create a new Bitmap from a a byte span.
473473
/// </summary>
474-
/// <param name="span">A Byte Span of image data in any common format.</param>
474+
/// <param name="span">A byte span of image data in any common format.</param>
475475
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
476476
public static AnyBitmap FromSpan(ReadOnlySpan<byte> span, bool preserveOriginalFormat)
477477
{
478478
return new AnyBitmap(span, preserveOriginalFormat);
479479
}
480480

481481
/// <summary>
482-
/// Create a new Bitmap from a a Byte Array.
482+
/// Create a new Bitmap from a a byte array.
483483
/// </summary>
484-
/// <param name="bytes">A ByteArray of image data in any common format.</param>
484+
/// <param name="bytes">A byte array of image data in any common format.</param>
485485
public static AnyBitmap FromBytes(byte[] bytes)
486486
{
487487
return new AnyBitmap(bytes, true);
488488
}
489489

490490
/// <summary>
491-
/// Create a new Bitmap from a a Byte Array.
491+
/// Create a new Bitmap from a a byte array.
492492
/// </summary>
493-
/// <param name="bytes">A ByteArray of image data in any common format.</param>
493+
/// <param name="bytes">A byte array of image data in any common format.</param>
494494
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
495495
public static AnyBitmap FromBytes(byte[] bytes, bool preserveOriginalFormat)
496496
{
@@ -555,7 +555,7 @@ public AnyBitmap(ReadOnlySpan<byte> span)
555555
}
556556

557557
/// <summary>
558-
/// Construct a new Bitmap from binary data (byte span).
558+
/// Construct a new Bitmap out of binary data with a byte span.
559559
/// </summary>
560560
/// <param name="span">A byte span of image data in any common format.</param>
561561
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
@@ -577,9 +577,9 @@ public AnyBitmap(byte[] bytes)
577577
}
578578

579579
/// <summary>
580-
/// Construct a new Bitmap from binary data (bytes).
580+
/// Construct a new Bitmap out of binary data with a byte array.
581581
/// </summary>
582-
/// <param name="bytes">A ByteArray of image data in any common format.</param>
582+
/// <param name="bytes">A byte array of image data in any common format.</param>
583583
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
584584
/// <seealso cref="FromBytes(byte[], bool)"/>
585585
/// <seealso cref="AnyBitmap"/>
@@ -670,7 +670,7 @@ public AnyBitmap(string file, bool preserveOriginalFormat)
670670
}
671671

672672
/// <summary>
673-
/// Construct a new Bitmap from a Uri
673+
/// Construct a new Bitmap from a Uri.
674674
/// </summary>
675675
/// <param name="uri">The uri of the image.</param>
676676
/// <seealso cref="FromUriAsync(Uri)"/>
@@ -689,7 +689,7 @@ public AnyBitmap(Uri uri)
689689
}
690690

691691
/// <summary>
692-
/// Construct a new Bitmap from a Uri
692+
/// Construct a new Bitmap from a Uri.
693693
/// </summary>
694694
/// <param name="uri">The uri of the image.</param>
695695
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
@@ -709,7 +709,7 @@ public AnyBitmap(Uri uri, bool preserveOriginalFormat)
709709
}
710710

711711
/// <summary>
712-
/// Construct a new Bitmap from width and height
712+
/// Construct a new Bitmap from width and height.
713713
/// </summary>
714714
/// <param name="width">Width of new AnyBitmap</param>
715715
/// <param name="height">Height of new AnyBitmap</param>
@@ -757,7 +757,7 @@ public static AnyBitmap FromFile(string file, bool preserveOriginalFormat)
757757
}
758758

759759
/// <summary>
760-
/// Construct a new Bitmap from a Uri
760+
/// Construct a new Bitmap from a Uri.
761761
/// </summary>
762762
/// <param name="uri">The uri of the image.</param>
763763
/// <returns></returns>
@@ -778,7 +778,7 @@ public static async Task<AnyBitmap> FromUriAsync(Uri uri)
778778
}
779779

780780
/// <summary>
781-
/// Construct a new Bitmap from a Uri
781+
/// Construct a new Bitmap from a Uri.
782782
/// </summary>
783783
/// <param name="uri">The uri of the image.</param>
784784
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>
@@ -823,7 +823,7 @@ public static AnyBitmap FromUri(Uri uri)
823823
}
824824

825825
/// <summary>
826-
/// Construct a new Bitmap from a Uri
826+
/// Construct a new Bitmap from a Uri.
827827
/// </summary>
828828
/// <param name="uri">The uri of the image.</param>
829829
/// <param name="preserveOriginalFormat">Determine whether to load <see cref="SixLabors.ImageSharp.Image"/> as its original pixel format or Rgba32.</param>

NuGet/IronSoftware.Drawing.nuspec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Key library features include:
3030
IronSoftware.Drawing can be used within C#, VB.NET, F#, ASP.NET projects, MVC, Web Services, Console &amp; Desktop Applications.
3131

3232
Supports:
33+
* .NET 9
3334
* .NET 8
3435
* .NET 7
3536
* .NET 6
@@ -39,9 +40,7 @@ Supports:
3940

4041
For general support and technical inquiries, please email us at: [email protected]</description>
4142
<summary>IronSoftware.System.Drawing is an open-source solution for .NET developers to replace System.Drawing.Common with a universal and flexible library.</summary>
42-
<releaseNotes>- Updates internal dependencies.
43-
- Fixes the issue of some images are auto-rotated when loading as AnyBitmap.
44-
- Adds an option called preserveOriginalFormat to download input image as Rgba32 via AnyBitmap.</releaseNotes>
43+
<releaseNotes>- Updates internal dependencies.</releaseNotes>
4544
<copyright>Copyright © Iron Software 2022-2025</copyright>
4645
<tags>Images, Bitmap, SkiaSharp, SixLabors, BitMiracle, Maui, SVG, TIFF, TIF, GIF, JPEG, PNG, Color, Rectangle, Drawing, C#, VB.NET, ASPX, create, render, generate, standard, netstandard2.0, core, netcore</tags>
4746
<repository type="git" url="https://github.com/iron-software/IronSoftware.Drawing.Common" commit="$commit$" />

NuGet/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
If you would like to contribute to this open-source project, please visit the public GitHub and open a branch [here](https://github.com/iron-software/IronSoftware.System.Drawing/).
88

99
## Cross platform support compatibility with:
10-
- .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
10+
- .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
1111
- Windows, macOS, Linux, Docker, Azure, and AWS
1212

1313
## IronSoftware.Drawing Features:

NuGet/README.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ IronSoftware.Drawing is an free and open-source library originally developed by
33
Cross Platform Compatibility
44
========================
55
* C#, F#, and VB.NET
6-
* .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
6+
* .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
77
* Console, Web, and Desktop Apps
88
* Windows, macOs, Linux, Docker, Azure, and AWS
99
* Microsoft Visual Studio or Jetbrains ReSharper & Rider

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
| `SkiaSharp.SKPointI` ||| | |
8383

8484
### IronSoftware.Drawing has cross platform support compatibility with:
85-
- .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
85+
- .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
8686
- Windows, macOS, Linux, Docker, Azure, and AWS
8787

8888
## Using IronSoftware.Drawing

0 commit comments

Comments
 (0)