コード例 #1
0
    public async Task AddAsync(
        string solutionFile,
        string projectFile,
        NugetPackageInfo package,
        string version                   = null,
        bool useDotnetCliToInstall       = true,
        bool withSourceCode              = false,
        bool addSourceCodeToSolutionFile = false)
    {
        if (projectFile == null)
        {
            if (solutionFile == null)
            {
                throw new CliUsageException("Couldn't find any project/solution.");
            }

            projectFile = GetProjectFile(solutionFile, package);

            if (projectFile == null)
            {
                throw new CliUsageException("Couldn't find any project/solution.");
            }
        }

        solutionFile ??= FindSolutionFile(projectFile);

        if (version == null)
        {
            version = GetAbpVersionOrNull(projectFile);
        }

        await AddAsPackageReference(projectFile, package, version, useDotnetCliToInstall);

        if (withSourceCode)
        {
            await AddSourceCode(projectFile, solutionFile, package, version);

            var projectFilesInSolution = Directory.GetFiles(Path.GetDirectoryName(solutionFile), "*.csproj", SearchOption.AllDirectories);
            foreach (var projectFileInSolution in projectFilesInSolution)
            {
                await ConvertPackageReferenceToProjectReference(projectFileInSolution, solutionFile, package);
            }

            if (addSourceCodeToSolutionFile)
            {
                await SolutionFileModifier.AddPackageToSolutionFileAsync(package, solutionFile);
            }
        }
    }
コード例 #2
0
    private async Task DeleteRedundantHostProjects(string targetModuleFolder, string folderName)
    {
        var moduleSolutionFile = Directory.GetFiles(targetModuleFolder, "*.sln", SearchOption.TopDirectoryOnly).First();

        var folder = Path.Combine(targetModuleFolder, folderName);

        if (Directory.Exists(folder))
        {
            var projects = Directory.GetDirectories(folder);

            foreach (var project in projects)
            {
                await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile,
                                                                              new DirectoryInfo(project).Name);
            }

            Directory.Delete(folder, true);
        }
    }
コード例 #3
0
    private async Task RemoveProjectFromSolutionAsync(string moduleSolutionFile, string projectName)
    {
        await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, projectName);

        var projectFolderPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", projectName);

        if (Directory.Exists(projectFolderPath))
        {
            Directory.Delete(projectFolderPath, true);
        }
        else
        {
            projectFolderPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "test", projectName);
            if (Directory.Exists(projectFolderPath))
            {
                Directory.Delete(projectFolderPath, true);
            }
        }
    }
コード例 #4
0
 public SolutionModuleAdder(
     IJsonSerializer jsonSerializer,
     ProjectNugetPackageAdder projectNugetPackageAdder,
     DbContextFileBuilderConfigureAdder dbContextFileBuilderConfigureAdder,
     EfCoreMigrationManager efCoreMigrationManager,
     DerivedClassFinder derivedClassFinder,
     ProjectNpmPackageAdder projectNpmPackageAdder,
     NpmGlobalPackagesChecker npmGlobalPackagesChecker,
     IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
     SourceCodeDownloadService sourceCodeDownloadService,
     SolutionFileModifier solutionFileModifier,
     NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter,
     AngularSourceCodeAdder angularSourceCodeAdder,
     NewCommand newCommand,
     BundleCommand bundleCommand,
     CliHttpClientFactory cliHttpClientFactory,
     ICmdHelper cmdHelper,
     ILocalEventBus localEventBus)
 {
     JsonSerializer                        = jsonSerializer;
     ProjectNugetPackageAdder              = projectNugetPackageAdder;
     DbContextFileBuilderConfigureAdder    = dbContextFileBuilderConfigureAdder;
     EfCoreMigrationManager                = efCoreMigrationManager;
     DerivedClassFinder                    = derivedClassFinder;
     ProjectNpmPackageAdder                = projectNpmPackageAdder;
     NpmGlobalPackagesChecker              = npmGlobalPackagesChecker;
     RemoteServiceExceptionHandler         = remoteServiceExceptionHandler;
     SourceCodeDownloadService             = sourceCodeDownloadService;
     SolutionFileModifier                  = solutionFileModifier;
     NugetPackageToLocalReferenceConverter = nugetPackageToLocalReferenceConverter;
     AngularSourceCodeAdder                = angularSourceCodeAdder;
     NewCommand            = newCommand;
     BundleCommand         = bundleCommand;
     CmdHelper             = cmdHelper;
     LocalEventBus         = localEventBus;
     _cliHttpClientFactory = cliHttpClientFactory;
     Logger = NullLogger <SolutionModuleAdder> .Instance;
 }
