mirror of https://github.com/abpframework/abp.git
78 changed files with 1 additions and 2444 deletions
@ -1,29 +0,0 @@ |
|||
{ |
|||
"folders": { |
|||
"items": { |
|||
"src": {} |
|||
} |
|||
}, |
|||
"packages": { |
|||
"Volo.Abp.Studio.Analyzing.Abstractions": { |
|||
"path": "src/Volo.Abp.Studio.Analyzing.Abstractions/Volo.Abp.Studio.Analyzing.Abstractions.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Abp.Studio.Domain.CommonServices": { |
|||
"path": "src/Volo.Abp.Studio.Domain.CommonServices/Volo.Abp.Studio.Domain.CommonServices.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Abp.Studio.Domain.Shared": { |
|||
"path": "src/Volo.Abp.Studio.Domain.Shared/Volo.Abp.Studio.Domain.Shared.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Abp.Studio.ModuleInstaller": { |
|||
"path": "src/Volo.Abp.Studio.ModuleInstaller/Volo.Abp.Studio.ModuleInstaller.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Abp.Studio.ModuleInstaller.Abstractions": { |
|||
"path": "src/Volo.Abp.Studio.ModuleInstaller.Abstractions/Volo.Abp.Studio.ModuleInstaller.Abstractions.abppkg.json", |
|||
"folder": "src" |
|||
} |
|||
} |
|||
} |
|||
@ -1,7 +0,0 @@ |
|||
{ |
|||
"modules": { |
|||
"Volo.Abp.Studio.Open": { |
|||
"path": "Volo.Abp.Studio.Open.abpmdl.json" |
|||
} |
|||
} |
|||
} |
|||
@ -1,49 +0,0 @@ |
|||
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00 |
|||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{344A1096-CC05-42D1-BDDB-E254C27508A9}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Studio.Analyzing.Abstractions", "src\Volo.Abp.Studio.Analyzing.Abstractions\Volo.Abp.Studio.Analyzing.Abstractions.csproj", "{2271296E-33FD-46BE-97FD-9938193CB7D1}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Studio.Domain.CommonServices", "src\Volo.Abp.Studio.Domain.CommonServices\Volo.Abp.Studio.Domain.CommonServices.csproj", "{1C86021F-E522-41A1-AC3F-01B0E474D75E}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Studio.Domain.Shared", "src\Volo.Abp.Studio.Domain.Shared\Volo.Abp.Studio.Domain.Shared.csproj", "{28132E4E-FFB9-45C4-99AD-1BCA04B3E597}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Studio.ModuleInstaller", "src\Volo.Abp.Studio.ModuleInstaller\Volo.Abp.Studio.ModuleInstaller.csproj", "{4FA11334-D727-4C14-9D71-1DB46AC3BE9C}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Studio.ModuleInstaller.Abstractions", "src\Volo.Abp.Studio.ModuleInstaller.Abstractions\Volo.Abp.Studio.ModuleInstaller.Abstractions.csproj", "{99679BF9-B888-4814-8E85-F751984CAFF8}" |
|||
EndProject |
|||
Global |
|||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|||
Debug|Any CPU = Debug|Any CPU |
|||
Release|Any CPU = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|||
{2271296E-33FD-46BE-97FD-9938193CB7D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{2271296E-33FD-46BE-97FD-9938193CB7D1}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{2271296E-33FD-46BE-97FD-9938193CB7D1}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{2271296E-33FD-46BE-97FD-9938193CB7D1}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{1C86021F-E522-41A1-AC3F-01B0E474D75E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{1C86021F-E522-41A1-AC3F-01B0E474D75E}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{1C86021F-E522-41A1-AC3F-01B0E474D75E}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{1C86021F-E522-41A1-AC3F-01B0E474D75E}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{28132E4E-FFB9-45C4-99AD-1BCA04B3E597}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{28132E4E-FFB9-45C4-99AD-1BCA04B3E597}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{28132E4E-FFB9-45C4-99AD-1BCA04B3E597}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{28132E4E-FFB9-45C4-99AD-1BCA04B3E597}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{4FA11334-D727-4C14-9D71-1DB46AC3BE9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{4FA11334-D727-4C14-9D71-1DB46AC3BE9C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{4FA11334-D727-4C14-9D71-1DB46AC3BE9C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{4FA11334-D727-4C14-9D71-1DB46AC3BE9C}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{99679BF9-B888-4814-8E85-F751984CAFF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{99679BF9-B888-4814-8E85-F751984CAFF8}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{99679BF9-B888-4814-8E85-F751984CAFF8}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{99679BF9-B888-4814-8E85-F751984CAFF8}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(NestedProjects) = preSolution |
|||
{2271296E-33FD-46BE-97FD-9938193CB7D1} = {344A1096-CC05-42D1-BDDB-E254C27508A9} |
|||
{1C86021F-E522-41A1-AC3F-01B0E474D75E} = {344A1096-CC05-42D1-BDDB-E254C27508A9} |
|||
{28132E4E-FFB9-45C4-99AD-1BCA04B3E597} = {344A1096-CC05-42D1-BDDB-E254C27508A9} |
|||
{4FA11334-D727-4C14-9D71-1DB46AC3BE9C} = {344A1096-CC05-42D1-BDDB-E254C27508A9} |
|||
{99679BF9-B888-4814-8E85-F751984CAFF8} = {344A1096-CC05-42D1-BDDB-E254C27508A9} |
|||
EndGlobalSection |
|||
EndGlobal |
|||
@ -1 +0,0 @@ |
|||
{} |
|||
@ -1,14 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\..\framework\src\Volo.Abp.Core\Volo.Abp.Core.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -1,8 +0,0 @@ |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing; |
|||
|
|||
public class AbpStudioAnalyzingAbstractionsModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
@ -1,20 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Application; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class ApplicationServiceModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "applicationService"; |
|||
|
|||
public string Namespace { get; set; } |
|||
|
|||
public string Summary { get; set; } |
|||
|
|||
public List<string> ImplementingInterfaces { get; set; } |
|||
|
|||
public ApplicationServiceModel([NotNull] string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1,23 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Authorization; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class PermissionModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "permission"; |
|||
|
|||
public string DisplayName { get; } |
|||
|
|||
public bool IsEnabled { get; } |
|||
|
|||
public PermissionModel( |
|||
[NotNull] string name, |
|||
string displayName, |
|||
bool isEnabled) |
|||
: base(name) |
|||
{ |
|||
DisplayName = displayName; |
|||
IsEnabled = isEnabled; |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Database; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class DatabaseCollectionModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "databaseCollection"; |
|||
|
|||
public string EntityFullName { get; private set; } |
|||
|
|||
public DatabaseCollectionModel([NotNull] string name, string entityFullName) : base(name) |
|||
{ |
|||
EntityFullName = Check.NotNullOrWhiteSpace(entityFullName, nameof(entityFullName)); |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Database; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class DatabaseTableModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "databaseTable"; |
|||
|
|||
public string EntityFullName { get; private set; } |
|||
|
|||
public DatabaseTableModel([NotNull] string name, string entityFullName) : base(name) |
|||
{ |
|||
EntityFullName = Check.NotNullOrWhiteSpace(entityFullName, nameof(entityFullName)); |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Database; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class EfCoreDbContextModel : PackageContentItemModel, IDbContextModel |
|||
{ |
|||
public const string ContentTypeName = "efCoreDbContext"; |
|||
|
|||
public string Namespace { get; private set; } |
|||
|
|||
public string ConnectionStringName { get; set; } |
|||
|
|||
public List<DatabaseTableModel> DatabaseTables { get; set; } |
|||
|
|||
public EfCoreDbContextModel( |
|||
[NotNull] string name, |
|||
[NotNull] string @namespace |
|||
) : base(name) |
|||
{ |
|||
Namespace = Check.NotNullOrWhiteSpace(@namespace, nameof(@namespace)); |
|||
} |
|||
} |
|||
@ -1,6 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Analyzing.Models.Database; |
|||
|
|||
public interface IDbContextModel |
|||
{ |
|||
string ConnectionStringName { get; set; } |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Database; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class MongoDbContextModel : PackageContentItemModel, IDbContextModel |
|||
{ |
|||
public const string ContentTypeName = "mongoDbContext"; |
|||
|
|||
public string Namespace { get; private set; } |
|||
|
|||
public string ConnectionStringName { get; set; } |
|||
|
|||
public List<DatabaseCollectionModel> DatabaseCollections { get; set; } |
|||
|
|||
public MongoDbContextModel( |
|||
[NotNull] string name, |
|||
[NotNull] string @namespace |
|||
) : base(name) |
|||
{ |
|||
Namespace = Check.NotNullOrWhiteSpace(@namespace, nameof(@namespace)); |
|||
} |
|||
} |
|||
@ -1,11 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Analyzing.Models.Domain; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class AggregateRootModel : EntityModel |
|||
{ |
|||
public new const string ContentTypeName = "aggregateRoot"; |
|||
|
|||
public AggregateRootModel(string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Domain; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class DomainServiceModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "domainService"; |
|||
|
|||
public string Namespace { get; set; } |
|||
|
|||
public string Summary { get; set; } |
|||
|
|||
public DomainServiceModel([NotNull] string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Domain; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class EntityModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "entity"; |
|||
|
|||
public string Namespace { get; set; } |
|||
|
|||
public string PrimaryKeyType { get; set; } |
|||
|
|||
public string Summary { get; set; } |
|||
|
|||
public List<string> CollectionProperties { get; set; } |
|||
public List<string> NavigationProperties { get; set; } |
|||
|
|||
public EntityModel(string name) : base(name) |
|||
{ |
|||
CollectionProperties = new List<string>(); |
|||
NavigationProperties = new List<string>(); |
|||
} |
|||
} |
|||
@ -1,19 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Domain; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class RepositoryInterfaceModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "repositoryInterface"; |
|||
|
|||
public string Namespace { get; set; } |
|||
|
|||
public string Summary { get; set; } |
|||
|
|||
public EntityModel EntityModel { get; set; } |
|||
|
|||
public RepositoryInterfaceModel([NotNull] string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1,39 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Feature; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class FeatureModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "feature"; |
|||
|
|||
public string ValueType { get; } |
|||
|
|||
public string DefaultValue { get; } |
|||
|
|||
public string DisplayName { get; } |
|||
|
|||
public string Description { get; } |
|||
|
|||
public bool IsAvailableToHost { get; } |
|||
|
|||
public bool IsVisibleToClients { get; } |
|||
|
|||
public FeatureModel( |
|||
[NotNull] string name, |
|||
[NotNull] string valueType, |
|||
string defaultValue, |
|||
string displayName, |
|||
string description, |
|||
bool isAvailableToHost, |
|||
bool isVisibleToClients |
|||
) : base(name) |
|||
{ |
|||
ValueType = valueType; |
|||
DefaultValue = defaultValue; |
|||
DisplayName = displayName; |
|||
Description = description; |
|||
IsAvailableToHost = isAvailableToHost; |
|||
IsVisibleToClients = isVisibleToClients; |
|||
} |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Module; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class AbpModuleModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "abpModule"; |
|||
|
|||
public string Namespace { get; set; } |
|||
|
|||
public AbpModuleModel([NotNull] string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models; |
|||
|
|||
public abstract class PackageContentItemModel |
|||
{ |
|||
public string ContentType { get; } |
|||
public string Name { get; } |
|||
|
|||
public PackageContentItemModel([NotNull] string name) |
|||
{ |
|||
Name = Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
ContentType = PackageContentItemNameAttribute.GetName(GetType()); |
|||
} |
|||
} |
|||
@ -1,25 +0,0 @@ |
|||
using System; |
|||
using Volo.Abp.Reflection; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models; |
|||
|
|||
public class PackageContentItemNameAttribute : Attribute |
|||
{ |
|||
public string Name { get; } |
|||
|
|||
public PackageContentItemNameAttribute(string name) |
|||
{ |
|||
Name = name; |
|||
} |
|||
|
|||
public static string GetName(Type type) |
|||
{ |
|||
var attribute = ReflectionHelper.GetSingleAttributeOrDefault<PackageContentItemNameAttribute>(type); |
|||
if (attribute == null) |
|||
{ |
|||
throw new ApplicationException($"Given type {type.FullName} must have an {nameof(PackageContentItemNameAttribute)}, but not defined!"); |
|||
} |
|||
|
|||
return attribute.Name; |
|||
} |
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models; |
|||
|
|||
public class PackageContentList : List<PackageContentItemModel> |
|||
{ |
|||
|
|||
} |
|||
@ -1,19 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models; |
|||
|
|||
public class PackageModel |
|||
{ |
|||
public string Name { get; } |
|||
|
|||
public string Hash { get; } |
|||
|
|||
public PackageContentList Contents { get; } |
|||
|
|||
public PackageModel([NotNull] string name, [NotNull] string hash) |
|||
{ |
|||
Name = Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
Contents = new PackageContentList(); |
|||
Hash = hash; |
|||
} |
|||
} |
|||
@ -1,25 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing.Models.Setting; |
|||
|
|||
[PackageContentItemName(ContentTypeName)] |
|||
public class SettingModel : PackageContentItemModel |
|||
{ |
|||
public const string ContentTypeName = "setting"; |
|||
|
|||
public string DefaultValue { get; set; } |
|||
|
|||
public string DisplayName { get; set; } |
|||
|
|||
public string Description { get; set; } |
|||
|
|||
public bool IsVisibleToClient { get; set; } |
|||
|
|||
public bool IsInherited { get; set; } |
|||
|
|||
public bool IsEncrypted { get; set; } |
|||
|
|||
public SettingModel([NotNull] string name) : base(name) |
|||
{ |
|||
} |
|||
} |
|||
@ -1 +0,0 @@ |
|||
{} |
|||
@ -1,21 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> |
|||
<PackageReference Include="System.IO.Abstractions" Version="13.2.28" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.Studio.Domain.Shared\Volo.Abp.Studio.Domain.Shared.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
|
|||
</Project> |
|||
@ -1,16 +0,0 @@ |
|||
using System.IO.Abstractions; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.Studio; |
|||
|
|||
[DependsOn( |
|||
typeof(AbpStudioDomainSharedModule) |
|||
)] |
|||
public class AbpStudioDomainCommonServicesModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
context.Services.AddSingleton<IFileSystem>(new FileSystem()); |
|||
} |
|||
} |
|||
@ -1,27 +0,0 @@ |
|||
using System; |
|||
using System.Runtime.Serialization; |
|||
using Microsoft.Extensions.Logging; |
|||
|
|||
namespace Volo.Abp.Studio; |
|||
|
|||
public class AbpStudioException : BusinessException |
|||
{ |
|||
public AbpStudioException( |
|||
string code = null, |
|||
string message = null, |
|||
string details = null, |
|||
Exception innerException = null, |
|||
LogLevel logLevel = LogLevel.Warning) |
|||
: base(code, message, details, innerException, logLevel) |
|||
{ |
|||
Code = code; |
|||
Details = details; |
|||
LogLevel = logLevel; |
|||
} |
|||
|
|||
public AbpStudioException(SerializationInfo serializationInfo, StreamingContext context) |
|||
: base(serializationInfo, context) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -1,36 +0,0 @@ |
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Helpers; |
|||
|
|||
public static class PathHelper |
|||
{ |
|||
public static string GetRelativePath([NotNull] string basePath, [NotNull] string targetPath) |
|||
{ |
|||
Check.NotNull(basePath, nameof(basePath)); |
|||
Check.NotNull(targetPath, nameof(targetPath)); |
|||
|
|||
return new Uri(basePath).MakeRelativeUri(new Uri(targetPath)).ToString(); |
|||
} |
|||
|
|||
public static string EnsureForwardSlash(string path) |
|||
{ |
|||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) |
|||
{ |
|||
return path.Replace("\\", "/"); |
|||
} |
|||
|
|||
return path; |
|||
} |
|||
|
|||
public static string Normalize(string path) |
|||
{ |
|||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) |
|||
{ |
|||
return path.Replace("/", "\\"); |
|||
} |
|||
|
|||
return path; |
|||
} |
|||
} |
|||
@ -1,76 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO.Abstractions; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.Studio.Packages.Modifying; |
|||
|
|||
public class AbpModuleFileManager : IAbpModuleFileManager, ITransientDependency |
|||
{ |
|||
public IFileSystem FileSystem { get; } |
|||
|
|||
public AbpModuleFileManager(IFileSystem fileSystem) |
|||
{ |
|||
FileSystem = fileSystem; |
|||
} |
|||
|
|||
public async Task AddDependency(string filePath, string moduleToAdd) |
|||
{ |
|||
var fileContent = await FileSystem.File.ReadAllTextAsync(filePath); |
|||
var moduleName = moduleToAdd.Split(".").Last(); |
|||
var moduleNamespace = moduleToAdd.RemovePostFix("." + moduleName); |
|||
var usingStatement = $"using {moduleNamespace};"; |
|||
var dependsOnStart = $"DependsOn("; |
|||
|
|||
if (fileContent.Contains($"typeof({moduleName})")) |
|||
{ |
|||
// module already added
|
|||
return; |
|||
} |
|||
|
|||
if (!fileContent.NormalizeLineEndings().SplitToLines().Any(l => l.Trim().StartsWith("namespace ") && l.Contains(moduleNamespace)) && |
|||
!fileContent.Contains(usingStatement) |
|||
) |
|||
{ |
|||
fileContent = usingStatement + Environment.NewLine + fileContent; |
|||
} |
|||
|
|||
if (!fileContent.Contains(dependsOnStart)) |
|||
{ |
|||
var fileLines = fileContent.NormalizeLineEndings().SplitToLines().ToList(); |
|||
fileLines.InsertBefore(l => l.Contains("public") && l.Contains("class"), $" [DependsOn(typeof({moduleName}))]"); |
|||
fileContent = fileLines.JoinAsString(Environment.NewLine); |
|||
} |
|||
else |
|||
{ |
|||
var fileLines = fileContent.NormalizeLineEndings().SplitToLines().ToList(); |
|||
var dependsOnStartLine = fileLines.First(l => l.Contains(dependsOnStart)); |
|||
var dependsOnStartLineModified = dependsOnStartLine.Replace(dependsOnStart, |
|||
dependsOnStart + Environment.NewLine + |
|||
$" typeof({moduleName})," |
|||
); |
|||
fileContent = fileContent.Replace(dependsOnStartLine, dependsOnStartLineModified); |
|||
} |
|||
|
|||
FileSystem.File.WriteAllTextAsync(filePath, fileContent); |
|||
} |
|||
|
|||
public async Task<string> ExtractModuleNameWithNamespace(string filePath) |
|||
{ |
|||
var fileContent = await FileSystem.File.ReadAllTextAsync(filePath); |
|||
|
|||
var fileLines = fileContent.NormalizeLineEndings().SplitToLines(); |
|||
|
|||
var lineOfClassName = fileLines.First(l => l.Contains("public") && l.Contains("class")); |
|||
|
|||
var moduleName = lineOfClassName.Split(":")[0].Trim().Split(" ").Last(); |
|||
|
|||
var lineOfNamespace = fileLines.First(l => l.Trim().StartsWith("namespace")); |
|||
|
|||
var moduleNamespace = lineOfNamespace.Split(" ").Skip(1).First(); |
|||
|
|||
return moduleNamespace + "." + moduleName; |
|||
} |
|||
} |
|||
@ -1,261 +0,0 @@ |
|||
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; |
|||
|
|||
public class CsprojFileManager : XmlFileManagerBase, ICsprojFileManager, ITransientDependency |
|||
{ |
|||
public async Task AddProjectReferenceAsync(string filePath, string projectToReference) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
/*if (document.SelectNodes($"/Project/ItemGroup/ProjectReference[ends-with(@Include, '{Path.GetFileName(projectToReference)}')]").Count > 0) |
|||
{ |
|||
return; |
|||
}*/ |
|||
|
|||
var packageReferenceToSameProject = |
|||
document.SelectNodes( |
|||
$"/Project/ItemGroup/PackageReference[starts-with(@Include, '{Path.GetFileName(projectToReference).RemovePostFix(".csproj")}')]" |
|||
); |
|||
|
|||
if (packageReferenceToSameProject.Count > 0) |
|||
{ |
|||
packageReferenceToSameProject[0].ParentNode.RemoveChild(packageReferenceToSameProject[0]); |
|||
} |
|||
|
|||
var relativePath = PathHelper.GetRelativePath(filePath, projectToReference); |
|||
|
|||
var itemGroupNode = GetOrCreateItemGroupNode(document); |
|||
|
|||
var newNode = document.CreateElement("ProjectReference"); |
|||
|
|||
var includeAttr = document.CreateAttribute("Include"); |
|||
includeAttr.Value = relativePath; |
|||
newNode.Attributes.Append(includeAttr); |
|||
|
|||
itemGroupNode.AppendChild(newNode); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task AddPackageReferenceAsync(string filePath, string packageName, string version) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
if (document.SelectNodes($"/Project/ItemGroup/PackageReference[starts-with(@Include, '{packageName}')]").Count > 0) |
|||
{ |
|||
// Package reference is already added.
|
|||
return; |
|||
} |
|||
|
|||
var itemGroupNode = GetOrCreateItemGroupNode(document); |
|||
|
|||
var newNode = document.CreateElement("PackageReference"); |
|||
|
|||
var includeAttr = document.CreateAttribute("Include"); |
|||
includeAttr.Value = packageName; |
|||
newNode.Attributes.Append(includeAttr); |
|||
|
|||
var versionAttr = document.CreateAttribute("Version"); |
|||
versionAttr.Value = version; |
|||
newNode.Attributes.Append(versionAttr); |
|||
|
|||
itemGroupNode.AppendChild(newNode); |
|||
itemGroupNode.AppendChild(document.CreateWhitespace(Environment.NewLine + " ")); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task AddImportAsync(string filePath, string importFilePath) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var relativeImportFilePath = PathHelper.GetRelativePath(filePath, importFilePath); |
|||
|
|||
var importNode = document.CreateElement("Import"); |
|||
|
|||
var projectAttr = document.CreateAttribute("Project"); |
|||
projectAttr.Value = relativeImportFilePath; |
|||
importNode.Attributes.Append(projectAttr); |
|||
|
|||
document["Project"].AppendChild(importNode); |
|||
document["Project"].AppendChild(document.CreateWhitespace(Environment.NewLine + " ")); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task AddAssemblyVersionAsync(string filePath, string version) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var matchedNodes = document.SelectNodes($"/Project/PropertyGroup"); |
|||
|
|||
if (matchedNodes.Count == 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var versionNode = document.CreateElement("Version"); |
|||
|
|||
versionNode.InnerText = version; |
|||
|
|||
matchedNodes[0].AppendChild(versionNode); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task AddCopyLocalLockFileAssembliesAsync(string filePath) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var matchedNodes = document.SelectNodes($"/Project/PropertyGroup"); |
|||
|
|||
if (matchedNodes.Count == 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var versionNode = document.CreateElement("CopyLocalLockFileAssemblies"); |
|||
|
|||
versionNode.InnerText = "True"; |
|||
|
|||
matchedNodes[0].AppendChild(versionNode); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task ConvertPackageReferenceToProjectReferenceAsync(string filePath, string projectToReference) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var packageName = Path.GetFileName(projectToReference).RemovePostFix(".csproj"); |
|||
|
|||
var matchedNodes = document.SelectNodes($"/Project/ItemGroup/PackageReference[starts-with(@Include, '{packageName}')]"); |
|||
|
|||
if (matchedNodes.Count == 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
XmlNode targetNode = null; |
|||
|
|||
foreach (XmlNode matchedNode in matchedNodes) |
|||
{ |
|||
if (matchedNode.Attributes["Include"].Value == packageName) |
|||
{ |
|||
targetNode = matchedNode; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
if (targetNode == null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var targetNodeParent = targetNode.ParentNode; |
|||
|
|||
targetNodeParent.RemoveChild(targetNode); |
|||
|
|||
var relativePath = PathHelper.GetRelativePath(filePath, projectToReference); |
|||
|
|||
var newNode = document.CreateElement("ProjectReference"); |
|||
|
|||
var includeAttr = document.CreateAttribute("Include"); |
|||
includeAttr.Value = relativePath; |
|||
newNode.Attributes.Append(includeAttr); |
|||
|
|||
targetNodeParent.AppendChild(newNode); |
|||
|
|||
await SaveXmlDocumentAsync(filePath, document); |
|||
} |
|||
|
|||
public async Task<string> GetTargetFrameworkAsync(string filePath) |
|||
{ |
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var nodes = document["Project"]?["PropertyGroup"]?.SelectNodes("TargetFramework"); |
|||
|
|||
if (nodes == null || nodes.Count == 0) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return nodes[0].InnerText.Trim(); |
|||
} |
|||
|
|||
public async Task<List<PackageDependency>> GetDependencyListAsync(string filePath) |
|||
{ |
|||
var result = new List<PackageDependency>(); |
|||
|
|||
var document = await GetXmlDocumentAsync(filePath); |
|||
|
|||
var packageReferenceNodes = document.SelectNodes($"/Project/ItemGroup/PackageReference"); |
|||
var projectReferenceNodes = document.SelectNodes($"/Project/ItemGroup/ProjectReference"); |
|||
|
|||
if (packageReferenceNodes != null && packageReferenceNodes.Count > 0) |
|||
{ |
|||
foreach (XmlNode packageReferenceNode in packageReferenceNodes) |
|||
{ |
|||
result.Add( |
|||
new PackageDependency( |
|||
packageReferenceNode.Attributes["Include"].Value, |
|||
packageReferenceNode.Attributes["Version"].Value |
|||
) |
|||
); |
|||
} |
|||
} |
|||
|
|||
if (projectReferenceNodes != null && projectReferenceNodes.Count > 0) |
|||
{ |
|||
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"); |
|||
|
|||
if (nodes == null || nodes.Count < 1) |
|||
{ |
|||
var newNode = document.CreateElement("ItemGroup"); |
|||
document["Project"].AppendChild(newNode); |
|||
return newNode; |
|||
} |
|||
|
|||
foreach (XmlNode node in nodes) |
|||
{ |
|||
if (node.SelectNodes("ProjectReference").Count > 0) |
|||
{ |
|||
return node; |
|||
} |
|||
} |
|||
|
|||
foreach (XmlNode node in nodes) |
|||
{ |
|||
if (node.SelectNodes("PackageReference").Count > 0) |
|||
{ |
|||
return node; |
|||
} |
|||
} |
|||
|
|||
return nodes[0]; |
|||
} |
|||
} |
|||
@ -1,10 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.Packages.Modifying; |
|||
|
|||
public interface IAbpModuleFileManager |
|||
{ |
|||
Task AddDependency(string filePath, string moduleToAdd); |
|||
|
|||
Task<string> ExtractModuleNameWithNamespace(string filePath); |
|||
} |
|||
@ -1,25 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Studio.Package; |
|||
|
|||
namespace Volo.Abp.Studio.Packages.Modifying; |
|||
|
|||
public interface ICsprojFileManager |
|||
{ |
|||
Task AddProjectReferenceAsync(string filePath, string projectToReference); |
|||
|
|||
Task AddPackageReferenceAsync(string filePath, string packageName, string version); |
|||
|
|||
Task AddImportAsync(string filePath, string importFilePath); |
|||
|
|||
Task AddAssemblyVersionAsync(string filePath, string version); |
|||
|
|||
Task AddCopyLocalLockFileAssembliesAsync(string filePath); |
|||
|
|||
Task ConvertPackageReferenceToProjectReferenceAsync(string filePath, string projectToReference); |
|||
|
|||
|
|||
Task<string> GetTargetFrameworkAsync(string filePath); |
|||
|
|||
Task<List<PackageDependency>> GetDependencyListAsync(string filePath); |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.Nuget; |
|||
|
|||
public interface INugetSourceCodeStore |
|||
{ |
|||
Task<string> GetCachedSourceCodeFilePathAsync(string name, |
|||
string type, |
|||
string version = null, |
|||
bool includePreReleases = false); |
|||
|
|||
Task<string> GetCachedDllFilePathAsync(string name, |
|||
string type, |
|||
string version = null, |
|||
bool includePreReleases = false, |
|||
bool includeDependencies = false); |
|||
} |
|||
@ -1,35 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Cli.Utils; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Studio.Helpers; |
|||
|
|||
namespace Volo.Abp.Studio.Nuget; |
|||
|
|||
public class NugetPackageCacheManager : ITransientDependency |
|||
{ |
|||
private readonly ICmdHelper _cmdHelper; |
|||
|
|||
public NugetPackageCacheManager(ICmdHelper cmdHelper) |
|||
{ |
|||
_cmdHelper = cmdHelper; |
|||
} |
|||
|
|||
public async Task<string> CachePackageAsync(string packageName, string version, bool deleteAfter = true) |
|||
{ |
|||
var temporaryFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); |
|||
|
|||
Directory.CreateDirectory(temporaryFolder); |
|||
|
|||
_cmdHelper.RunCmdAndGetOutput("dotnet new console -lang c#", temporaryFolder); |
|||
_cmdHelper.RunCmdAndGetOutput($"dotnet add package {packageName} --version {version}", temporaryFolder); |
|||
|
|||
if (deleteAfter) |
|||
{ |
|||
Directory.Delete(temporaryFolder, true); |
|||
} |
|||
|
|||
return temporaryFolder; |
|||
} |
|||
} |
|||
@ -1,162 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Cli.NuGet; |
|||
using Volo.Abp.Cli.ProjectBuilding; |
|||
using Volo.Abp.Cli.Utils; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Studio.Helpers; |
|||
using Volo.Abp.Studio.Modules; |
|||
|
|||
namespace Volo.Abp.Studio.Nuget; |
|||
|
|||
[Dependency(ReplaceServices = true)] |
|||
public class NugetSourceCodeStore : ISourceCodeStore, INugetSourceCodeStore, ITransientDependency |
|||
{ |
|||
private readonly NuGetService _nuGetService; |
|||
private readonly NugetPackageCacheManager _nugetPackageCacheManager; |
|||
private readonly ICmdHelper _cmdHelper; |
|||
|
|||
public NugetSourceCodeStore( |
|||
NuGetService nuGetService, |
|||
NugetPackageCacheManager nugetPackageCacheManager, |
|||
ICmdHelper cmdHelper) |
|||
{ |
|||
_nuGetService = nuGetService; |
|||
_nugetPackageCacheManager = nugetPackageCacheManager; |
|||
_cmdHelper = cmdHelper; |
|||
} |
|||
|
|||
public async Task<TemplateFile> GetAsync( |
|||
string name, |
|||
string type, |
|||
string version = null, |
|||
string templateSource = null, |
|||
bool includePreReleases = false) |
|||
{ |
|||
name = GetNugetPackageName(name, type); |
|||
|
|||
var latestVersion = await GetLatestVersionAsync(name, includePreReleases); |
|||
|
|||
version ??= latestVersion; |
|||
|
|||
var localCachedFilePath = await GetLocalCacheSourceCodeFilePathInternal(name, version); |
|||
|
|||
if (localCachedFilePath == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return new TemplateFile(await File.ReadAllBytesAsync(localCachedFilePath), version, latestVersion, version); |
|||
} |
|||
|
|||
public async Task<string> GetCachedSourceCodeFilePathAsync(string name, string type, string version = null, |
|||
bool includePreReleases = false) |
|||
{ |
|||
name = GetNugetPackageName(name, type); |
|||
|
|||
version ??= await GetLatestVersionAsync(name, includePreReleases); |
|||
|
|||
return await GetLocalCacheSourceCodeFilePathInternal(name, version); |
|||
} |
|||
|
|||
public async Task<string> GetCachedDllFilePathAsync(string name, string type, string version = null, bool includePreReleases = false, bool includeDependencies = false) |
|||
{ |
|||
if (type == SourceCodeTypes.Template) |
|||
{ |
|||
name = TemplateNugetPackageInfoProvider.GetNugetPackageName(name); |
|||
} |
|||
|
|||
version ??= await GetLatestVersionAsync(name, includePreReleases); |
|||
|
|||
var localDllFolder = Path.Combine( |
|||
GetLocalNugetCachePath(), |
|||
name, |
|||
version, |
|||
"lib"); |
|||
|
|||
if (!Directory.Exists(localDllFolder) || |
|||
(includeDependencies && !Directory.GetFiles(localDllFolder, $"*Volo.Abp.Studio.ModuleInstaller.dll", SearchOption.AllDirectories).Any())) |
|||
{ |
|||
if (includeDependencies) |
|||
{ |
|||
var temporaryFolder = await _nugetPackageCacheManager.CachePackageAsync(name, version, false); |
|||
|
|||
var outputFolder = Path.GetDirectoryName( |
|||
Directory |
|||
.GetFiles(localDllFolder, $"*{name}.dll", SearchOption.AllDirectories) |
|||
.First() |
|||
); |
|||
|
|||
_cmdHelper.RunCmdAndGetOutput($"dotnet build -o {outputFolder}", temporaryFolder); |
|||
|
|||
Directory.Delete(temporaryFolder, true); |
|||
} |
|||
else |
|||
{ |
|||
await _nugetPackageCacheManager.CachePackageAsync(name, version); |
|||
} |
|||
} |
|||
|
|||
if (!Directory.Exists(localDllFolder)) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return Directory.GetFiles(localDllFolder, $"{name}.dll", SearchOption.AllDirectories).FirstOrDefault(); |
|||
} |
|||
|
|||
private async Task<string> GetLatestVersionAsync(string nugetPackage, bool includePreReleases) |
|||
{ |
|||
var v = await _nuGetService.GetLatestVersionOrNullAsync(nugetPackage, includePreReleases); |
|||
|
|||
return v.ToString(); |
|||
} |
|||
|
|||
private async Task<string> GetLocalCacheSourceCodeFilePathInternal(string name, string version) |
|||
{ |
|||
var localCacheFile = Path.Combine( |
|||
GetLocalNugetCachePath(), |
|||
name, |
|||
version, |
|||
"content", |
|||
$"{name}.zip"); |
|||
|
|||
|
|||
if (!File.Exists(localCacheFile)) |
|||
{ |
|||
await _nugetPackageCacheManager.CachePackageAsync(name, version); |
|||
|
|||
if (!File.Exists(localCacheFile)) |
|||
{ |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
return localCacheFile; |
|||
} |
|||
|
|||
private string GetLocalNugetCachePath() |
|||
{ |
|||
return Path.Combine( |
|||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), |
|||
".nuget", |
|||
"packages"); |
|||
} |
|||
|
|||
private string GetNugetPackageName(string name, string type) |
|||
{ |
|||
if (type == SourceCodeTypes.Template) |
|||
{ |
|||
return TemplateNugetPackageInfoProvider.GetNugetPackageName(name); |
|||
} |
|||
|
|||
if (type == SourceCodeTypes.Module) |
|||
{ |
|||
return name + ModuleConsts.SourceCorePackagePostfix; |
|||
} |
|||
|
|||
return name; |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.Nuget; |
|||
|
|||
public static class TemplateNugetPackageInfoProvider |
|||
{ |
|||
public static string GetNugetPackageName(string template) |
|||
{ |
|||
switch (template) |
|||
{ |
|||
case "app": |
|||
return "Cotur.Abp.Basic.Template"; // todo: replace with real template!
|
|||
default: |
|||
return null; |
|||
} |
|||
} |
|||
} |
|||
@ -1,29 +0,0 @@ |
|||
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"); |
|||
} |
|||
} |
|||
@ -1,243 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Studio.Packages; |
|||
|
|||
public static class PackageTypes |
|||
{ |
|||
public const string Domain = "lib.domain"; |
|||
public const string DomainShared = "lib.domain-shared"; |
|||
public const string Application = "lib.application"; |
|||
public const string ApplicationContracts = "lib.application-contracts"; |
|||
public const string EntityFrameworkCore = "lib.ef"; |
|||
public const string MongoDB = "lib.mongodb"; |
|||
public const string HttpApi = "lib.http-api"; |
|||
public const string HttpApiClient = "lib.http-api-client"; |
|||
public const string Mvc = "lib.mvc"; |
|||
public const string Blazor = "lib.blazor"; |
|||
public const string BlazorWebAssembly = "lib.blazor-wasm"; |
|||
public const string BlazorServer = "lib.blazor-server"; |
|||
public const string Test = "lib.test"; |
|||
|
|||
public const string HostHttpApi = "host.http-api"; |
|||
public const string HostMvc = "host.mvc"; |
|||
public const string HostBlazorWebAssembly = "host.blazor-wasm"; |
|||
public const string HostBlazorServer = "host.blazor-server"; |
|||
public const string HostApiGatewayOcelot = "host.api-gateway-ocelot"; |
|||
|
|||
public static string CalculateDefaultPackageNameForModule( |
|||
string moduleName, |
|||
string packageType) |
|||
{ |
|||
switch (packageType) |
|||
{ |
|||
case Domain: |
|||
return moduleName + ".Domain"; |
|||
case DomainShared: |
|||
return moduleName + ".Domain.Shared"; |
|||
case Application: |
|||
return moduleName + ".Application"; |
|||
case ApplicationContracts: |
|||
return moduleName + ".Application.Contracts"; |
|||
case EntityFrameworkCore: |
|||
return moduleName + ".EntityFrameworkCore"; |
|||
case HttpApi: |
|||
return moduleName + ".HttpApi"; |
|||
case HttpApiClient: |
|||
return moduleName + ".HttpApi.Client"; |
|||
case MongoDB: |
|||
return moduleName + ".MongoDB"; |
|||
case Mvc: |
|||
return moduleName + ".Web"; |
|||
case Blazor: |
|||
return moduleName + ".Blazor"; |
|||
case BlazorWebAssembly: |
|||
return moduleName + ".Blazor.WebAssembly"; |
|||
case BlazorServer: |
|||
return moduleName + ".Blazor.Server"; |
|||
case HostHttpApi: |
|||
return moduleName + ".HttpApi.Host"; |
|||
case HostMvc: |
|||
return moduleName + ".Web.Host"; |
|||
case HostBlazorWebAssembly: |
|||
return moduleName + ".Blazor.Client"; |
|||
case HostBlazorServer: |
|||
return moduleName + ".Blazor.Host"; |
|||
case HostApiGatewayOcelot: |
|||
return moduleName + ".Gateway"; |
|||
default: |
|||
throw new AbpStudioException(AbpStudioErrorCodes.PackageNameMustBeSpecified); |
|||
} |
|||
} |
|||
|
|||
public static bool IsHostProject(string packageType) |
|||
{ |
|||
return |
|||
packageType == HostMvc || |
|||
packageType == HostHttpApi || |
|||
packageType == HostBlazorWebAssembly || |
|||
packageType == HostBlazorServer || |
|||
packageType == HostApiGatewayOcelot; |
|||
} |
|||
|
|||
public static bool IsUiProject(string packageType) |
|||
{ |
|||
return |
|||
packageType == Mvc || |
|||
packageType == BlazorWebAssembly || |
|||
packageType == BlazorServer; |
|||
} |
|||
|
|||
public static string GetHostTypeOfUi(string packageType, bool useHostBlazorServerForMvcPackages = false) |
|||
{ |
|||
return packageType switch |
|||
{ |
|||
Mvc => !useHostBlazorServerForMvcPackages ? HostMvc : HostBlazorServer, |
|||
BlazorWebAssembly => HostBlazorWebAssembly, |
|||
BlazorServer => HostBlazorServer, |
|||
_ => null |
|||
}; |
|||
} |
|||
|
|||
public static List<string> GetSuggestedInstallationType(string packageType) |
|||
{ |
|||
if (packageType == DomainShared) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Domain, |
|||
DomainShared, |
|||
ApplicationContracts |
|||
}; |
|||
} |
|||
|
|||
if (packageType == Domain) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Domain, |
|||
Application |
|||
}; |
|||
} |
|||
|
|||
if (packageType == ApplicationContracts) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Application, |
|||
ApplicationContracts, |
|||
Mvc, |
|||
Blazor, |
|||
BlazorServer, |
|||
BlazorWebAssembly, |
|||
HttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == Application) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Application, |
|||
HostMvc, |
|||
HostBlazorServer, |
|||
HostBlazorWebAssembly, |
|||
HostHttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == EntityFrameworkCore) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
EntityFrameworkCore, |
|||
HostMvc, |
|||
HostBlazorServer, |
|||
HostBlazorWebAssembly, |
|||
HostHttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == MongoDB) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
MongoDB, |
|||
HostMvc, |
|||
HostBlazorServer, |
|||
HostBlazorWebAssembly, |
|||
HostHttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == HttpApi) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
HttpApi, |
|||
HostMvc, |
|||
HostBlazorServer, |
|||
HostBlazorWebAssembly, |
|||
HostHttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == HttpApiClient) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
HttpApiClient, |
|||
HostMvc, |
|||
HostBlazorServer, |
|||
HostBlazorWebAssembly, |
|||
HostHttpApi |
|||
}; |
|||
} |
|||
|
|||
if (packageType == Mvc) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Mvc, |
|||
HostMvc |
|||
}; |
|||
} |
|||
|
|||
if (packageType == Blazor) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Blazor, |
|||
BlazorServer, |
|||
BlazorWebAssembly |
|||
}; |
|||
} |
|||
|
|||
if (packageType == BlazorServer) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
BlazorServer, |
|||
HostBlazorServer |
|||
}; |
|||
} |
|||
|
|||
if (packageType == BlazorWebAssembly) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
BlazorWebAssembly, |
|||
HostBlazorWebAssembly |
|||
}; |
|||
} |
|||
|
|||
if (packageType == Test) |
|||
{ |
|||
return new List<string>() |
|||
{ |
|||
Test |
|||
}; |
|||
} |
|||
|
|||
return new List<string>(); |
|||
} |
|||
} |
|||
@ -1,7 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Package; |
|||
|
|||
public enum ReferenceType |
|||
{ |
|||
Project = 1, |
|||
Package = 2 |
|||
} |
|||
@ -1,125 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.IO.Abstractions; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Studio.Helpers; |
|||
|
|||
namespace Volo.Abp.Studio.Solution; |
|||
|
|||
public class DotnetSlnFileModifierService : IDotnetSlnFileModifierService, ITransientDependency |
|||
{ |
|||
public IFileSystem FileSystem { get; } |
|||
|
|||
public DotnetSlnFileModifierService(IFileSystem fileSystem) |
|||
{ |
|||
FileSystem = fileSystem; |
|||
} |
|||
|
|||
public async Task AddProjectAsync(string slnFilePath, string projectPath, string slnTargetFolder = "src") |
|||
{ |
|||
var projectName = FileSystem.Path.GetFileName(projectPath).RemovePostFix(".csproj"); |
|||
var folderId = await GetOrAddFolderIdAsync(slnFilePath, slnTargetFolder); |
|||
var slnFileLines = (await FileSystem.File.ReadAllTextAsync(slnFilePath)) |
|||
.Split(Environment.NewLine).ToList(); |
|||
|
|||
if (slnFileLines.Any(l => l.Contains($"\"{projectName}\"") && l.Contains("9A19103F-16F7-4668-BE54-9A1E7A4F7556"))) |
|||
{ |
|||
throw new AbpStudioException(AbpStudioErrorCodes.ProjectWithSameNameAlreadyExistInTheSolutionFile) |
|||
.WithData("Solution Path", slnFilePath) |
|||
.WithData("Project Name", projectName); |
|||
} |
|||
|
|||
var projectId = Guid.NewGuid().ToString(); |
|||
var relativeProjectPath = PathHelper.GetRelativePath(slnFilePath, projectPath).Replace("/", "\\"); |
|||
var newProjectLine = "Project(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"" + projectName + "\"," + |
|||
" \"" + relativeProjectPath + "\", \"{" + projectId + "}\"" |
|||
+ Environment.NewLine + "EndProject"; |
|||
|
|||
slnFileLines.InsertAfter(l => l.Trim().Equals("EndProject"), newProjectLine); |
|||
|
|||
var newPostSolutionLine = |
|||
" {" + projectId + "}.Debug|Any CPU.ActiveCfg = Debug|Any CPU" + Environment.NewLine + |
|||
" {" + projectId + "}.Debug|Any CPU.Build.0 = Debug|Any CPU" + Environment.NewLine + |
|||
" {" + projectId + "}.Release|Any CPU.ActiveCfg = Release|Any CPU" + Environment.NewLine + |
|||
" {" + projectId + "}.Release|Any CPU.Build.0 = Release|Any CPU"; |
|||
|
|||
if (!slnFileLines.Any(l => l.Contains("GlobalSection") && l.Contains("ProjectConfigurationPlatforms"))) |
|||
{ |
|||
slnFileLines.InsertBefore(l => l.Trim().Equals("EndGlobal"), " GlobalSection(ProjectConfigurationPlatforms) = postSolution"); |
|||
slnFileLines.InsertBefore(l => l.Trim().Equals("EndGlobal"), " EndGlobalSection"); |
|||
} |
|||
|
|||
slnFileLines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("ProjectConfigurationPlatforms"), |
|||
newPostSolutionLine); |
|||
|
|||
var newPreSolutionLine = |
|||
" {" + projectId + "} = {" + folderId + "}"; |
|||
|
|||
|
|||
if (!slnFileLines.Any(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"))) |
|||
{ |
|||
slnFileLines.InsertBefore(l => l.Trim().Equals("EndGlobal"), " GlobalSection(NestedProjects) = preSolution"); |
|||
slnFileLines.InsertBefore(l => l.Trim().Equals("EndGlobal"), " EndGlobalSection"); |
|||
} |
|||
|
|||
slnFileLines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); |
|||
|
|||
await FileSystem.File.WriteAllTextAsync(slnFilePath, string.Join(Environment.NewLine, slnFileLines)); |
|||
} |
|||
|
|||
private async Task<string> GetOrAddFolderIdAsync(string solutionFile, string folderName, string parentFolderId = null) |
|||
{ |
|||
if (folderName.Contains("/") && parentFolderId == null) |
|||
{ |
|||
var parents = folderName.Split("/").SkipLast(1).JoinAsString("/"); |
|||
folderName = folderName.Split("/").Last(); |
|||
|
|||
parentFolderId = await GetOrAddFolderIdAsync(solutionFile, parents); |
|||
} |
|||
|
|||
var file = await FileSystem.File.ReadAllTextAsync(solutionFile); |
|||
var lines = file.Split(Environment.NewLine).ToList(); |
|||
string folderId; |
|||
|
|||
var folderLineIndex = lines.FindIndex(l => |
|||
l.Contains("2150E333-8FDC-42A3-9474-1A3956D46DE8") && l.Contains("\"" + folderName + "\"")); |
|||
|
|||
if (folderLineIndex < 0) |
|||
{ |
|||
folderId = Guid.NewGuid().ToString(); |
|||
var newFolderLine = "Project(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"" + folderName + "\", \"" + |
|||
folderName + "\", \"{" + folderId + "}\"" |
|||
+ Environment.NewLine + "EndProject"; |
|||
|
|||
if (lines.Any(l => l.Trim().Equals("EndProject"))) |
|||
{ |
|||
lines.InsertAfter(l => l.Trim().Equals("EndProject"), newFolderLine); |
|||
} |
|||
else |
|||
{ |
|||
lines.InsertAfter(l => l.StartsWith("Microsoft Visual Studio Solution File"), newFolderLine); |
|||
} |
|||
|
|||
if (parentFolderId != null && lines.Any(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"))) |
|||
{ |
|||
var newPreSolutionLine = |
|||
" {" + folderId + "} = {" + parentFolderId + "}"; |
|||
|
|||
lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), |
|||
newPreSolutionLine); |
|||
} |
|||
|
|||
await FileSystem.File.WriteAllTextAsync(solutionFile, string.Join(Environment.NewLine, lines)); |
|||
} |
|||
else |
|||
{ |
|||
folderId = lines[folderLineIndex].Replace("\"", " ").Replace("{", " ").Replace("}", " ").TrimEnd() |
|||
.Split(" ").Last(); |
|||
} |
|||
|
|||
return folderId; |
|||
} |
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.Solution; |
|||
|
|||
public interface IDotnetSlnFileModifierService |
|||
{ |
|||
Task AddProjectAsync(string slnFile, string projectPath, string slnTargetFolder = "src"); |
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.Solution; |
|||
|
|||
public interface ISolutionFileModuleAdder |
|||
{ |
|||
Task AddAsync(string TargetModule, string ModuleName); |
|||
} |
|||
@ -1,46 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Studio.Modules; |
|||
|
|||
namespace Volo.Abp.Studio.Solution; |
|||
|
|||
public class SolutionFileModuleAdder : ISolutionFileModuleAdder, ITransientDependency |
|||
{ |
|||
private readonly IDotnetSlnFileModifierService _dotnetSlnFileModifierService; |
|||
|
|||
public SolutionFileModuleAdder(IDotnetSlnFileModifierService dotnetSlnFileModifierService) |
|||
{ |
|||
_dotnetSlnFileModifierService = dotnetSlnFileModifierService; |
|||
} |
|||
|
|||
public async Task AddAsync(string TargetModule, string ModuleName) |
|||
{ |
|||
var targetFolder = Path.Combine(Path.GetDirectoryName(TargetModule), "modules", ModuleName); ; |
|||
var slnFile = TargetModule.RemovePostFix(ModuleConsts.FileExtension) + ".sln"; |
|||
var moduleSrcFolder = Path.Combine(targetFolder, "src"); |
|||
var moduleTestFolder = Path.Combine(targetFolder, "test"); |
|||
|
|||
await AddProjectsUnderDirectoryToSolutionFile(slnFile, moduleSrcFolder, $"modules/{ModuleName}"); |
|||
await AddProjectsUnderDirectoryToSolutionFile(slnFile, moduleTestFolder, $"test/{ModuleName}.Tests"); |
|||
} |
|||
|
|||
private async Task AddProjectsUnderDirectoryToSolutionFile( |
|||
string slnFile, |
|||
string directory, |
|||
string slnTargetFolder) |
|||
{ |
|||
if (!Directory.Exists(directory)) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var projects = Directory.GetFiles(directory, "*.csproj", SearchOption.AllDirectories); |
|||
|
|||
foreach (var project in projects) |
|||
{ |
|||
await _dotnetSlnFileModifierService.AddProjectAsync(slnFile, project, slnTargetFolder); |
|||
} |
|||
} |
|||
} |
|||
@ -1,50 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.IO.Abstractions; |
|||
using System.Threading.Tasks; |
|||
using System.Xml; |
|||
using System.Xml.Linq; |
|||
using Volo.Abp.Threading; |
|||
|
|||
namespace Volo.Abp.Studio.Xml; |
|||
|
|||
public abstract class XmlFileManagerBase |
|||
{ |
|||
public IFileSystem FileSystem { get; set; } |
|||
|
|||
public ICancellationTokenProvider CancellationTokenProvider { get; set; } |
|||
|
|||
protected async Task<XmlDocument> GetXmlDocumentAsync(string filePath) |
|||
{ |
|||
try |
|||
{ |
|||
var doc = new XmlDocument() { PreserveWhitespace = true }; |
|||
doc.Load(GenerateStreamFromString(await FileSystem.File.ReadAllTextAsync(filePath))); |
|||
return doc; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
throw new AbpException($"Error while reading {filePath} as XML document.", innerException: ex); |
|||
} |
|||
} |
|||
|
|||
protected async Task SaveXmlDocumentAsync(string filePath, XmlDocument rootNode) |
|||
{ |
|||
await SaveFileContentAsync(filePath, XDocument.Parse(rootNode.OuterXml).ToString()); |
|||
} |
|||
|
|||
protected async Task SaveFileContentAsync(string filePath, string content) |
|||
{ |
|||
await FileSystem.File.WriteAllTextAsync(filePath, content, CancellationTokenProvider.Token); |
|||
} |
|||
|
|||
private MemoryStream GenerateStreamFromString(string s) |
|||
{ |
|||
var stream = new MemoryStream(); |
|||
var writer = new StreamWriter(stream); |
|||
writer.Write(s); |
|||
writer.Flush(); |
|||
stream.Position = 0; |
|||
return stream; |
|||
} |
|||
} |
|||
@ -1,11 +0,0 @@ |
|||
{ |
|||
"name": "Volo.Abp.Studio.Domain.Shared", |
|||
"hash": "64d3a6a5ecb4776705864ea8cc2b56b5", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Studio", |
|||
"contentType": "abpModule", |
|||
"name": "AbpStudioDomainSharedModule" |
|||
} |
|||
] |
|||
} |
|||
@ -1,3 +0,0 @@ |
|||
{ |
|||
"role": "lib.domain-shared" |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\..\framework\src\Volo.Abp.Core\Volo.Abp.Core.csproj" /> |
|||
<ProjectReference Include="..\..\..\framework\src\Volo.Abp.Cli.Core\Volo.Abp.Cli.Core.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -1,12 +0,0 @@ |
|||
using Volo.Abp.Cli; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.Studio; |
|||
|
|||
[DependsOn( |
|||
typeof(AbpCliCoreModule) |
|||
)] |
|||
public class AbpStudioDomainSharedModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
@ -1,32 +0,0 @@ |
|||
namespace Volo.Abp.Studio; |
|||
|
|||
public static class AbpStudioErrorCodes |
|||
{ |
|||
public const string SolutionAlreadyExists = "AbpStudio:SolutionAlreadyExists"; |
|||
public const string ModuleAlreadyExistsInTheSolution = "AbpStudio:ModuleAlreadyExistsInTheSolution"; |
|||
public const string ModuleFileAlreadyExists = "AbpStudio:ModuleFileAlreadyExists"; |
|||
public const string IncorrectFileFormat = "AbpStudio:IncorrectFileFormat"; |
|||
public const string ModuleNotFound = "AbpStudio:ModuleNotFound"; |
|||
public const string SolutionNotFound = "AbpStudio:SolutionNotFound"; |
|||
public const string ModuleNotSpecified = "AbpStudio:ModuleNotSpecified"; |
|||
public const string SolutionNotSpecified = "AbpStudio:SolutionNotSpecified"; |
|||
public const string ProjectAlreadyExistInTheModule = "AbpStudio:ProjectAlreadyExistInTheModule"; |
|||
public const string IncorrectSolutionFileFormat = "AbpStudio:IncorrectSolutionFileFormat"; |
|||
public const string FolderNotFound = "AbpStudio:FolderNotFound"; |
|||
public const string ProjectWithSameNameAlreadyExistInTheSolutionFile = "AbpStudio:ProjectWithSameNameAlreadyExistInTheSolutionFile"; |
|||
public const string UndefinedPackageTemplate = "AbpStudio:UndefinedPackageTemplate"; |
|||
public const string PackageTemplateNotSpecified = "AbpStudio:PackageTemplateNotSpecified"; |
|||
public const string PackageNameMustBeSpecified = "AbpStudio:PackageNameMustBeSpecified"; |
|||
public const string FileAlreadyExists = "AbpStudio:FileAlreadyExists"; |
|||
public const string PackageNotSpecified = "AbpStudio:PackageNotSpecified"; |
|||
public const string DbmsMustBeSpecified = "AbpStudio:DbmsMustBeSpecified"; |
|||
public const string UserNotLoggedIn = "AbpStudio:UserNotLoggedIn"; |
|||
public const string LoginFailed = "AbpStudio:LoginFailed"; |
|||
public const string PackageAlreadyExist = "AbpStudio:PackageAlreadyExist"; |
|||
public const string AbpModuleFileNotFound = "AbpStudio:AbpModuleFileNotFound"; |
|||
public const string DllNotFound = "AbpStudio:DllNotFound"; |
|||
public const string PackageNotFound = "AbpStudio:PackageNotFound"; |
|||
public const string FileNotFound = "AbpStudio:FileNotFound"; |
|||
public const string IncorrectFolderName = "AbpStudio:IncorrectFolderName"; |
|||
public const string ModuleAlreadyInstalled = "AbpStudio:ModuleAlreadyInstalled"; |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Modules; |
|||
|
|||
public static class ModuleConsts |
|||
{ |
|||
public const string FileExtension = ".abpmdl.json"; |
|||
public const string InstallerPackagePostfix = ".Installer"; |
|||
public const string SourceCorePackagePostfix = ".SourceCode"; |
|||
public const string Packages = "packages"; |
|||
|
|||
public static class Layers //TODO: Moving to PackageTypes
|
|||
{ |
|||
public const string Domain = "lib.domain"; |
|||
public const string DomainShared = "lib.domain.shared"; |
|||
public const string Application = "lib.application"; |
|||
public const string ApplicationContracts = "lib.application.contracts"; |
|||
} |
|||
} |
|||
@ -1,12 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Packages.Referencing; |
|||
|
|||
public enum PackageReferenceCompatibility |
|||
{ |
|||
Unknown, |
|||
DDD_Compatible, |
|||
Compatible, |
|||
TestProject, |
|||
IndirectlyReferenced, |
|||
DirectlyReferenced, |
|||
CircularReference |
|||
} |
|||
@ -1 +0,0 @@ |
|||
{} |
|||
@ -1,15 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.Studio.Analyzing.Abstractions\Volo.Abp.Studio.Analyzing.Abstractions.csproj" /> |
|||
<ProjectReference Include="..\..\..\framework\src\Volo.Abp.Core\Volo.Abp.Core.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -1,12 +0,0 @@ |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Studio.Analyzing; |
|||
|
|||
namespace Volo.Abp.Studio; |
|||
|
|||
[DependsOn( |
|||
typeof(AbpStudioAnalyzingAbstractionsModule) |
|||
)] |
|||
public class AbpStudioModuleInstallerAbstractionsModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
@ -1,36 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Analyzing; |
|||
|
|||
public class AnalyzingOptions |
|||
{ |
|||
public bool Force { get; set; } = false; |
|||
|
|||
[CanBeNull] |
|||
public string AnalyzeConfigurationFile { get; set; } |
|||
|
|||
// Combines two options
|
|||
// The second option has more priority
|
|||
public static AnalyzingOptions Combine([CanBeNull] AnalyzingOptions first, [CanBeNull] AnalyzingOptions second) |
|||
{ |
|||
if (second == null && first == null) |
|||
{ |
|||
return new AnalyzingOptions(); |
|||
} |
|||
|
|||
if (second == null) |
|||
{ |
|||
return first; |
|||
} |
|||
|
|||
if (first == null) |
|||
{ |
|||
return second; |
|||
} |
|||
|
|||
return new AnalyzingOptions |
|||
{ |
|||
AnalyzeConfigurationFile = second.AnalyzeConfigurationFile ?? first.AnalyzeConfigurationFile |
|||
}; |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public class EfCoreConfigurationMethodDeclaration |
|||
{ |
|||
public string Namespace { get; } |
|||
|
|||
public string MethodName { get; } |
|||
|
|||
public EfCoreConfigurationMethodDeclaration([NotNull] string nameSpace, [NotNull] string methodName) |
|||
{ |
|||
Namespace = Check.NotNullOrEmpty(nameSpace, nameof(nameSpace)); |
|||
MethodName = Check.NotNullOrEmpty(methodName, nameof(methodName)); |
|||
} |
|||
|
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public interface IModuleInstallingPipelineBuilder |
|||
{ |
|||
Task<ModuleInstallingPipeline> BuildAsync(ModuleInstallingContext context); |
|||
} |
|||
@ -1,88 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Studio.Packages; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public class ModuleInstallingContext |
|||
{ |
|||
public string ModuleName { get; set; } |
|||
|
|||
public string TargetModule { get; set; } |
|||
|
|||
public bool WithSourceCode { get; set; } |
|||
|
|||
public bool AddToSolutionFile { get; set; } |
|||
|
|||
public string Version { get; set; } |
|||
|
|||
public List<EfCoreConfigurationMethodDeclaration> EfCoreConfigurationMethodDeclarations { get; } |
|||
|
|||
public List<PackageInfo> TargetModulePackages { get; protected set; } |
|||
|
|||
public List<PackageInfoWithAnalyze> ReferenceModulePackages { get; protected set; } |
|||
|
|||
public Dictionary<string, string> Options { get; } |
|||
|
|||
public IServiceProvider ServiceProvider { get; } |
|||
|
|||
public ModuleInstallingContext( |
|||
string moduleName, |
|||
string targetModule, |
|||
bool withSourceCode, |
|||
bool addToSolutionFile, |
|||
string version, |
|||
Dictionary<string, string> options, |
|||
IServiceProvider serviceProvider) |
|||
{ |
|||
ModuleName = moduleName; |
|||
TargetModule = targetModule; |
|||
WithSourceCode = withSourceCode; |
|||
AddToSolutionFile = addToSolutionFile; |
|||
Version = version; |
|||
Options = options; |
|||
|
|||
TargetModulePackages = new List<PackageInfo>(); |
|||
ReferenceModulePackages = new List<PackageInfoWithAnalyze>(); |
|||
|
|||
EfCoreConfigurationMethodDeclarations = new List<EfCoreConfigurationMethodDeclaration>(); |
|||
|
|||
ServiceProvider = Check.NotNull(serviceProvider, nameof(serviceProvider)); |
|||
} |
|||
|
|||
public void AddEfCoreConfigurationMethodDeclaration(params EfCoreConfigurationMethodDeclaration[] methodNames) |
|||
{ |
|||
foreach (var methodName in methodNames) |
|||
{ |
|||
Check.NotNull(methodName, nameof(methodName)); |
|||
|
|||
EfCoreConfigurationMethodDeclarations.Add(methodName); |
|||
} |
|||
} |
|||
|
|||
public void SetReferenceModulePackages([NotNull] List<PackageInfoWithAnalyze> referenceModulePackages) |
|||
{ |
|||
Check.NotNull(referenceModulePackages, nameof(referenceModulePackages)); |
|||
|
|||
ReferenceModulePackages = referenceModulePackages; |
|||
} |
|||
|
|||
public void SetTargetModulePackages([NotNull] List<PackageInfo> targetModulePackages) |
|||
{ |
|||
Check.NotNull(targetModulePackages, nameof(targetModulePackages)); |
|||
|
|||
TargetModulePackages = targetModulePackages; |
|||
} |
|||
|
|||
public string GetTargetSourceCodeFolder() |
|||
{ |
|||
return CalculateTargetSourceCodeFolder(TargetModule, ModuleName); |
|||
} |
|||
|
|||
public static string CalculateTargetSourceCodeFolder(string targetModule, string moduleName) |
|||
{ |
|||
return Path.Combine(Path.GetDirectoryName(targetModule), "modules", moduleName); |
|||
} |
|||
} |
|||
@ -1,52 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public class ModuleInstallingPipeline |
|||
{ |
|||
public ModuleInstallingContext Context { get; } |
|||
|
|||
public List<ModuleInstallingPipelineStep> Steps { get; } |
|||
|
|||
public ModuleInstallingPipeline(ModuleInstallingContext context) |
|||
{ |
|||
Context = context; |
|||
Steps = new List<ModuleInstallingPipelineStep>(); |
|||
} |
|||
|
|||
public async Task ExecuteAsync() |
|||
{ |
|||
foreach (var step in Steps) |
|||
{ |
|||
await step.ExecuteAsync(Context); |
|||
} |
|||
} |
|||
|
|||
public void Add(ModuleInstallingPipelineStep step) |
|||
{ |
|||
Steps.Add(step); |
|||
} |
|||
|
|||
public void Remove(Type stepType) |
|||
{ |
|||
Steps.RemoveAll(step => step.GetType() == stepType); |
|||
} |
|||
|
|||
public void Replace(Type stepType, ModuleInstallingPipelineStep step) |
|||
{ |
|||
Steps.ReplaceOne(step => step.GetType() == stepType, step); |
|||
} |
|||
|
|||
public void InsertAfter(Type stepType, ModuleInstallingPipelineStep step) |
|||
{ |
|||
Steps.InsertAfter(step => step.GetType() == stepType, step); |
|||
} |
|||
|
|||
public void InsertBefore(Type stepType, ModuleInstallingPipelineStep step) |
|||
{ |
|||
Steps.InsertBefore(step => step.GetType() == stepType, step); |
|||
} |
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public abstract class ModuleInstallingPipelineStep |
|||
{ |
|||
public abstract Task ExecuteAsync(ModuleInstallingContext context); |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Options; |
|||
|
|||
public interface IModuleInstallingOptionProvider |
|||
{ |
|||
Task<List<ModuleInstallingOption>> GetAsync(); |
|||
} |
|||
@ -1,27 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Options; |
|||
|
|||
public class ModuleInstallingOption |
|||
{ |
|||
public string Name { get; set; } |
|||
|
|||
public string Description { get; set; } |
|||
|
|||
public ModuleInstallingOptionType Type { get; set; } |
|||
|
|||
public Dictionary<string, string> Values { get; set; } |
|||
|
|||
public ModuleInstallingOption( |
|||
[NotNull] string name, |
|||
[NotNull] string description, |
|||
[NotNull] ModuleInstallingOptionType type, |
|||
[CanBeNull] Dictionary<string, string> values = null) |
|||
{ |
|||
Name = Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
Description = Check.NotNullOrWhiteSpace(description, nameof(description)); |
|||
Type = type; |
|||
Values = values ?? new Dictionary<string, string>(); |
|||
} |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
namespace Volo.Abp.Studio.ModuleInstalling.Options; |
|||
|
|||
public enum ModuleInstallingOptionType |
|||
{ |
|||
NotSpecified, |
|||
Checkbox, |
|||
FreeText, |
|||
ComboBox |
|||
} |
|||
@ -1,8 +0,0 @@ |
|||
namespace Volo.Abp.Studio.Packages; |
|||
|
|||
public static class PackageConsts |
|||
{ |
|||
public const string FileExtension = ".abppkg.json"; |
|||
|
|||
public const string RoleProperty = "role"; |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Studio.Packages; |
|||
|
|||
public static class PackageHelper |
|||
{ |
|||
public static string GetNameFromPath([NotNull] string path) |
|||
{ |
|||
Check.NotNullOrWhiteSpace(path, nameof(path)); |
|||
|
|||
return Path |
|||
.GetFileName(path) |
|||
.RemovePostFix(StringComparison.OrdinalIgnoreCase, PackageConsts.FileExtension); |
|||
} |
|||
} |
|||
@ -1,26 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Studio.Analyzing; |
|||
|
|||
namespace Volo.Abp.Studio.Packages; |
|||
|
|||
public class PackageInfo |
|||
{ |
|||
[NotNull] |
|||
public string Path { get; } |
|||
|
|||
[NotNull] |
|||
public string Name { get; } |
|||
|
|||
[CanBeNull] |
|||
public string Role { get; } |
|||
|
|||
[CanBeNull] |
|||
public AnalyzingOptions AnalyzingOptions { get; set; } |
|||
|
|||
public PackageInfo([NotNull] string path, [CanBeNull] string role) |
|||
{ |
|||
Path = Check.NotNullOrWhiteSpace(path, nameof(path)); |
|||
Name = PackageHelper.GetNameFromPath(path); |
|||
Role = role; |
|||
} |
|||
} |
|||
@ -1,27 +0,0 @@ |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Studio.Analyzing.Models; |
|||
|
|||
namespace Volo.Abp.Studio.Packages; |
|||
|
|||
public class PackageInfoWithAnalyze |
|||
{ |
|||
[NotNull] |
|||
public string Path { get; } |
|||
|
|||
[NotNull] |
|||
public string Name { get; } |
|||
|
|||
[CanBeNull] |
|||
public string Role { get; } |
|||
|
|||
[CanBeNull] |
|||
public PackageModel Analyze { get; } |
|||
|
|||
public PackageInfoWithAnalyze([NotNull] string path, [CanBeNull] string role, [CanBeNull] PackageModel analyze) |
|||
{ |
|||
Path = Check.NotNullOrWhiteSpace(path, nameof(path)); |
|||
Name = PackageHelper.GetNameFromPath(path); |
|||
Role = role; |
|||
Analyze = analyze; |
|||
} |
|||
} |
|||
@ -1 +0,0 @@ |
|||
{} |
|||
@ -1,16 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net6.0</TargetFramework> |
|||
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.Studio.Domain.CommonServices\Volo.Abp.Studio.Domain.CommonServices.csproj" /> |
|||
<ProjectReference Include="..\Volo.Abp.Studio.ModuleInstaller.Abstractions\Volo.Abp.Studio.ModuleInstaller.Abstractions.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -1,15 +0,0 @@ |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.Studio; |
|||
|
|||
[DependsOn( |
|||
typeof(AbpStudioDomainCommonServicesModule), |
|||
typeof(AbpStudioModuleInstallerAbstractionsModule) |
|||
)] |
|||
public class AbpStudioModuleInstallerModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -1,32 +0,0 @@ |
|||
using System.Linq; |
|||
using Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling; |
|||
|
|||
public abstract class ModuleInstallingPipelineBuilderBase |
|||
{ |
|||
protected ModuleInstallingPipeline GetBasePipeline(ModuleInstallingContext context) |
|||
{ |
|||
var pipeline = new ModuleInstallingPipeline(context); |
|||
|
|||
if (context.WithSourceCode) |
|||
{ |
|||
pipeline.Add(new SourceCodeDownloadStep()); |
|||
pipeline.Add(new AssemblyVersionStep()); |
|||
|
|||
if (context.AddToSolutionFile) |
|||
{ |
|||
pipeline.Add(new AddToSolutionFileStep()); |
|||
} |
|||
} |
|||
|
|||
pipeline.Add(new PackageReferencingStep()); |
|||
|
|||
if (context.EfCoreConfigurationMethodDeclarations.Any()) |
|||
{ |
|||
pipeline.Add(new AddEfCoreConfigurationMethodStep()); |
|||
} |
|||
|
|||
return pipeline; |
|||
} |
|||
} |
|||
@ -1,49 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Cli.ProjectModification; |
|||
using Volo.Abp.Studio.Packages; |
|||
using Volo.Abp.Studio.Packages.Modifying; |
|||
using Volo.Abp.Studio.Analyzing.Models.Module; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
public class AddEfCoreConfigurationMethodStep : ModuleInstallingPipelineStep |
|||
{ |
|||
public override async Task ExecuteAsync(ModuleInstallingContext context) |
|||
{ |
|||
var efCoreProject = context.TargetModulePackages.FirstOrDefault(p => p.Role == PackageTypes.EntityFrameworkCore); |
|||
|
|||
if (efCoreProject == null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var efCoreProjectCsprojPath = efCoreProject.Path.RemovePostFix(PackageConsts.FileExtension) + ".csproj"; |
|||
|
|||
var _derivedClassFinder = context.ServiceProvider.GetRequiredService<DerivedClassFinder>(); |
|||
var _dbContextFileBuilderConfigureAdder = context.ServiceProvider.GetRequiredService<DbContextFileBuilderConfigureAdder>(); |
|||
|
|||
var dbContextFile = _derivedClassFinder.Find(efCoreProjectCsprojPath, "AbpDbContext").FirstOrDefault(); |
|||
|
|||
if (dbContextFile == null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
foreach (var declaration in context.EfCoreConfigurationMethodDeclarations) |
|||
{ |
|||
try |
|||
{ |
|||
_dbContextFileBuilderConfigureAdder.Add(dbContextFile, declaration.Namespace + ":" + declaration.MethodName); |
|||
} |
|||
catch (Exception e) |
|||
{ |
|||
continue; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Studio.Solution; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
public class AddToSolutionFileStep : ModuleInstallingPipelineStep |
|||
{ |
|||
public override async Task ExecuteAsync(ModuleInstallingContext context) |
|||
{ |
|||
var _solutionFileModuleAdder = context.ServiceProvider.GetRequiredService<ISolutionFileModuleAdder>(); |
|||
|
|||
await _solutionFileModuleAdder.AddAsync(context.TargetModule, context.ModuleName); |
|||
} |
|||
} |
|||
@ -1,30 +0,0 @@ |
|||
using System.IO; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Studio.Packages.Modifying; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
public class AssemblyVersionStep : ModuleInstallingPipelineStep |
|||
{ |
|||
public async override Task ExecuteAsync(ModuleInstallingContext context) |
|||
{ |
|||
var moduleFolder = Path.GetDirectoryName(context.TargetModule); |
|||
var commonPropsFilePath = Path.Combine(moduleFolder, "common.props"); |
|||
|
|||
if (!File.Exists(commonPropsFilePath)) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
var _csprojFileManager = context.ServiceProvider.GetRequiredService<ICsprojFileManager>(); |
|||
|
|||
var csProjFiles = Directory.GetFiles(context.GetTargetSourceCodeFolder(), "*.csproj", SearchOption.AllDirectories); |
|||
|
|||
foreach (var csProjFile in csProjFiles) |
|||
{ |
|||
await _csprojFileManager.AddAssemblyVersionAsync(csProjFile, context.Version); |
|||
await _csprojFileManager.AddCopyLocalLockFileAssembliesAsync(csProjFile); |
|||
} |
|||
} |
|||
} |
|||
@ -1,110 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Studio.Packages; |
|||
using Volo.Abp.Studio.Packages.Modifying; |
|||
using Volo.Abp.Studio.Analyzing.Models.Module; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
public class PackageReferencingStep : ModuleInstallingPipelineStep |
|||
{ |
|||
public override async Task ExecuteAsync(ModuleInstallingContext context) |
|||
{ |
|||
var _abpModuleFileManager = context.ServiceProvider.GetRequiredService<IAbpModuleFileManager>(); |
|||
|
|||
foreach (var referencePackage in context.ReferenceModulePackages) |
|||
{ |
|||
var targetPackages = GetTargetPackages(context.TargetModulePackages, referencePackage); |
|||
|
|||
foreach (var targetPackage in targetPackages) |
|||
{ |
|||
await AddReferenceAsync(context, targetPackage, referencePackage); |
|||
|
|||
var targetAbpModulePath = FindAbpModuleFile(targetPackage.Path); |
|||
var referencePackageAbpModuleName = FindAbpModuleName(referencePackage); |
|||
|
|||
if (targetAbpModulePath != null && referencePackageAbpModuleName != null) |
|||
{ |
|||
await _abpModuleFileManager.AddDependency(targetAbpModulePath, referencePackageAbpModuleName); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
private async Task AddReferenceAsync( |
|||
ModuleInstallingContext context, |
|||
PackageInfo targetPackage, |
|||
PackageInfoWithAnalyze referencePackage) |
|||
{ |
|||
var _csprojFileManager = context.ServiceProvider.GetRequiredService<ICsprojFileManager>(); |
|||
var csprojFilePath = targetPackage.Path.RemovePostFix(PackageConsts.FileExtension) + ".csproj"; |
|||
|
|||
if (context.WithSourceCode) |
|||
{ |
|||
var referenceProjectPath = Directory.GetFiles(context.GetTargetSourceCodeFolder(), |
|||
$"*{referencePackage.Name}.csproj", |
|||
SearchOption.AllDirectories).FirstOrDefault(); |
|||
|
|||
if (referenceProjectPath == null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
await _csprojFileManager.AddProjectReferenceAsync( |
|||
csprojFilePath, |
|||
referenceProjectPath); |
|||
} |
|||
else |
|||
{ |
|||
await _csprojFileManager.AddPackageReferenceAsync( |
|||
csprojFilePath, |
|||
referencePackage.Name, |
|||
context.Version); |
|||
} |
|||
} |
|||
|
|||
private string FindAbpModuleFile(string targetPackagePath) |
|||
{ |
|||
return Directory.GetFiles(Path.GetDirectoryName(targetPackagePath), "*Module.cs", |
|||
SearchOption.AllDirectories) |
|||
.FirstOrDefault(); |
|||
} |
|||
|
|||
private string FindAbpModuleName(PackageInfoWithAnalyze package) |
|||
{ |
|||
var abpModuleModel = package.Analyze?.Contents.Where(y => |
|||
y.ContentType == AbpModuleModel.ContentTypeName |
|||
).Cast<AbpModuleModel>().FirstOrDefault(); |
|||
|
|||
if (abpModuleModel == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return abpModuleModel.Namespace + "." + abpModuleModel.Name; |
|||
} |
|||
|
|||
private List<PackageInfo> GetTargetPackages(List<PackageInfo> targetModulePackages, |
|||
PackageInfoWithAnalyze referencePackage) |
|||
{ |
|||
if (PackageTypes.IsHostProject(referencePackage.Role)) |
|||
{ |
|||
return new List<PackageInfo>(); |
|||
} |
|||
|
|||
if (PackageTypes.IsUiProject(referencePackage.Role)) |
|||
{ |
|||
var useHostBlazorServerForMvcPackages = targetModulePackages.All(p => p.Role != PackageTypes.HostMvc); |
|||
var targetHostType = |
|||
PackageTypes.GetHostTypeOfUi(referencePackage.Role, useHostBlazorServerForMvcPackages); |
|||
|
|||
return targetModulePackages.Where(p => p.Role == targetHostType).ToList(); |
|||
} |
|||
|
|||
return targetModulePackages.Where(p => p.Role == referencePackage.Role).ToList(); |
|||
} |
|||
} |
|||
@ -1,38 +0,0 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.IO.Compression; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Cli.ProjectBuilding; |
|||
using Volo.Abp.Studio.Nuget; |
|||
|
|||
namespace Volo.Abp.Studio.ModuleInstalling.Steps; |
|||
|
|||
public class SourceCodeDownloadStep : ModuleInstallingPipelineStep |
|||
{ |
|||
public override async Task ExecuteAsync(ModuleInstallingContext context) |
|||
{ |
|||
var _nugetSourceCodeStoreManager = context.ServiceProvider.GetRequiredService<INugetSourceCodeStore>(); |
|||
|
|||
var zipFilePath = await _nugetSourceCodeStoreManager.GetCachedSourceCodeFilePathAsync( |
|||
context.ModuleName, |
|||
SourceCodeTypes.Module, |
|||
context.Version); |
|||
|
|||
if (zipFilePath == null) |
|||
{ |
|||
throw new AbpStudioException(message: $"Source code not found for {context.ModuleName} (v{context.Version})"); |
|||
} |
|||
|
|||
var targetFolder = context.GetTargetSourceCodeFolder(); |
|||
|
|||
if (Directory.Exists(targetFolder)) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
Directory.CreateDirectory(targetFolder); |
|||
|
|||
ZipFile.ExtractToDirectory(zipFilePath, targetFolder); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue