public void WhenRidNotSupportedOnWindowsItIsImplicit(string tfm) { var tempDir = _testAssetsManager.CreateTestDirectory(identifier: tfm).Path; var templateFinder = new ShellShimTemplateFinder(new MockNuGetPackageDownloader(), new DirectoryPath(tempDir), null); var path = templateFinder.ResolveAppHostSourceDirectoryAsync(null, NuGetFramework.Parse(tfm), Architecture.Arm64).Result; path.Should().Contain(tfm.Equals("net5.0") ? "AppHostTemplate" : "win-x64"); }
public ToolInstallGlobalOrToolPathCommand( ParseResult parseResult, CreateToolPackageStoresAndInstaller createToolPackageStoreAndInstaller = null, CreateShellShimRepository createShellShimRepository = null, IEnvironmentPathInstruction environmentPathInstruction = null, IReporter reporter = null, INuGetPackageDownloader nugetPackageDownloader = null) : base(parseResult) { _packageId = new PackageId(parseResult.ValueForArgument <string>(ToolInstallCommandParser.PackageIdArgument)); _packageVersion = parseResult.ValueForOption <string>(ToolInstallCommandParser.VersionOption); _configFilePath = parseResult.ValueForOption <string>(ToolInstallCommandParser.ConfigOption); _framework = parseResult.ValueForOption <string>(ToolInstallCommandParser.FrameworkOption); _source = parseResult.ValueForOption <string[]>(ToolInstallCommandParser.AddSourceOption); _global = parseResult.ValueForOption <bool>(ToolAppliedOption.GlobalOptionAliases.First()); _verbosity = Enum.GetName(parseResult.ValueForOption <VerbosityOptions>(ToolInstallCommandParser.VerbosityOption)); _toolPath = parseResult.ValueForOption <string>(ToolAppliedOption.ToolPathOptionAlias); _architectureOption = parseResult.ValueForOption <string>(ToolInstallCommandParser.ArchitectureOption); _createToolPackageStoresAndInstaller = createToolPackageStoreAndInstaller ?? ToolPackageFactory.CreateToolPackageStoresAndInstaller; _forwardRestoreArguments = parseResult.OptionValuesToBeForwarded(ToolInstallCommandParser.GetCommand()); _environmentPathInstruction = environmentPathInstruction ?? EnvironmentPathFactory.CreateEnvironmentPathInstruction(); _createShellShimRepository = createShellShimRepository ?? ShellShimRepositoryFactory.CreateShellShimRepository; var tempDir = new DirectoryPath(Path.Combine(Path.GetTempPath(), "dotnet-tool-install")); var configOption = parseResult.ValueForOption(ToolInstallCommandParser.ConfigOption); var sourceOption = parseResult.ValueForOption(ToolInstallCommandParser.AddSourceOption); var packageSourceLocation = new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), additionalSourceFeeds: sourceOption); var restoreAction = new RestoreActionConfig(DisableParallel: parseResult.ValueForOption(ToolCommandRestorePassThroughOptions.DisableParallelOption), NoCache: parseResult.ValueForOption(ToolCommandRestorePassThroughOptions.NoCacheOption), IgnoreFailedSources: parseResult.ValueForOption(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption), Interactive: parseResult.ValueForOption(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption)); nugetPackageDownloader ??= new NuGetPackageDownloader(tempDir, verboseLogger: new NullLogger(), restoreActionConfig: restoreAction); _shellShimTemplateFinder = new ShellShimTemplateFinder(nugetPackageDownloader, tempDir, packageSourceLocation); _reporter = (reporter ?? Reporter.Output); _errorReporter = (reporter ?? Reporter.Error); }
public override int Execute() { var global = _parseResult.GetValueForOption(ToolAppliedOption.GlobalOption); var toolPath = _parseResult.GetValueForOption(ToolAppliedOption.ToolPathOption); DirectoryPath?toolDirectoryPath = null; if (!string.IsNullOrWhiteSpace(toolPath)) { if (!Directory.Exists(toolPath)) { throw new GracefulException( string.Format( LocalizableStrings.InvalidToolPathOption, toolPath)); } toolDirectoryPath = new DirectoryPath(toolPath); } (IToolPackageStore toolPackageStore, IToolPackageStoreQuery toolPackageStoreQuery, IToolPackageUninstaller toolPackageUninstaller) = _createToolPackageStoresAndUninstaller(toolDirectoryPath); var appHostSourceDirectory = ShellShimTemplateFinder.GetDefaultAppHostSourceDirectory(); IShellShimRepository shellShimRepository = _createShellShimRepository(appHostSourceDirectory, toolDirectoryPath); var packageId = new PackageId(_parseResult.GetValueForArgument(ToolInstallCommandParser.PackageIdArgument)); IToolPackage package = null; try { package = toolPackageStoreQuery.EnumeratePackageVersions(packageId).SingleOrDefault(); if (package == null) { throw new GracefulException( messages: new[] { string.Format( LocalizableStrings.ToolNotInstalled, packageId), }, isUserError: false); } } catch (InvalidOperationException) { throw new GracefulException( messages: new[] { string.Format( LocalizableStrings.ToolHasMultipleVersionsInstalled, packageId), }, isUserError: false); } try { using (var scope = new TransactionScope( TransactionScopeOption.Required, TimeSpan.Zero)) { foreach (var command in package.Commands) { shellShimRepository.RemoveShim(command.Name); } toolPackageUninstaller.Uninstall(package.PackageDirectory); scope.Complete(); } _reporter.WriteLine( string.Format( LocalizableStrings.UninstallSucceeded, package.Id, package.Version.ToNormalizedString()).Green()); return(0); } catch (Exception ex) when(ToolUninstallCommandLowLevelErrorConverter.ShouldConvertToUserFacingError(ex)) { throw new GracefulException( messages: ToolUninstallCommandLowLevelErrorConverter.GetUserFacingMessages(ex, packageId), verboseMessages: new[] { ex.ToString() }, isUserError: false); } }
public override int Execute() { ValidateArguments(); DirectoryPath?toolPath = null; if (!string.IsNullOrEmpty(_toolPath)) { toolPath = new DirectoryPath(_toolPath); } VersionRange versionRange = _parseResult.GetVersionRange(); (IToolPackageStore toolPackageStore, IToolPackageStoreQuery toolPackageStoreQuery, IToolPackageInstaller toolPackageInstaller, IToolPackageUninstaller toolPackageUninstaller) = _createToolPackageStoreInstallerUninstaller(toolPath, _forwardRestoreArguments); var appHostSourceDirectory = ShellShimTemplateFinder.GetDefaultAppHostSourceDirectory(); IShellShimRepository shellShimRepository = _createShellShimRepository(appHostSourceDirectory, toolPath); IToolPackage oldPackageNullable = GetOldPackage(toolPackageStoreQuery); using (var scope = new TransactionScope( TransactionScopeOption.Required, TimeSpan.Zero)) { if (oldPackageNullable != null) { RunWithHandlingUninstallError(() => { foreach (RestoredCommand command in oldPackageNullable.Commands) { shellShimRepository.RemoveShim(command.Name); } toolPackageUninstaller.Uninstall(oldPackageNullable.PackageDirectory); }); } RunWithHandlingInstallError(() => { IToolPackage newInstalledPackage = toolPackageInstaller.InstallPackage( new PackageLocation(nugetConfig: GetConfigFile(), additionalFeeds: _additionalFeeds), packageId: _packageId, targetFramework: _framework, versionRange: versionRange, verbosity: _verbosity); EnsureVersionIsHigher(oldPackageNullable, newInstalledPackage); foreach (RestoredCommand command in newInstalledPackage.Commands) { shellShimRepository.CreateShim(command.Executable, command.Name); } PrintSuccessMessage(oldPackageNullable, newInstalledPackage); }); scope.Complete(); } return(0); }