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); }
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()); }