@@ -72,8 +72,10 @@ public enum CompilerOptions
7272 ReferenceUnsafe = 0x10000 ,
7373 CheckForOverflowUnderflow = 0x20000 ,
7474 ProcessXmlDoc = 0x40000 ,
75+ EnableRuntimeAsync = 0x80000 ,
76+ UseRoslyn4_14_0 = 0x100000 ,
7577 UseMcsMask = UseMcs2_6_4 | UseMcs5_23 ,
76- UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslynLatest
78+ UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslyn4_14_0 | UseRoslynLatest
7779 }
7880
7981 [ Flags ]
@@ -135,11 +137,12 @@ internal static async Task Initialize()
135137 await roslynToolset . Fetch ( "1.3.2" , "Microsoft.Net.Compilers" , "tools" ) . ConfigureAwait ( false ) ;
136138 await roslynToolset . Fetch ( "2.10.0" , "Microsoft.Net.Compilers" , "tools" ) . ConfigureAwait ( false ) ;
137139 await roslynToolset . Fetch ( "3.11.0" ) . ConfigureAwait ( false ) ;
140+ await roslynToolset . Fetch ( "4.14.0" ) . ConfigureAwait ( false ) ;
138141 await roslynToolset . Fetch ( roslynLatestVersion ) . ConfigureAwait ( false ) ;
139142
140143 await vswhereToolset . Fetch ( ) . ConfigureAwait ( false ) ;
141144 await RefAssembliesToolset . Fetch ( "5.0.0" , sourcePath : "ref/net5.0" ) . ConfigureAwait ( false ) ;
142- await RefAssembliesToolset . Fetch ( "10 .0.0" , sourcePath : "ref/net10 .0" ) . ConfigureAwait ( false ) ;
145+ await RefAssembliesToolset . Fetch ( "9 .0.0" , sourcePath : "ref/net9 .0" ) . ConfigureAwait ( false ) ;
143146 await RefAssembliesToolset . Fetch ( CurrentNetCoreRefAsmVersion , sourcePath : $ "ref/net{ CurrentNetCoreVersion } ") . ConfigureAwait ( false ) ;
144147
145148#if DEBUG
@@ -347,6 +350,7 @@ private static string ReplacePrivImplDetails(string il)
347350
348351 static readonly Dictionary < string , Lazy < string > > targetFrameworkAttributeSnippetFiles = new ( ) {
349352 { CurrentNetCoreAppVersion , new Lazy < string > ( ( ) => GetTargetFrameworkAttributeSnippetFile ( CurrentNetCoreAppVersion ) ) } ,
353+ { ".NETCoreApp,Version=v9.0" , new Lazy < string > ( ( ) => GetTargetFrameworkAttributeSnippetFile ( ".NETCoreApp,Version=v9.0" ) ) } ,
350354 { ".NETCoreApp,Version=v5.0" , new Lazy < string > ( ( ) => GetTargetFrameworkAttributeSnippetFile ( ".NETCoreApp,Version=v5.0" ) ) } ,
351355 { ".NETCoreApp,Version=v2.2" , new Lazy < string > ( ( ) => GetTargetFrameworkAttributeSnippetFile ( ".NETCoreApp,Version=v2.2" ) ) } ,
352356 } ;
@@ -429,6 +433,7 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
429433 preprocessorSymbols . Add ( "VB14" ) ;
430434 if ( flags . HasFlag ( CompilerOptions . UseRoslyn2_10_0 )
431435 || flags . HasFlag ( CompilerOptions . UseRoslyn3_11_0 )
436+ || flags . HasFlag ( CompilerOptions . UseRoslyn4_14_0 )
432437 || flags . HasFlag ( CompilerOptions . UseRoslynLatest ) )
433438 {
434439 preprocessorSymbols . Add ( "ROSLYN2" ) ;
@@ -439,6 +444,7 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
439444 preprocessorSymbols . Add ( "VB15" ) ;
440445 }
441446 if ( flags . HasFlag ( CompilerOptions . UseRoslyn3_11_0 )
447+ || flags . HasFlag ( CompilerOptions . UseRoslyn4_14_0 )
442448 || flags . HasFlag ( CompilerOptions . UseRoslynLatest ) )
443449 {
444450 if ( ! flags . HasFlag ( CompilerOptions . TargetNet40 ) )
@@ -450,22 +456,30 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
450456 preprocessorSymbols . Add ( "CS90" ) ;
451457 preprocessorSymbols . Add ( "VB16" ) ;
452458 }
453- if ( flags . HasFlag ( CompilerOptions . UseRoslynLatest ) )
459+ if ( flags . HasFlag ( CompilerOptions . UseRoslyn4_14_0 )
460+ || flags . HasFlag ( CompilerOptions . UseRoslynLatest ) )
454461 {
455462 if ( ! flags . HasFlag ( CompilerOptions . TargetNet40 ) )
456463 {
457464 preprocessorSymbols . Add ( "NET60" ) ;
458465 preprocessorSymbols . Add ( "NET70" ) ;
459466 preprocessorSymbols . Add ( "NET80" ) ;
460467 preprocessorSymbols . Add ( "NET90" ) ;
461- preprocessorSymbols . Add ( "NET100" ) ;
462- preprocessorSymbols . Add ( "NET110" ) ;
463468 }
464469 preprocessorSymbols . Add ( "ROSLYN4" ) ;
465470 preprocessorSymbols . Add ( "CS100" ) ;
466471 preprocessorSymbols . Add ( "CS110" ) ;
467472 preprocessorSymbols . Add ( "CS120" ) ;
468473 preprocessorSymbols . Add ( "CS130" ) ;
474+ }
475+ if ( flags . HasFlag ( CompilerOptions . UseRoslynLatest ) )
476+ {
477+ if ( ! flags . HasFlag ( CompilerOptions . TargetNet40 ) )
478+ {
479+ preprocessorSymbols . Add ( "NET100" ) ;
480+ preprocessorSymbols . Add ( "NET110" ) ;
481+ }
482+ preprocessorSymbols . Add ( "ROSLYN5" ) ;
469483 preprocessorSymbols . Add ( "CS140" ) ;
470484 preprocessorSymbols . Add ( "CS150" ) ;
471485 }
@@ -528,6 +542,7 @@ public static async Task<CompilerResults> CompileCSharp(string sourceFileName, C
528542 CompilerOptions . UseRoslyn1_3_2 => ( "1.3.2" , "6" , null ) ,
529543 CompilerOptions . UseRoslyn2_10_0 => ( "2.10.0" , "latest" , targetNet40 ? null : ".NETCoreApp,Version=v2.2" ) ,
530544 CompilerOptions . UseRoslyn3_11_0 => ( "3.11.0" , "latest" , targetNet40 ? null : ".NETCoreApp,Version=v5.0" ) ,
545+ CompilerOptions . UseRoslyn4_14_0 => ( "4.14.0" , "latest" , targetNet40 ? null : ".NETCoreApp,Version=v9.0" ) ,
531546 _ => ( roslynLatestVersion , flags . HasFlag ( CompilerOptions . Preview ) ? "preview" : "latest" , targetNet40 ? null : CurrentNetCoreAppVersion )
532547 } ;
533548
@@ -591,13 +606,18 @@ public static async Task<CompilerResults> CompileCSharp(string sourceFileName, C
591606 if ( roslynVersion != "legacy" )
592607 {
593608 otherOptions += "/shared " ;
594- if ( ! targetNet40 && Version . Parse ( RoslynToolset . SanitizeVersion ( roslynVersion ) ) . Major > 2 )
609+ var version = Version . Parse ( RoslynToolset . SanitizeVersion ( roslynVersion ) ) ;
610+ if ( ! targetNet40 && version . Major > 2 )
595611 {
596612 if ( flags . HasFlag ( CompilerOptions . NullableEnable ) )
597613 otherOptions += "/nullable+ " ;
598614 else
599615 otherOptions += "/nullable- " ;
600616 }
617+ if ( ! targetNet40 && roslynVersion == roslynLatestVersion && flags . HasFlag ( CompilerOptions . EnableRuntimeAsync ) )
618+ {
619+ otherOptions += "/features:runtime-async=on " ;
620+ }
601621 }
602622
603623 if ( flags . HasFlag ( CompilerOptions . Library ) )
@@ -743,6 +763,7 @@ internal static DecompilerSettings GetSettings(CompilerOptions cscOptions)
743763 CompilerOptions . UseRoslyn1_3_2 => CSharp . LanguageVersion . CSharp6 ,
744764 CompilerOptions . UseRoslyn2_10_0 => CSharp . LanguageVersion . CSharp7_3 ,
745765 CompilerOptions . UseRoslyn3_11_0 => CSharp . LanguageVersion . CSharp9_0 ,
766+ CompilerOptions . UseRoslyn4_14_0 => CSharp . LanguageVersion . CSharp13_0 ,
746767 _ => cscOptions . HasFlag ( CompilerOptions . Preview ) ? CSharp . LanguageVersion . Latest : CSharp . LanguageVersion . CSharp14_0 ,
747768 } ;
748769 DecompilerSettings settings = new ( langVersion ) {
@@ -819,6 +840,8 @@ internal static string GetSuffix(CompilerOptions cscOptions)
819840 suffix += ".roslyn2" ;
820841 if ( ( cscOptions & CompilerOptions . UseRoslyn3_11_0 ) != 0 )
821842 suffix += ".roslyn3" ;
843+ if ( ( cscOptions & CompilerOptions . UseRoslyn4_14_0 ) != 0 )
844+ suffix += ".roslyn4" ;
822845 if ( ( cscOptions & CompilerOptions . UseRoslynLatest ) != 0 )
823846 suffix += ".roslyn" ;
824847 if ( ( cscOptions & CompilerOptions . UseMcs2_6_4 ) != 0 )
0 commit comments