Exemple #1
0
        private List <ProjectDetails> GetProjects(string pathToSolution)
        {
            var solution = SolutionFile.Parse(pathToSolution);

            var projects = solution.ProjectsInOrder.Select(p =>
            {
                if (p.ProjectType != SolutionProjectType.KnownToBeMSBuildFormat && p.ProjectType != SolutionProjectType.WebProject)
                {
                    return(null);
                }

                var projectParser = new ProjectFileParser(p.AbsolutePath);

                return(new ProjectDetails
                {
                    ProjectName = p.ProjectName,
                    ProjectFilePath = p.AbsolutePath,
                    ProjectGuid = p.ProjectGuid,
                    TargetFrameworks = projectParser.GetTargetFrameworks().ConvertAll(tfm =>
                    {
                        var framework = NuGetFramework.Parse(tfm);
                        return string.Format("{0} {1}", framework.Framework, NuGetVersion.Parse(framework.Version.ToString()).ToNormalizedString());
                    }),
                    PackageReferences = projectParser.GetPackageReferences()
                });
            }).Where(p => p != null).ToList();

            return(projects);
        }
        public static PackagesConfigValidation Create()
        {
            var solutionReader    = SolutionReaderFactory.Create();
            var projectFileParser = new ProjectFileParser();

            return(new PackagesConfigValidation(solutionReader, projectFileParser));
        }
        public VersionCliTest()
        {
            _vcsTool = A.Fake <IVcs>(opts => opts.Strict());
            A.CallTo(() => _vcsTool.ToolName()).Returns("_FAKE_");

            _fileDetector = A.Fake <ProjectFileDetector>();
            _fileParser   = A.Fake <ProjectFileParser>();
            _filePatcher  = A.Fake <ProjectFileVersionPatcher>();

            A.CallTo(() => _fileDetector.FindAndLoadCsProj(A <string> ._)).Returns("<Project/>");
            const string csProjFilePath = "/unit-test/test.csproj";

            A.CallTo(() => _fileDetector.ResolvedCsProjFile).Returns(csProjFilePath);

            A.CallTo(() => _fileParser.Load(A <string> ._)).DoesNothing();
            A.CallTo(() => _fileParser.Version).Returns("1.2.1");

            _cli = new VersionCli(
                _vcsTool,
                _fileDetector,
                _fileParser,
                _filePatcher,
                new SemVerBumper()
                );
        }
Exemple #4
0
 public void GetAssemblyNameFromFullNameTest()
 {
     using (Stream s = GetStreamForFile("MSBuild.Community.Tasks.csproj"))
     {
         Assert.AreEqual("Ionic.Zip.Reduced", ProjectFileParser.GetAssemblyNameFromFullName("Ionic.Zip.Reduced, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL"));
     }
 }
Exemple #5
0
        public void ParsePackageReferencesMustThrowArgumentNullReferenceExceptionWhenProjectIsNull()
        {
            var parser    = new ProjectFileParser();
            var exception = Assert.Throws <ArgumentNullException>(() => ParsePackageReferences(null));

            Assert.That(exception.Message, Does.Contain("project"));
        }
Exemple #6
0
        public void ParseProjectWithCorruptContentThrowsException()
        {
            var corruptProjectFileParser = new ProjectFileParser(Path.Combine(TestContext.CurrentContext.TestDirectory,
                                                                              "TestXml", "SolutionWithFailedContent", "test", "ProjectWithCorruptContent.csproj"));

            Assert.AreEqual(0, corruptProjectFileParser.GetPackageReferences().Count);
        }
Exemple #7
0
        private bool IsDefaultNode(string path)
        {
            var setAsDefault = false;

            if (path.EndsWith(".shproj"))
            {
                setAsDefault = File.ReadAllLines(path.Substring(0, path.Length - "shproj".Length) + "projitems")
                               .Any(l => l.Contains(Info.DefaultProjectWithFile + "\""));
            }
            else
            {
                var parser = new ProjectFileParser(File.ReadAllLines(path));
                if (parser.ItemGroups.TryGetValue(ProjectFileParser.ItemGroupTypes.Compile, out var compileItems))
                {
                    setAsDefault = ContainsDefaultProjectFile(compileItems);
                }

                if (!setAsDefault && parser.ItemGroups.TryGetValue(ProjectFileParser.ItemGroupTypes.None, out var noneItems))
                {
                    setAsDefault = ContainsDefaultProjectFile(noneItems);
                }

                if (!setAsDefault && parser.ItemGroups.TryGetValue(ProjectFileParser.ItemGroupTypes.Content, out var contentItems))
                {
                    setAsDefault = ContainsDefaultProjectFile(contentItems);
                }
            }

            return(setAsDefault);
        }
