diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/RazorProjectEngineBuilderExtensions.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/RazorProjectEngineBuilderExtensions.cs index 642110102d..6e57ab1016 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/RazorProjectEngineBuilderExtensions.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/RazorProjectEngineBuilderExtensions.cs @@ -32,12 +32,15 @@ namespace Microsoft.CodeAnalysis.Razor builder.Features.Remove(existingFeature); } - builder.Features.Add(new ConfigureParserForCSharpVersionFeature(csharpLanguageVersion)); + // This will convert any "latest", "default" or "LatestMajor" LanguageVersions into their numerical equivalent. + var effectiveCSharpLanguageVersion = LanguageVersionFacts.MapSpecifiedToEffectiveVersion(csharpLanguageVersion); + builder.Features.Add(new ConfigureParserForCSharpVersionFeature(effectiveCSharpLanguageVersion)); return builder; } - private class ConfigureParserForCSharpVersionFeature : IConfigureRazorCodeGenerationOptionsFeature + // Internal for testing + internal class ConfigureParserForCSharpVersionFeature : IConfigureRazorCodeGenerationOptionsFeature { public ConfigureParserForCSharpVersionFeature(LanguageVersion csharpLanguageVersion) { diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/test/RazorProjectEngineBuilderExtensionsTest.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/test/RazorProjectEngineBuilderExtensionsTest.cs new file mode 100644 index 0000000000..fd31ccc33d --- /dev/null +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/test/RazorProjectEngineBuilderExtensionsTest.cs @@ -0,0 +1,31 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Linq; +using Microsoft.AspNetCore.Razor.Language; +using Xunit; +using static Microsoft.CodeAnalysis.Razor.RazorProjectEngineBuilderExtensions; + +namespace Microsoft.CodeAnalysis.Razor +{ + public class RazorProjectEngineBuilderExtensionsTest + { + [Fact] + public void SetCSharpLanguageVersion_ResolvesNonNumericCSharpLangVersions() + { + // Arrange + var csharpLanguageVersion = CSharp.LanguageVersion.Latest; + + // Act + var projectEngine = RazorProjectEngine.Create(builder => + { + builder.SetCSharpLanguageVersion(csharpLanguageVersion); + }); + + // Assert + var feature = projectEngine.EngineFeatures.OfType().FirstOrDefault(); + Assert.NotNull(feature); + Assert.NotEqual(csharpLanguageVersion, feature.CSharpLanguageVersion); + } + } +}