You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2019/07/13 17:52:02 UTC
[lucenenet] branch master updated (c70c0f4 -> 5fbf245)
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git.
from c70c0f4 Added NUnit.Extension.TeamCityEventListener NuGet package to test projects.
new 0c4cba5 Upgraded to latest version of NUnit3TestAdapter, 3.13.0 from 3.8.0
new a4e796d Lucene.Net.Analysis.Analyzer: Implemented dispose pattern
new 9ca60db Lucene.Net.Benchmark.ByTask.Tasks.PerfTask: added IDisposable so the class can be used with a using block (it already had Dispose())
new 9f85b4f Lucene.Net.Analysis.ICU.Collation: Added Dispose() to each class that clones its own ICU Collator, as it contains unmanaged disposable resources. Except for ICUCollationKeyFilter because IncrementToken() is called after Dispose(). See LUCENENET-611.
new de6d153 Upgraded NUnit package dependency to 3.9.0
new ca726f6 build.ps1: Added function to summarize the test results on the console
new 5fbf245 Lucene.Net.Tests.Replicator: Had a test hang on a build.bat run, but unclear which test caused the hang and unable to easily repeat. Adding the Timeout attribute to the assembly so in the event of another hang, we will get a failed test.
The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
build/Dependencies.props | 4 +-
build/build.ps1 | 112 +++++++++++++++++++++
.../Collation/ICUCollationDocValuesField.cs | 9 +-
.../Collation/ICUCollationKeyFilter.cs | 3 +
.../Collation/ICUCollationKeyFilterFactory.cs | 17 +++-
.../ICUCollatedTermAttributeImpl.cs | 13 ++-
src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs | 4 +-
.../Properties/AssemblyInfo.cs | 6 ++
src/Lucene.Net/Analysis/Analyzer.cs | 23 ++++-
9 files changed, 176 insertions(+), 15 deletions(-)
[lucenenet] 03/07: Lucene.Net.Benchmark.ByTask.Tasks.PerfTask:
added IDisposable so the class can be used with a using block (it already
had Dispose())
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 9ca60db033293d13cf01f80d7f5e74267c586794
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jul 13 09:21:12 2019 +0700
Lucene.Net.Benchmark.ByTask.Tasks.PerfTask: added IDisposable so the class can be used with a using block (it already had Dispose())
---
src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs b/src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs
index bc4970c..b2c9043 100644
--- a/src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs
+++ b/src/Lucene.Net.Benchmark/ByTask/Tasks/PerfTask.cs
@@ -58,9 +58,9 @@ namespace Lucene.Net.Benchmarks.ByTask.Tasks
/// </description></item>
/// </list>
/// </remarks>
- public abstract class PerfTask
+ public abstract class PerfTask : IDisposable
#if FEATURE_CLONEABLE
- : System.ICloneable
+ , System.ICloneable
#endif
{
internal static readonly int DEFAULT_LOG_STEP = 1000;
[lucenenet] 01/07: Upgraded to latest version of NUnit3TestAdapter,
3.13.0 from 3.8.0
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 0c4cba56352880628127eee368412210294458f7
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Fri Jul 12 18:22:38 2019 +0700
Upgraded to latest version of NUnit3TestAdapter, 3.13.0 from 3.8.0
---
build/Dependencies.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build/Dependencies.props b/build/Dependencies.props
index f7be6c1..cf32c6b 100644
--- a/build/Dependencies.props
+++ b/build/Dependencies.props
@@ -11,7 +11,7 @@
<NETStandardLibrary16PackageVersion>1.6.1</NETStandardLibrary16PackageVersion>
<NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
<NewtonsoftJsonPackageVersion>10.0.3</NewtonsoftJsonPackageVersion>
- <NUnit3TestAdapterPackageVersion>3.8.0</NUnit3TestAdapterPackageVersion>
+ <NUnit3TestAdapterPackageVersion>3.13.0</NUnit3TestAdapterPackageVersion>
<NUnitPackageVersion>3.8.1</NUnitPackageVersion>
<NUnitExtensionTeamCityEventListenerPackageVersion>1.0.6</NUnitExtensionTeamCityEventListenerPackageVersion>
<SharpZipLibPackageVersion>1.1.0</SharpZipLibPackageVersion>
[lucenenet] 07/07: Lucene.Net.Tests.Replicator: Had a test hang on
a build.bat run,
but unclear which test caused the hang and unable to easily repeat. Adding
the Timeout attribute to the assembly so in the event of another hang,
we will get a failed test.
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 5fbf24555cda49b4db9c442636c6bf7fc9b28d17
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sun Jul 14 00:50:14 2019 +0700
Lucene.Net.Tests.Replicator: Had a test hang on a build.bat run, but unclear which test caused the hang and unable to easily repeat. Adding the Timeout attribute to the assembly so in the event of another hang, we will get a failed test.
---
src/Lucene.Net.Tests.Replicator/Properties/AssemblyInfo.cs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/Lucene.Net.Tests.Replicator/Properties/AssemblyInfo.cs b/src/Lucene.Net.Tests.Replicator/Properties/AssemblyInfo.cs
index 4de1f37..8c77c6b 100644
--- a/src/Lucene.Net.Tests.Replicator/Properties/AssemblyInfo.cs
+++ b/src/Lucene.Net.Tests.Replicator/Properties/AssemblyInfo.cs
@@ -35,3 +35,9 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("418e9d8e-2369-4b52-8d2f-5a987213999b")]
+
+// LUCENENET TODO: 2019-07-14 - Had a hanging test in Lucene.Net.Tests.Replicator (not sure which one),
+// but unable to repeat. Adding this timeout (with at least 10x the time it usually takes
+// to run all of these tests) to ensure if we get a hang again, the hanging test will fail
+// so we know which test to investigate.
+[assembly: NUnit.Framework.Timeout(120000)]
[lucenenet] 02/07: Lucene.Net.Analysis.Analyzer: Implemented
dispose pattern
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit a4e796d98ed7cd3f1853a9b717e42e6986d5b3e7
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jul 13 00:14:45 2019 +0700
Lucene.Net.Analysis.Analyzer: Implemented dispose pattern
---
src/Lucene.Net/Analysis/Analyzer.cs | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/Lucene.Net/Analysis/Analyzer.cs b/src/Lucene.Net/Analysis/Analyzer.cs
index f0c2c9d..1120fd2 100644
--- a/src/Lucene.Net/Analysis/Analyzer.cs
+++ b/src/Lucene.Net/Analysis/Analyzer.cs
@@ -365,13 +365,26 @@ namespace Lucene.Net.Analysis
}
/// <summary>
- /// Frees persistent resources used by this <see cref="Analyzer"/> </summary>
- public virtual void Dispose()
+ /// Frees persistent resources used by this <see cref="Analyzer"/>
+ /// </summary>
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Frees persistent resources used by this <see cref="Analyzer"/>
+ /// </summary>
+ protected virtual void Dispose(bool disposing)
{
- if (storedValue != null)
+ if (disposing)
{
- storedValue.Dispose();
- storedValue = null;
+ if (storedValue != null)
+ {
+ storedValue.Dispose();
+ storedValue = null;
+ }
}
}
[lucenenet] 04/07: Lucene.Net.Analysis.ICU.Collation: Added
Dispose() to each class that clones its own ICU Collator,
as it contains unmanaged disposable resources. Except for
ICUCollationKeyFilter because IncrementToken() is called after Dispose().
See LUCENENET-611.
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 9f85b4fc2cc0d9bf27432e1f3f56c4ffc21bac0e
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jul 13 09:33:38 2019 +0700
Lucene.Net.Analysis.ICU.Collation: Added Dispose() to each class that clones its own ICU Collator, as it contains unmanaged disposable resources. Except for ICUCollationKeyFilter because IncrementToken() is called after Dispose(). See LUCENENET-611.
---
.../Collation/ICUCollationDocValuesField.cs | 9 ++++++++-
.../Collation/ICUCollationKeyFilter.cs | 3 +++
.../Collation/ICUCollationKeyFilterFactory.cs | 17 ++++++++++++++++-
.../TokenAttributes/ICUCollatedTermAttributeImpl.cs | 13 +++++++++----
4 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationDocValuesField.cs b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationDocValuesField.cs
index 6b7e11c..70f8850 100644
--- a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationDocValuesField.cs
+++ b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationDocValuesField.cs
@@ -2,6 +2,7 @@
using Lucene.Net.Documents;
using Lucene.Net.Support;
using Lucene.Net.Util;
+using System;
#if NETSTANDARD
using SortKey = Icu.SortKey;
#else
@@ -39,7 +40,7 @@ namespace Lucene.Net.Collation
/// and use less memory than FieldCache.
/// </remarks>
[ExceptionToClassNameConvention]
- public sealed class ICUCollationDocValuesField : Field
+ public sealed class ICUCollationDocValuesField : Field, IDisposable
{
private readonly string name;
private readonly Collator collator;
@@ -80,5 +81,11 @@ namespace Lucene.Net.Collation
bytes.Offset = 0;
bytes.Length = key.KeyData.Length;
}
+
+ // LUCENENET specific - need to dispose collator
+ public void Dispose()
+ {
+ this.collator.Dispose();
+ }
}
}
diff --git a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilter.cs b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilter.cs
index afc92f7..1fd0b94 100644
--- a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilter.cs
+++ b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilter.cs
@@ -103,5 +103,8 @@ namespace Lucene.Net.Collation
return false;
}
}
+
+ // LUCENENET-611 - Dispose is being called and then IncrementToken() is called afterward, so we cannot dispose our
+ // disposable collator instance here. Need to fix the bug, then override Dispose(bool).
}
}
diff --git a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilterFactory.cs b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilterFactory.cs
index 1609e14..040717e 100644
--- a/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilterFactory.cs
+++ b/src/Lucene.Net.Analysis.ICU/Collation/ICUCollationKeyFilterFactory.cs
@@ -64,7 +64,7 @@ namespace Lucene.Net.Collation
/// LUCENENET NOTE: variableTop is not supported by icu.net
[Obsolete("Use ICUCollationKeyAnalyzer instead.")]
[ExceptionToClassNameConvention]
- public class ICUCollationKeyFilterFactory : TokenFilterFactory, IMultiTermAwareComponent, IResourceLoaderAware
+ public class ICUCollationKeyFilterFactory : TokenFilterFactory, IMultiTermAwareComponent, IResourceLoaderAware, IDisposable
{
private Collator collator;
private readonly string custom;
@@ -258,5 +258,20 @@ namespace Lucene.Net.Collation
}
return sb.ToString();
}
+
+ // LUCENENET specific - must dispose collator
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ collator?.Dispose();
+ }
+ }
}
}
diff --git a/src/Lucene.Net.Analysis.ICU/Collation/TokenAttributes/ICUCollatedTermAttributeImpl.cs b/src/Lucene.Net.Analysis.ICU/Collation/TokenAttributes/ICUCollatedTermAttributeImpl.cs
index 1dc44f8..6129d8c 100644
--- a/src/Lucene.Net.Analysis.ICU/Collation/TokenAttributes/ICUCollatedTermAttributeImpl.cs
+++ b/src/Lucene.Net.Analysis.ICU/Collation/TokenAttributes/ICUCollatedTermAttributeImpl.cs
@@ -2,6 +2,7 @@
using Lucene.Net.Analysis.TokenAttributes;
using Lucene.Net.Support;
using Lucene.Net.Util;
+using System;
#if NETSTANDARD
using SortKey = Icu.SortKey;
#else
@@ -32,11 +33,9 @@ namespace Lucene.Net.Collation.TokenAttributes
/// text as a binary Unicode collation key instead of as UTF-8 bytes.
/// </summary>
[ExceptionToClassNameConvention]
- public class ICUCollatedTermAttribute : CharTermAttribute
+ public sealed class ICUCollatedTermAttribute : CharTermAttribute, IDisposable
{
private readonly Collator collator;
- //private readonly RawCollationKey key = new RawCollationKey();
- private SortKey key;
/// <summary>
/// Create a new ICUCollatedTermAttribute
@@ -51,10 +50,16 @@ namespace Lucene.Net.Collation.TokenAttributes
public override void FillBytesRef()
{
BytesRef bytes = this.BytesRef;
- key = collator.GetSortKey(ToString());
+ SortKey key = collator.GetSortKey(ToString());
bytes.Bytes = key.KeyData;
bytes.Offset = 0;
bytes.Length = key.KeyData.Length;
}
+
+ // LUCENENET specific - must dispose collator
+ public void Dispose()
+ {
+ collator.Dispose();
+ }
}
}
[lucenenet] 06/07: build.ps1: Added function to summarize the test
results on the console
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit ca726f6a7b56a1a8e30fd16ccc30e46affb7dbf9
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jul 13 14:54:40 2019 +0700
build.ps1: Added function to summarize the test results on the console
---
build/build.ps1 | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 112 insertions(+)
diff --git a/build/build.ps1 b/build/build.ps1
index f68aaeb..8b1b652 100644
--- a/build/build.ps1
+++ b/build/build.ps1
@@ -236,6 +236,8 @@ task Test -depends InstallSDK, UpdateLocalSDKVersion, Restore -description "This
}
}
}
+
+ Summarize-Test-Results
}
function Get-Package-Version() {
@@ -424,6 +426,116 @@ endlocal
[System.IO.File]::WriteAllLines($file, $buildBat, $Utf8EncodingNoBom)
}
+function New-CountersObject ([string]$project, [string]$outcome, [int]$total, [int]$executed, [int]$passed, [int]$failed, [int]$warning, [int]$inconclusive) {
+ $counters = New-Object -TypeName PSObject
+ $fields = [ordered]@{Project=$project;Outcome=$outcome;Total=$total;Executed=$executed;Passed=$passed;Failed=$failed;Warning=$warning;Inconclusive=$inconclusive}
+ $counters | Add-Member -NotePropertyMembers $fields -TypeName Counters
+ return $counters
+}
+
+function Summarize-Test-Results() {
+ Write-Host "frameworks_to_test: $frameworks_to_test" -ForegroundColor Gray
+ $frameworksToTest = $frameworks_to_test -split "\s*?,\s*?"
+
+ foreach ($framework in $frameworksToTest) {
+ pushd $base_directory
+ $testReports = Get-ChildItem -Path "$test_results_directory/$framework" -Recurse -File -Filter "*.trx" | ForEach-Object {
+ $_.FullName
+ }
+ popd
+
+ [int]$totalCountForFramework = 0
+ [int]$executedCountForFramework = 0
+ [int]$passedCountForFramework = 0
+ [int]$failedCountForFramework = 0
+ [int]$warningCountForFramework = 0
+ [int]$inconclusiveCountForFramework = 0
+ [string]$outcomeForFramework = 'Completed'
+
+ # HEADER FOR FRAMEWORK
+
+ Write-Host ""
+ Write-Host ""
+ Write-Host "************************************************************************************************************" -ForegroundColor Yellow
+ Write-Host "* *" -ForegroundColor Yellow
+ Write-Host "* Test Summary For $framework" -ForegroundColor Yellow
+ Write-Host "* *" -ForegroundColor Yellow
+ Write-Host "************************************************************************************************************" -ForegroundColor Yellow
+
+ foreach ($testReport in $testReports) {
+ $testName = [System.IO.Path]::GetFileName([System.IO.Path]::GetDirectoryName($testReport))
+ $reader = [System.Xml.XmlReader]::Create($testReport)
+ try {
+ while ($reader.Read()) {
+
+ if ($reader.NodeType -eq [System.Xml.XmlNodeType]::Element -and $reader.Name -eq 'ResultSummary') {
+ $outcome = $reader.GetAttribute('outcome')
+ if ($outcomeForFramework -eq 'Completed') {
+ $outcomeForFramework = $outcome
+ }
+ }
+ if ($reader.NodeType -eq [System.Xml.XmlNodeType]::Element -and $reader.Name -eq 'Counters') {
+ $counters = New-CountersObject `
+ -Project $testName `
+ -Outcome $outcome `
+ -Total $reader.GetAttribute('total') `
+ -Executed $reader.GetAttribute('executed') `
+ -Passed $reader.GetAttribute('passed') `
+ -Failed $reader.GetAttribute('failed') `
+ -Warning $reader.GetAttribute('warning') `
+ -Inconclusive $reader.GetAttribute('inconclusive')
+
+ $totalCountForFramework += $counters.Total
+ $executedCountForFramework += $counters.Executed
+ $passedCountForFramework += $counters.Passed
+ $failedCountForFramework += $counters.Failed
+ $warningCountForFramework += $counters.Warning
+ $inconclusiveCountForFramework += $counters.Inconclusive
+ $skippedCountForFramework += $counters.Skipped
+
+ $format = @{Expression={$_.Project};Label='Project';Width=35},
+ @{Expression={$_.Outcome};Label='Outcome';Width=9},
+ @{Expression={$_.Total};Label='Total';Width=8},
+ @{Expression={$_.Executed};Label='Executed';Width=10},
+ @{Expression={$_.Passed};Label='Passed';Width=8},
+ @{Expression={$_.Failed};Label='Failed';Width=8},
+ @{Expression={$_.Warning};Label='Warning';Width=9},
+ @{Expression={$_.Inconclusive};Label='Inconclusive';Width=14}
+
+ $Counters | Format-Table $format
+ }
+ }
+
+ } finally {
+ $reader.Dispose()
+ }
+
+ }
+
+ # FOOTER FOR FRAMEWORK
+
+ Write-Host "************************************************************************************************************" -ForegroundColor Magenta
+ Write-Host "* *" -ForegroundColor Magenta
+ Write-Host "* Totals For $framework" -ForegroundColor Magenta
+ Write-Host "* *" -ForegroundColor Magenta
+ Write-Host "************************************************************************************************************" -ForegroundColor Magenta
+ Write-Host ""
+ $foreground = if ($outcomeForFramework -eq 'Failed') { 'Red' } else { 'Green' }
+ Write-Host "Result: " -NoNewline; Write-Host "$outcomeForFramework" -ForegroundColor $foreground
+ Write-Host ""
+ Write-Host "Total: $totalCountForFramework"
+ Write-Host "Executed: $executedCountForFramework"
+ $foreground = if ($failedCountForFramework -gt 0) { 'Green' } else { (Get-Host).UI.RawUI.ForegroundColor }
+ Write-Host "Passed: " -NoNewline; Write-Host "$passedCountForFramework" -ForegroundColor $foreground
+ $foreground = if ($failedCountForFramework -gt 0) { 'Red' } else { (Get-Host).UI.RawUI.ForegroundColor }
+ Write-Host "Failed: " -NoNewline; Write-Host "$failedCountForFramework" -ForegroundColor $foreground
+ $foreground = if ($failedCountForFramework -gt 0) { 'Yellow' } else { (Get-Host).UI.RawUI.ForegroundColor }
+ Write-Host "Warning: " -NoNewline; Write-Host "$warningCountForFramework" -ForegroundColor $foreground
+ $foreground = if ($failedCountForFramework -gt 0) { 'Cyan' } else { (Get-Host).UI.RawUI.ForegroundColor }
+ Write-Host "Inconclusive: " -NoNewline; Write-Host "$inconclusiveCountForFramework" -ForegroundColor $foreground
+ }
+}
+
function Backup-Files([string[]]$paths) {
foreach ($path in $paths) {
Backup-File $path
[lucenenet] 05/07: Upgraded NUnit package dependency to 3.9.0
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit de6d153da1fc7a5768c93e100e98d90783fa0430
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jul 13 14:50:24 2019 +0700
Upgraded NUnit package dependency to 3.9.0
---
build/Dependencies.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build/Dependencies.props b/build/Dependencies.props
index cf32c6b..2a91c45 100644
--- a/build/Dependencies.props
+++ b/build/Dependencies.props
@@ -12,7 +12,7 @@
<NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
<NewtonsoftJsonPackageVersion>10.0.3</NewtonsoftJsonPackageVersion>
<NUnit3TestAdapterPackageVersion>3.13.0</NUnit3TestAdapterPackageVersion>
- <NUnitPackageVersion>3.8.1</NUnitPackageVersion>
+ <NUnitPackageVersion>3.9.0</NUnitPackageVersion>
<NUnitExtensionTeamCityEventListenerPackageVersion>1.0.6</NUnitExtensionTeamCityEventListenerPackageVersion>
<SharpZipLibPackageVersion>1.1.0</SharpZipLibPackageVersion>
<SharpZipLibNETStandardPackageVersion>0.86.0.1</SharpZipLibNETStandardPackageVersion>