From 8dd2ac12aa5109baacff250de3fe7f373c9883b1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 7 Oct 2021 13:09:32 +0300 Subject: [PATCH] Created CsprojFileManager.GetDependencyListAsync --- .../Abp/Studio/Modifying/CsprojFileManager.cs | 33 +++++++++++++++++++ .../Studio/Modifying/ICsprojFileManager.cs | 6 +++- .../Abp/Studio/Package/PackageDependency.cs | 30 +++++++++++++++++ .../Volo/Abp/Studio/Package/ReferenceType.cs | 8 +++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/PackageDependency.cs create mode 100644 studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/ReferenceType.cs diff --git a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/CsprojFileManager.cs b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/CsprojFileManager.cs index d99f70031a..5dea6caf0b 100644 --- a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/CsprojFileManager.cs +++ b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/CsprojFileManager.cs @@ -1,9 +1,11 @@ using System; +using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using System.Xml; using Volo.Abp.DependencyInjection; using Volo.Abp.Studio.Helpers; +using Volo.Abp.Studio.Package; using Volo.Abp.Studio.Xml; namespace Volo.Abp.Studio.Packages.Modifying @@ -132,6 +134,37 @@ namespace Volo.Abp.Studio.Packages.Modifying return nodes[0].InnerText.Trim(); } + public async Task> GetDependencyListAsync(string filePath) + { + var result = new List(); + + var document = await GetXmlDocumentAsync(filePath); + + var packageReferenceNodes = document.SelectNodes($"/Project/ItemGroup/PackageReference"); + var projectReferenceNodes = document.SelectNodes($"/Project/ItemGroup/ProjectReference"); + + foreach (XmlNode packageReferenceNode in packageReferenceNodes) + { + result.Add( + new PackageDependency( + packageReferenceNode.Attributes["Include"].Value, + packageReferenceNode.Attributes["Version"].Value + ) + ); + } + + foreach (XmlNode projectReferenceNode in projectReferenceNodes) + { + result.Add( + new PackageDependency( + Path.GetFullPath(Path.Combine(Path.GetDirectoryName(filePath), projectReferenceNode.Attributes["Include"].Value)) + ) + ); + } + + return result; + } + private XmlNode GetOrCreateItemGroupNode(XmlDocument document) { var nodes = document["Project"].SelectNodes("ItemGroup"); diff --git a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/ICsprojFileManager.cs b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/ICsprojFileManager.cs index 709ca367a9..af8c466c17 100644 --- a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/ICsprojFileManager.cs +++ b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Modifying/ICsprojFileManager.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Studio.Package; namespace Volo.Abp.Studio.Packages.Modifying { @@ -11,5 +13,7 @@ namespace Volo.Abp.Studio.Packages.Modifying Task ConvertPackageReferenceToProjectReferenceAsync(string filePath, string projectToReference); Task GetTargetFrameworkAsync(string filePath); + + Task> GetDependencyListAsync(string filePath); } } diff --git a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/PackageDependency.cs b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/PackageDependency.cs new file mode 100644 index 0000000000..1a9d2e1396 --- /dev/null +++ b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/PackageDependency.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; + +namespace Volo.Abp.Studio.Package +{ + public class PackageDependency + { + public ReferenceType Type { get; } + + public string Name { get; } + + public string Version { get; } + + public string Path { get; } + + public PackageDependency(string name, string version) + { + Type = ReferenceType.Package; + Name = name; + Version = version; + } + + public PackageDependency(string path) + { + Type = ReferenceType.Project; + Path = path; + Name = System.IO.Path.GetFileName(path).RemovePostFix(".csproj"); + } + } +} diff --git a/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/ReferenceType.cs b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/ReferenceType.cs new file mode 100644 index 0000000000..5c4d83b2f9 --- /dev/null +++ b/studio/src/Volo.Abp.Studio.Domain.CommonServices/Volo/Abp/Studio/Package/ReferenceType.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.Studio.Package +{ + public enum ReferenceType + { + Project = 1, + Package = 2 + } +} \ No newline at end of file