@@ -40,6 +40,8 @@ internal sealed class ProjectConverter : IProjectConverter
40
40
private readonly ISettings _nugetSettings ;
41
41
private readonly ProjectCollection _projectCollection = new ( ) ;
42
42
private readonly string _repositoryPath ;
43
+ private readonly RestoreCommandProvidersCache _restoreCommandProvidersCache ;
44
+ private readonly RestoreArgs _restoreArgs ;
43
45
44
46
public ProjectConverter ( ProjectConverterSettings converterSettings )
45
47
: this ( converterSettings , GetNuGetSettings ( converterSettings ) )
@@ -60,6 +62,19 @@ public ProjectConverter(ProjectConverterSettings converterSettings, ISettings nu
60
62
PackagePathResolver = new PackagePathResolver ( _repositoryPath ) ;
61
63
62
64
VersionFolderPathResolver = new VersionFolderPathResolver ( _globalPackagesFolder ) ;
65
+
66
+ _restoreCommandProvidersCache = new RestoreCommandProvidersCache ( ) ;
67
+ _restoreArgs = new RestoreArgs
68
+ {
69
+ AllowNoOp = true ,
70
+ CacheContext = new SourceCacheContext ( )
71
+ {
72
+ IgnoreFailedSources = true ,
73
+ } ,
74
+ CachingSourceProvider = new CachingSourceProvider ( new PackageSourceProvider ( _nugetSettings ) ) ,
75
+ GlobalPackagesFolder = _globalPackagesFolder ,
76
+ Log = NullLogger . Instance ,
77
+ } ;
63
78
}
64
79
65
80
public ILogger Log => _converterSettings . Log ;
@@ -113,7 +128,8 @@ public void ConvertRepository(CancellationToken cancellationToken)
113
128
114
129
public void Dispose ( )
115
130
{
116
- _projectCollection ? . Dispose ( ) ;
131
+ _projectCollection . Dispose ( ) ;
132
+ _restoreArgs . CacheContext . Dispose ( ) ;
117
133
}
118
134
119
135
private static ISettings GetNuGetSettings ( ProjectConverterSettings converterSettings )
@@ -202,7 +218,14 @@ private bool ConvertProject(string projectPath, string packagesConfigPath)
202
218
203
219
List < PackageReference > packages = packagesConfigReader . GetPackages ( allowDuplicatePackageIds : true ) . Select ( i => new PackageReference ( i . PackageIdentity , i . TargetFramework , i . IsUserInstalled , i . IsDevelopmentDependency , i . RequireReinstallation , i . AllowedVersions , PackagePathResolver , VersionFolderPathResolver ) ) . ToList ( ) ;
204
220
205
- DetectMissingTransitiveDependencies ( packages , projectPath ) ;
221
+ List < NuGetFramework > targetFrameworks = new List < NuGetFramework >
222
+ {
223
+ FrameworkConstants . CommonFrameworks . Net45 ,
224
+ } ;
225
+
226
+ RestoreTargetGraph restoreTargetGraph = GetRestoreTargetGraph ( packages , projectPath , targetFrameworks ) ;
227
+
228
+ DetectMissingTransitiveDependencies ( packages , projectPath , restoreTargetGraph ) ;
206
229
207
230
ProjectRootElement project = ProjectRootElement . Open ( projectPath , _projectCollection , preserveFormatting : true ) ;
208
231
@@ -236,18 +259,7 @@ private bool ConvertProject(string projectPath, string packagesConfigPath)
236
259
237
260
if ( _converterSettings . TrimPackages )
238
261
{
239
- List < NuGetFramework > targetFrameworks = new List < NuGetFramework >
240
- {
241
- FrameworkConstants . CommonFrameworks . Net45 ,
242
- } ;
243
-
244
- using SourceCacheContext sourceCacheContext = new SourceCacheContext
245
- {
246
- IgnoreFailedSources = true ,
247
- } ;
248
-
249
- RestoreTargetGraph packageRestoreGraph = GetRestoreTargetGraph ( packages , projectPath , targetFrameworks , sourceCacheContext ) ;
250
- TrimPackages ( packages , projectPath , packageRestoreGraph . Flattened ) ;
262
+ TrimPackages ( packages , projectPath , restoreTargetGraph . Flattened ) ;
251
263
}
252
264
253
265
Log . LogDebug ( " Converted package references:" ) ;
@@ -281,37 +293,22 @@ private bool ConvertProject(string projectPath, string packagesConfigPath)
281
293
return true ;
282
294
}
283
295
284
- private void DetectMissingTransitiveDependencies ( List < PackageReference > packages , string projectPath )
296
+ private void DetectMissingTransitiveDependencies ( List < PackageReference > packages , string projectPath , RestoreTargetGraph restoreTargetGraph )
285
297
{
286
- List < NuGetFramework > targetFrameworks = new List < NuGetFramework >
298
+ IEnumerable < GraphItem < RemoteResolveResult > > flatPackageDependencies = restoreTargetGraph . Flattened . Where ( i => i . Key . Type == LibraryType . Package ) ;
299
+ foreach ( GraphItem < RemoteResolveResult > packageDependency in flatPackageDependencies )
287
300
{
288
- FrameworkConstants . CommonFrameworks . Net45 ,
289
- } ;
290
-
291
- using SourceCacheContext sourceCacheContext = new SourceCacheContext
292
- {
293
- IgnoreFailedSources = true ,
294
- } ;
301
+ ( LibraryIdentity library , _ ) = ( packageDependency . Key , packageDependency . Data ) ;
302
+ PackageReference packageReference = packages . FirstOrDefault ( i => i . PackageId . Equals ( library . Name , StringComparison . OrdinalIgnoreCase ) ) ;
295
303
296
- RestoreTargetGraph restoreTargetGraph = GetRestoreTargetGraph ( packages , projectPath , targetFrameworks , sourceCacheContext ) ;
297
-
298
- if ( restoreTargetGraph != null )
299
- {
300
- IEnumerable < GraphItem < RemoteResolveResult > > flatPackageDependencies = restoreTargetGraph . Flattened . Where ( i => i . Key . Type == LibraryType . Package ) ;
301
- foreach ( GraphItem < RemoteResolveResult > packageDependency in flatPackageDependencies )
304
+ if ( packageReference == null )
302
305
{
303
- ( LibraryIdentity library , _ ) = ( packageDependency . Key , packageDependency . Data ) ;
304
- PackageReference packageReference = packages . FirstOrDefault ( i => i . PackageId . Equals ( library . Name , StringComparison . OrdinalIgnoreCase ) ) ;
306
+ Log . LogWarning ( $ "{ projectPath } : The transitive package dependency \" { library . Name } { library . Version } \" was not in the packages.config. After converting to PackageReference, new dependencies will be pulled in transitively which could lead to restore or build errors") ;
305
307
306
- if ( packageReference == null )
308
+ packages . Add ( new PackageReference ( new PackageIdentity ( library . Name , library . Version ) , NuGetFramework . AnyFramework , true , false , true , new VersionRange ( library . Version ) , PackagePathResolver , VersionFolderPathResolver )
307
309
{
308
- Log . LogWarning ( $ "{ projectPath } : The transitive package dependency \" { library . Name } { library . Version } \" was not in the packages.config. After converting to PackageReference, new dependencies will be pulled in transitively which could lead to restore or build errors") ;
309
-
310
- packages . Add ( new PackageReference ( new PackageIdentity ( library . Name , library . Version ) , NuGetFramework . AnyFramework , true , false , true , new VersionRange ( library . Version ) , PackagePathResolver , VersionFolderPathResolver )
311
- {
312
- IsMissingTransitiveDependency = true ,
313
- } ) ;
314
- }
310
+ IsMissingTransitiveDependency = true ,
311
+ } ) ;
315
312
}
316
313
}
317
314
}
@@ -366,7 +363,7 @@ private Match GetElementMatch(ElementPath elementPath, PackageReference package)
366
363
return match ;
367
364
}
368
365
369
- private RestoreTargetGraph GetRestoreTargetGraph ( List < PackageReference > packages , string projectPath , List < NuGetFramework > targetFrameworks , SourceCacheContext sourceCacheContext )
366
+ private RestoreTargetGraph GetRestoreTargetGraph ( List < PackageReference > packages , string projectPath , List < NuGetFramework > targetFrameworks )
370
367
{
371
368
// The package spec details what packages to restore
372
369
PackageSpec packageSpec = new PackageSpec ( targetFrameworks . Select ( i => new TargetFrameworkInformation
@@ -401,21 +398,13 @@ private RestoreTargetGraph GetRestoreTargetGraph(List<PackageReference> packages
401
398
402
399
dependencyGraphSpec . AddRestore ( packageSpec . RestoreMetadata . ProjectUniqueName ) ;
403
400
404
- IPreLoadedRestoreRequestProvider requestProvider = new DependencyGraphSpecRequestProvider ( new RestoreCommandProvidersCache ( ) , dependencyGraphSpec ) ;
405
-
406
- RestoreArgs restoreArgs = new RestoreArgs
407
- {
408
- AllowNoOp = true ,
409
- CacheContext = sourceCacheContext ,
410
- CachingSourceProvider = new CachingSourceProvider ( new PackageSourceProvider ( _nugetSettings ) ) ,
411
- Log = NullLogger . Instance ,
412
- } ;
401
+ IPreLoadedRestoreRequestProvider requestProvider = new DependencyGraphSpecRequestProvider ( _restoreCommandProvidersCache , dependencyGraphSpec ) ;
413
402
414
403
// Create requests from the arguments
415
- IReadOnlyList < RestoreSummaryRequest > requests = requestProvider . CreateRequests ( restoreArgs ) . Result ;
404
+ IReadOnlyList < RestoreSummaryRequest > requests = requestProvider . CreateRequests ( _restoreArgs ) . Result ;
416
405
417
406
// Restore the package without generating extra files
418
- RestoreResultPair restoreResult = RestoreRunner . RunWithoutCommit ( requests , restoreArgs ) . Result . FirstOrDefault ( ) ;
407
+ RestoreResultPair restoreResult = RestoreRunner . RunWithoutCommit ( requests , _restoreArgs ) . Result . FirstOrDefault ( ) ;
419
408
420
409
RestoreTargetGraph restoreTargetGraph = restoreResult ? . Result . RestoreGraphs . FirstOrDefault ( ) ;
421
410
return restoreTargetGraph ;
0 commit comments