Merge pull request #4537 from livarcocc/rename_tools_packages

Rename tools packages
This commit is contained in:
Livar 2016-10-31 18:39:32 -07:00 committed by GitHub
commit 3c52adf53d
7 changed files with 222 additions and 69 deletions

View file

@ -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";
}
}

View file

@ -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", ""}
};
}
}

View file

@ -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>(

View file

@ -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();
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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