コード例 #5
0
 public ProjectNugetPackageAdder(
     IJsonSerializer jsonSerializer,
     ProjectNpmPackageAdder npmPackageAdder,
     DerivedClassFinder moduleClassFinder,
     ModuleClassDependcyAdder moduleClassDependcyAdder,
     IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
     BundleCommand bundleCommand,
     CliHttpClientFactory cliHttpClientFactory,
     SourceCodeDownloadService sourceCodeDownloadService,
     SolutionFileModifier solutionFileModifier,
     ICmdHelper cmdHelper)
 {
     JsonSerializer                = jsonSerializer;
     NpmPackageAdder               = npmPackageAdder;
     ModuleClassFinder             = moduleClassFinder;
     ModuleClassDependcyAdder      = moduleClassDependcyAdder;
     RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
     BundleCommand             = bundleCommand;
     SourceCodeDownloadService = sourceCodeDownloadService;
     SolutionFileModifier      = solutionFileModifier;
     CmdHelper             = cmdHelper;
     _cliHttpClientFactory = cliHttpClientFactory;
     Logger = NullLogger <ProjectNugetPackageAdder> .Instance;
 }
コード例 #6
0
    public virtual async Task <ModuleWithMastersInfo> AddAsync([NotNull] string solutionFile,
                                                               [NotNull] string moduleName,
                                                               string version,
                                                               bool skipDbMigrations            = false,
                                                               bool withSourceCode              = false,
                                                               bool addSourceCodeToSolutionFile = false,
                                                               bool newTemplate    = false,
                                                               bool newProTemplate = false)
    {
        Check.NotNull(solutionFile, nameof(solutionFile));
        Check.NotNull(moduleName, nameof(moduleName));

        await PublishEventAsync(1, "Retriving module info...");

        var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate);


        await PublishEventAsync(2, "Removing incompatible packages from module...");

        module = RemoveIncompatiblePackages(module, version);

        Logger.LogInformation($"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'");

        var projectFiles = ProjectFinder.GetProjectFiles(solutionFile);

        await AddNugetAndNpmReferences(module, projectFiles, !(newTemplate || newProTemplate));

        if (withSourceCode || newTemplate || newProTemplate)
        {
            var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules");

            await PublishEventAsync(5, $"Downloading source code of {moduleName}");
            await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate, newProTemplate);

            await PublishEventAsync(6, $"Deleting incompatible projects from the module source code");
            await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles);

            if (addSourceCodeToSolutionFile)
            {
                await PublishEventAsync(7, $"Adding module to solution file");

                await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile);
            }

            await PublishEventAsync(8, $"Changing nuget references to local references");

            if (newTemplate || newProTemplate)
            {
                await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile, $"{module.Name}.");
            }
            else
            {
                await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile);
            }

            await AddAngularSourceCode(modulesFolderInSolution, solutionFile, module.Name, newTemplate || newProTemplate);
        }
        else
        {
            await AddAngularPackages(solutionFile, module);
        }

        await RunBundleForBlazorAsync(projectFiles, module);

        await ModifyDbContext(projectFiles, module, skipDbMigrations);

        var documentationLink = module.GetFirstDocumentationLinkOrNull();

        if (documentationLink != null)
        {
            CmdHelper.OpenWebPage(documentationLink);
        }

        return(module);
    }