Skip to content

Commit 27ecfcf

Browse files
committed
Merged develop7 and develop8. Moved System.Security.Cryptography.Xml into central package management
2 parents 9acc6b5 + f0e1e52 commit 27ecfcf

File tree

10 files changed

+79
-109
lines changed

10 files changed

+79
-109
lines changed

.github/workflows/Build-Release.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Setup .NET
1919
uses: actions/setup-dotnet@v4
2020
with:
21-
dotnet-version: '8.0.x'
21+
dotnet-version: '9.0.x'
2222
- name: Restore dependencies
2323
run: dotnet restore ./src/EPPlus.sln
2424
- name: Build
@@ -38,27 +38,24 @@ jobs:
3838
creds: '{"clientId":"${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }}","clientSecret":"${{ secrets.EPPLUS_CODE_SIGNING_SECRET }}","subscriptionId":"${{ secrets.EPPLUS_CODE_SIGNING_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }}"}'
3939
- name: Sign EPPlus.dll with AzureSignTool
4040
run: |
41+
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net9.0\EPPlus.dll"
4142
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net8.0\EPPlus.dll"
42-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net7.0\EPPlus.dll"
43-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net6.0\EPPlus.dll"
4443
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\netstandard2.1\EPPlus.dll"
4544
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\netstandard2.0\EPPlus.dll"
4645
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net462\EPPlus.dll"
4746
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus\bin\Release\net35\EPPlus.dll"
4847
- name: Sign EPPlus.Interface.dll with AzureSignTool
4948
run: |
49+
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net9.0\EPPlus.Interfaces.dll"
5050
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net8.0\EPPlus.Interfaces.dll"
51-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net7.0\EPPlus.Interfaces.dll"
52-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net6.0\EPPlus.Interfaces.dll"
5351
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\netstandard2.1\EPPlus.Interfaces.dll"
5452
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\netstandard2.0\EPPlus.Interfaces.dll"
5553
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net462\EPPlus.Interfaces.dll"
5654
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.Interfaces\bin\Release\net35\EPPlus.Interfaces.dll"
5755
- name: Sign EPPlus.System.Drawing.dll with AzureSignTool
5856
run: |
57+
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\net9.0\EPPlus.System.Drawing.dll"
5958
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\net8.0\EPPlus.System.Drawing.dll"
60-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\net7.0\EPPlus.System.Drawing.dll"
61-
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\net6.0\EPPlus.System.Drawing.dll"
6259
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\netstandard2.1\EPPlus.System.Drawing.dll"
6360
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\netstandard2.0\EPPlus.System.Drawing.dll"
6461
azuresigntool.exe sign -kvu ${{ secrets.EPPLUS_CODE_SIGNING_KEY_VAULT_URL}} -kvi ${{ secrets.EPPLUS_CODE_SIGNING_APPLICATION_ID }} -kvt ${{ secrets.EPPLUS_CODE_SIGNING_TENENT_ID }} -kvs ${{ secrets.EPPLUS_CODE_SIGNING_SECRET }} -kvc ${{ secrets.EPPLUS_CODE_SIGNING_CERTIFICATE_NAME }} -tr http://timestamp.globalsign.com/tsa/advanced -td sha256 ".\src\EPPlus.System.Drawing\bin\Release\net462\EPPlus.System.Drawing.dll"

appveyor7.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
version: 7.5.3.{build}
1+
version: 7.6.0.{build}
22
branches:
33
only:
44
- develop7
55
configuration: release
66
image: Visual Studio 2022
77
init:
88
- ps: >-
9-
Update-AppveyorBuild -Version "7.5.3.$env:appveyor_build_number-$(Get-Date -format yyyyMMdd)-$env:appveyor_repo_branch"
9+
Update-AppveyorBuild -Version "7.6.0.$env:appveyor_build_number-$(Get-Date -format yyyyMMdd)-$env:appveyor_repo_branch"
1010
11-
Write-Host "7.5.3.$env:appveyor_build_number-$(Get-Date -format yyyyMMdd)-$env:appveyor_repo_branch"
11+
Write-Host "7.6.0.$env:appveyor_build_number-$(Get-Date -format yyyyMMdd)-$env:appveyor_repo_branch"
1212
dotnet_csproj:
1313
patch: true
1414
file: '**\*.csproj'
1515
version: '{version}'
16-
assembly_version: 7.5.3.{build}
17-
file_version: 7.5.3.{build}
16+
assembly_version: 7.6.0.{build}
17+
file_version: 7.6.0.{build}
1818
nuget:
1919
project_feed: true
2020
before_build:

