1010using Newtonsoft . Json . Linq ;
1111using NuGet . Client ;
1212using NuGet . Commands ;
13+ using NuGet . Commands . Restore ;
1314using NuGet . Common ;
1415using NuGet . Configuration ;
1516using NuGet . ContentModel ;
@@ -272,10 +273,50 @@ protected virtual void DownloadTool(
272273 DownloadAndExtractPackage ( packageId , nugetPackageDownloader , packageDownloadDir . Value , packageVersion , packageSourceLocation , includeUnlisted : givenSpecificVersion ) ;
273274 }
274275
275- CreateAssetFile ( packageId , packageVersion , packageDownloadDir , Path . Combine ( assetFileDirectory . Value , "project.assets.json" ) , _runtimeJsonPath , targetFramework ) ;
276+ CreateAssetFile ( packageId , packageVersion , packageDownloadDir , Path . Combine ( assetFileDirectory . Value , ToolPackageInstance . AssetsFileName ) , _runtimeJsonPath , targetFramework ) ;
276277
277278 // Also download RID-specific package if needed
279+ var ridSpecificPackage = ResolveRidSpecificPackage ( packageId , packageVersion , packageDownloadDir , assetFileDirectory ) ;
280+ if ( ridSpecificPackage != null )
281+ {
282+ if ( ! IsPackageInstalled ( new PackageId ( ridSpecificPackage . Id ) , ridSpecificPackage . Version , packageDownloadDir . Value ) )
283+ {
284+ DownloadAndExtractPackage ( new PackageId ( ridSpecificPackage . Id ) , nugetPackageDownloader , packageDownloadDir . Value , ridSpecificPackage . Version , packageSourceLocation , includeUnlisted : true ) ;
285+ }
286+
287+ CreateAssetFile ( new PackageId ( ridSpecificPackage . Id ) , ridSpecificPackage . Version , packageDownloadDir , Path . Combine ( assetFileDirectory . Value , ToolPackageInstance . RidSpecificPackageAssetsFileName ) , _runtimeJsonPath , targetFramework ) ;
288+ }
289+ }
290+
291+ public bool IsLocalToolDownloaded (
292+ PackageId packageId ,
293+ NuGetVersion packageVersion ,
294+ string ? targetFramework = null )
295+ {
296+ if ( ! IsPackageInstalled ( packageId , packageVersion , _localToolDownloadDir . Value ) )
297+ {
298+ return false ;
299+ }
300+ CreateAssetFile ( packageId , packageVersion , _localToolDownloadDir , Path . Combine ( _localToolAssetDir . Value , ToolPackageInstance . AssetsFileName ) , _runtimeJsonPath , targetFramework ) ;
301+
302+ var ridSpecificPackage = ResolveRidSpecificPackage ( packageId , packageVersion , _localToolDownloadDir , _localToolAssetDir ) ;
303+ if ( ridSpecificPackage != null )
304+ {
305+ return IsPackageInstalled ( new PackageId ( ridSpecificPackage . Id ) , ridSpecificPackage . Version , _localToolDownloadDir . Value ) ;
306+ }
307+ else
308+ {
309+ return true ;
310+ }
311+ }
312+
313+ private PackageIdentity ? ResolveRidSpecificPackage ( PackageId packageId ,
314+ NuGetVersion packageVersion ,
315+ DirectoryPath packageDownloadDir ,
316+ DirectoryPath assetFileDirectory )
317+ {
278318 var toolConfiguration = GetToolConfiguration ( packageId , packageDownloadDir , assetFileDirectory ) ;
319+
279320 if ( toolConfiguration . RidSpecificPackages ? . Any ( ) == true )
280321 {
281322 var runtimeGraph = JsonRuntimeFormat . ReadRuntimeGraph ( _runtimeJsonPath ) ;
@@ -288,16 +329,11 @@ protected virtual void DownloadTool(
288329
289330 var resolvedPackage = toolConfiguration . RidSpecificPackages [ bestRuntimeIdentifier ] ;
290331
291- if ( ! IsPackageInstalled ( new PackageId ( resolvedPackage . Id ) , resolvedPackage . Version , packageDownloadDir . Value ) )
292- {
293- DownloadAndExtractPackage ( new PackageId ( resolvedPackage . Id ) , nugetPackageDownloader , packageDownloadDir . Value , resolvedPackage . Version , packageSourceLocation , includeUnlisted : true ) ;
294- }
295-
296- CreateAssetFile ( new PackageId ( resolvedPackage . Id ) , resolvedPackage . Version , packageDownloadDir , Path . Combine ( assetFileDirectory . Value , ToolPackageInstance . RidSpecificPackageAssetsFileName ) , _runtimeJsonPath , targetFramework ) ;
332+ return resolvedPackage ;
297333 }
298- }
299334
300-
335+ return null ;
336+ }
301337
302338 protected void UpdateRuntimeConfig (
303339 ToolPackageInstance toolPackageInstance
@@ -320,12 +356,11 @@ ToolPackageInstance toolPackageInstance
320356 }
321357 }
322358
323- public virtual NuGetVersion GetNuGetVersion (
359+ public virtual ( NuGetVersion version , PackageSource source ) GetNuGetVersion (
324360 PackageLocation packageLocation ,
325361 PackageId packageId ,
326362 VerbosityOptions verbosity ,
327363 VersionRange ? versionRange = null ,
328- bool isGlobalTool = false ,
329364 RestoreActionConfig ? restoreActionConfig = null )
330365 {
331366 if ( versionRange == null )
@@ -346,6 +381,6 @@ public virtual NuGetVersion GetNuGetVersion(
346381 additionalSourceFeeds : packageLocation . AdditionalFeeds ,
347382 basePath : _currentWorkingDirectory ) ;
348383
349- return nugetPackageDownloader . GetBestPackageVersionAsync ( packageId , versionRange , packageSourceLocation ) . GetAwaiter ( ) . GetResult ( ) ;
384+ return nugetPackageDownloader . GetBestPackageVersionAndSourceAsync ( packageId , versionRange , packageSourceLocation ) . GetAwaiter ( ) . GetResult ( ) ;
350385 }
351386}
0 commit comments