diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs index b1d514eef2..8f566234c2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs @@ -15,41 +15,35 @@ namespace Volo.Abp.Cli.ProjectModification public async Task Convert(ModuleWithMastersInfo module, string solutionFile) { var nugetPackageList = GetNugetPackages(module); + var modulesFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); + var srcFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "src"); + var testFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "test"); - var projectFilesUnderModules = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "modules")); - var projectFilesUnderSrc = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "src")); - var projectFilesUnderTest = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "test")); - - foreach (var projectFile in projectFilesUnderModules) - { - ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\..\\"); - } - foreach (var projectFile in projectFilesUnderSrc) - { - ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\modules\\"); - } - foreach (var projectFile in projectFilesUnderTest) - { - ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\modules\\", "test"); - } + ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\"); + ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\"); + ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test"); } - private void ConvertToLocalReference(string projectFile, List nugetPackageList, string localPathPrefix, string sourceFile = "src") + private void ConvertToLocalReference(string folder, List nugetPackageList, string localPathPrefix, string sourceFile = "src") { - var content = File.ReadAllText(projectFile); - var doc = new XmlDocument() { PreserveWhitespace = true }; + var projectFiles = GetProjectFilesUnder(folder); - doc.Load(StreamHelper.GenerateStreamFromString(content)); + foreach (var projectFile in projectFiles) + { + var content = File.ReadAllText(projectFile); + var doc = new XmlDocument() { PreserveWhitespace = true }; - var convertedProject = ProcessReferenceNodes(doc, nugetPackageList, localPathPrefix, sourceFile); + doc.Load(StreamHelper.GenerateStreamFromString(content)); - File.WriteAllText(projectFile, convertedProject); - } + var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile); + File.WriteAllText(projectFile, convertedProject); + } + } - private string ProcessReferenceNodes(XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile = "src") + private string ProcessReferenceNodes(string folder, XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile = "src") { - var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[@Include]"); + var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[starts-with(@Include, 'Volo.Abp')]"); if (nodes == null) { @@ -60,17 +54,36 @@ namespace Volo.Abp.Cli.ProjectModification { var oldNodeIncludeValue = oldNode?.Attributes?["Include"]?.Value; - var nugetPackage = nugetPackageList.FirstOrDefault(n => n.NugetPackage.Name == oldNodeIncludeValue); + var moduleName = nugetPackageList.FirstOrDefault(n => n.NugetPackage.Name == oldNodeIncludeValue)?.ModuleName; - if (nugetPackage == null) + if (moduleName == null) { - continue; + var localProject = GetProjectFilesUnder(folder).FirstOrDefault(f=> f.EndsWith($"{oldNodeIncludeValue}.csproj")); + + if (localProject != null) + { + moduleName = Directory.GetParent(Directory.GetParent(Path.GetDirectoryName(localProject)).FullName).Name; + + if (oldNodeIncludeValue.EndsWith(".test", StringComparison.InvariantCultureIgnoreCase) || + oldNodeIncludeValue.EndsWith(".tests", StringComparison.InvariantCultureIgnoreCase)) + { + sourceFile = "test"; + } + else + { + sourceFile = "src"; + } + } + else + { + continue; + } } var referenceProjectPath = - $"{localPathPrefix}{nugetPackage.ModuleName}\\{sourceFile}\\{nugetPackage.NugetPackage.Name}\\{nugetPackage.NugetPackage.Name}.csproj"; + $"{localPathPrefix}{moduleName}\\{sourceFile}\\{oldNodeIncludeValue}\\{oldNodeIncludeValue}.csproj"; - XmlNode newNode = GetNewReferenceNode(doc, referenceProjectPath); + XmlNode newNode = GetNewReferenceNode(doc, referenceProjectPath); oldNode?.ParentNode?.ReplaceChild(newNode, oldNode); }