docs/articles/breakingchanges.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,16 @@ Misspelled property `ExcelIgnoreError.CalculatedColumm` has been renamed `Calcul
143143
### Breaking change from EPPlus 7.5.2
144144
Renaming worksheet's will now change the formula correctly to include single quotes for the worksheet name if necessary.
145145

146+
### Breaking changes from EPPlus 7.6.0
147+
* Altering the worksheets collection when iterating it using IEnumerable, now throws an InvalidOperationException.
148+
146149
### Breaking changes from EPPlus 8.0
147150
* Set ExcelPackageSettings.ApplyFiltersOnSave default value to false.
148151
* RichText now returns font name, size and font family from cell style if not set.
149-
* Fixed spelling error in ExcelDrawingGradientFillLinearSettings. `public double Angel` is now `public double Angle`
152+
* Fixed spelling error in ExcelDrawingGradientFillLinearSettings. `public double Angel` is now `public double Angle`
153+
* Removed reference to EPPlus.System.Drawing for primary image and text handlers. The generic handler is now used for all target frameworks.
154+
You can still use these handlers by referencing the EPPlus.System.Drawing handlers nuget package and use the 'SystemDrawingTextMeasurer' or 'SystemDrawingImageHandler' classes as primary handler.
155+
Also see https://github.com/EPPlusSoftware/EPPlus/wiki/Autofit-columns
156+
#### Removed Methods & Properties
157+
* ExcelVbaReferenceControl.LibIdExternal, please use LibIdExtended instead.
158+

docs/articles/fixedissues.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66
* Override borders in Adjacent cells in BorderAround method.
77

88
# Features / Fixed issues - EPPlus 7
9+
## Version 7.6.0
10+
* Added target framework .NET 9.
11+
* Removed out of support frameworks, .NET 6 and .NET 7.
12+
* Fixed an issue handling formulas when sorting a range.
13+
* Insert row in table caused corrupt workbook.
14+
* A workbook could lose styles if the ExcelPackage.FullPrecision property was set.
15+
* When copying a worksheet, drawings would be resized after inserting rows. This was caused by drawings being copied before styles and therefore drawings would not be aware of any styles.
16+
* Set Active Tab did not work correctly, if 'CompatibilitySettings.IsWorksheet1Based' was set to true.
17+
* Fixed "Part already exist" error when copying images between workbooks that already have images.
18+
* Fixed another issue when copying ExcelPicture’s between workbooks.
19+
* Iteration of worksheets indexed incorrectly in rare cases. EPPlus now throws an InvalidOperationException, if the collection has been altered under an enumerable operation.
20+
921
## Version 7.5.3
1022
* Improved COUNTIF performance, if full column addresses was used.
1123
* If having a workbook with no reference to a font in the styles.xml, caused an corrupt workbook.

src/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<PackageVersion Include="System.Drawing.Common" Version="9.0.1" />
1010
<PackageVersion Include="System.Formats.Asn1" Version="9.0.1" />
1111
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="9.0.1" />
12+
<PackageVersion Include="System.Security.Cryptography.Xml" Version="9.0.1" />
1213
<PackageVersion Include="System.Text.Encoding.CodePages" Version="9.0.1" />
1314
<PackageVersion Include="System.Text.Json" Version="9.0.1" />
1415
</ItemGroup>
Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net462;net35</TargetFrameworks>
4-
<AssemblyVersion>7.5.0.0</AssemblyVersion>
5-
<FileVersion>7.5.0.0</FileVersion>
6-
<Version>7.5.0</Version>
3+
<TargetFrameworks>net9.0;net8.0;netstandard2.1;netstandard2.0;net462;net35</TargetFrameworks>
4+
<AssemblyVersion>8.0.0.0</AssemblyVersion>
5+
<FileVersion>8.0.0.0</FileVersion>
6+
<Version>8.0.0</Version>
77
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
88
<PackageLicenseFile>license.md</PackageLicenseFile>
99
<RepositoryType>git</RepositoryType>
@@ -29,28 +29,4 @@
2929
<PackagePath></PackagePath>
3030
</None>
3131
</ItemGroup>
32-
33-
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
34-
<PackageReference Include="System.Security.Cryptography.Xml" />
35-
</ItemGroup>
36-
37-
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
38-
<PackageReference Include="System.Security.Cryptography.Xml" />
39-
</ItemGroup>
40-
41-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
42-
<PackageReference Include="System.Security.Cryptography.Xml" />
43-
</ItemGroup>
44-
45-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
46-
<PackageReference Include="System.Security.Cryptography.Xml" />
47-
</ItemGroup>
48-
49-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
50-
<PackageReference Include="System.Security.Cryptography.Xml" />
51-
</ItemGroup>
52-
53-
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
54-
<PackageReference Include="System.Security.Cryptography.Xml" />
55-
</ItemGroup>
5632
</Project>
Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net462;net35</TargetFrameworks>
5-
<AssemblyVersion>7.5.0.0</AssemblyVersion>
6-
<FileVersion>7.5.0.0</FileVersion>
7-
<Version>7.5.0</Version>
4+
<TargetFrameworks>net9.0;net8.0;netstandard2.1;netstandard2.0;net462;net35</TargetFrameworks>
5+
<AssemblyVersion>8.0.0.0</AssemblyVersion>
6+
<FileVersion>8.0.0.0</FileVersion>
7+
<Version>8.0.0</Version>
88
<SignAssembly>true</SignAssembly>
99
<PackageLicenseFile>license.md</PackageLicenseFile>
1010
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
@@ -37,28 +37,4 @@
3737
<PackagePath></PackagePath>
3838
</None>
3939
</ItemGroup>
40-
41-
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
42-
<PackageReference Include="System.Security.Cryptography.Xml" />
43-
</ItemGroup>
44-
45-
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
46-
<PackageReference Include="System.Security.Cryptography.Xml" />
47-
</ItemGroup>
48-
49-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
50-
<PackageReference Include="System.Security.Cryptography.Xml" />
51-
</ItemGroup>
52-
53-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
54-
<PackageReference Include="System.Security.Cryptography.Xml" />
55-
</ItemGroup>
56-
57-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
58-
<PackageReference Include="System.Security.Cryptography.Xml" />
59-
</ItemGroup>
60-
61-
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
62-
<PackageReference Include="System.Security.Cryptography.Xml" />
63-
</ItemGroup>
6440
</Project>

src/EPPlus/Core/ChangableDictionary.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ internal void InsertAndShift(int fromPosition, int add)
5959
{
6060
_index[0][i] += add;
6161
}
62+
Version++;
6263
}
63-
64-
internal int Count { get { return _count; } }
6564

65+
internal int Count { get { return _count; } }
66+
/// <summary>
67+
/// To keep track of if the collection has changed. Must be increased on each change operation.
68+
/// </summary>
69+
internal int Version { get; private set; }
6670
public void Add(int key, T value)
6771
{
6872
var pos = Array.BinarySearch(_index[0], 0, _count, key);
@@ -85,6 +89,7 @@ public void Add(int key, T value)
8589
_index[0][pos] = key;
8690
_index[1][pos] = _items.Count;
8791
_items.Add(value);
92+
Version++;
8893
}
8994

9095
internal void Move(int fromPosition, int toPosition, bool before)
@@ -106,6 +111,7 @@ internal void Move(int fromPosition, int toPosition, bool before)
106111
}
107112
_index[0][insertPos] = insertPos;
108113
_index[1][insertPos] = listItem;
114+
Version++;
109115
}
110116

111117
public void Clear()
@@ -114,6 +120,7 @@ public void Clear()
114120
_index[0] = new int[_defaultSize];
115121
_index[1] = new int[_defaultSize];
116122
_items = new List<T>();
123+
Version=0;
117124
}
118125

119126
public bool ContainsKey(int key)
@@ -130,7 +137,6 @@ public bool RemoveAndShift(int key)
130137
{
131138
return RemoveAndShift(key, true);
132139
}
133-
134140
private bool RemoveAndShift(int key, bool dispose)
135141
{
136142
var pos = Array.BinarySearch(_index[0], 0, _count, key);
@@ -152,6 +158,7 @@ private bool RemoveAndShift(int key, bool dispose)
152158
{
153159
_index[0][i]--;
154160
}
161+
Version++;
155162
return true;
156163
}
157164
return false;
@@ -179,15 +186,21 @@ IEnumerator IEnumerable.GetEnumerator()
179186
internal class ChangeableDictionaryEnumerator<T> : IEnumerator<T>
180187
{
181188
int _index=-1;
189+
int _initVersion;
182190
ChangeableDictionary<T> _ts;
183191
public ChangeableDictionaryEnumerator(ChangeableDictionary<T> ts)
184192
{
185193
_ts = ts;
194+
_initVersion = ts.Version;
186195
}
187196
public T Current
188197
{
189198
get
190199
{
200+
if (_ts.Version != _initVersion)
201+
{
202+
throw new InvalidOperationException("Collection was modified; enumeration operation can not execute.");
203+
}
191204
if (_index >= _ts._count)
192205
{
193206
return default(T);

0 commit comments

Comments
 (0)