Beispiel #1
0
        public static async Task Main(string[] args)
        {
            if (!TryParseCommandLine(args, out var rootPath, out var verbose, out var help))
            {
                PrintUsage();
                Environment.Exit(1);
                return;
            }

            if (help)
            {
                PrintUsage();
                PrintUsage();
                Environment.Exit(0);
                return;
            }

            Log.IsEnabled = verbose;

            rootPath = Path.GetFullPath(rootPath);
            var builder      = new PackageReferenceModelBuilder(rootPath);
            var projectFiles = CsprojLocator.Locate(rootPath);

            foreach (var projectFile in projectFiles)
            {
                CsprojParser.Parse(projectFile, builder);
            }

            var model = builder.Build();

            PrintModelData(model);

            await CsprojGenerator.Generate(model, Console.Out);
        }
Beispiel #2
0
        private static void LoadPackageReferences(
            string csprojPath,
            XElement projectRootElement,
            string[] defaultTargetFrameworks,
            PackageReferenceModelBuilder builder)
        {
            foreach (var itemGroup in projectRootElement.Elements("ItemGroup"))
            {
                string[] itemGroupTargetFrameworks = null;
                foreach (var packageReference in itemGroup.Elements("PackageReference"))
                {
                    var packageId      = packageReference.Attribute("Include") !.Value;
                    var packageVersion = packageReference.Attribute("Version")?.Value;
                    if (string.IsNullOrEmpty(packageVersion))
                    {
                        continue;
                    }

                    itemGroupTargetFrameworks ??=
                    ResolveTargetFrameworks(csprojPath, itemGroup) ?? defaultTargetFrameworks;

                    foreach (var targetFramework in itemGroupTargetFrameworks)
                    {
                        Log.WriteLine(
                            $"{csprojPath}: found package \"{packageId}\" (v{packageVersion}, for {targetFramework})"
                            );
                        builder.AddPackage(targetFramework, packageId, packageVersion);
                    }
                }
            }
        }
Beispiel #3
0
        public static void Parse(string csprojPath, PackageReferenceModelBuilder builder)
        {
            var csproj             = XDocument.Load(csprojPath);
            var projectRootElement = csproj.Element("Project") ?? throw new Exception("Malformed csproj");

            // Load Sdk(s)
            var sdks = GetSdks(projectRootElement);

            foreach (var sdk in sdks)
            {
                Log.WriteLine($"{csprojPath}: found SDK \"{sdk}\"");
                builder.AddSdk(sdk);
            }

            // Load RuntimeIdentifier(s)
            var runtimeIdentifiers = GetRuntimeIdentifiers(projectRootElement);

            foreach (var runtimeIdentifier in runtimeIdentifiers)
            {
                Log.WriteLine($"{csprojPath}: found RID \"{runtimeIdentifier}\"");
                builder.AddRuntimeIdentifier(runtimeIdentifier);
            }

            // Load package references
            var defaultTargetFrameworks = GetDefaultTargetFrameworks(projectRootElement);

            LoadPackageReferences(csprojPath, projectRootElement, defaultTargetFrameworks, builder);
        }
        public static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.Error.WriteLine("USAGE:");
                Console.Error.WriteLine("dotnet-package-cache-gen <path-to-directory>");
                Environment.Exit(1);
                return;
            }

            var builder  = new PackageReferenceModelBuilder();
            var rootPath = args[0];

            rootPath = Path.GetFullPath(rootPath);
            Console.Error.WriteLine($"RootPath: {rootPath}");
            var projectFiles = CsprojLocator.Locate(rootPath);

            foreach (var projectFile in projectFiles)
            {
                CsprojParser.Parse(projectFile, builder);
            }

            var model = builder.Build();

            CsprojGenerator.Generate(model, Console.Out);

            PrintModelData(model);
        }