Exemple #8
0
        public void TestParseReferences()
        {
            const string Xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                                <Project>
                                    <ItemGroup>
                                        <Reference Include=""System.Data"" />
                                        <Reference Include=""System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"">
                                            <HintPath>..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll</HintPath>
                                        <Private>True</Private>
                                        </Reference>
                                    </ItemGroup>
                                </Project>";

            using (var textReader = new StringReader(Xml))
            {
                using (var projectStructureItemSubject = new Subject <ProjectStructureItem>())
                {
                    var projectStructureItems = new List <ProjectStructureItem>();
                    projectStructureItemSubject.Subscribe(projectStructureItems.Add);

                    var sut = new ProjectFileParser();
                    sut.Parse(textReader, projectStructureItemSubject);

                    var items = projectStructureItems
                                .OfType <ReferenceBase>()
                                .ToList();

                    Assert.AreEqual(2, items.Count);
                }
            }
        }
Exemple #9
0
        public void TestParsePackagesConfig()
        {
            const string Xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                                <Project>
                                    <ItemGroup>
                                        <None Include=""packages.config"">
                                            <SubType>Designer</SubType>
                                        </None>
                                    </ItemGroup>
                                </Project>";

            using (var textReader = new StringReader(Xml))
            {
                using (var projectStructureItemSubject = new Subject <ProjectStructureItem>())
                {
                    var projectStructureItems = new List <ProjectStructureItem>();
                    projectStructureItemSubject.Subscribe(projectStructureItems.Add);

                    var sut = new ProjectFileParser();
                    sut.Parse(textReader, projectStructureItemSubject);

                    var items = projectStructureItems
                                .OfType <PackagesConfigItem>()
                                .ToList();

                    Assert.AreEqual(1, items.Count);
                }
            }
        }
Exemple #10
0
 public void GetAssemblyNameVS2013ProjectTest()
 {
     using (Stream s = GetStreamForFile("MSBuild.Community.Tasks.csproj"))
     {
         ProjectFileParser p = new ProjectFileParser(s);
         Assert.AreEqual("MSBuild.Community.Tasks", p.GetAssemblyName());
     }
 }
Exemple #11
0
        public void TestProjectTargetName()
        {
            var sut = new ProjectFileParser();

            var parsedReferences = sut.Parse(_fullPath);

            Assert.AreEqual("NugetUnicorn.Ui.exe", parsedReferences.TargetName);
        }
Exemple #12
0
        public void TestParseReferencesCount()
        {
            var sut = new ProjectFileParser();

            var parsedReferences = sut.Parse(_fullPath);

            Assert.AreEqual(32, parsedReferences.References.Count);
        }
Exemple #13
0
 public void GetAssemblyNameVS2008ProjectTest()
 {
     using (Stream s = GetStreamForFile("DBInfo.CodeGen.csproj"))
     {
         ProjectFileParser p = new ProjectFileParser(s);
         Assert.AreEqual("DBInfo.CodeGen", p.GetAssemblyName());
     }
 }
Exemple #14
0
        private void FindCommonTestProject(List <ProjectFileParser> projects)
        {
            Logger.AddDetail("Searching For the Shared Test Project, which is a project containing the 'UnitTestSettings.config' file.");
            var project = projects.FirstOrDefault(p =>
                                                  p.ItemGroups.TryGetValue(ProjectFileParser.ItemGroupTypes.None, out var noneItemGroup) &&
                                                  noneItemGroup.Any(l => l.Contains("<None Include=\"UnitTestSettings.config\">")));

            SharedTestProject = project ?? throw new Exception("Unable to find the Shared Test Project!");
        }
Exemple #15
0
        public void TestParseTargetFrameworkVersion()
        {
            var sut = new ProjectFileParser();

            var projectPoco = sut.Parse(_fullPath);

            Assert.NotNull(projectPoco);
            Assert.AreEqual("net461", projectPoco.TargetFramework.ShortFolderName);
        }
Exemple #16
0
 public void GetReferencesVS2008Test()
 {
     using (Stream s = GetStreamForFile("DBInfo.CodeGen.csproj"))
     {
         ProjectFileParser p = new ProjectFileParser(s);
         Assert.AreEqual("System", p.GetAssemblyReferences().ToList()[0].Include);
         Assert.AreEqual("System.Core", p.GetAssemblyReferences().ToList()[1].Include);
     }
 }
Exemple #17
0
 public void GetReferencesVS2013Test()
 {
     using (Stream s = GetStreamForFile("MSBuild.Community.Tasks.csproj"))
     {
         ProjectFileParser p = new ProjectFileParser(s);
         Assert.AreEqual("Ionic.Zip.Reduced, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL", p.GetAssemblyReferences().ToList()[0].Include);
         Assert.AreEqual(@"..\packages\DotNetZip.Reduced.1.9.1.8\lib\net20\Ionic.Zip.Reduced.dll", p.GetAssemblyReferences().ToList()[0].HintPath);
         Assert.AreEqual("Microsoft.Build.Framework", p.GetAssemblyReferences().ToList()[1].Include);
     }
 }
