private void UnlinkExecutables() { var dest = GetToolRoot(); var manifestFile = Path.Combine(dest, "dnvm.json"); try { var manifest = ToolManifest.LoadFromFile(manifestFile); foreach (var command in manifest.Commands) { var exe = GetToolExecutable(command.Key); if (File.Exists(exe)) { Log.Verbose($"Deleting '{exe}'"); File.Delete(exe); } } } catch { Log.Verbose("Unable to read tool manifest."); } }
public override async Task <bool> InstallAsync(CancellationToken cancellationToken) { Log.Output($"Installing {DisplayName}"); var dest = GetToolRoot(); var url = _assetInfo.DownloadUrl; if (!await DownloadAndExtractAsync(url, dest, ZipExtractor.Extract, cancellationToken)) { return(false); } var manifestFile = Path.Combine(dest, "dnvm.json"); if (!File.Exists(manifestFile)) { Log.Error("This tool is missing the 'dnvm.json' manifest file"); Uninstall(); return(false); } try { var manifest = ToolManifest.LoadFromFile(manifestFile); var secondaryInstalls = new List <Task>(); foreach (var command in manifest.Commands) { if (!LinkExecutable(command.Key, command.Value)) { Uninstall(); return(false); } if (command.Value.Portable == true) { var runtimeConfigPath = Path.Combine(dest, command.Value.RuntimeConfig); var runtimeConfig = RuntimeConfig.LoadFromFile(runtimeConfigPath); var name = runtimeConfig?.RuntimeOptions?.Framework?.Name; if (!"Microsoft.NETCore.App".Equals(name, StringComparison.OrdinalIgnoreCase)) { Log.Error($"This tool requires an unsupported shared framework: {name}"); Uninstall(); return(false); } var version = runtimeConfig.RuntimeOptions.Framework.Version; var sharedFx = new RuntimeAsset(Log, _env, version, Architecture.X64); secondaryInstalls.Add(sharedFx.InstallAsync(cancellationToken)); } } await Task.WhenAll(secondaryInstalls); } catch (FormatException ex) { Log.Verbose(ex.Message); Log.Error("This tool has an unrecognized 'dnvm.json' manifest format"); Uninstall(); return(false); } Log.Output($"Installed {DisplayName}"); return(true); }