Browse Source

Fix target framework for NuGet dependency being ignored.

A NuGet package can specify a dependency on another NuGet package when
a particular target framework is being installed:

    <dependencies>
       <group targetFramework="net40">
          <dependency id="MyDependency" version="1.0"/>
       </group>
    </dependencies>

Installing this NuGet package into a project that targets net20 and
the MyDependency being unavailable on any NuGet feed should not fail.
Only installing the NuGet package into a project that targets net40
will this dependency be resolved.
4.x
Matt Ward 10 years ago
parent
commit
8641fed046
  1. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  2. 2
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
  3. 7
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
  5. 5
      src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
  6. 28
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
  7. 13
      src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs

4
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

@ -4,7 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.EnvDTE;
using NuGet; using NuGet;
@ -42,6 +42,8 @@ namespace ICSharpCode.PackageManagement.Design
public string Name { get; set; } public string Name { get; set; }
public FrameworkName TargetFramework { get; set; }
public bool IsPackageInstalled(string packageId) public bool IsPackageInstalled(string packageId)
{ {
return FakePackages.Any(p => p.Id == packageId); return FakePackages.Any(p => p.Id == packageId);

2
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.EnvDTE;
using NuGet; using NuGet;
@ -18,6 +19,7 @@ namespace ICSharpCode.PackageManagement
event EventHandler<PackageOperationEventArgs> PackageReferenceRemoving; event EventHandler<PackageOperationEventArgs> PackageReferenceRemoving;
string Name { get; } string Name { get; }
FrameworkName TargetFramework { get; }
ILogger Logger { get; set; } ILogger Logger { get; set; }
IPackageRepository SourceRepository { get; } IPackageRepository SourceRepository { get; }

7
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
@ -17,6 +18,7 @@ namespace ICSharpCode.PackageManagement
ISharpDevelopProjectManager projectManager; ISharpDevelopProjectManager projectManager;
IPackageManagementEvents packageManagementEvents; IPackageManagementEvents packageManagementEvents;
MSBuildBasedProject msbuildProject; MSBuildBasedProject msbuildProject;
ProjectTargetFramework targetFramework;
public PackageManagementProject( public PackageManagementProject(
IPackageRepository sourceRepository, IPackageRepository sourceRepository,
@ -26,6 +28,7 @@ namespace ICSharpCode.PackageManagement
{ {
SourceRepository = sourceRepository; SourceRepository = sourceRepository;
msbuildProject = project; msbuildProject = project;
targetFramework = new ProjectTargetFramework(project);
this.packageManagementEvents = packageManagementEvents; this.packageManagementEvents = packageManagementEvents;
packageManager = packageManagerFactory.CreatePackageManager(sourceRepository, project); packageManager = packageManagerFactory.CreatePackageManager(sourceRepository, project);
@ -36,6 +39,10 @@ namespace ICSharpCode.PackageManagement
get { return msbuildProject.Name; } get { return msbuildProject.Name; }
} }
public FrameworkName TargetFramework {
get { return targetFramework.TargetFrameworkName; }
}
public IPackageRepository SourceRepository { get; private set; } public IPackageRepository SourceRepository { get; private set; }
public ILogger Logger { public ILogger Logger {

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement
return new InstallWalker( return new InstallWalker(
localRepository, localRepository,
sourceRepository, sourceRepository,
null, installAction.ProjectTargetFramework,
logger, logger,
installAction.IgnoreDependencies, installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions, installAction.AllowPrereleaseVersions,

5
src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using NuGet; using NuGet;
@ -28,6 +29,10 @@ namespace ICSharpCode.PackageManagement
public IPackageScriptRunner PackageScriptRunner { get; set; } public IPackageScriptRunner PackageScriptRunner { get; set; }
public bool AllowPrereleaseVersions { get; set; } public bool AllowPrereleaseVersions { get; set; }
public FrameworkName ProjectTargetFramework {
get { return Project.TargetFramework; }
}
public virtual bool HasPackageScriptsToRun() public virtual bool HasPackageScriptsToRun()
{ {
return false; return false;

28
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
@ -31,17 +32,25 @@ namespace PackageManagement.Tests
UpdatePackagesAction updatePackagesAction; UpdatePackagesAction updatePackagesAction;
void CreateProject() void CreateProject()
{
fakeMSBuildProject = ProjectHelper.CreateTestProject();
fakeMSBuildProject.SetProperty("TargetFrameworkIdentifier", null);
fakeMSBuildProject.SetProperty("TargetFrameworkVersion", "v4.0");
fakeMSBuildProject.SetProperty("TargetFrameworkProfile", null);
CreateProject(fakeMSBuildProject);
}
void CreateProject(MSBuildBasedProject msbuildProject)
{ {
fakePackageManagerFactory = new FakePackageManagerFactory(); fakePackageManagerFactory = new FakePackageManagerFactory();
fakePackageManager = fakePackageManagerFactory.FakePackageManager; fakePackageManager = fakePackageManagerFactory.FakePackageManager;
fakeProjectManager = fakePackageManager.FakeProjectManager; fakeProjectManager = fakePackageManager.FakeProjectManager;
fakeSourceRepository = new FakePackageRepository(); fakeSourceRepository = new FakePackageRepository();
fakeMSBuildProject = ProjectHelper.CreateTestProject();
fakePackageManagementEvents = new FakePackageManagementEvents(); fakePackageManagementEvents = new FakePackageManagementEvents();
project = new PackageManagementProject( project = new PackageManagementProject(
fakeSourceRepository, fakeSourceRepository,
fakeMSBuildProject, msbuildProject,
fakePackageManagementEvents, fakePackageManagementEvents,
fakePackageManagerFactory); fakePackageManagerFactory);
} }
@ -744,5 +753,20 @@ namespace PackageManagement.Tests
Assert.AreEqual(package, fakePackageManager.PackagePassedToUpdatePackageReference); Assert.AreEqual(package, fakePackageManager.PackagePassedToUpdatePackageReference);
Assert.AreEqual(updatePackagesAction, fakePackageManager.SettingsPassedToUpdatePackageReference); Assert.AreEqual(updatePackagesAction, fakePackageManager.SettingsPassedToUpdatePackageReference);
} }
[Test]
public void TargetFramework_TargetFrameworkVersion40DefinedInProject_ReturnsFullDotNetFramework40()
{
fakeMSBuildProject = ProjectHelper.CreateTestProject();
fakeMSBuildProject.SetProperty("TargetFrameworkIdentifier", null);
fakeMSBuildProject.SetProperty("TargetFrameworkVersion", "v4.0");
fakeMSBuildProject.SetProperty("TargetFrameworkProfile", null);
CreateProject(fakeMSBuildProject);
var expectedName = new FrameworkName(".NETFramework, Version=v4.0");
FrameworkName targetFramework = project.TargetFramework;
Assert.AreEqual(expectedName, targetFramework);
}
} }
} }

13
src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.PackageManagement.Scripting;
@ -155,5 +156,17 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedException, exception); Assert.AreEqual(expectedException, exception);
} }
[Test]
public void ProjectTargetFramework_ProjectTargetFrameworkIsNet40_ReturnsNet40()
{
CreateAction();
var expectedTargetFramework = new FrameworkName(".NETFramework, Version=v4.0");
fakeProject.TargetFramework = expectedTargetFramework;
FrameworkName targetFramework = action.ProjectTargetFramework;
Assert.AreEqual(expectedTargetFramework, targetFramework);
}
} }
} }

Loading…
Cancel
Save