private void InstallRemotePackages(List <Package> packages, IList <string> nuGetSources) { const string packageRef = @" <PackageReference Include=""{0}"" Version=""{1}"" />"; const string projectFile = @"<Project ToolsVersion=""15.0"" Sdk=""Microsoft.NET.Sdk""> <PropertyGroup> <TargetFrameworks>netcoreapp1.0</TargetFrameworks> </PropertyGroup> <ItemGroup> <PackageReference Remove=""Microsoft.NETCore.App"" /> {0} </ItemGroup> </Project>"; _paths.CreateDirectory(_paths.User.ScratchDir); string proj = Path.Combine(_paths.User.ScratchDir, "restore.csproj"); StringBuilder references = new StringBuilder(); foreach (Package pkg in packages) { references.AppendLine(string.Format(packageRef, pkg.Name, pkg.Version)); } string content = string.Format(projectFile, references.ToString()); _paths.WriteAllText(proj, content); _paths.CreateDirectory(_paths.User.Packages); string restored = Path.Combine(_paths.User.ScratchDir, "Packages"); int additionalSlots = nuGetSources?.Count * 2 ?? 0; string[] restoreArgs = new string[3 + additionalSlots]; restoreArgs[0] = proj; restoreArgs[1] = "--packages"; restoreArgs[2] = restored; if (nuGetSources != null) { for (int i = 0; i < nuGetSources.Count; ++i) { restoreArgs[3 + 2 * i] = "--source"; restoreArgs[4 + 2 * i] = nuGetSources[i]; } } Dotnet.Restore(restoreArgs).ForwardStdOut().ForwardStdErr().Execute(); List <string> newLocalPackages = new List <string>(); foreach (string packagePath in _paths.EnumerateFiles(restored, "*.nupkg", SearchOption.AllDirectories)) { string path = Path.Combine(_paths.User.Packages, Path.GetFileName(packagePath)); _paths.Copy(packagePath, path); newLocalPackages.Add(path); } _paths.DeleteDirectory(_paths.User.ScratchDir); InstallLocalPackages(newLocalPackages); }
private void InstallRemotePackages(List <Package> packages) { const string packageRef = @" <PackageReference Include=""{0}"" Version=""{1}"" />"; const string projectFile = @"<Project ToolsVersion=""15.0"" Sdk=""Microsoft.NET.Sdk""> <PropertyGroup> <TargetFrameworks>netcoreapp1.0</TargetFrameworks> </PropertyGroup> <ItemGroup> <PackageReference Remove=""Microsoft.NETCore.App"" /> {0} </ItemGroup> </Project>"; _paths.CreateDirectory(_paths.User.ScratchDir); string proj = Path.Combine(_paths.User.ScratchDir, "restore.csproj"); StringBuilder references = new StringBuilder(); foreach (Package pkg in packages) { references.AppendLine(string.Format(packageRef, pkg.Name, pkg.Version)); } string content = string.Format(projectFile, references.ToString()); _paths.WriteAllText(proj, content); _paths.CreateDirectory(_paths.User.Packages); string restored = Path.Combine(_paths.User.ScratchDir, "Packages"); Dotnet.Restore(proj, "--packages", restored).ForwardStdOut().ForwardStdErr().Execute(); List <string> newLocalPackages = new List <string>(); foreach (string packagePath in _paths.EnumerateFiles(restored, "*.nupkg", SearchOption.AllDirectories)) { string path = Path.Combine(_paths.User.Packages, Path.GetFileName(packagePath)); _paths.Copy(packagePath, path); newLocalPackages.Add(path); } _paths.DeleteDirectory(_paths.User.ScratchDir); InstallLocalPackages(newLocalPackages); }
/// <summary> /// Acquires given nuget packages with 'dotnet restore' and installs them. /// </summary> /// <param name="packages">Packages to be installed.</param> /// <param name="nuGetSources">Nuget sources to look for the packages.</param> /// <param name="additionalDotNetArguments">Additional arguments to be passed to 'dotnet restore'.</param> /// <param name="isPartOfAnOptionalWorkload">Specifies if given packages are part of an optional workload. This should be correct for /// each of the specified packages (do not mix optional and non-optional packages when calling this method).</param> private void InstallRemotePackages(List <Package> packages, IList <string> nuGetSources, IList <string> additionalDotNetArguments, bool isPartOfAnOptionalWorkload) { const string packageRef = @" <PackageReference Include=""{0}"" Version=""{1}"" />"; const string projectFile = @"<Project ToolsVersion=""15.0"" Sdk=""Microsoft.NET.Sdk""> <PropertyGroup> <TargetFrameworks>netcoreapp3.1</TargetFrameworks> </PropertyGroup> <ItemGroup> <PackageReference Remove=""Microsoft.NETCore.App"" /> {0} </ItemGroup> </Project>"; _paths.CreateDirectory(_paths.User.ScratchDir); string proj = Path.Combine(_paths.User.ScratchDir, "restore.csproj"); StringBuilder references = new StringBuilder(); foreach (Package pkg in packages) { references.AppendLine(string.Format(packageRef, pkg.Name, pkg.Version)); } string content = string.Format(projectFile, references.ToString()); _paths.WriteAllText(proj, content); string restored = Path.Combine(_paths.User.ScratchDir, "Packages"); List <string> restoreArgsList = new List <string>(); restoreArgsList.Add(proj); restoreArgsList.Add("--packages"); restoreArgsList.Add(restored); if (nuGetSources != null) { foreach (string nuGetSource in nuGetSources) { restoreArgsList.Add("--source"); restoreArgsList.Add(nuGetSource); } } if (additionalDotNetArguments != null) { restoreArgsList.AddRange(additionalDotNetArguments); } var restoreArgs = restoreArgsList.ToArray(); Dotnet.Restore(restoreArgs).ForwardStdErr().Execute(); string stagingDir = Path.Combine(_paths.User.ScratchDir, "Staging"); _paths.CreateDirectory(stagingDir); List <InstallationRequest> newLocalPackages = new List <InstallationRequest>(); foreach (string packagePath in _paths.EnumerateFiles(restored, "*.nupkg", SearchOption.AllDirectories)) { string stagingPathForPackage = Path.Combine(stagingDir, Path.GetFileName(packagePath)); _paths.Copy(packagePath, stagingPathForPackage); newLocalPackages.Add(new InstallationRequest(stagingPathForPackage, isPartOfAnOptionalWorkload)); } InstallLocalPackages(newLocalPackages, false); _paths.DeleteDirectory(_paths.User.ScratchDir); }