Merge pull request #4320 from brthor/brthor/toolsrefmigration
dotnet cli migrate tools ref
This commit is contained in:
commit
50e83b9c65
3 changed files with 61 additions and 6 deletions
|
@ -16,7 +16,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
|||
new MigrateRuntimeOptionsRule(),
|
||||
new MigratePublishOptionsRule(),
|
||||
new MigrateProjectDependenciesRule(),
|
||||
new MigratePackageDependenciesRule(),
|
||||
new MigratePackageDependenciesAndToolsRule(),
|
||||
new MigrateConfigurationsRule(),
|
||||
new MigrateScriptsRule(),
|
||||
new WorkaroundOptionsRule(),
|
||||
|
|
|
@ -16,13 +16,13 @@ using NuGet.LibraryModel;
|
|||
|
||||
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||
{
|
||||
public class MigratePackageDependenciesRule : IMigrationRule
|
||||
public class MigratePackageDependenciesAndToolsRule : IMigrationRule
|
||||
{
|
||||
private readonly ITransformApplicator _transformApplicator;
|
||||
private readonly ProjectDependencyFinder _projectDependencyFinder;
|
||||
private string _projectDirectory;
|
||||
|
||||
public MigratePackageDependenciesRule(ITransformApplicator transformApplicator = null)
|
||||
public MigratePackageDependenciesAndToolsRule(ITransformApplicator transformApplicator = null)
|
||||
{
|
||||
_transformApplicator = transformApplicator ?? new TransformApplicator();
|
||||
_projectDependencyFinder = new ProjectDependencyFinder();
|
||||
|
@ -69,6 +69,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
targetFramework.Dependencies,
|
||||
migrationRuleInputs.ProjectXproj);
|
||||
}
|
||||
|
||||
// Tools
|
||||
MigrateTools(project, migrationRuleInputs.OutputMSBuildProject);
|
||||
}
|
||||
|
||||
private void MigrateImports(ProjectItemGroupElement commonItemGroup, TargetFrameworkInformation targetFramework)
|
||||
|
@ -93,6 +96,23 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
}
|
||||
}
|
||||
|
||||
private void MigrateTools(
|
||||
Project project,
|
||||
ProjectRootElement output)
|
||||
{
|
||||
if (project.Tools == null || !project.Tools.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var itemGroup = output.AddItemGroup();
|
||||
|
||||
foreach (var tool in project.Tools)
|
||||
{
|
||||
_transformApplicator.Execute(ToolTransform.Transform(tool), itemGroup);
|
||||
}
|
||||
}
|
||||
|
||||
private void MigrateDependencies(
|
||||
Project project,
|
||||
ProjectRootElement output,
|
||||
|
@ -212,6 +232,13 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
|||
dep => true)
|
||||
.WithMetadata("Version", r => r.Version);
|
||||
|
||||
private AddItemTransform<ProjectLibraryDependency> ToolTransform => new AddItemTransform<ProjectLibraryDependency>(
|
||||
"DotNetCliToolsReference",
|
||||
dep => dep.Name,
|
||||
dep => "",
|
||||
dep => true)
|
||||
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
|
||||
|
||||
private AddItemTransform<TargetFrameworkInformation> ImportsTransformation => new AddItemTransform<TargetFrameworkInformation>(
|
||||
"PackageTargetFallback",
|
||||
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
|
|
@ -23,12 +23,24 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
|||
""BPackage"" : ""1.0.0""
|
||||
}
|
||||
}");
|
||||
|
||||
Console.WriteLine(mockProj.RawXml);
|
||||
|
||||
EmitsPackageReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview", ""), Tuple.Create("BPackage", "1.0.0", ""));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_migrates_Tools()
|
||||
{
|
||||
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||
{
|
||||
""tools"": {
|
||||
""APackage"" : ""1.0.0-preview"",
|
||||
""BPackage"" : ""1.0.0""
|
||||
}
|
||||
}");
|
||||
|
||||
EmitsToolReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview"), Tuple.Create("BPackage", "1.0.0"));
|
||||
}
|
||||
|
||||
private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)
|
||||
{
|
||||
foreach (var packageSpec in packageSpecs)
|
||||
|
@ -47,12 +59,28 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
|||
}
|
||||
}
|
||||
|
||||
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 == "DotNetCliToolsReference")
|
||||
.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 MigratePackageDependenciesRule()
|
||||
new MigratePackageDependenciesAndToolsRule()
|
||||
}, s, testDirectory);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue