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

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

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

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

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

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

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

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

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

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

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
@ -31,17 +32,25 @@ namespace PackageManagement.Tests @@ -31,17 +32,25 @@ namespace PackageManagement.Tests
UpdatePackagesAction updatePackagesAction;
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();
fakePackageManager = fakePackageManagerFactory.FakePackageManager;
fakeProjectManager = fakePackageManager.FakeProjectManager;
fakeSourceRepository = new FakePackageRepository();
fakeMSBuildProject = ProjectHelper.CreateTestProject();
fakePackageManagementEvents = new FakePackageManagementEvents();
project = new PackageManagementProject(
fakeSourceRepository,
fakeMSBuildProject,
msbuildProject,
fakePackageManagementEvents,
fakePackageManagerFactory);
}
@ -744,5 +753,20 @@ namespace PackageManagement.Tests @@ -744,5 +753,20 @@ namespace PackageManagement.Tests
Assert.AreEqual(package, fakePackageManager.PackagePassedToUpdatePackageReference);
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 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting;
@ -155,5 +156,17 @@ namespace PackageManagement.Tests @@ -155,5 +156,17 @@ namespace PackageManagement.Tests
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