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

Commit 13ea851

Browse files
committed
Preserve original NuGet framework string when determining dependency groups
Also add tests for empty dependency groups as they are supported by using the special identifier/"file" `_._'.
1 parent d4ecc2d commit 13ea851

3 files changed

Lines changed: 71 additions & 3 deletions

File tree

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,14 @@ where item.GetMetadata(MetadataName.Kind) == PackageItemKind.Dependency &&
110110
{
111111
Id = item.ItemSpec,
112112
Version = VersionRange.Parse(item.GetMetadata(MetadataName.Version)),
113-
TargetFramework = item.GetTargetFramework()
113+
TargetFramework = item.GetNuGetTargetFramework()
114114
};
115115

116116
manifest.Metadata.DependencyGroups = (from dependency in dependencies
117117
group dependency by dependency.TargetFramework into dependenciesByFramework
118118
select new PackageDependencyGroup
119119
(
120-
NuGetFramework.Parse(dependenciesByFramework.Key.GetShortFrameworkName() ?? PackagingConstants.AnyFramework),
120+
dependenciesByFramework.Key,
121121
(from dependency in dependenciesByFramework
122122
where dependency.Id != "_._"
123123
group dependency by dependency.Id into dependenciesById
@@ -253,7 +253,7 @@ class Dependency
253253
{
254254
public string Id { get; set; }
255255

256-
public FrameworkName TargetFramework { get; set; }
256+
public NuGetFramework TargetFramework { get; set; }
257257

258258
public VersionRange Version { get; set; }
259259
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ public static Manifest GetManifest(this IPackageCoreReader packageReader)
5858
}
5959
}
6060

61+
public static NuGetFramework GetNuGetTargetFramework(this ITaskItem taskItem)
62+
{
63+
var metadataValue = taskItem.GetMetadata(MetadataName.TargetFramework);
64+
if (string.IsNullOrEmpty(metadataValue))
65+
metadataValue = taskItem.GetMetadata(MetadataName.TargetFrameworkMoniker);
66+
67+
if (!string.IsNullOrEmpty(metadataValue))
68+
return NuGetFramework.Parse(metadataValue);
69+
else
70+
return NuGetFramework.AnyFramework;
71+
}
72+
6173
public static FrameworkName GetTargetFramework(this ITaskItem taskItem)
6274
{
6375
var metadataValue = taskItem.GetMetadata(MetadataName.TargetFramework);

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,62 @@ public void when_creating_package_with_simple_dependency_then_contains_dependenc
148148
Assert.Equal("8.0.0", manifest.Metadata.DependencyGroups.First().Packages.First().VersionRange.MinVersion.ToString());
149149
}
150150

151+
[Fact]
152+
public void when_creating_package_with_empty_dependency_groups_then_succeeds()
153+
{
154+
task.Contents = new[]
155+
{
156+
new TaskItem(Path.GetTempFileName(), new Metadata
157+
{
158+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
159+
{ MetadataName.Kind, PackageItemKind.None },
160+
{ MetadataName.PackagePath, "readme.txt" }
161+
}),
162+
new TaskItem("_._", new Metadata
163+
{
164+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
165+
{ MetadataName.Kind, PackageItemKind.Dependency },
166+
{ MetadataName.Version, "*" },
167+
{ MetadataName.TargetFramework, "net45" }
168+
}),
169+
new TaskItem("_._", new Metadata
170+
{
171+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
172+
{ MetadataName.Kind, PackageItemKind.Dependency },
173+
{ MetadataName.Version, "*" },
174+
{ MetadataName.TargetFramework, "win" }
175+
}),
176+
new TaskItem("_._", new Metadata
177+
{
178+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
179+
{ MetadataName.Kind, PackageItemKind.Dependency },
180+
{ MetadataName.Version, "*" },
181+
{ MetadataName.TargetFramework, "wpa" }
182+
}),
183+
new TaskItem("_._", new Metadata
184+
{
185+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
186+
{ MetadataName.Kind, PackageItemKind.Dependency },
187+
{ MetadataName.Version, "*" },
188+
{ MetadataName.TargetFramework, "MonoAndroid10" }
189+
}),
190+
};
191+
192+
var manifest = ExecuteTask();
193+
194+
Assert.NotNull(manifest);
195+
Assert.Equal(4, manifest.Metadata.DependencyGroups.Count());
196+
Assert.All(manifest.Metadata.DependencyGroups, d => Assert.Empty(d.Packages));
197+
198+
//Assert.Equal(NuGetFramework.Parse(".NETFramework,Version=v4.5"), manifest.Metadata.DependencyGroups.First().TargetFramework);
199+
//Assert.Equal(1, manifest.Metadata.DependencyGroups.First().Packages.Count());
200+
//Assert.Equal("Newtonsoft.Json", manifest.Metadata.DependencyGroups.First().Packages.First().Id);
201+
202+
//// We get a version range actually for the specified dependency, like [1.0.0,)
203+
//Assert.Equal("8.0.0", manifest.Metadata.DependencyGroups.First().Packages.First().VersionRange.MinVersion.ToString());
204+
}
205+
206+
151207
[Fact]
152208
public void when_creating_package_with_development_dependency_then_does_not_generate_dependency_group()
153209
{

0 commit comments

Comments
 (0)