Esempio n. 1
0
        public void Execute()
        {
            var dnxPath     = Process.GetCurrentProcess().Modules[0].FileName;
            var dnxFolder   = Path.GetDirectoryName(dnxPath);
            var toolingPath = Path.Combine(
                dnxFolder,
                "lib",
                "Microsoft.Dnx.Tooling",
                "Microsoft.Dnx.Tooling.dll");

            if (!File.Exists(toolingPath))
            {
                toolingPath = Path.Combine(
                    dnxFolder,
                    "lib",
                    "Microsoft.Framework.PackageManager",
                    "Microsoft.Framework.PackageManager.dll");
            }

            var childProcess = new ChildProcess();
            var results      = childProcess.Execute(dnxPath, $@"""{toolingPath}"" commands install {PackageId} {PackageVersion}");

            const string writingLockFile = "Writing lock file ";
            var          lockFiles       = results.Item2
                                           .Split("\r\n".ToArray())
                                           .Where(x => x.StartsWith(writingLockFile))
                                           .Select(x => x.Substring(writingLockFile.Length))
                                           .Where(File.Exists);

            var runtimeAssemblies = new List <string>();

            foreach (var lockFile in lockFiles)
            {
                var root    = JToken.Parse(File.ReadAllText(lockFile));
                var targets = root["targets"];
                var target  = targets[Services.ApplicationEnvironment.RuntimeFramework.ToString()];
                foreach (var package in target.OfType <JProperty>())
                {
                    var packageRuntime = package.Value["runtime"];
                    if (packageRuntime != null)
                    {
                        foreach (var assembly in packageRuntime.OfType <JProperty>())
                        {
                            runtimeAssemblies.Add(Path.Combine(package.Name, assembly.Name));
                        }
                    }
                }
            }
            File.WriteAllLines(
                $"Command.{PackageId}.txt",
                runtimeAssemblies.Select(x => $"{Path.GetFileNameWithoutExtension(x)}={x.Replace('/', Path.DirectorySeparatorChar)}"));
        }