@@ -19,17 +19,20 @@ public partial class DotNet : IDotNet
1919 private readonly ILogger logger ;
2020 private readonly TemporaryDirectory ? tempWorkingDirectory ;
2121
22- private DotNet ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger , TemporaryDirectory ? tempWorkingDirectory = null )
22+ private DotNet ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger , bool runDotnetInfo , TemporaryDirectory ? tempWorkingDirectory = null )
2323 {
2424 this . tempWorkingDirectory = tempWorkingDirectory ;
2525 this . dotnetCliInvoker = dotnetCliInvoker ;
2626 this . logger = logger ;
27- Info ( ) ;
27+ if ( runDotnetInfo )
28+ {
29+ Info ( ) ;
30+ }
2831 }
2932
30- private DotNet ( ILogger logger , string ? dotNetPath , TemporaryDirectory tempWorkingDirectory , DependabotProxy ? dependabotProxy ) : this ( new DotNetCliInvoker ( logger , Path . Combine ( dotNetPath ?? string . Empty , "dotnet" ) , dependabotProxy ) , logger , tempWorkingDirectory ) { }
33+ private DotNet ( ILogger logger , string ? dotNetPath , TemporaryDirectory tempWorkingDirectory , DependabotProxy ? dependabotProxy ) : this ( new DotNetCliInvoker ( logger , Path . Combine ( dotNetPath ?? string . Empty , "dotnet" ) , dependabotProxy ) , logger , dotNetPath is null , tempWorkingDirectory ) { }
3134
32- internal static IDotNet Make ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger ) => new DotNet ( dotnetCliInvoker , logger ) ;
35+ internal static IDotNet Make ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger , bool runDotnetInfo ) => new DotNet ( dotnetCliInvoker , logger , runDotnetInfo ) ;
3336
3437 public static IDotNet Make ( ILogger logger , string ? dotNetPath , TemporaryDirectory tempWorkingDirectory , DependabotProxy ? dependabotProxy ) => new DotNet ( logger , dotNetPath , tempWorkingDirectory , dependabotProxy ) ;
3538
@@ -169,7 +172,10 @@ private static BuildScript DownloadDotNet(IBuildActions actions, ILogger logger,
169172
170173 if ( versions . Count > 0 )
171174 {
172- return DownloadDotNetVersion ( actions , logger , tempWorkingDirectory , shouldCleanUp , installDir , versions ) ;
175+ return
176+ DownloadDotNetVersion ( actions , logger , tempWorkingDirectory , shouldCleanUp , installDir , versions ) |
177+ // if neither of the versions succeed, try the latest version
178+ DownloadDotNetVersion ( actions , logger , tempWorkingDirectory , shouldCleanUp , installDir , [ LatestDotNetSdkVersion ] , needExactVersion : false ) ;
173179 }
174180
175181 if ( ensureDotNetAvailable )
@@ -269,6 +275,14 @@ BuildScript GetInstall(string pwsh) =>
269275 Argument ( path ) . Script ;
270276 }
271277
278+ var dotnetInfo = new CommandBuilder ( actions ) .
279+ RunCommand ( actions . PathCombine ( path , "dotnet" ) ) .
280+ Argument ( "--info" ) . Script ;
281+
282+ Func < string , BuildScript > getInstallAndVerify = version =>
283+ // run `dotnet --info` after install, to check that it executes successfully
284+ getInstall ( version ) & dotnetInfo ;
285+
272286 var installScript = prelude & BuildScript . Failure ;
273287
274288 var attempted = new HashSet < string > ( ) ;
@@ -283,7 +297,7 @@ BuildScript GetInstall(string pwsh) =>
283297
284298 // When there are multiple versions requested, we want to try to fetch them all, reporting
285299 // a successful exit code when at least one of them succeeds
286- return combinedExit != 0 ? getInstall ( version ) : BuildScript . Bind ( getInstall ( version ) , _ => BuildScript . Success ) ;
300+ return combinedExit != 0 ? getInstallAndVerify ( version ) : BuildScript . Bind ( getInstallAndVerify ( version ) , _ => BuildScript . Success ) ;
287301 } ) ;
288302 }
289303
0 commit comments