Merge pull request #4537 from livarcocc/rename_tools_packages
Rename tools packages
This commit is contained in:
commit
3c52adf53d
7 changed files with 222 additions and 69 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.CodeGeneration.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,
|
||||
|
@ -91,13 +91,15 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
{
|
||||
case ProjectType.Web:
|
||||
_transformApplicator.Execute(
|
||||
PackageDependencyInfoTransform.Transform(
|
||||
SdkPackageDependencyTransform.Transform(
|
||||
new PackageDependencyInfo
|
||||
{
|
||||
Name = PackageConstants.WebSdkPackageName,
|
||||
Version = migrationSettings.SdkPackageVersion,
|
||||
PrivateAssets = "All"
|
||||
}), noFrameworkPackageReferenceItemGroup, mergeExisting: false);
|
||||
}),
|
||||
noFrameworkPackageReferenceItemGroup,
|
||||
mergeExisting: false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -146,7 +148,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,
|
||||
PackageConstants.AspProjectToolsPackages)),
|
||||
itemGroup,
|
||||
mergeExisting: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +179,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 +187,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
}
|
||||
else
|
||||
{
|
||||
transform = PackageDependencyTransform();
|
||||
transform = PackageDependencyInfoTransform();
|
||||
if (packageDependency.Type.Equals(LibraryDependencyType.Build))
|
||||
{
|
||||
transform = transform.WithMetadata("PrivateAssets", "All");
|
||||
|
@ -199,12 +206,39 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
}
|
||||
|
||||
_transformApplicator.Execute(
|
||||
transform.Transform(packageDependency),
|
||||
transform.Transform(ToPackageDependencyInfo(
|
||||
packageDependency,
|
||||
PackageConstants.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 +324,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,80 @@
|
|||
// 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
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Design", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.AspNetCore.Razor.Design", "Microsoft.AspNetCore.Razor.Design", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
public void It_migrates_project_dependencies_to_a_new_name_and_version(
|
||||
string sourceToolName,
|
||||
string targetToolName,
|
||||
string targetVersion)
|
||||
{
|
||||
const string anyVersion = "1.0.0-preview2-final";
|
||||
var mockProj = RunPackageDependenciesRuleOnPj("{ \"dependencies\": { \"" + sourceToolName + "\" : { \"version\": \"" + anyVersion + "\", \"type\": \"build\" } } }");
|
||||
|
||||
var packageRef = mockProj.Items.First(i => i.Include == targetToolName && i.ItemType == "PackageReference");
|
||||
|
||||
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
|
||||
|
||||
packageRef.GetMetadataWithName("PrivateAssets").Value.Should().NotBeNull().And.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();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools.DotNet", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.VisualStudio.Web.CodeGeneration.Tools", "Microsoft.VisualStudio.Web.CodeGeneration.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.DotNet.Watcher.Tools", "Microsoft.DotNet.Watcher.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
[InlineData("Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||
public void It_migrates_asp_project_tools_to_a_new_name_and_version(
|
||||
string sourceToolName,
|
||||
string targetToolName,
|
||||
string targetVersion)
|
||||
{
|
||||
const string anyVersion = "1.0.0-preview2-final";
|
||||
var mockProj = RunPackageDependenciesRuleOnPj("{ \"tools\": { \"" + sourceToolName + "\": \"" + anyVersion + "\" } }");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create(targetToolName, targetVersion));
|
||||
}
|
||||
|
||||
[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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -96,7 +96,7 @@ namespace Microsoft.DotNet.Migration.Tests
|
|||
VerifyAllMSBuildOutputsRunnable(projectDirectory);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Skip="Final tools version missing.")]
|
||||
public void It_migrates_old_dotnet_new_web_without_tools_with_outputs_containing_project_json_outputs()
|
||||
{
|
||||
var testInstance = TestAssetsManager
|
||||
|
|
Loading…
Add table
Reference in a new issue