1- using NuGet . ProjectModel ;
1+ using System . Diagnostics . CodeAnalysis ;
2+ using NuGet . ProjectModel ;
23using NuGet . Versioning ;
34
45namespace NugetInspector ;
@@ -143,9 +144,16 @@ public DependencyResolution Process()
143144 {
144145 foreach ( var dependency in dependency_group . Dependencies )
145146 {
146- var project_dependency = ParseProjectFileDependencyGroup ( project_file_dependency : dependency ) ;
147- var library_version = GetBestLibraryVersion ( name : project_dependency . GetName ( ) ,
148- range : project_dependency . GetVersionRange ( ) , libraries : ProjectLockFile . Libraries ) ;
147+ // if it is an external reference (not another project), we should find a reference in the
148+ // framework dependencies
149+ if ( ! TryGetPackageDependency ( dependency_group , dependency , out var project_dependency ) )
150+ project_dependency = ParseProjectFileDependencyGroup ( project_file_dependency : dependency ) ;
151+
152+ var library_version = GetBestLibraryVersion (
153+ name : project_dependency . GetName ( ) ,
154+ range : project_dependency . GetVersionRange ( ) ,
155+ libraries : ProjectLockFile . Libraries ) ;
156+
149157 string ? version = null ;
150158 if ( library_version != null )
151159 {
@@ -164,6 +172,34 @@ public DependencyResolution Process()
164172 return resolution ;
165173 }
166174
175+ /// <summary>
176+ /// If the framework dependencies contain a matching package, use that version range.
177+ /// </summary>
178+ private bool TryGetPackageDependency (
179+ ProjectFileDependencyGroup dependency_group ,
180+ string dependency ,
181+ [ NotNullWhen ( true ) ] out ProjectFileDependency ? package_dependency )
182+ {
183+ package_dependency = null ;
184+ var package_id = dependency . Split ( ' ' ) [ 0 ] ;
185+ var target_framework_information = ProjectLockFile
186+ . PackageSpec
187+ ? . TargetFrameworks
188+ ? . Where ( x => x . FrameworkName . ToString ( ) . Equals ( dependency_group . FrameworkName ) ) ;
189+ if ( target_framework_information ? . FirstOrDefault ( ) is not { } framework )
190+ return package_dependency != null ;
191+
192+ var framework_dependency = framework
193+ . Dependencies
194+ . FirstOrDefault ( x => x . Name . Equals ( package_id , StringComparison . InvariantCultureIgnoreCase ) ) ;
195+ var range = framework_dependency ? . LibraryRange . VersionRange ;
196+
197+ if ( range != null )
198+ package_dependency = new ProjectFileDependency ( package_id , range ) ;
199+
200+ return package_dependency != null ;
201+ }
202+
167203 /// <summary>
168204 /// Parse a ProjectFile DependencyGroup
169205 /// </summary>
0 commit comments