diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/.noautobuild b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/.noautobuild new file mode 100644 index 000000000..e69de29bb diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/EntityFramework/Program.cs b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/EntityFramework/Program.cs new file mode 100644 index 000000000..c56978bf5 --- /dev/null +++ b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/EntityFramework/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace App.Tests +{ + public class Program + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/project.json b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/project.json new file mode 100644 index 000000000..c9e71e7a1 --- /dev/null +++ b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App.Tests/project.json @@ -0,0 +1,19 @@ +{ + "frameworks": { + "netcoreapp1.0": { + "imports": [ + "portable-net451+win8", + "dnxcore50" + ], + "buildOptions": { + "define": [ "ASYNC", "COREFX", "XUNIT2", "SQLITE" ] + }, + "dependencies": { + "Microsoft.NETCore.App": { + "version": "1.0.0", + "type": "platform" + } + } + } + } +} \ No newline at end of file diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App/.noautobuild b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App/.noautobuild new file mode 100644 index 000000000..e69de29bb diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App/project.json b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App/project.json new file mode 100644 index 000000000..b51c38f5f --- /dev/null +++ b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/App/project.json @@ -0,0 +1,31 @@ +{ + "frameworks": { + "net40": { + "frameworkAssemblies": { + "System.Configuration": "4.0.0.0", + "System.Data": "4.0.0.0", + "System.Data.Linq": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + "EntityFramework": "6.1.3", + "Microsoft.SqlServer.Types": "11.0.2" + } + }, + "net45": { + "buildOptions": { + "define": [ "ASYNC" ] + }, + "frameworkAssemblies": { + "System.Configuration": "4.0.0.0", + "System.Data": "4.0.0.0", + "System.Data.Linq": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + "EntityFramework": "6.1.3", + "Microsoft.SqlServer.Types": "11.0.2" + } + } + } +} \ No newline at end of file diff --git a/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/global.json b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/global.json new file mode 100644 index 000000000..7fd78b278 --- /dev/null +++ b/TestAssets/TestProjects/AppWithPackageNamedAfterFolder/global.json @@ -0,0 +1,6 @@ +{ + "projects": [ + "App", + "App.Tests" + ] +} diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectDependencyFinder.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectDependencyFinder.cs index 825c4695a..380a9a435 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectDependencyFinder.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectDependencyFinder.cs @@ -316,24 +316,25 @@ namespace Microsoft.DotNet.ProjectJsonMigration foreach (var projectDirectory in Enumerable.Repeat(directory, 1).Union(directory.GetDirectories())) { - // Create the path to the project.json file. - var projectFilePath = Path.Combine(projectDirectory.FullName, "project.json"); - - // We INTENTIONALLY do not do an exists check here because it requires disk I/O - // Instead, we'll do an exists check when we try to resolve - - // Check if we've already added this, just in case it was pre-loaded into the cache - var project = new ProjectDependency( - projectDirectory.Name, - projectFilePath); - - projects.Add(project); + AddIfProjectExists(projects, projectDirectory); } } return projects; } + private static void AddIfProjectExists(List projects, DirectoryInfo projectDirectory) + { + var projectJSONFilePath = Path.Combine(projectDirectory.FullName, "project.json"); + var csProjFilePath = Path.Combine(projectDirectory.FullName, $"{projectDirectory.Name}.csproj"); + + if (File.Exists(projectJSONFilePath) || File.Exists(csProjFilePath)) + { + var project = new ProjectDependency(projectDirectory.Name, projectJSONFilePath); + projects.Add(project); + } + } + internal static List GetGlobalPaths(string rootPath) { var paths = new List(); diff --git a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateTestApps.cs b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateTestApps.cs index 2e511c1b3..66922a9d7 100644 --- a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateTestApps.cs +++ b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateTestApps.cs @@ -163,6 +163,21 @@ namespace Microsoft.DotNet.Migration.Tests PublishMSBuild(projectDirectory, projectName); } + [Fact] + public void ItMigratesAPackageReferenceAsSuchEvenIfAFolderWithTheSameNameExistsInTheRepo() + { + var solutionDirectory = + TestAssetsManager.CreateTestInstance("AppWithPackageNamedAfterFolder").Path; + var appProject = Path.Combine(solutionDirectory, "App", "App.csproj"); + + MigrateProject(solutionDirectory); + + var projectRootElement = ProjectRootElement.Open(appProject); + projectRootElement.Items.Where( + i => i.Include == "EntityFramework" && i.ItemType == "PackageReference") + .Should().HaveCount(2); + } + [Fact] public void ItAddsMicrosoftNetWebSdkToTheSdkAttributeOfAWebApp() {