Skip to content

Smdn.Test.NUnit.Utils version 4.1.0

Compare
Choose a tag to compare
@smdn smdn released this 12 Dec 14:52
· 53 commits to main since this release
e0cb962

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net462.apilist.cs b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net462.apilist.cs
index 3ee04000..7e84d08b 100644
--- a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net462.apilist.cs
+++ b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net462.apilist.cs
@@ -1,58 +1,58 @@
-// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.0.0)
+// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.1.0)
 //   Name: Smdn.Test.NUnit.Utils
-//   AssemblyVersion: 4.0.0.0
-//   InformationalVersion: 4.0.0+280107daf772c089f4bf30b5bce3f2dded855766
+//   AssemblyVersion: 4.1.0.0
+//   InformationalVersion: 4.1.0+a2b810f485a890f0e99bf4b9ebe92881f4f71824
 //   TargetFramework: .NETFramework,Version=v4.6.2
 //   Configuration: Release
 //   Referenced assemblies:
 //     System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     nunit.framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 //     nunit.framework.legacy, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 
 using System;
 using System.IO;
 using System.Runtime.Serialization;
 using System.Text;
 using System.Threading.Tasks;
 using NUnit.Framework;
 using NUnit.Framework.Legacy;
 
 namespace Smdn.Test.NUnit {
   public static class Encodings {
     public static Encoding EucJP { get; }
     public static Encoding Jis { get; }
     public static Encoding Latin1 { get; }
     public static Encoding ShiftJis { get; }
   }
 
   public static class IOUtils {
     public static void UsingCurrentDirectory(string path, Action action) {}
     public static async Task UsingCurrentDirectoryAsync(string path, Func<Task> action) {}
     public static void UsingDirectory(string path, Action<DirectoryInfo> action) {}
     public static void UsingDirectory(string path, bool ensureDirectoryCreated, Action<DirectoryInfo> action) {}
     public static Task UsingDirectoryAsync(string path, Func<DirectoryInfo, Task> action) {}
     public static async Task UsingDirectoryAsync(string path, bool ensureDirectoryCreated, Func<DirectoryInfo, Task> action) {}
     public static void UsingFile(string path, Action<FileInfo> action) {}
     public static async Task UsingFileAsync(string path, Func<FileInfo, Task> action) {}
   }
 }
 
 namespace Smdn.Test.NUnit.Assertion {
   public class Assert : ClassicAssert {
     public static void Elapses(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void ElapsesAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static void ElapsesInRange(TimeSpan expectedMin, TimeSpan expectedMax, TestDelegate code, string message = null) {}
     public static void ElapsesInRangeAsync(TimeSpan expectedMin, TimeSpan expectedMax, AsyncTestDelegate code, string message = null) {}
     public static void IsSerializable<TSerializable>(TSerializable obj, Action<TSerializable> testDeserializedObject = null) {}
     public static void IsSerializable<TSerializable>(TSerializable obj, IFormatter serializationFormatter, IFormatter deserializationFormatter, Action<TSerializable> testDeserializedObject = null) {}
     public static void NotElapse(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void NotElapseAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static TException ThrowsOrAggregates<TException>(TestDelegate code) where TException : Exception {}
 
     public Assert() {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.3.0.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net472.apilist.cs b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net472.apilist.cs
index 0f3b5e5e..de77a093 100644
--- a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net472.apilist.cs
+++ b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net472.apilist.cs
@@ -1,58 +1,58 @@
-// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.0.0)
+// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.1.0)
 //   Name: Smdn.Test.NUnit.Utils
-//   AssemblyVersion: 4.0.0.0
-//   InformationalVersion: 4.0.0+280107daf772c089f4bf30b5bce3f2dded855766
+//   AssemblyVersion: 4.1.0.0
+//   InformationalVersion: 4.1.0+a2b810f485a890f0e99bf4b9ebe92881f4f71824
 //   TargetFramework: .NETFramework,Version=v4.7.2
 //   Configuration: Release
 //   Referenced assemblies:
 //     System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     nunit.framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 //     nunit.framework.legacy, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 
 using System;
 using System.IO;
 using System.Runtime.Serialization;
 using System.Text;
 using System.Threading.Tasks;
 using NUnit.Framework;
 using NUnit.Framework.Legacy;
 
 namespace Smdn.Test.NUnit {
   public static class Encodings {
     public static Encoding EucJP { get; }
     public static Encoding Jis { get; }
     public static Encoding Latin1 { get; }
     public static Encoding ShiftJis { get; }
   }
 
   public static class IOUtils {
     public static void UsingCurrentDirectory(string path, Action action) {}
     public static async Task UsingCurrentDirectoryAsync(string path, Func<Task> action) {}
     public static void UsingDirectory(string path, Action<DirectoryInfo> action) {}
     public static void UsingDirectory(string path, bool ensureDirectoryCreated, Action<DirectoryInfo> action) {}
     public static Task UsingDirectoryAsync(string path, Func<DirectoryInfo, Task> action) {}
     public static async Task UsingDirectoryAsync(string path, bool ensureDirectoryCreated, Func<DirectoryInfo, Task> action) {}
     public static void UsingFile(string path, Action<FileInfo> action) {}
     public static async Task UsingFileAsync(string path, Func<FileInfo, Task> action) {}
   }
 }
 
 namespace Smdn.Test.NUnit.Assertion {
   public class Assert : ClassicAssert {
     public static void Elapses(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void ElapsesAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static void ElapsesInRange(TimeSpan expectedMin, TimeSpan expectedMax, TestDelegate code, string message = null) {}
     public static void ElapsesInRangeAsync(TimeSpan expectedMin, TimeSpan expectedMax, AsyncTestDelegate code, string message = null) {}
     public static void IsSerializable<TSerializable>(TSerializable obj, Action<TSerializable> testDeserializedObject = null) {}
     public static void IsSerializable<TSerializable>(TSerializable obj, IFormatter serializationFormatter, IFormatter deserializationFormatter, Action<TSerializable> testDeserializedObject = null) {}
     public static void NotElapse(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void NotElapseAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static TException ThrowsOrAggregates<TException>(TestDelegate code) where TException : Exception {}
 
     public Assert() {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.3.0.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net6.0.apilist.cs b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net8.0.apilist.cs
similarity index 74%
rename from doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net6.0.apilist.cs
rename to doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net8.0.apilist.cs
index 57e04c4d..95756561 100644
--- a/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils-net8.0.apilist.cs
@@ -1,60 +1,56 @@
-// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.0.0)
+// Smdn.Test.NUnit.Utils.dll (Smdn.Test.NUnit.Utils-4.1.0)
 //   Name: Smdn.Test.NUnit.Utils
-//   AssemblyVersion: 4.0.0.0
-//   InformationalVersion: 4.0.0+280107daf772c089f4bf30b5bce3f2dded855766
-//   TargetFramework: .NETCoreApp,Version=v6.0
+//   AssemblyVersion: 4.1.0.0
+//   InformationalVersion: 4.1.0+a2b810f485a890f0e99bf4b9ebe92881f4f71824
+//   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
-//     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Runtime.Serialization.Formatters, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Threading.Thread, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     nunit.framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 //     nunit.framework.legacy, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb
 
 using System;
 using System.IO;
-using System.Runtime.Serialization;
 using System.Text;
 using System.Threading.Tasks;
 using NUnit.Framework;
 using NUnit.Framework.Legacy;
 
 namespace Smdn.Test.NUnit {
   public static class Encodings {
     public static Encoding EucJP { get; }
     public static Encoding Jis { get; }
     public static Encoding Latin1 { get; }
     public static Encoding ShiftJis { get; }
   }
 
   public static class IOUtils {
     public static void UsingCurrentDirectory(string path, Action action) {}
     public static async Task UsingCurrentDirectoryAsync(string path, Func<Task> action) {}
     public static void UsingDirectory(string path, Action<DirectoryInfo> action) {}
     public static void UsingDirectory(string path, bool ensureDirectoryCreated, Action<DirectoryInfo> action) {}
     public static Task UsingDirectoryAsync(string path, Func<DirectoryInfo, Task> action) {}
     public static async Task UsingDirectoryAsync(string path, bool ensureDirectoryCreated, Func<DirectoryInfo, Task> action) {}
     public static void UsingFile(string path, Action<FileInfo> action) {}
     public static async Task UsingFileAsync(string path, Func<FileInfo, Task> action) {}
   }
 }
 
 namespace Smdn.Test.NUnit.Assertion {
   public class Assert : ClassicAssert {
     public static void Elapses(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void ElapsesAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static void ElapsesInRange(TimeSpan expectedMin, TimeSpan expectedMax, TestDelegate code, string message = null) {}
     public static void ElapsesInRangeAsync(TimeSpan expectedMin, TimeSpan expectedMax, AsyncTestDelegate code, string message = null) {}
     public static void IsSerializable<TSerializable>(TSerializable obj, Action<TSerializable> testDeserializedObject = null) {}
-    public static void IsSerializable<TSerializable>(TSerializable obj, IFormatter serializationFormatter, IFormatter deserializationFormatter, Action<TSerializable> testDeserializedObject = null) {}
     public static void NotElapse(TimeSpan expected, TestDelegate code, string message = null) {}
     public static void NotElapseAsync(TimeSpan expected, AsyncTestDelegate code, string message = null) {}
     public static TException ThrowsOrAggregates<TException>(TestDelegate code) where TException : Exception {}
 
     public Assert() {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.3.0.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)

Full changes

Full changes in this release:
diff --git a/src/Smdn.Test.NUnit.Utils/CompatibilitySuppressions.xml b/src/Smdn.Test.NUnit.Utils/CompatibilitySuppressions.xml
new file mode 100644
index 00000000..0b7edf62
--- /dev/null
+++ b/src/Smdn.Test.NUnit.Utils/CompatibilitySuppressions.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://learn.microsoft.com/en-us/dotnet/fundamentals/package-validation/diagnostic-ids -->
+<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
+    <DiagnosticId>PKV006</DiagnosticId>
+    <Target>net6.0</Target>
+  </Suppression>
+</Suppressions>
\ No newline at end of file
diff --git a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.Serialization.cs b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.Serialization.cs
index 8658e7e6..b74bb3bf 100644
--- a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.Serialization.cs
+++ b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.Serialization.cs
@@ -1,6 +1,11 @@
 // SPDX-FileCopyrightText: 2020 smdn <smdn@smdn.jp>
 // SPDX-License-Identifier: MIT
+#if !NET8_0_OR_GREATER
+#define ENABLE_SERIALIZATION // SYSLIB0011 (https://aka.ms/binaryformatter)
+#endif
+
 using System;
+#if ENABLE_SERIALIZATION
 using System.IO;
 #if SYSTEM_RUNTIME_SERIALIZATION_ISERIALIZABLE || SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
 using System.Runtime.Serialization;
@@ -8,13 +13,15 @@ using System.Runtime.Serialization;
 #if SYSTEM_RUNTIME_SERIALIZATION_FORMATTER_BINARY
 using System.Runtime.Serialization.Formatters.Binary;
 #endif
+#endif // ENABLE_SERIALIZATION
 
 namespace Smdn.Test.NUnit.Assertion;
 
 #pragma warning disable IDE0040
 partial class Assert {
 #pragma warning restore IDE0040
-#if SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#pragma warning disable CA1859
   private static IFormatter CreateDefaultSerializationFormatter()
 #if SYSTEM_RUNTIME_SERIALIZATION_FORMATTER_BINARY
     // TODO: use JsonSerializer instead
@@ -22,16 +29,19 @@ partial class Assert {
     => new BinaryFormatter();
 #else
     => null;
+#pragma warning restore CA1859
 #endif
 
+#pragma warning disable CA1859
   private static IFormatter CreateDefaultDeserializationFormatter()
-#if SYSTEM_RUNTIME_SERIALIZATION_FORMATTER_BINARY && SYSTEM_RUNTIME_SERIALIZATION_SERIALIZATIONBINDER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_FORMATTER_BINARY && SYSTEM_RUNTIME_SERIALIZATION_SERIALIZATIONBINDER
     => new BinaryFormatter() {
       Binder = new DeserializationBinder(),
     };
 #else
     => null;
 #endif
+#pragma warning restore CA1859
 #endif // SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
 
   public static void IsSerializable<TSerializable>(
@@ -43,14 +53,14 @@ partial class Assert {
 #endif
     => IsSerializableCore(
       obj,
-#if SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
       CreateDefaultSerializationFormatter(),
       CreateDefaultDeserializationFormatter(),
 #endif
       testDeserializedObject
     );
 
-#if SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
   public static void IsSerializable<TSerializable>(
     TSerializable obj,
     IFormatter serializationFormatter,
@@ -70,7 +80,7 @@ partial class Assert {
 
   private static void IsSerializableCore<TSerializable>(
     TSerializable obj,
-#if SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
     IFormatter serializationFormatter,
     IFormatter deserializationFormatter,
 #endif
@@ -80,7 +90,7 @@ partial class Assert {
     where TSerializable : ISerializable
 #endif
   {
-#if SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_IFORMATTER
     if (serializationFormatter is null || deserializationFormatter is null)
       return; // do nothing
 
diff --git a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.cs b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.cs
index 3bef33ef..91124014 100644
--- a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.cs
+++ b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/Assert.cs
@@ -3,7 +3,6 @@
 using System;
 
 using NUnit.Framework;
-using NUnit.Framework.Legacy;
 
 namespace Smdn.Test.NUnit.Assertion;
 
diff --git a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/DeserializationBinder.cs b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/DeserializationBinder.cs
index a984d193..cc8845eb 100644
--- a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/DeserializationBinder.cs
+++ b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Assertion/DeserializationBinder.cs
@@ -1,6 +1,10 @@
 // SPDX-FileCopyrightText: 2020 smdn <smdn@smdn.jp>
 // SPDX-License-Identifier: MIT
-#if SYSTEM_RUNTIME_SERIALIZATION_SERIALIZATIONBINDER
+#if !NET8_0_OR_GREATER
+#define ENABLE_SERIALIZATION // SYSLIB0011 (https://aka.ms/binaryformatter)
+#endif
+
+#if ENABLE_SERIALIZATION && SYSTEM_RUNTIME_SERIALIZATION_SERIALIZATIONBINDER
 
 using System;
 using System.Linq;
@@ -10,6 +14,8 @@ using System.Runtime.Serialization;
 namespace Smdn.Test.NUnit.Assertion;
 
 internal sealed class DeserializationBinder : SerializationBinder {
+  private static readonly string[] TypeArgumentListSplitter = { "]," };
+
   private static Type GetTypeFromLoadedAssemblies(string typeName)
   {
     var typeFullName = typeName;
@@ -43,7 +49,7 @@ internal sealed class DeserializationBinder : SerializationBinder {
 
     var typeArguments = typeArgumentList
       .Substring(1, typeArgumentList.Length - 2) // remove outermost square brackets: "[[T1], [T2], [T3]]" -> "[T1], [T2], [T3]"
-      .Split(new[] { "]," }, StringSplitOptions.None) // split type arguments: "[T1], [T2], [T3]" -> {"[T1", "[T2", "[T3]"}
+      .Split(TypeArgumentListSplitter, StringSplitOptions.None) // split type arguments: "[T1], [T2], [T3]" -> {"[T1", "[T2", "[T3]"}
       .Select(ta => ta.TrimStart('[').TrimEnd(']')) // trim square brackets: {"[T1", "[T2", "[T3]"} -> {"T1", "T2", "T3"}
       .Select(GetTypeFromLoadedAssemblies) // get types from type names
       .ToArray();
diff --git a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils.csproj b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils.csproj
index 110da0e4..01b7f583 100644
--- a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils.csproj
+++ b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit.Utils.csproj
@@ -4,12 +4,14 @@ SPDX-License-Identifier: MIT
 -->
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;net472;net462</TargetFrameworks>
-    <VersionPrefix>4.0.0</VersionPrefix>
+    <TargetFrameworks>net8.0;net472;net462</TargetFrameworks>
+    <VersionPrefix>4.1.0</VersionPrefix>
     <VersionSuffix></VersionSuffix>
+    <PackageValidationBaselineVersion>4.0.0</PackageValidationBaselineVersion>
     <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
     <EnableTrimAnalyzer>false</EnableTrimAnalyzer>
     <RootNamespace/> <!-- empty the root namespace so that the namespace is determined only by the directory name, for code style rule IDE0030 -->
+    <NoWarn>CS1591;$(NoWarn)</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' -->
   </PropertyGroup>
 
   <PropertyGroup Label="assembly attributes">
diff --git a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit/IOUtils.cs b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit/IOUtils.cs
index 9dc17f77..342e2b9d 100644
--- a/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit/IOUtils.cs
+++ b/src/Smdn.Test.NUnit.Utils/Smdn.Test.NUnit/IOUtils.cs
@@ -132,12 +132,12 @@ public static class IOUtils {
 
   private static void TryIO(Action action)
   {
-    const int maxRetry = 10;
-    const int interval = 100;
+    const int MaxRetry = 10;
+    const int Interval = 100;
 
     Exception caughtException = null;
 
-    for (var retry = maxRetry; retry != 0; retry--) {
+    for (var retry = MaxRetry; retry != 0; retry--) {
       try {
         action();
         return;
@@ -149,7 +149,7 @@ public static class IOUtils {
         caughtException = ex;
       }
 
-      Thread.Sleep(interval);
+      Thread.Sleep(Interval);
     }
 
     if (caughtException is not null)

Notes

What's Changed

  • Bump dawidd6/action-download-artifact from 3.0.0 to 6 in /.github/workflows by @dependabot in #230

New Contributors

Full Changelog: releases/Smdn.Test.NUnit.Utils-4.0.0...releases/Smdn.Test.NUnit.Utils-4.1.0