@@ -19,17 +19,20 @@ public partial class DotNet : IDotNet
19
19
private readonly ILogger logger ;
20
20
private readonly TemporaryDirectory ? tempWorkingDirectory ;
21
21
22
- private DotNet ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger , TemporaryDirectory ? tempWorkingDirectory = null )
22
+ private DotNet ( IDotNetCliInvoker dotnetCliInvoker , ILogger logger , bool runDotnetInfo , TemporaryDirectory ? tempWorkingDirectory = null )
23
23
{
24
24
this . tempWorkingDirectory = tempWorkingDirectory ;
25
25
this . dotnetCliInvoker = dotnetCliInvoker ;
26
26
this . logger = logger ;
27
- Info ( ) ;
27
+ if ( runDotnetInfo )
28
+ {
29
+ Info ( ) ;
30
+ }
28
31
}
29
32
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 ) { }
31
34
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 ) ;
33
36
34
37
public static IDotNet Make ( ILogger logger , string ? dotNetPath , TemporaryDirectory tempWorkingDirectory , DependabotProxy ? dependabotProxy ) => new DotNet ( logger , dotNetPath , tempWorkingDirectory , dependabotProxy ) ;
35
38
@@ -169,7 +172,10 @@ private static BuildScript DownloadDotNet(IBuildActions actions, ILogger logger,
169
172
170
173
if ( versions . Count > 0 )
171
174
{
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 ) ;
173
179
}
174
180
175
181
if ( ensureDotNetAvailable )
@@ -269,6 +275,14 @@ BuildScript GetInstall(string pwsh) =>
269
275
Argument ( path ) . Script ;
270
276
}
271
277
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
+
272
286
var installScript = prelude & BuildScript . Failure ;
273
287
274
288
var attempted = new HashSet < string > ( ) ;
@@ -283,7 +297,7 @@ BuildScript GetInstall(string pwsh) =>
283
297
284
298
// When there are multiple versions requested, we want to try to fetch them all, reporting
285
299
// 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 ) ;
287
301
} ) ;
288
302
}
289
303
0 commit comments