private void RunScript(string scriptText, params string[] parameters) { ISettings settings = Settings.LoadDefaultSettings(Environment.ExpandEnvironmentVariables("%systemdrive%"), null, null); var packageSourceProvider = new PackageSourceProvider(settings); var packageSources = packageSourceProvider.LoadPackageSources(); SourceRepositoryProvider provider = new SourceRepositoryProvider(packageSourceProvider, ResourceProviders); PowerShell ps = PowerShell.Create(); ps.Runspace = _runSpace; ps.Commands.AddCommand(scriptText); // Run the scriptText var testCommand = ps.Commands.Commands[0]; testCommand.Parameters.Add("Id", parameters[0]); testCommand.Parameters.Add("Version", parameters[1]); // Add as a test hook to pass in the provider testCommand.Parameters.Add("SourceRepositoryProvider", provider); testCommand.Parameters.Add("VsSolutionManager", new TestSolutionManager()); // Add out-string ps.Commands.AddCommand("Out-String"); // execute the script foreach (PSObject result in ps.Invoke()) { Console.WriteLine(result.ToString()); } // close the runspace _runSpace.Close(); }
private void CreatePackageManagerControl() { _container = Initialize(); this.Title = "NuGet Standalone UI"; Height = 800; Width = 1000; var repositoryProvider = new SourceRepositoryProvider(_settings, Repository.Provider.GetVisualStudio()); var settings = new DefaultSettings(); var testSolutionManager = new TestSolutionManager(@"c:\temp\test"); var projectA = testSolutionManager.AddNewMSBuildProject("projectA"); var projectB = testSolutionManager.AddNewMSBuildProject("projectB"); //var projectC = testSolutionManager.AddProjectKProject("projectK"); var projects = new NuGetProject[] { projectA, projectB }; var packageRestoreManager = new PackageRestoreManager(repositoryProvider, settings, testSolutionManager); var contextFactory = new StandaloneUIContextFactory( repositoryProvider, testSolutionManager, settings, packageRestoreManager: packageRestoreManager, optionsPage: null); var context = contextFactory.Create(@"c:\temp\test\settings.txt", projects); var uiController = _uiServiceFactory.Create( context, new NuGetUIProjectContext(new StandaloneUILogger(_textBox, _scrollViewer), _sourceControlManagerProvider, _commonOperations)); PackageManagerModel model = new PackageManagerModel(uiController, context); model.SolutionName = "test solution"; _packageManagerControl = new PackageManagerControl(model, _settings); layoutGrid.Children.Add(_packageManagerControl); }
static void Main(string[] args) { // Import Dependencies var p = new Program(); // hold onto the container, otherwise the lazy objects will be disposed! var container = p.Initialize(); // Json.NET is already installed List<PackageReference> installed = new List<PackageReference>(); installed.Add(new PackageReference(new PackageIdentity("Newtonsoft.Json", NuGetVersion.Parse("6.0.5")), NuGetFramework.Parse("portable-net40+win8"))); // build the repo provider instead of importing it so that it has only v3 var repositoryProvider = new SourceRepositoryProvider(new V3OnlyPackageSourceProvider(), p.ResourceProviders.ToArray()); // package to install var target = new PackageIdentity("WindowsAzure.Storage", NuGetVersion.Parse("4.0.1")); // project target framework var framework = NuGetFramework.Parse("net451"); // build repos var repos = repositoryProvider.GetRepositories(); Stopwatch timer = new Stopwatch(); // get a distinct set of packages from all repos HashSet<PackageDependencyInfo> packages = new HashSet<PackageDependencyInfo>(PackageDependencyInfo.Comparer); // find all needed packages from online foreach (var repo in repos) { // get the resolver data resource var depInfo = repo.GetResource<DepedencyInfoResource>(); // resources can always be null if (depInfo != null) { timer.Restart(); var task = depInfo.ResolvePackages(new PackageIdentity[] { target }, framework, true); task.Wait(); foreach (var pkg in task.Result) { packages.Add(pkg); } timer.Stop(); Console.WriteLine("Online fetch time: " + timer.Elapsed); } } timer.Restart(); // find the best set to install PackageResolver resolver = new PackageResolver(DependencyBehavior.Lowest); var toInstall = resolver.Resolve(new PackageIdentity[] { target }, packages, installed, CancellationToken.None); timer.Stop(); Console.WriteLine("Resolve time: " + timer.Elapsed); Console.WriteLine("------------------------"); foreach (var pkg in toInstall) { Console.WriteLine(pkg.Id + " " + pkg.Version.ToNormalizedString()); } }