diff --git a/GFramework.SourceGenerators.Tests/Core/MetadataReferenceTestBuilder.cs b/GFramework.SourceGenerators.Tests/Core/MetadataReferenceTestBuilder.cs index 173a88d9..45fd506a 100644 --- a/GFramework.SourceGenerators.Tests/Core/MetadataReferenceTestBuilder.cs +++ b/GFramework.SourceGenerators.Tests/Core/MetadataReferenceTestBuilder.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.IO; -using Microsoft.CodeAnalysis.CSharp; namespace GFramework.SourceGenerators.Tests.Core; @@ -9,6 +8,11 @@ namespace GFramework.SourceGenerators.Tests.Core; /// public static class MetadataReferenceTestBuilder { + // Reuse the runtime reference set across generator tests to avoid reparsing TRUSTED_PLATFORM_ASSEMBLIES + // for every in-memory compilation. + private static readonly Lazy> CachedRuntimeReferences = + new(CreateRuntimeMetadataReferences); + /// /// 将给定源码编译为内存程序集,并返回可供测试编译消费的元数据引用。 /// @@ -22,7 +26,7 @@ public static class MetadataReferenceTestBuilder params MetadataReference[] additionalReferences) { var syntaxTree = CSharpSyntaxTree.ParseText(source); - var references = GetRuntimeMetadataReferences() + var references = CachedRuntimeReferences.Value .Concat(additionalReferences) .ToImmutableArray(); var compilation = CSharpCompilation.Create( @@ -53,6 +57,11 @@ public static class MetadataReferenceTestBuilder /// /// 当前运行时可信平台程序集对应的元数据引用。 public static ImmutableArray GetRuntimeMetadataReferences() + { + return CachedRuntimeReferences.Value; + } + + private static ImmutableArray CreateRuntimeMetadataReferences() { var trustedPlatformAssemblies = ((string?)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES"))? .Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries) diff --git a/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs b/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs index dc8c9abb..f51dde95 100644 --- a/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs +++ b/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs @@ -1,7 +1,6 @@ using System.Reflection; using GFramework.SourceGenerators.Cqrs; using GFramework.SourceGenerators.Tests.Core; -using Microsoft.CodeAnalysis.CSharp; namespace GFramework.SourceGenerators.Tests.Cqrs; @@ -1155,7 +1154,11 @@ public class CqrsHandlerRegistryGeneratorTests var compilationErrors = updatedCompilation.GetDiagnostics() .Where(static diagnostic => diagnostic.Severity == DiagnosticSeverity.Error) .ToArray(); - Assert.That(compilationErrors, Is.Empty, string.Join(Environment.NewLine, compilationErrors)); + Assert.That( + compilationErrors, + Is.Empty, + () => + $"编译生成的代码时出现错误:{Environment.NewLine}{string.Join(Environment.NewLine, compilationErrors.Select(static diagnostic => diagnostic.ToString()))}"); var runResult = driver.GetRunResult(); Assert.That(runResult.Results, Has.Length.EqualTo(1));