/// <summary>
        /// Generates the full path to the service of the name specified from within this resolved package reference.
        /// </summary>
        /// <param name="resolvedPackageReference">The package containing the Tools Service binaries</param>
        /// <param name="serviceName">The name of the exe to search for (without the extension)</param>
        /// <returns></returns>
        public static string PathToToolsService(this ResolvedPackageReference resolvedPackageReference, string serviceName)
        {
            var pathToService = "";

            if (resolvedPackageReference is not null)
            {
                // Extract the platform 'osx-x64' from the package name 'runtime.osx-x64.native.microsoft.sqltoolsservice'
                var packageNameSegments = resolvedPackageReference.PackageName.Split(".");
                if (packageNameSegments.Length > 2)
                {
                    var platform = packageNameSegments[1];

                    // Build the path to the MicrosoftSqlToolsServiceLayer executable by reaching into the resolve nuget package
                    // assuming a convention for native binaries.
                    pathToService = Path.Combine(
                        resolvedPackageReference.PackageRoot,
                        "runtimes",
                        platform,
                        "native",
                        serviceName);

                    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                    {
                        pathToService += ".exe";
                    }
                }
            }

            return(pathToService);
        }
Exemple #2
0
        /// <summary>
        /// Generates and serializes a <see cref="DependencyProviderUtils.Metadata"/> to
        /// <paramref name="writePath"/>. Returns a list of file paths which include the
        /// the serialized <see cref="DependencyProviderUtils.Metadata"/> and nuget file
        /// dependencies.
        /// </summary>
        /// <param name="writePath">Path to write metadata.</param>
        /// <returns>
        /// List of file paths of the serialized <see cref="DependencyProviderUtils.Metadata"/>
        /// and nuget file dependencies.
        /// </returns>
        internal IEnumerable <string> GetFiles(string writePath)
        {
            IEnumerable <ResolvedNuGetPackage> nugetPackagesToCopy = GetNewPackages();

            var assemblyProbingPaths = new List <string>();
            var nativeProbingPaths   = new List <string>();
            var nugetMetadata        = new List <DependencyProviderUtils.NuGetMetadata>();

            foreach (ResolvedNuGetPackage package in nugetPackagesToCopy)
            {
                ResolvedPackageReference resolvedPackage = package.ResolvedPackage;

                foreach (FileInfo asmPath in resolvedPackage.AssemblyPaths)
                {
                    // asmPath.FullName
                    //   /path/to/packages/package.name/package.version/lib/framework/1.dll
                    // resolvedPackage.PackageRoot
                    //   /path/to/packages/package.name/package.version/
                    // GetRelativeToPackages(..)
                    //   package.name/package.version/lib/framework/1.dll
                    assemblyProbingPaths.Add(
                        GetPathRelativeToPackages(
                            asmPath.FullName,
                            resolvedPackage.PackageRoot));
                }

                foreach (DirectoryInfo probePath in resolvedPackage.ProbingPaths)
                {
                    // probePath.FullName
                    //   /path/to/packages/package.name/package.version/
                    // resolvedPackage.PackageRoot
                    //   /path/to/packages/package.name/package.version/
                    // GetRelativeToPackages(..)
                    //   package.name/package.version
                    nativeProbingPaths.Add(
                        GetPathRelativeToPackages(
                            probePath.FullName,
                            resolvedPackage.PackageRoot));
                }

                nugetMetadata.Add(
                    new DependencyProviderUtils.NuGetMetadata
                {
                    FileName       = package.NuGetFile.Name,
                    PackageName    = resolvedPackage.PackageName,
                    PackageVersion = resolvedPackage.PackageVersion
                });

                yield return(package.NuGetFile.FullName);
            }

            if (nugetMetadata.Count > 0)
            {
                var metadataPath =
                    Path.Combine(
                        writePath,
                        DependencyProviderUtils.CreateFileName(
                            Interlocked.Increment(ref _metadataCounter)));
                new DependencyProviderUtils.Metadata
                {
                    AssemblyProbingPaths = assemblyProbingPaths.ToArray(),
                    NativeProbingPaths   = nativeProbingPaths.ToArray(),
                    NuGets = nugetMetadata.ToArray()
                }.Serialize(metadataPath);

                yield return(metadataPath);
            }
        }
Exemple #3
0
 public PackageAdded(
     ResolvedPackageReference packageReference,
     AddPackage command = null) : base(command)
 {
     PackageReference = packageReference ?? throw new ArgumentNullException(nameof(packageReference));
 }