Skip to content
This repository was archived by the owner on Jan 12, 2024. It is now read-only.

Commit 316b772

Browse files
kzuadalon
authored andcommitted
Add support for specifying framework-agnostic dependencies
Can either use: - FrameworkSpecific=false - Set TargetFramework=any NOTE: when a dependency group has no TF, instead of returning NuGetFramework.Any, the NuGet API returns NuGetFramework.UnsupportedFramework :\ Fixes NuGet/Home#5345
1 parent 986e31f commit 316b772

2 files changed

Lines changed: 86 additions & 1 deletion

File tree

src/Build/NuGet.Build.Packaging.Tasks/Extensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ public static Manifest GetManifest(this IPackageCoreReader packageReader)
6060

6161
public static NuGetFramework GetNuGetTargetFramework(this ITaskItem taskItem)
6262
{
63+
if (bool.TryParse(taskItem.GetMetadata(MetadataName.FrameworkSpecific), out var frameworkSpecific) &&
64+
!frameworkSpecific)
65+
return NuGetFramework.AnyFramework;
66+
6367
var metadataValue = taskItem.GetMetadata(MetadataName.TargetFramework);
6468
if (string.IsNullOrEmpty(metadataValue))
6569
metadataValue = taskItem.GetMetadata(MetadataName.TargetFrameworkMoniker);

src/Build/NuGet.Build.Packaging.Tests/CreatePackageTests.cs

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public CreatePackageTests(ITestOutputHelper output)
3131
task = new CreatePackage
3232
{
3333
BuildEngine = engine,
34+
NuspecFile = Path.GetTempFileName(),
3435
Manifest = new TaskItem("package", new Metadata
3536
{
3637
{ "Id", "package" },
@@ -148,6 +149,85 @@ public void when_creating_package_with_simple_dependency_then_contains_dependenc
148149
Assert.Equal("8.0.0", manifest.Metadata.DependencyGroups.First().Packages.First().VersionRange.MinVersion.ToString());
149150
}
150151

152+
[Fact]
153+
public void when_creating_package_with_non_framework_secific_dependency_then_contains_generic_dependency_group()
154+
{
155+
task.Contents = new[]
156+
{
157+
new TaskItem("Newtonsoft.Json", new Metadata
158+
{
159+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
160+
{ MetadataName.Kind, PackageItemKind.Dependency },
161+
{ MetadataName.Version, "8.0.0" },
162+
{ MetadataName.TargetFramework, "net45" },
163+
{ MetadataName.FrameworkSpecific, "false" },
164+
}),
165+
new TaskItem("Microsoft.Build", new Metadata
166+
{
167+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
168+
{ MetadataName.Kind, PackageItemKind.Dependency },
169+
{ MetadataName.Version, "15.0.0" },
170+
{ MetadataName.TargetFramework, "net45" }
171+
}),
172+
};
173+
174+
var manifest = ExecuteTask();
175+
176+
//Process.Start("notepad.exe", task.NuspecFile);
177+
178+
Assert.NotNull(manifest);
179+
Assert.Equal(2, manifest.Metadata.DependencyGroups.Count());
180+
Assert.Equal(NuGetFramework.UnsupportedFramework, manifest.Metadata.DependencyGroups.First().TargetFramework);
181+
Assert.Equal(NuGetFramework.Parse(".NETFramework,Version=v4.5"), manifest.Metadata.DependencyGroups.Last().TargetFramework);
182+
183+
Assert.Equal(1, manifest.Metadata.DependencyGroups.First().Packages.Count());
184+
Assert.Equal("Newtonsoft.Json", manifest.Metadata.DependencyGroups.First().Packages.First().Id);
185+
Assert.Equal("8.0.0", manifest.Metadata.DependencyGroups.First().Packages.First().VersionRange.MinVersion.ToString());
186+
187+
Assert.Equal(1, manifest.Metadata.DependencyGroups.Last().Packages.Count());
188+
Assert.Equal("Microsoft.Build", manifest.Metadata.DependencyGroups.Last().Packages.First().Id);
189+
Assert.Equal("15.0.0", manifest.Metadata.DependencyGroups.Last().Packages.First().VersionRange.MinVersion.ToString());
190+
}
191+
192+
[Fact]
193+
public void when_creating_package_with_any_framework_secific_dependency_then_contains_generic_dependency_group()
194+
{
195+
task.Contents = new[]
196+
{
197+
new TaskItem("Newtonsoft.Json", new Metadata
198+
{
199+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
200+
{ MetadataName.Kind, PackageItemKind.Dependency },
201+
{ MetadataName.Version, "8.0.0" },
202+
{ MetadataName.TargetFramework, "any" },
203+
}),
204+
new TaskItem("Microsoft.Build", new Metadata
205+
{
206+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
207+
{ MetadataName.Kind, PackageItemKind.Dependency },
208+
{ MetadataName.Version, "15.0.0" },
209+
{ MetadataName.TargetFramework, "net45" }
210+
}),
211+
};
212+
213+
var manifest = ExecuteTask();
214+
215+
//Process.Start("notepad.exe", task.NuspecFile);
216+
217+
Assert.NotNull(manifest);
218+
Assert.Equal(2, manifest.Metadata.DependencyGroups.Count());
219+
Assert.Equal(NuGetFramework.UnsupportedFramework, manifest.Metadata.DependencyGroups.First().TargetFramework);
220+
Assert.Equal(NuGetFramework.Parse(".NETFramework,Version=v4.5"), manifest.Metadata.DependencyGroups.Last().TargetFramework);
221+
222+
Assert.Equal(1, manifest.Metadata.DependencyGroups.First().Packages.Count());
223+
Assert.Equal("Newtonsoft.Json", manifest.Metadata.DependencyGroups.First().Packages.First().Id);
224+
Assert.Equal("8.0.0", manifest.Metadata.DependencyGroups.First().Packages.First().VersionRange.MinVersion.ToString());
225+
226+
Assert.Equal(1, manifest.Metadata.DependencyGroups.Last().Packages.Count());
227+
Assert.Equal("Microsoft.Build", manifest.Metadata.DependencyGroups.Last().Packages.First().Id);
228+
Assert.Equal("15.0.0", manifest.Metadata.DependencyGroups.Last().Packages.First().VersionRange.MinVersion.ToString());
229+
}
230+
151231
[Fact]
152232
public void when_creating_package_with_empty_dependency_groups_then_succeeds()
153233
{
@@ -194,7 +274,8 @@ public void when_creating_package_with_empty_dependency_groups_then_succeeds()
194274

195275
var manifest = ExecuteTask();
196276

197-
Process.Start("notepad.exe", task.NuspecFile);
277+
//if (Debugger.IsAttached)
278+
// Process.Start("notepad.exe", task.NuspecFile);
198279

199280
Assert.NotNull(manifest);
200281
Assert.Equal(4, manifest.Metadata.DependencyGroups.Count());

0 commit comments

Comments
 (0)