コード例 #1
0
ファイル: ToolAsset.cs プロジェクト: kenanhancer/dnvm
        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.");
            }
        }
コード例 #2
0
ファイル: ToolAsset.cs プロジェクト: kenanhancer/dnvm
        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);
        }