From 12e451dc659cb03bcd881a70f5f350434025a043 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 25 Aug 2026 14:09:57 -0500 Subject: [PATCH 1/4] [tests] Use approved feed for analyzer references Roslyn analyzer tests resolve reference assemblies at test runtime. Their NuGet client ignored the repository NuGet.config and contacted public NuGet infrastructure, violating CFS network isolation. Copy the repository configuration beside the test assembly and configure all verifier test types to use it when acquiring reference packages. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3172357b-9b50-454a-9e75-9f481ffb3934 --- .../Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj | 3 +++ .../Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs | 2 ++ .../Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs | 3 ++- .../Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs | 2 ++ .../Tests/Verifiers/CSharpVerifierHelper.cs | 5 +++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj index 51fa026fe1e..a3a27c56b09 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj @@ -19,6 +19,9 @@ + + PreserveNewest + diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs index 4a82bed3d48..ca37d954819 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs @@ -16,6 +16,8 @@ public class Test : CSharpAnalyzerTest public List Analyzers => analyzers; public Test () { + ReferenceAssemblies = CSharpVerifierHelper.DefaultReferenceAssemblies; + SolutionTransforms.Add ((solution, projectId) => { var project = solution.GetProject (projectId); var compilationOptions = project.CompilationOptions; diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs index 310409b7090..141f5934b28 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs @@ -11,6 +11,8 @@ public class Test : CSharpCodeFixTest { public Test () { + ReferenceAssemblies = CSharpVerifierHelper.DefaultReferenceAssemblies; + SolutionTransforms.Add ((solution, projectId) => { var compilationOptions = solution.GetProject (projectId).CompilationOptions; compilationOptions = compilationOptions.WithSpecificDiagnosticOptions ( @@ -22,4 +24,3 @@ public Test () } } } - diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs index 7beb164e48f..5e1db64cb44 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs @@ -8,6 +8,8 @@ public class Test : CSharpCodeRefactoringTest { public Test () { + ReferenceAssemblies = CSharpVerifierHelper.DefaultReferenceAssemblies; + SolutionTransforms.Add ((solution, projectId) => { var compilationOptions = solution.GetProject (projectId).CompilationOptions; compilationOptions = compilationOptions.WithSpecificDiagnosticOptions ( diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpVerifierHelper.cs b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpVerifierHelper.cs index bdeb56f1724..3a2b1eae3ac 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpVerifierHelper.cs +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Verifiers/CSharpVerifierHelper.cs @@ -1,10 +1,15 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Testing; using System; using System.Collections.Immutable; +using System.IO; internal static class CSharpVerifierHelper { + internal static ReferenceAssemblies DefaultReferenceAssemblies { get; } = + ReferenceAssemblies.Default.WithNuGetConfigFilePath (Path.Combine (AppContext.BaseDirectory, "NuGet.config")); + /// /// By default, the compiler reports diagnostics for nullable reference types at /// , and the analyzer test framework defaults to only validating From 82fd88e6188ceac9e50bb00ae7b0cd76d9c3c872 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 25 Aug 2026 15:05:45 -0500 Subject: [PATCH 2/4] [tests] Always copy analyzer NuGet config Avoid retaining an older NuGet.config in the centralized test output when source timestamps move backwards after switching branches. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3172357b-9b50-454a-9e75-9f481ffb3934 --- .../Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj index a3a27c56b09..54144c663c5 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj @@ -20,7 +20,7 @@ - PreserveNewest + Always From 51ca8d28b81e7e65ef5aa023ea05c9fe66151c20 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 25 Aug 2026 15:16:07 -0500 Subject: [PATCH 3/4] [tests] Preserve incremental analyzer config copy Compare NuGet.config content instead of copying it on every build. This refreshes stale output even when its timestamp is newer while avoiding a no-op write during incremental builds. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3172357b-9b50-454a-9e75-9f481ffb3934 --- .../Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj index 54144c663c5..b031962e1d4 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj @@ -20,7 +20,7 @@ - Always + IfDifferent From 4b113d70774aa16f4cff6da9c04f5803ca5ed1b3 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 25 Aug 2026 15:18:42 -0500 Subject: [PATCH 4/4] [tests] Use standard incremental config copy Keep the analyzer test configuration copy consistent with existing project conventions. Clean CI builds do not need unconditional or content-based copy behavior to enforce the approved package sources. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3172357b-9b50-454a-9e75-9f481ffb3934 --- .../Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj index b031962e1d4..a3a27c56b09 100644 --- a/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj +++ b/src/Microsoft.Android.Sdk.Analysis/Tests/Microsoft.Android.Sdk.Analysis.Tests.csproj @@ -20,7 +20,7 @@ - IfDifferent + PreserveNewest