// 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); }
public LocalPackageSourceInfo(NuGet.Repositories.NuGetv3LocalRepository repository, NuGet.Repositories.LocalPackageInfo package) { }