Adding a map of asp tools packages that tells which versions we need to migrate and to what. Any package in that list, will also have its version updated.
This commit is contained in:
parent
5a621b53e2
commit
b16c9018b6
6 changed files with 333 additions and 66 deletions
|
@ -0,0 +1,10 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration
|
||||
{
|
||||
internal class ConstantPackageVersions
|
||||
{
|
||||
public const string AspNetToolsVersion = "1.0.0-rc1-final";
|
||||
}
|
||||
}
|
|
@ -1,11 +1,30 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration
|
||||
{
|
||||
internal class PackageConstants
|
||||
{
|
||||
public const string SdkPackageName = "Microsoft.NET.Sdk";
|
||||
public const string WebSdkPackageName = "Microsoft.NET.Sdk.Web";
|
||||
|
||||
public static readonly IDictionary<string, string> AspProjectDependencyToolsPackages = new Dictionary<string, string> {
|
||||
{"Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools"},
|
||||
{"Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Design"},
|
||||
{"Microsoft.AspNetCore.Razor.Design", "Microsoft.AspNetCore.Razor.Design"},
|
||||
{"Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodGeneration.Design"},
|
||||
{"Microsoft.VisualStudio.Web.CodeGeneration.Tools", ""},
|
||||
};
|
||||
|
||||
public static readonly IDictionary<string, string> AspProjectToolsPackages = new Dictionary<string, string> {
|
||||
{"Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools.DotNet"},
|
||||
{"Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools"},
|
||||
{"Microsoft.VisualStudio.Web.CodeGeneration.Tools", "Microsoft.VisualStudio.Web.CodGeneration.Tools"},
|
||||
{"Microsoft.DotNet.Watcher.Tools", "Microsoft.DotNet.Watcher.Tools"},
|
||||
{"Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools"},
|
||||
{"Microsoft.AspNetCore.Server.IISIntegration.Tools", ""}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -41,7 +41,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
|
||||
// Inject Sdk dependency
|
||||
_transformApplicator.Execute(
|
||||
PackageDependencyInfoTransform.Transform(
|
||||
SdkPackageDependencyTransform.Transform(
|
||||
new PackageDependencyInfo
|
||||
{
|
||||
Name = PackageConstants.SdkPackageName,
|
||||
|
@ -146,7 +146,12 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
|
||||
foreach (var tool in project.Tools)
|
||||
{
|
||||
_transformApplicator.Execute(ToolTransform.Transform(tool), itemGroup, mergeExisting: true);
|
||||
_transformApplicator.Execute(
|
||||
ToolTransform().Transform(ToPackageDependencyInfo(
|
||||
tool,
|
||||
ConstantPackageNames.AspProjectToolsPackages)),
|
||||
itemGroup,
|
||||
mergeExisting: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +177,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
foreach (var packageDependency in packageDependencies)
|
||||
{
|
||||
MigrationTrace.Instance.WriteLine(packageDependency.Name);
|
||||
AddItemTransform<ProjectLibraryDependency> transform;
|
||||
AddItemTransform<PackageDependencyInfo> transform;
|
||||
|
||||
if (packageDependency.LibraryRange.TypeConstraint == LibraryDependencyTarget.Reference)
|
||||
{
|
||||
|
@ -180,7 +185,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
}
|
||||
else
|
||||
{
|
||||
transform = PackageDependencyTransform();
|
||||
transform = PackageDependencyInfoTransform();
|
||||
if (packageDependency.Type.Equals(LibraryDependencyType.Build))
|
||||
{
|
||||
transform = transform.WithMetadata("PrivateAssets", "All");
|
||||
|
@ -199,12 +204,39 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
}
|
||||
|
||||
_transformApplicator.Execute(
|
||||
transform.Transform(packageDependency),
|
||||
transform.Transform(ToPackageDependencyInfo(
|
||||
packageDependency,
|
||||
ConstantPackageNames.AspProjectDependencyToolsPackages)),
|
||||
itemGroup,
|
||||
mergeExisting: true);
|
||||
}
|
||||
}
|
||||
|
||||
private PackageDependencyInfo ToPackageDependencyInfo(
|
||||
ProjectLibraryDependency dependency,
|
||||
IDictionary<string, string> toolsDictionary)
|
||||
{
|
||||
var name = dependency.Name;
|
||||
var version = dependency.LibraryRange?.VersionRange?.OriginalString;
|
||||
|
||||
if (toolsDictionary.ContainsKey(name))
|
||||
{
|
||||
name = toolsDictionary[name];
|
||||
version = ConstantPackageVersions.AspNetToolsVersion;
|
||||
|
||||
if(string.IsNullOrEmpty(name))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return new PackageDependencyInfo
|
||||
{
|
||||
Name = name,
|
||||
Version = version
|
||||
};
|
||||
}
|
||||
|
||||
private void AutoInjectImplicitProjectJsonAssemblyReferences(NuGetFramework framework,
|
||||
IList<ProjectLibraryDependency> packageDependencies)
|
||||
{
|
||||
|
@ -290,37 +322,32 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
return projectDependencies.Select(p => p.Name).Concat(migratedXProjDependencyNames);
|
||||
}
|
||||
|
||||
private AddItemTransform<ProjectLibraryDependency> FrameworkDependencyTransform =>
|
||||
new AddItemTransform<ProjectLibraryDependency>(
|
||||
private AddItemTransform<PackageDependencyInfo> FrameworkDependencyTransform =>
|
||||
new AddItemTransform<PackageDependencyInfo>(
|
||||
"Reference",
|
||||
dep => dep.Name,
|
||||
dep => "",
|
||||
dep => true);
|
||||
|
||||
private Func<AddItemTransform<ProjectLibraryDependency>> PackageDependencyTransform =>
|
||||
() => new AddItemTransform<ProjectLibraryDependency>(
|
||||
private Func<AddItemTransform<PackageDependencyInfo>> PackageDependencyInfoTransform =>
|
||||
() => new AddItemTransform<PackageDependencyInfo>(
|
||||
"PackageReference",
|
||||
dep => dep.Name,
|
||||
dep => "",
|
||||
dep => true)
|
||||
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
|
||||
dep => dep != null)
|
||||
.WithMetadata("Version", r => r.Version);
|
||||
|
||||
private AddItemTransform<PackageDependencyInfo> PackageDependencyInfoTransform =>
|
||||
new AddItemTransform<PackageDependencyInfo>(
|
||||
"PackageReference",
|
||||
dep => dep.Name,
|
||||
dep => "",
|
||||
dep => true)
|
||||
.WithMetadata("Version", r => r.Version)
|
||||
private AddItemTransform<PackageDependencyInfo> SdkPackageDependencyTransform =>
|
||||
PackageDependencyInfoTransform()
|
||||
.WithMetadata("PrivateAssets", r => r.PrivateAssets, r => !string.IsNullOrEmpty(r.PrivateAssets));
|
||||
|
||||
private AddItemTransform<ProjectLibraryDependency> ToolTransform =>
|
||||
new AddItemTransform<ProjectLibraryDependency>(
|
||||
private Func<AddItemTransform<PackageDependencyInfo>> ToolTransform =>
|
||||
() => new AddItemTransform<PackageDependencyInfo>(
|
||||
"DotNetCliToolReference",
|
||||
dep => dep.Name,
|
||||
dep => "",
|
||||
dep => true)
|
||||
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
|
||||
dep => dep != null)
|
||||
.WithMetadata("Version", r => r.Version);
|
||||
|
||||
private AddPropertyTransform<TargetFrameworkInformation> ImportsTransformation =>
|
||||
new AddPropertyTransform<TargetFrameworkInformation>(
|
||||
|
|
|
@ -0,0 +1,196 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using FluentAssertions;
|
||||
using System;
|
||||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||
{
|
||||
public class GivenThatIWantToMigrateAspNetTools : PackageDependenciesTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftEntityFrameworkCoreTools_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""dependencies"": {
|
||||
""Microsoft.EntityFrameworkCore.Tools"" : {
|
||||
""version"": ""1.0.0-preview2-final"",
|
||||
""type"": ""build""
|
||||
}
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.EntityFrameworkCore.Tools" && i.ItemType == "PackageReference");
|
||||
|
||||
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
|
||||
|
||||
var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets");
|
||||
privateAssetsMetadata.Value.Should().NotBeNull();
|
||||
privateAssetsMetadata.Value.Should().Be("All");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftEntityFrameworkCoreToolsDotNet_tool_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.EntityFrameworkCore.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("Microsoft.EntityFrameworkCore.Tools.DotNet", ConstantPackageVersions.AspNetToolsVersion));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftAspNetCoreRazorTools_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""dependencies"": {
|
||||
""Microsoft.AspNetCore.Razor.Tools"" : {
|
||||
""version"": ""1.0.0-preview2-final"",
|
||||
""type"": ""build""
|
||||
}
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.AspNetCore.Razor.Design" && i.ItemType == "PackageReference");
|
||||
|
||||
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
|
||||
|
||||
var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets");
|
||||
privateAssetsMetadata.Value.Should().NotBeNull();
|
||||
privateAssetsMetadata.Value.Should().Be("All");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftAspNetCoreRazorDesign_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""dependencies"": {
|
||||
""Microsoft.AspNetCore.Razor.Design"" : {
|
||||
""version"": ""1.0.0-preview2-final"",
|
||||
""type"": ""build""
|
||||
}
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.AspNetCore.Razor.Design" && i.ItemType == "PackageReference");
|
||||
|
||||
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
|
||||
|
||||
var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets");
|
||||
privateAssetsMetadata.Value.Should().NotBeNull();
|
||||
privateAssetsMetadata.Value.Should().Be("All");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftAspNetCoreRazorTools_tool_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.AspNetCore.Razor.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("Microsoft.AspNetCore.Razor.Tools", ConstantPackageVersions.AspNetToolsVersion));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftVisualStudioWebCodeGeneratorsMvc_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""dependencies"": {
|
||||
""Microsoft.VisualStudio.Web.CodeGenerators.Mvc"" : {
|
||||
""version"": ""1.0.0-preview2-final"",
|
||||
""type"": ""build""
|
||||
}
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.VisualStudio.Web.CodGeneration.Design" && i.ItemType == "PackageReference");
|
||||
|
||||
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
|
||||
|
||||
var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets");
|
||||
privateAssetsMetadata.Value.Should().NotBeNull();
|
||||
privateAssetsMetadata.Value.Should().Be("All");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_does_not_migrate_MicrosoftVisualStudioWebCodeGenerationTools()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""dependencies"": {
|
||||
""Microsoft.VisualStudio.Web.CodeGeneration.Tools"" : {
|
||||
""version"": ""1.0.0-preview2-final"",
|
||||
""type"": ""build""
|
||||
}
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.Where(i => i.Include != "Microsoft.NET.Sdk" && i.ItemType == "PackageReference").Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftVisualStudioWebCodeGenerationTools_tool_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.VisualStudio.Web.CodeGeneration.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("Microsoft.VisualStudio.Web.CodGeneration.Tools", ConstantPackageVersions.AspNetToolsVersion));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftDotNetWatcherTools_tool_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.DotNet.Watcher.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("Microsoft.DotNet.Watcher.Tools", ConstantPackageVersions.AspNetToolsVersion));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_MicrosoftExtensionsSecretManagerTools_tool_to_AspNetToolsVersion()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.Extensions.SecretManager.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("Microsoft.Extensions.SecretManager.Tools", ConstantPackageVersions.AspNetToolsVersion));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_does_not_migrate_MicrosoftAspNetCoreServerIISIntegrationTools()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""Microsoft.AspNetCore.Server.IISIntegration.Tools"": ""1.0.0-preview2-final""
|
||||
}
|
||||
}");
|
||||
|
||||
var packageRef = mockProj.Items.Where(i => i.ItemType == "DotNetCliToolReference").Should().BeEmpty();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ using System;
|
|||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||
{
|
||||
public class GivenThatIWantToMigratePackageDependencies : TestBase
|
||||
public class GivenThatIWantToMigratePackageDependencies : PackageDependenciesTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void It_migrates_basic_PackageReference()
|
||||
|
@ -257,48 +257,5 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
|||
items = itemGroup.First().Items.ToArray();
|
||||
items[0].Include.Should().Be("System");
|
||||
}
|
||||
|
||||
private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)
|
||||
{
|
||||
foreach (var packageSpec in packageSpecs)
|
||||
{
|
||||
var packageName = packageSpec.Item1;
|
||||
var packageVersion = packageSpec.Item2;
|
||||
var packageTFM = packageSpec.Item3;
|
||||
|
||||
var items = mockProj.Items
|
||||
.Where(i => i.ItemType == "PackageReference")
|
||||
.Where(i => string.IsNullOrEmpty(packageTFM) || i.ConditionChain().Any(c => c.Contains(packageTFM)))
|
||||
.Where(i => i.Include == packageName)
|
||||
.Where(i => i.GetMetadataWithName("Version").Value == packageVersion);
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
}
|
||||
}
|
||||
|
||||
private void EmitsToolReferences(ProjectRootElement mockProj, params Tuple<string, string>[] toolSpecs)
|
||||
{
|
||||
foreach (var toolSpec in toolSpecs)
|
||||
{
|
||||
var packageName = toolSpec.Item1;
|
||||
var packageVersion = toolSpec.Item2;
|
||||
|
||||
var items = mockProj.Items
|
||||
.Where(i => i.ItemType == "DotNetCliToolReference")
|
||||
.Where(i => i.Include == packageName)
|
||||
.Where(i => i.GetMetadataWithName("Version").Value == packageVersion);
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
}
|
||||
}
|
||||
|
||||
private ProjectRootElement RunPackageDependenciesRuleOnPj(string s, string testDirectory = null)
|
||||
{
|
||||
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
|
||||
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
|
||||
{
|
||||
new MigratePackageDependenciesAndToolsRule()
|
||||
}, s, testDirectory);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using Microsoft.Build.Construction;
|
||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
||||
using System;
|
||||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||
{
|
||||
public class PackageDependenciesTestBase : TestBase
|
||||
{
|
||||
protected void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)
|
||||
{
|
||||
foreach (var packageSpec in packageSpecs)
|
||||
{
|
||||
var packageName = packageSpec.Item1;
|
||||
var packageVersion = packageSpec.Item2;
|
||||
var packageTFM = packageSpec.Item3;
|
||||
|
||||
var items = mockProj.Items
|
||||
.Where(i => i.ItemType == "PackageReference")
|
||||
.Where(i => string.IsNullOrEmpty(packageTFM) || i.ConditionChain().Any(c => c.Contains(packageTFM)))
|
||||
.Where(i => i.Include == packageName)
|
||||
.Where(i => i.GetMetadataWithName("Version").Value == packageVersion);
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
}
|
||||
}
|
||||
|
||||
protected void EmitsToolReferences(ProjectRootElement mockProj, params Tuple<string, string>[] toolSpecs)
|
||||
{
|
||||
foreach (var toolSpec in toolSpecs)
|
||||
{
|
||||
var packageName = toolSpec.Item1;
|
||||
var packageVersion = toolSpec.Item2;
|
||||
|
||||
var items = mockProj.Items
|
||||
.Where(i => i.ItemType == "DotNetCliToolReference")
|
||||
.Where(i => i.Include == packageName)
|
||||
.Where(i => i.GetMetadataWithName("Version").Value == packageVersion);
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
}
|
||||
}
|
||||
|
||||
protected ProjectRootElement RunPackageDependenciesRuleOnPj(string s, string testDirectory = null)
|
||||
{
|
||||
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
|
||||
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
|
||||
{
|
||||
new MigratePackageDependenciesAndToolsRule()
|
||||
}, s, testDirectory);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue