|
|
|
@ -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<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src") |
|
|
|
private void ConvertToLocalReference(string folder, List<NugetPackageInfoWithModuleName> 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<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src") |
|
|
|
private string ProcessReferenceNodes(string folder, XmlDocument doc, List<NugetPackageInfoWithModuleName> 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); |
|
|
|
} |
|
|
|
|