Exemple #18
0
        public void TestHintPath()
        {
            var sut = new ProjectFileParser();

            var parsedReferences = sut.Parse(_fullPath);

            var first = parsedReferences.References.OfType <Reference>().First();

            Assert.NotNull(first);
            Assert.AreEqual(@"..\packages\GraphX.2.3.3.0\lib\net40-client\GraphX.Controls.dll", first.HintPath);
        }
Exemple #19
0
        public void ParseProjectWithProjectReferencesSucceeds()
        {
            var path = Path.Combine(TestContext.CurrentContext.TestDirectory,
                                    "TestXml", "ProjectWithReference", "ProjectWithReference.csproj");
            var handler = new ProjectFileParser(path);

            Assert.AreEqual(4, handler.GetPackageReferences().Count);
            Assert.AreEqual(1, handler.GetProjectReferences().Count);
            Assert.AreEqual(1, handler.GetTargetFrameworks().Count);
            Assert.AreEqual("netcoreapp3.1", handler.GetTargetFrameworks().First());
        }
Exemple #20
0
        public void ParseProjectInWrongDirectoryThrowsException()
        {
            var path = Path.Combine(TestContext.CurrentContext.TestDirectory,
                                    "TestXml", "SolutionWithFailedContent", "ProjectInWrongDirectory.csproj");

            Assert.Throws <PortingAssistantClientException>(() =>
            {
                var projectFileParser = new ProjectFileParser(path);
                projectFileParser.GetPackageReferences();
            });
        }
 public VersionCli(
     IVcs vcsClient,
     ProjectFileDetector fileDetector,
     ProjectFileParser fileParser,
     ProjectFileVersionPatcher fileVersionPatcher
     )
 {
     _vcsTool            = vcsClient;
     _fileDetector       = fileDetector;
     _fileParser         = fileParser;
     _fileVersionPatcher = fileVersionPatcher;
 }
Exemple #22
0
        public async Task ParseSingleProjectFile()
        {
            var projectFileParser = new ProjectFileParser(_prjConfig);

            _prjConfig.ProjectFiles = "project1.csproj";
            await File.WriteAllTextAsync($"{_prjConfig.RootPath}/project1.csproj", project1);

            var packages = projectFileParser.GetNugetPackages();

            Assert.Equal(1, packages.Count);
            Assert.Equal("xunit", packages[0].Name);
            Assert.Equal("2.4.0", packages[0].Version);
        }
Exemple #23
0
        public override void Run(BuildContext context)
        {
            var projectFileParser = new ProjectFileParser(context);

            if (context.SolutionFile != null)
            {
                GatherPackagesFromSolution(context, projectFileParser);
            }


            if (context.CheckForPackagesConfig)
            {
                GatherPackagesFromPackagesConfig(context);
            }
        }
Exemple #24
0
        public void TestProjectReferencePath()
        {
            var sut = new ProjectFileParser();

            var parsedReferences = sut.Parse(_fullPath);

            var references        = parsedReferences.References;
            var projectReferences = references.OfType <ProjectReference>()
                                    .ToArray();
            var first = projectReferences.First();

            Assert.NotNull(first);
            Assert.AreEqual(1, projectReferences.Length);
            Assert.AreEqual(@"..\NugetUnicorn.Business\NugetUnicorn.Business.csproj", first.Include);
            Assert.AreEqual(@"NugetUnicorn.Business", first.Name);
            Assert.AreEqual(@"{79721f58-a1bd-4b03-8958-2560eb16d1ad}", first.Guid);
        }
        public void Parse()
        {
            var project = GetExampleProject();
            var parser  = new ProjectFileParser(project);

            Assert.AreEqual(3, parser.PrePropertyGroups.Count);
            Assert.AreEqual(5, parser.PropertyGroups.Count);
            Assert.AreEqual("Xyz.Xrm.PluginAssembly", parser.AssemblyName);
            Assert.AreEqual("Xyz.Xrm.Plugin", parser.Namespace);
            Assert.AreEqual(new Guid("2B294DBF-8730-436E-B401-8745FEA632FE"), parser.Id);
            Assert.AreEqual(3, parser.ItemGroups.Count);
            Assert.AreEqual(4, parser.ItemGroups[ProjectFileParser.ItemGroupTypes.Reference].Count);
            Assert.AreEqual(1, parser.ItemGroups[ProjectFileParser.ItemGroupTypes.Compile].Count);
            Assert.AreEqual(1, parser.ItemGroups[ProjectFileParser.ItemGroupTypes.None].Count);
            Assert.AreEqual(3, parser.Imports.Count);
            Assert.AreEqual(11, parser.PostImports.Count);

            Assert.That.LinesAreEqual(project, parser.GetProject());
        }
