diff --git a/.github/actions/test/action.yaml b/.github/actions/test/action.yaml
index 24fba27bb..40ac86ca6 100644
--- a/.github/actions/test/action.yaml
+++ b/.github/actions/test/action.yaml
@@ -7,5 +7,5 @@ runs:
run: cargo test --manifest-path tools/slicec-cs/Cargo.toml
shell: bash
- name: 🧪 Test
- run: dotnet test --no-build --verbosity normal
+ run: dotnet test --no-build --verbosity normal --blame-hang-timeout 8m
shell: bash
diff --git a/build/IceRpc.Version.props b/build/IceRpc.Version.props
index 1b0d35bea..9effa34b8 100644
--- a/build/IceRpc.Version.props
+++ b/build/IceRpc.Version.props
@@ -3,7 +3,7 @@
0.4.0-preview1
- 26.1
+ 28.0
3.$(ProtobufVersion)
diff --git a/tests/IceRpc.Compressor.Tests/AssemblyInfo.cs b/tests/IceRpc.Compressor.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Compressor.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Compressor.Tests/IceRpc.Compressor.Tests.csproj b/tests/IceRpc.Compressor.Tests/IceRpc.Compressor.Tests.csproj
index a05725170..44778f006 100644
--- a/tests/IceRpc.Compressor.Tests/IceRpc.Compressor.Tests.csproj
+++ b/tests/IceRpc.Compressor.Tests/IceRpc.Compressor.Tests.csproj
@@ -4,17 +4,17 @@
net8.0
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Conformance.Tests/IceRpc.Conformance.Tests.csproj b/tests/IceRpc.Conformance.Tests/IceRpc.Conformance.Tests.csproj
index cc7bb2079..3b71dbd40 100644
--- a/tests/IceRpc.Conformance.Tests/IceRpc.Conformance.Tests.csproj
+++ b/tests/IceRpc.Conformance.Tests/IceRpc.Conformance.Tests.csproj
@@ -10,16 +10,16 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/IceRpc.Deadline.Tests/AssemblyInfo.cs b/tests/IceRpc.Deadline.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Deadline.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Deadline.Tests/IceRpc.Deadline.Tests.csproj b/tests/IceRpc.Deadline.Tests/IceRpc.Deadline.Tests.csproj
index 738b0c302..317339cf3 100644
--- a/tests/IceRpc.Deadline.Tests/IceRpc.Deadline.Tests.csproj
+++ b/tests/IceRpc.Deadline.Tests/IceRpc.Deadline.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Extensions.DependencyInjection.Tests/AssemblyInfo.cs b/tests/IceRpc.Extensions.DependencyInjection.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Extensions.DependencyInjection.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Extensions.DependencyInjection.Tests/IceRpc.Extensions.DependencyInjection.Tests.csproj b/tests/IceRpc.Extensions.DependencyInjection.Tests/IceRpc.Extensions.DependencyInjection.Tests.csproj
index d09df828e..c2680e2c5 100644
--- a/tests/IceRpc.Extensions.DependencyInjection.Tests/IceRpc.Extensions.DependencyInjection.Tests.csproj
+++ b/tests/IceRpc.Extensions.DependencyInjection.Tests/IceRpc.Extensions.DependencyInjection.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Locator.Tests/AssemblyInfo.cs b/tests/IceRpc.Locator.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Locator.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Locator.Tests/IceRpc.Locator.Tests.csproj b/tests/IceRpc.Locator.Tests/IceRpc.Locator.Tests.csproj
index 936d3a2d5..04e42f6cf 100644
--- a/tests/IceRpc.Locator.Tests/IceRpc.Locator.Tests.csproj
+++ b/tests/IceRpc.Locator.Tests/IceRpc.Locator.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Logger.Tests/AssemblyInfo.cs b/tests/IceRpc.Logger.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Logger.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Logger.Tests/IceRpc.Logger.Tests.csproj b/tests/IceRpc.Logger.Tests/IceRpc.Logger.Tests.csproj
index 64d6a0669..e569bd036 100644
--- a/tests/IceRpc.Logger.Tests/IceRpc.Logger.Tests.csproj
+++ b/tests/IceRpc.Logger.Tests/IceRpc.Logger.Tests.csproj
@@ -6,19 +6,19 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Metrics.Tests/AssemblyInfo.cs b/tests/IceRpc.Metrics.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Metrics.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Metrics.Tests/IceRpc.Metrics.Tests.csproj b/tests/IceRpc.Metrics.Tests/IceRpc.Metrics.Tests.csproj
index 6a6483124..5cbf2ba11 100644
--- a/tests/IceRpc.Metrics.Tests/IceRpc.Metrics.Tests.csproj
+++ b/tests/IceRpc.Metrics.Tests/IceRpc.Metrics.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Protobuf.Tests/IceRpc.Protobuf.Tests.csproj b/tests/IceRpc.Protobuf.Tests/IceRpc.Protobuf.Tests.csproj
index f5541ed9c..e044e4178 100644
--- a/tests/IceRpc.Protobuf.Tests/IceRpc.Protobuf.Tests.csproj
+++ b/tests/IceRpc.Protobuf.Tests/IceRpc.Protobuf.Tests.csproj
@@ -8,17 +8,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Quic.Tests/AssemblyInfo.cs b/tests/IceRpc.Quic.Tests/AssemblyInfo.cs
index 2b3931052..c55074db2 100644
--- a/tests/IceRpc.Quic.Tests/AssemblyInfo.cs
+++ b/tests/IceRpc.Quic.Tests/AssemblyInfo.cs
@@ -2,7 +2,6 @@
using System.Runtime.Versioning;
-[assembly: NUnit.Framework.Timeout(8000)]
// TODO: Remove once OpenSSL performance issues are resolved (https://github.com/openssl/openssl/issues/17627).
[assembly: NUnit.Framework.LevelOfParallelism(2)]
diff --git a/tests/IceRpc.Quic.Tests/IceRpc.Quic.Tests.csproj b/tests/IceRpc.Quic.Tests/IceRpc.Quic.Tests.csproj
index 4174df063..dfa297af1 100644
--- a/tests/IceRpc.Quic.Tests/IceRpc.Quic.Tests.csproj
+++ b/tests/IceRpc.Quic.Tests/IceRpc.Quic.Tests.csproj
@@ -8,17 +8,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.RequestContext.Tests/AssemblyInfo.cs b/tests/IceRpc.RequestContext.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.RequestContext.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.RequestContext.Tests/IceRpc.RequestContext.Tests.csproj b/tests/IceRpc.RequestContext.Tests/IceRpc.RequestContext.Tests.csproj
index b4e83288f..3ea32869e 100644
--- a/tests/IceRpc.RequestContext.Tests/IceRpc.RequestContext.Tests.csproj
+++ b/tests/IceRpc.RequestContext.Tests/IceRpc.RequestContext.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Retry.Tests/AssemblyInfo.cs b/tests/IceRpc.Retry.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Retry.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Retry.Tests/IceRpc.Retry.Tests.csproj b/tests/IceRpc.Retry.Tests/IceRpc.Retry.Tests.csproj
index 86fad093b..db48361ab 100644
--- a/tests/IceRpc.Retry.Tests/IceRpc.Retry.Tests.csproj
+++ b/tests/IceRpc.Retry.Tests/IceRpc.Retry.Tests.csproj
@@ -6,19 +6,19 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Slice.Tests/IceRpc.Slice.Tests.csproj b/tests/IceRpc.Slice.Tests/IceRpc.Slice.Tests.csproj
index a3eb835d1..a0ce36807 100644
--- a/tests/IceRpc.Slice.Tests/IceRpc.Slice.Tests.csproj
+++ b/tests/IceRpc.Slice.Tests/IceRpc.Slice.Tests.csproj
@@ -7,17 +7,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Telemetry.Tests/AssemblyInfo.cs b/tests/IceRpc.Telemetry.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Telemetry.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Telemetry.Tests/IceRpc.Telemetry.Tests.csproj b/tests/IceRpc.Telemetry.Tests/IceRpc.Telemetry.Tests.csproj
index 93726af32..e65ead1e1 100644
--- a/tests/IceRpc.Telemetry.Tests/IceRpc.Telemetry.Tests.csproj
+++ b/tests/IceRpc.Telemetry.Tests/IceRpc.Telemetry.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IceRpc.Tests.Common/AssertTraceListener.cs b/tests/IceRpc.Tests.Common/AssertTraceListener.cs
index 8f967f062..d0f9fbbe7 100644
--- a/tests/IceRpc.Tests.Common/AssertTraceListener.cs
+++ b/tests/IceRpc.Tests.Common/AssertTraceListener.cs
@@ -12,18 +12,18 @@ public class AssertTraceListener : DefaultTraceListener
private static readonly AssertTraceListener _instance = new();
/// Delegate to
- public override void Fail(string? message) => Assert.Fail(message);
+ public override void Fail(string? message) => Assert.Fail(message ?? "");
- /// Delegate to
+ /// Delegate to
public override void Fail(string? message, string? detailMessage)
{
if (detailMessage is null || detailMessage.Length == 0)
{
- Assert.Fail(message);
+ Assert.Fail(message ?? "");
}
else
{
- Assert.Fail(message, detailMessage);
+ Assert.Fail($"{message}\n{detailMessage}");
}
}
diff --git a/tests/IceRpc.Tests.Common/IceRpc.Tests.Common.csproj b/tests/IceRpc.Tests.Common/IceRpc.Tests.Common.csproj
index d45100577..1184b4c63 100644
--- a/tests/IceRpc.Tests.Common/IceRpc.Tests.Common.csproj
+++ b/tests/IceRpc.Tests.Common/IceRpc.Tests.Common.csproj
@@ -12,11 +12,11 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/IceRpc.Tests/AssemblyInfo.cs b/tests/IceRpc.Tests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IceRpc.Tests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IceRpc.Tests/IceRpc.Tests.csproj b/tests/IceRpc.Tests/IceRpc.Tests.csproj
index 02e3fafaa..78ad6f80a 100644
--- a/tests/IceRpc.Tests/IceRpc.Tests.csproj
+++ b/tests/IceRpc.Tests/IceRpc.Tests.csproj
@@ -6,17 +6,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/IntegrationTests/AssemblyInfo.cs b/tests/IntegrationTests/AssemblyInfo.cs
deleted file mode 100644
index 41a149d7f..000000000
--- a/tests/IntegrationTests/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright (c) ZeroC, Inc.
-
-[assembly: NUnit.Framework.Timeout(8000)]
diff --git a/tests/IntegrationTests/IntegrationTests.csproj b/tests/IntegrationTests/IntegrationTests.csproj
index 68dc2180c..9d8e0d208 100644
--- a/tests/IntegrationTests/IntegrationTests.csproj
+++ b/tests/IntegrationTests/IntegrationTests.csproj
@@ -7,17 +7,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/A/A.csproj b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/A/A.csproj
index e7119771d..0988503cf 100644
--- a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/A/A.csproj
+++ b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/A/A.csproj
@@ -10,7 +10,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/B/B.csproj b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/B/B.csproj
index 6ca4dfcd7..32c83b2b3 100644
--- a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/B/B.csproj
+++ b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/B/B.csproj
@@ -13,7 +13,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/C/C.csproj b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/C/C.csproj
index 6ca4dfcd7..32c83b2b3 100644
--- a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/C/C.csproj
+++ b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/C/C.csproj
@@ -13,7 +13,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/D/D.csproj b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/D/D.csproj
index 4bdb83465..00a73b483 100644
--- a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/D/D.csproj
+++ b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/D/D.csproj
@@ -13,7 +13,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/DPrime/DPrime.csproj b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/DPrime/DPrime.csproj
index 4bdb83465..00a73b483 100644
--- a/tests/ZeroC.Slice.Tests.ReferencedAssemblies/DPrime/DPrime.csproj
+++ b/tests/ZeroC.Slice.Tests.ReferencedAssemblies/DPrime/DPrime.csproj
@@ -13,7 +13,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/tests/ZeroC.Slice.Tests/ZeroC.Slice.Tests.csproj b/tests/ZeroC.Slice.Tests/ZeroC.Slice.Tests.csproj
index d8c60776a..a1f2dd9fa 100644
--- a/tests/ZeroC.Slice.Tests/ZeroC.Slice.Tests.csproj
+++ b/tests/ZeroC.Slice.Tests/ZeroC.Slice.Tests.csproj
@@ -14,17 +14,17 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/tools/IceRpc.Protobuf.Tools/IceRpc.Protobuf.Tools.csproj b/tools/IceRpc.Protobuf.Tools/IceRpc.Protobuf.Tools.csproj
index 2c76e38ad..c07684cd8 100644
--- a/tools/IceRpc.Protobuf.Tools/IceRpc.Protobuf.Tools.csproj
+++ b/tools/IceRpc.Protobuf.Tools/IceRpc.Protobuf.Tools.csproj
@@ -33,8 +33,8 @@
NU5100
-
-
+
+
diff --git a/tools/IceRpc.Slice.Tools/IceRpc.Slice.Tools.csproj b/tools/IceRpc.Slice.Tools/IceRpc.Slice.Tools.csproj
index 7f91857e3..15d715d64 100644
--- a/tools/IceRpc.Slice.Tools/IceRpc.Slice.Tools.csproj
+++ b/tools/IceRpc.Slice.Tools/IceRpc.Slice.Tools.csproj
@@ -43,8 +43,8 @@
>$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString().ToLower())
-
-
+
+