@@ -162,6 +162,10 @@ IEnumerable<string> IBuildActions.EnumerateDirectories(string dir)
162162
163163 bool IBuildActions . IsRunningOnAppleSilicon ( ) => IsRunningOnAppleSilicon ;
164164
165+ public bool IsMonoInstalled { get ; set ; }
166+
167+ bool IBuildActions . IsMonoInstalled ( ) => IsMonoInstalled ;
168+
165169 public string PathCombine ( params string [ ] parts )
166170 {
167171 return string . Join ( IsWindows ? '\\ ' : '/' , parts . Where ( p => ! string . IsNullOrWhiteSpace ( p ) ) ) ;
@@ -424,8 +428,7 @@ private CSharpAutobuilder CreateAutoBuilder(bool isWindows,
424428 return new CSharpAutobuilder ( actions , options ) ;
425429 }
426430
427- [ Fact ]
428- public void TestDefaultCSharpAutoBuilder ( )
431+ private void SetupActionForDotnet ( )
429432 {
430433 actions . RunProcess [ "cmd.exe /C dotnet --info" ] = 0 ;
431434 actions . RunProcess [ @"cmd.exe /C dotnet clean C:\Project\test.csproj" ] = 0 ;
@@ -438,20 +441,80 @@ public void TestDefaultCSharpAutoBuilder()
438441 actions . GetEnvironmentVariable [ "CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR" ] = "scratch" ;
439442 actions . EnumerateFiles [ @"C:\Project" ] = "foo.cs\n bar.cs\n test.csproj" ;
440443 actions . EnumerateDirectories [ @"C:\Project" ] = "" ;
441- var xml = new XmlDocument ( ) ;
442- xml . LoadXml ( @"<Project Sdk=""Microsoft.NET.Sdk"">
443- <PropertyGroup>
444- <OutputType>Exe</OutputType>
445- <TargetFramework>netcoreapp2.1</TargetFramework>
446- </PropertyGroup>
444+ }
447445
448- </Project>" ) ;
446+ private void CreateAndVerifyDotnetScript ( XmlDocument xml )
447+ {
449448 actions . LoadXml [ @"C:\Project\test.csproj" ] = xml ;
450449
451450 var autobuilder = CreateAutoBuilder ( true ) ;
452451 TestAutobuilderScript ( autobuilder , 0 , 4 ) ;
453452 }
454453
454+ [ Fact ]
455+ public void TestDefaultCSharpAutoBuilder1 ( )
456+ {
457+ SetupActionForDotnet ( ) ;
458+ var xml = new XmlDocument ( ) ;
459+ xml . LoadXml (
460+ """
461+ <Project Sdk="Microsoft.NET.Sdk">
462+ <PropertyGroup>
463+ <OutputType>Exe</OutputType>
464+ <TargetFramework>netcoreapp2.1</TargetFramework>
465+ </PropertyGroup>
466+ </Project>
467+ """ ) ;
468+ CreateAndVerifyDotnetScript ( xml ) ;
469+ }
470+
471+ [ Fact ]
472+ public void TestDefaultCSharpAutoBuilder2 ( )
473+ {
474+ SetupActionForDotnet ( ) ;
475+ var xml = new XmlDocument ( ) ;
476+
477+ xml . LoadXml (
478+ """
479+ <Project>
480+ <Sdk Name="Microsoft.NET.Sdk" />
481+
482+ <PropertyGroup>
483+ <OutputType>Exe</OutputType>
484+ <TargetFramework>net9.0</TargetFramework>
485+ <ImplicitUsings>enable</ImplicitUsings>
486+ <Nullable>enable</Nullable>
487+ </PropertyGroup>
488+ </Project>
489+ """
490+ ) ;
491+ CreateAndVerifyDotnetScript ( xml ) ;
492+ }
493+
494+ [ Fact ]
495+ public void TestDefaultCSharpAutoBuilder3 ( )
496+ {
497+ SetupActionForDotnet ( ) ;
498+ var xml = new XmlDocument ( ) ;
499+
500+ xml . LoadXml (
501+ """
502+ <Project>
503+ <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
504+
505+ <PropertyGroup>
506+ <OutputType>Exe</OutputType>
507+ <TargetFramework>net9.0</TargetFramework>
508+ <ImplicitUsings>enable</ImplicitUsings>
509+ <Nullable>enable</Nullable>
510+ </PropertyGroup>
511+ <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
512+ </Project>
513+ """
514+ ) ;
515+ CreateAndVerifyDotnetScript ( xml ) ;
516+ }
517+
455518 [ Fact ]
456519 public void TestLinuxCSharpAutoBuilder ( )
457520 {
@@ -797,11 +860,32 @@ public void TestDirsProjWindows()
797860 }
798861
799862 [ Fact ]
800- public void TestDirsProjLinux ( )
863+ public void TestDirsProjLinux_WithMono ( )
801864 {
865+ actions . IsMonoInstalled = true ;
866+
802867 actions . RunProcess [ @"nuget restore C:\Project/dirs.proj -DisableParallelProcessing" ] = 1 ;
803868 actions . RunProcess [ @"mono scratch/.nuget/nuget.exe restore C:\Project/dirs.proj -DisableParallelProcessing" ] = 0 ;
804869 actions . RunProcess [ @"msbuild C:\Project/dirs.proj /t:rebuild" ] = 0 ;
870+
871+ var autobuilder = TestDirsProjLinux ( ) ;
872+ TestAutobuilderScript ( autobuilder , 0 , 3 ) ;
873+ }
874+
875+ [ Fact ]
876+ public void TestDirsProjLinux_WithoutMono ( )
877+ {
878+ actions . IsMonoInstalled = false ;
879+
880+ actions . RunProcess [ @"dotnet msbuild /t:restore C:\Project/dirs.proj" ] = 0 ;
881+ actions . RunProcess [ @"dotnet msbuild C:\Project/dirs.proj /t:rebuild" ] = 0 ;
882+
883+ var autobuilder = TestDirsProjLinux ( ) ;
884+ TestAutobuilderScript ( autobuilder , 0 , 2 ) ;
885+ }
886+
887+ private CSharpAutobuilder TestDirsProjLinux ( )
888+ {
805889 actions . FileExists [ "csharp.log" ] = true ;
806890 actions . FileExists [ @"C:\Project/a/test.csproj" ] = true ;
807891 actions . FileExists [ @"C:\Project/dirs.proj" ] = true ;
@@ -830,8 +914,7 @@ public void TestDirsProjLinux()
830914</Project>" ) ;
831915 actions . LoadXml [ @"C:\Project/dirs.proj" ] = dirsproj ;
832916
833- var autobuilder = CreateAutoBuilder ( false ) ;
834- TestAutobuilderScript ( autobuilder , 0 , 3 ) ;
917+ return CreateAutoBuilder ( false ) ;
835918 }
836919
837920 [ Fact ]
0 commit comments