Exemple #26
0
        public async Task ParseMultipleProjectFiles()
        {
            var projectFileParser = new ProjectFileParser(_prjConfig);

            _prjConfig.ProjectFiles = "project1.csproj project2.csproj";
            await File.WriteAllTextAsync($"{_prjConfig.RootPath}/project1.csproj", project1);

            await File.WriteAllTextAsync($"{_prjConfig.RootPath}/project2.csproj", project2);

            var packages = projectFileParser.GetNugetPackages();

            Assert.Equal(2, packages.Count);

            Assert.Equal("xunit", packages[0].Name);
            Assert.Equal("2.4.0", packages[0].Version);

            Assert.Equal("xunit.runner.visualstudio", packages[1].Name);
            Assert.Equal("2.4.1", packages[1].Version);
        }
Exemple #27
0
 static void Main(string[] args)
 {
     var parser = new Parser(settings =>
     {
         settings.HelpWriter = Console.Error;
         settings.CaseInsensitiveEnumValues = true;
     });
     var result = parser.ParseArguments <Options>(args)
                  .WithParsed <Options>(o =>
     {
         if (DirectoryExplorer.DoesCsProjExistInFolder(o.Path, out var csProjPath))
         {
             ProjectFileParser.ReadFileAndUpdateVersion(csProjPath, o.VersionType);
         }
         else
         {
             Console.WriteLine("No csproj found in directory.");
             Main(new string[] {});
         }
     });
 }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();

            try
            {
                var projFileParser = new ProjectFileParser(
                    Configuration[ReferencePrefixesEnvVarKey]?.Split(',').Select(s => s.Trim()),
                    bool.Parse(Configuration[AreReferencePrefixesIncludeEnvVarKey] ?? "true"));
                var scanners = new List <IOrganizationScanner>();

                var ghOrgKey = Configuration[GitHubOrganizationEnvVarKey];
                if (!string.IsNullOrWhiteSpace(ghOrgKey))
                {
                    scanners.Add(
                        new GitHubScanner(
                            projFileParser,
                            ghOrgKey,
                            Configuration[GitHubApiEnvVarKey],
                            Configuration[GitHubReposEnvVarKey]));
                }

                var bbAccountKey = Configuration[BitBucketAccountEnvVarKey];
                if (!string.IsNullOrWhiteSpace(bbAccountKey))
                {
                    scanners.Add(
                        new BitBucketScanner(
                            projFileParser,
                            bbAccountKey,
                            Configuration[BitBucketEnvVarKey],
                            Configuration[BitBucketSecretEnvVarKey]));
                }

                services.AddSingleton <IReferencesScanner>(new GitScanner(scanners));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Exemple #29
0
        private static void GatherPackagesFromSolution(BuildContext context, ProjectFileParser projectFileParser)
        {
            context.Log.Information("Parsing {0}", context.SolutionFile);
            var parsedSolution = context.ParseSolution(context.SolutionFile);

            foreach (var project in parsedSolution.Projects)
            {
                context.Log.Information(
                    @"Solution project file:
    Name: {0}
    Path: {1}
    Id  : {2}
    Type: {3}",
                    project.Name,
                    project.Path,
                    project.Id,
                    project.Type
                    );

                if (project.Type == "{2150E333-8FDC-42A3-9474-1A3956D46DE8}")
                {
                    // Solution Folder
                    continue;
                }

                try
                {
                    var parseProject = projectFileParser.ParseProjectFile(project.Path);

                    context.AllPackageReferences.AddRange(parseProject.Select(x => x.Include));
                }
                catch (Exception e)
                {
                    context.Log.Error("Failed to parse a project file, feel free to submit an issue.");
                    context.Log.Error(e.ToString());
                }
            }
        }
Exemple #30
0
        private List <ProjectDetails> GetProjects(string pathToSolution)
        {
            var solution = SolutionFile.Parse(pathToSolution);

            var projects = solution.ProjectsInOrder.Select(p =>
            {
                if (p.ProjectType != SolutionProjectType.KnownToBeMSBuildFormat && p.ProjectType != SolutionProjectType.WebProject)
                {
                    return(null);
                }

                var projectParser = new ProjectFileParser(p.AbsolutePath);

                return(new ProjectDetails
                {
                    ProjectName = p.ProjectName,
                    ProjectFilePath = p.AbsolutePath,
                    ProjectGuid = p.ProjectGuid,
                    ProjectType = p.ProjectType.ToString(),
                });
            }).Where(p => p != null).ToList();

            return(projects);
        }