private DependencyContext CreateDependencyContext(Runtime.Project project, FrameworkName frameworkName) { var dependencyContext = new DependencyContext(project.ProjectDirectory, _options.Configuration, frameworkName); dependencyContext.Walk(project.Name, project.Version); return(dependencyContext); }
public bool Package() { Runtime.Project project; if (!Runtime.Project.TryGetProject(_options.ProjectDir, out project)) { Console.WriteLine("Unable to locate {0}.'", Runtime.Project.ProjectFileName); return(false); } var sw = Stopwatch.StartNew(); string outputPath = _options.OutputDir ?? Path.Combine(_options.ProjectDir, "bin", "output"); var projectDir = project.ProjectDirectory; var dependencyContexts = new List <DependencyContext>(); var root = new PackRoot(project, outputPath, _hostServices) { Overwrite = _options.Overwrite, Configuration = _options.Configuration, NoSource = _options.NoSource }; Func <string, string> getVariable = key => { return(null); }; ScriptExecutor.Execute(project, "prepare", getVariable); ScriptExecutor.Execute(project, "prepack", getVariable); foreach (var runtime in _options.Runtimes) { var runtimeLocated = TryAddRuntime(root, runtime); var kreHome = Environment.GetEnvironmentVariable("KRE_HOME"); if (string.IsNullOrEmpty(kreHome)) { kreHome = Environment.GetEnvironmentVariable("ProgramFiles") + @"\KRE;%USERPROFILE%\.kre"; } foreach (var portion in kreHome.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { var packagesPath = Path.Combine( Environment.ExpandEnvironmentVariables(portion), "packages", runtime); if (TryAddRuntime(root, packagesPath)) { runtimeLocated = true; break; } } if (!runtimeLocated) { Console.WriteLine(string.Format("Unable to locate runtime '{0}'", runtime)); return(false); } var frameworkName = DependencyContext.GetFrameworkNameForRuntime(Path.GetFileName(runtime)); if (!dependencyContexts.Any(dc => dc.FrameworkName == frameworkName)) { var dependencyContext = new DependencyContext(projectDir, _options.Configuration, frameworkName); dependencyContext.Walk(project.Name, project.Version); dependencyContexts.Add(dependencyContext); } } if (!dependencyContexts.Any()) { var frameworkName = DependencyContext.GetFrameworkNameForRuntime("KRE-svr50-x86.*"); var dependencyContext = new DependencyContext(projectDir, _options.Configuration, frameworkName); dependencyContext.Walk(project.Name, project.Version); dependencyContexts.Add(dependencyContext); } foreach (var dependencyContext in dependencyContexts) { foreach (var libraryDescription in dependencyContext.NuGetDependencyResolver.Dependencies) { if (!root.Packages.Any(p => p.Library == libraryDescription.Identity)) { root.Packages.Add(new PackPackage(dependencyContext.NuGetDependencyResolver, libraryDescription)); } } foreach (var libraryDescription in dependencyContext.ProjectReferenceDependencyProvider.Dependencies) { if (!root.Projects.Any(p => p.Name == libraryDescription.Identity.Name)) { var packProject = new PackProject(dependencyContext.ProjectReferenceDependencyProvider, dependencyContext.ProjectResolver, libraryDescription); if (packProject.Name == project.Name) { packProject.AppFolder = _options.AppFolder; } root.Projects.Add(packProject); } } } root.Emit(); ScriptExecutor.Execute(project, "postpack", getVariable); sw.Stop(); Console.WriteLine("Time elapsed {0}", sw.Elapsed); return(true); }