Esempio n. 1
0
        // Collect C# source generators from the direct NuGet dependencies (ignores transitive dependencies)
        public List <ISourceGenerator> GetSourceGenerators(RestoreCommandProviders dependencyProviders, RestoreResult result,
                                                           NuGetFramework targetFramework, AssemblyLoadContext assemblyLoadContext)
        {
            var generators = new List <ISourceGenerator>();

            LockFileTarget lockFileTarget = result.LockFile.Targets
                                            .First(p => p.TargetFramework == targetFramework);

            foreach (var directDependency in _packageSpec.Dependencies
                     .Concat(_packageSpec.TargetFrameworks
                             .Where(p => p.FrameworkName == targetFramework)
                             .SelectMany(framework => framework.Dependencies)))
            {
                // Get the exact version we restored
                var version = lockFileTarget.Libraries
                              .FirstOrDefault(p => string.Equals(p.Name, directDependency.Name, StringComparison.OrdinalIgnoreCase))?
                              .Version;
                if (version is not null)
                {
                    NuGet.Repositories.LocalPackageInfo localPackageInfo =
                        dependencyProviders.GlobalPackages.FindPackage(directDependency.Name, version);

                    // For now, we explicitly only handle Roslyn 4.0 analyzers or unversioned analyzers
                    // The regex also excludes resource assemblies in nested directories
                    foreach (Match file in localPackageInfo.Files
                             .Select(p => Regex.Match(p, @"^(analyzers/dotnet/(?:roslyn4\.0/)?cs/[^/]+\.dll$)"))
                             .Where(p => p.Success))
                    {
                        generators.AddRange(GetSourceGenerators(
                                                Path.Join(localPackageInfo.ExpandedPath, file.Groups[1].Value),
                                                assemblyLoadContext));
                    }
                }
            }

            return(generators);
        }
Esempio n. 2
0
 public LocalPackageSourceInfo(NuGet.Repositories.NuGetv3LocalRepository repository, NuGet.Repositories.LocalPackageInfo package)
 {
 }