private IReadOnlyList <CommandSettings> GetCommands() { const string AssetsFileName = "project.assets.json"; const string ToolSettingsFileName = "DotnetToolSettings.xml"; try { var commands = new List <CommandSettings>(); var lockFile = new LockFileFormat().Read(PackageDirectory.WithFile(AssetsFileName).Value); var library = FindLibraryInLockFile(lockFile); var dotnetToolSettings = FindItemInTargetLibrary(library, ToolSettingsFileName); if (dotnetToolSettings == null) { throw new ToolConfigurationException( CommonLocalizableStrings.MissingToolSettingsFile); } var toolConfigurationPath = PackageDirectory .WithSubDirectories( Id.ToString(), library.Version.ToNormalizedString()) .WithFile(dotnetToolSettings.Path); var configuration = ToolConfigurationDeserializer.Deserialize(toolConfigurationPath.Value); var entryPointFromLockFile = FindItemInTargetLibrary(library, configuration.ToolAssemblyEntryPoint); if (entryPointFromLockFile == null) { throw new ToolConfigurationException( string.Format( CommonLocalizableStrings.MissingToolEntryPointFile, configuration.ToolAssemblyEntryPoint, configuration.CommandName)); } // Currently only "dotnet" commands are supported commands.Add(new CommandSettings( configuration.CommandName, "dotnet", PackageDirectory .WithSubDirectories( Id.ToString(), library.Version.ToNormalizedString()) .WithFile(entryPointFromLockFile.Path))); return(commands); } catch (Exception ex) when(ex is UnauthorizedAccessException || ex is IOException) { throw new ToolConfigurationException( string.Format( CommonLocalizableStrings.FailedToRetrieveToolConfiguration, ex.Message), ex); } }
private static ToolConfiguration GetConfiguration( string packageId, string packageVersion, DirectoryPath individualToolVersion) { FilePath toolConfigurationPath = individualToolVersion .WithSubDirectories(packageId, packageVersion, "tools") .WithFile("DotnetToolSettings.xml"); ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize(toolConfigurationPath.Value); return(toolConfiguration); }
private ToolConfiguration DeserializeToolConfiguration(string ToolSettingsFileName, LockFileTargetLibrary library) { var dotnetToolSettings = FindItemInTargetLibrary(library, ToolSettingsFileName); if (dotnetToolSettings == null) { throw new ToolConfigurationException( CommonLocalizableStrings.MissingToolSettingsFile); } var toolConfigurationPath = PackageDirectory .WithSubDirectories( Id.ToString(), library.Version.ToNormalizedString()) .WithFile(dotnetToolSettings.Path); var configuration = ToolConfigurationDeserializer.Deserialize(toolConfigurationPath.Value); return(configuration); }
private ToolConfigurationAndExecutablePath ObtainAndReturnExecutablePathInStageFolder( string packageId, DirectoryPath stageDirectory, string packageVersion = null, FilePath?nugetconfig = null, string targetframework = null, string source = null, string verbosity = null) { if (packageId == null) { throw new ArgumentNullException(nameof(packageId)); } if (nugetconfig != null) { if (!File.Exists(nugetconfig.Value.Value)) { throw new PackageObtainException( string.Format(CommonLocalizableStrings.NuGetConfigurationFileDoesNotExist, Path.GetFullPath(nugetconfig.Value.Value))); } } if (targetframework == null) { targetframework = _bundledTargetFrameworkMoniker.Value; } var packageVersionOrPlaceHolder = new PackageVersion(packageVersion); DirectoryPath nugetSandboxDirectory = CreateNugetSandboxDirectory(packageVersionOrPlaceHolder, stageDirectory); FilePath tempProjectPath = CreateTempProject( packageId, packageVersionOrPlaceHolder, targetframework, nugetSandboxDirectory); _projectRestorer.Restore(tempProjectPath, nugetSandboxDirectory, nugetconfig, source, verbosity); if (packageVersionOrPlaceHolder.IsPlaceholder) { var concreteVersion = new DirectoryInfo( Directory.GetDirectories( nugetSandboxDirectory.WithSubDirectories(packageId).Value).Single()).Name; DirectoryPath versioned = nugetSandboxDirectory.GetParentPath().WithSubDirectories(concreteVersion); MoveToVersionedDirectory(versioned, nugetSandboxDirectory); nugetSandboxDirectory = versioned; packageVersion = concreteVersion; } LockFile lockFile = new LockFileFormat() .ReadWithLock(nugetSandboxDirectory.WithFile("project.assets.json").Value) .Result; LockFileItem dotnetToolSettings = FindAssetInLockFile(lockFile, "DotnetToolSettings.xml", packageId); if (dotnetToolSettings == null) { throw new PackageObtainException( string.Format(CommonLocalizableStrings.ToolPackageMissingSettingsFile, packageId)); } FilePath toolConfigurationPath = nugetSandboxDirectory .WithSubDirectories(packageId, packageVersion) .WithFile(dotnetToolSettings.Path); ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize(toolConfigurationPath.Value); var entryPointFromLockFile = FindAssetInLockFile(lockFile, toolConfiguration.ToolAssemblyEntryPoint, packageId); if (entryPointFromLockFile == null) { throw new PackageObtainException(string.Format(CommonLocalizableStrings.ToolPackageMissingEntryPointFile, packageId, toolConfiguration.ToolAssemblyEntryPoint)); } return(new ToolConfigurationAndExecutablePath( toolConfiguration, _toolsPath.WithSubDirectories( packageId, packageVersion, packageId, packageVersion) .WithFile(entryPointFromLockFile.Path))); }