Skip to content

Commit 38c6f75

Browse files
committed
fix #68: Retrieve dependency version range from framework dependencies
1 parent 9cb431e commit 38c6f75

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

src/nuget-inspector/LockFileHelper.cs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NuGet.ProjectModel;
1+
using System.Diagnostics.CodeAnalysis;
2+
using NuGet.ProjectModel;
23
using NuGet.Versioning;
34

45
namespace 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

Comments
 (0)