From ee50e610a4d86ec751f51d3ec36cf0428c7d24f0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 08:20:53 +0000
Subject: [PATCH 01/10] Initial plan
From 34eba50a1919c80723ae30cec86bf7e61e85fda7 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 08:23:49 +0000
Subject: [PATCH 02/10] fix: enable PublicSign to resolve strong name
verification on .NET Framework
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
Directory.Build.props | 1 +
1 file changed, 1 insertion(+)
diff --git a/Directory.Build.props b/Directory.Build.props
index 2e972097..c9247244 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -33,6 +33,7 @@
enable
$(MSBuildThisFileDirectory)src\StrongName.snk
true
+ true
true
true
From 565c969667c110ee06e4099ffd99feaaefcfa4b2 Mon Sep 17 00:00:00 2001
From: Simon Ensslen
Date: Thu, 5 Feb 2026 09:29:23 +0100
Subject: [PATCH 03/10] remove no longer necessary app.config
---
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 1 -
test/CommandLineUtils.Tests/app.config | 8 --------
.../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 1 -
test/Hosting.CommandLine.Tests/app.config | 8 --------
4 files changed, 18 deletions(-)
delete mode 100644 test/CommandLineUtils.Tests/app.config
delete mode 100644 test/Hosting.CommandLine.Tests/app.config
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index 16b03d23..b0eab390 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -38,7 +38,6 @@
-
diff --git a/test/CommandLineUtils.Tests/app.config b/test/CommandLineUtils.Tests/app.config
deleted file mode 100644
index 9748f48d..00000000
--- a/test/CommandLineUtils.Tests/app.config
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index 50118408..5c925c68 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -37,7 +37,6 @@
-
diff --git a/test/Hosting.CommandLine.Tests/app.config b/test/Hosting.CommandLine.Tests/app.config
deleted file mode 100644
index 9748f48d..00000000
--- a/test/Hosting.CommandLine.Tests/app.config
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
From cc3ce2a14972194429fbe5ba4197ea4ec628b693 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 08:43:04 +0000
Subject: [PATCH 04/10] fix: restore app.config files needed for .NET Framework
strong name bypass
The app.config files are still required even with PublicSign=true because:
- Test assemblies must be signed to match InternalsVisibleTo declarations
- .NET Framework's xUnit runner verifies strong names in AppDomains
- bypassTrustedAppStrongNames is needed to bypass PublicSign verification
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 1 +
test/CommandLineUtils.Tests/app.config | 8 ++++++++
.../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 1 +
test/Hosting.CommandLine.Tests/app.config | 8 ++++++++
4 files changed, 18 insertions(+)
create mode 100644 test/CommandLineUtils.Tests/app.config
create mode 100644 test/Hosting.CommandLine.Tests/app.config
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index b0eab390..16b03d23 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -38,6 +38,7 @@
+
diff --git a/test/CommandLineUtils.Tests/app.config b/test/CommandLineUtils.Tests/app.config
new file mode 100644
index 00000000..9748f48d
--- /dev/null
+++ b/test/CommandLineUtils.Tests/app.config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index 5c925c68..50118408 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -37,6 +37,7 @@
+
diff --git a/test/Hosting.CommandLine.Tests/app.config b/test/Hosting.CommandLine.Tests/app.config
new file mode 100644
index 00000000..9748f48d
--- /dev/null
+++ b/test/Hosting.CommandLine.Tests/app.config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
From fc7a84c06e3bad451020d55858d76cbd7d340324 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 08:52:23 +0000
Subject: [PATCH 05/10] fix: ensure app.config is renamed to
{AssemblyName}.dll.config for .NET Framework
On .NET Framework, xUnit requires the config file to be named after the assembly (e.g., McMaster.Extensions.CommandLineUtils.Tests.dll.config) rather than just app.config. Updated both test projects to copy app.config with the correct name using TargetPath property, but only for net472 builds.
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 9 ++++++++-
.../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 9 ++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index 16b03d23..31f9bddf 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -38,7 +38,14 @@
-
+
+
+
+
+
+ Always
+ $(AssemblyName).dll.config
+
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index 50118408..b0d92319 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -37,7 +37,14 @@
-
+
+
+
+
+
+ Always
+ $(AssemblyName).dll.config
+
From 869affafbe40b113fa35f45dda3ff653ee131189 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 11:16:09 +0000
Subject: [PATCH 06/10] fix: use MSBuild Copy task to properly rename
app.config for .NET Framework
The previous TargetPath approach didn't work correctly. Replace it with an explicit MSBuild Copy task that runs after the Build target to copy app.config to {AssemblyName}.dll.config for net472 builds. This ensures xUnit's .NET Framework test runner can find the configuration file.
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 11 ++++-------
...Master.Extensions.Hosting.CommandLine.Tests.csproj | 11 ++++-------
2 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index 31f9bddf..f655dc6e 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -40,12 +40,9 @@
-
-
-
- Always
- $(AssemblyName).dll.config
-
-
+
+
+
+
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index b0d92319..cc3a1cbb 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -39,12 +39,9 @@
-
-
-
- Always
- $(AssemblyName).dll.config
-
-
+
+
+
+
From 67acc74ee847ffc6c86dcc162440a975e3003e41 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 11:53:59 +0000
Subject: [PATCH 07/10] fix: remove PublicSign to resolve .NET Framework strong
name verification
The root cause was PublicSign=true. PublicSign creates OSS signatures that can't be properly verified on .NET Framework, even with bypassTrustedAppStrongNames. Reverting to traditional strong name signing (without PublicSign) resolves the issue. Removed app.config files and MSBuild Copy tasks as they are no longer needed.
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
Directory.Build.props | 1 -
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 5 -----
test/CommandLineUtils.Tests/app.config | 8 --------
.../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 5 -----
test/Hosting.CommandLine.Tests/app.config | 8 --------
5 files changed, 27 deletions(-)
delete mode 100644 test/CommandLineUtils.Tests/app.config
delete mode 100644 test/Hosting.CommandLine.Tests/app.config
diff --git a/Directory.Build.props b/Directory.Build.props
index c9247244..2e972097 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -33,7 +33,6 @@
enable
$(MSBuildThisFileDirectory)src\StrongName.snk
true
- true
true
true
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index f655dc6e..b0eab390 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -40,9 +40,4 @@
-
-
-
-
-
diff --git a/test/CommandLineUtils.Tests/app.config b/test/CommandLineUtils.Tests/app.config
deleted file mode 100644
index 9748f48d..00000000
--- a/test/CommandLineUtils.Tests/app.config
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index cc3a1cbb..5c925c68 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -39,9 +39,4 @@
-
-
-
-
-
diff --git a/test/Hosting.CommandLine.Tests/app.config b/test/Hosting.CommandLine.Tests/app.config
deleted file mode 100644
index 9748f48d..00000000
--- a/test/Hosting.CommandLine.Tests/app.config
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
From 7ab1ce3ed341f4e7bee3d04342325120a587a3ae Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 12:06:32 +0000
Subject: [PATCH 08/10] fix: disable strong name signing completely to resolve
.NET Framework issues
As requested, removed all assembly signing configuration:
- Removed SignAssembly and AssemblyOriginatorKeyFile from Directory.Build.props
- Updated InternalsVisibleTo to not require PublicKey matching
This matches the working state where signing was disabled everywhere. The assemblies will no longer be strong-named, which resolves the .NET Framework verification issues.
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
Directory.Build.props | 2 --
src/CommandLineUtils/Properties/InternalsVisibleTo.cs | 4 ++--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index 2e972097..5f7a83e4 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -31,8 +31,6 @@
$(WarningsNotAsErrors);1591
true
enable
- $(MSBuildThisFileDirectory)src\StrongName.snk
- true
true
true
diff --git a/src/CommandLineUtils/Properties/InternalsVisibleTo.cs b/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
index 1e845853..bdba0b5c 100644
--- a/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
+++ b/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Nate McMaster.
+// Copyright (c) Nate McMaster.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("McMaster.Extensions.CommandLineUtils.Tests, PublicKey = 00240000048000009400000006020000002400005253413100040000010001001df0eba4297c8ffdf114a13714ad787744619dfb18e29191703f6f782d6a09e4a4cac35b8c768cbbd9ade8197bc0f66ec66fabc9071a206c8060af8b7a332236968d3ee44b90bd2f30d0edcb6150555c6f8d988e48234debaf2d427a08d7c06ba1343411142dc8ac996f7f7dbe0e93d13f17a7624db5400510e6144b0fd683b9")]
+[assembly: InternalsVisibleTo("McMaster.Extensions.CommandLineUtils.Tests")]
From 91dd47e2d0090c9648bd0458b80c23816a61b88b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 12:25:33 +0000
Subject: [PATCH 09/10] fix: use traditional strong name signing for both
production and test assemblies
Re-enabled strong name signing for production assemblies while keeping test assemblies signed too. This is required because:
- Production assemblies use InternalsVisibleTo with PublicKey requirement
- Compiler requires test assemblies to have matching public key when accessing internals
- Traditional signing (without PublicSign) works on .NET Framework
Both production and test assemblies are now signed with traditional strong name signing, which should work correctly on .NET Framework 4.7.2 without verification issues.
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
Directory.Build.props | 2 ++
src/CommandLineUtils/Properties/InternalsVisibleTo.cs | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index 5f7a83e4..2e972097 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -31,6 +31,8 @@
$(WarningsNotAsErrors);1591
true
enable
+ $(MSBuildThisFileDirectory)src\StrongName.snk
+ true
true
true
diff --git a/src/CommandLineUtils/Properties/InternalsVisibleTo.cs b/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
index bdba0b5c..1e845853 100644
--- a/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
+++ b/src/CommandLineUtils/Properties/InternalsVisibleTo.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Nate McMaster.
+// Copyright (c) Nate McMaster.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("McMaster.Extensions.CommandLineUtils.Tests")]
+[assembly: InternalsVisibleTo("McMaster.Extensions.CommandLineUtils.Tests, PublicKey = 00240000048000009400000006020000002400005253413100040000010001001df0eba4297c8ffdf114a13714ad787744619dfb18e29191703f6f782d6a09e4a4cac35b8c768cbbd9ade8197bc0f66ec66fabc9071a206c8060af8b7a332236968d3ee44b90bd2f30d0edcb6150555c6f8d988e48234debaf2d427a08d7c06ba1343411142dc8ac996f7f7dbe0e93d13f17a7624db5400510e6144b0fd683b9")]
From 3e595dadb563654bba452c58251e8f4246464dba Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 13:44:32 +0000
Subject: [PATCH 10/10] fix: add app.config files to bypass strong name
verification on .NET Framework
Traditional strong name signing also causes verification failures on .NET Framework. Added app.config files with bypassTrustedAppStrongNames enabled and MSBuild Copy tasks to ensure they're named correctly ({AssemblyName}.dll.config) for the xUnit test runner.
This allows:
- Production assemblies to remain signed
- Test assemblies to be signed (required for InternalsVisibleTo)
- Tests to run on .NET Framework by bypassing verification
Co-authored-by: sensslen <3428860+sensslen@users.noreply.github.com>
---
.../McMaster.Extensions.CommandLineUtils.Tests.csproj | 5 +++++
test/CommandLineUtils.Tests/app.config | 8 ++++++++
.../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 5 +++++
test/Hosting.CommandLine.Tests/app.config | 8 ++++++++
4 files changed, 26 insertions(+)
create mode 100644 test/CommandLineUtils.Tests/app.config
create mode 100644 test/Hosting.CommandLine.Tests/app.config
diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
index b0eab390..f655dc6e 100644
--- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
+++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj
@@ -40,4 +40,9 @@
+
+
+
+
+
diff --git a/test/CommandLineUtils.Tests/app.config b/test/CommandLineUtils.Tests/app.config
new file mode 100644
index 00000000..9748f48d
--- /dev/null
+++ b/test/CommandLineUtils.Tests/app.config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
index 5c925c68..cc3a1cbb 100644
--- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
+++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj
@@ -39,4 +39,9 @@
+
+
+
+
+
diff --git a/test/Hosting.CommandLine.Tests/app.config b/test/Hosting.CommandLine.Tests/app.config
new file mode 100644
index 00000000..9748f48d
--- /dev/null
+++ b/test/Hosting.CommandLine.Tests/app.config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+