コード例 #1
0
ファイル: ProjectHelper.cs プロジェクト: Drake53/CSharp.lua
        public static IEnumerable <string> EnumerateSourceFiles(this CustomProjectParserResult project, string folder = null)
        {
            folder ??= project.GetDirectory();
            const string ObjFolder     = "obj";
            const string OutputFolder  = "bin";
            const string SearchPattern = "*.cs";

            foreach (var file in System.IO.Directory.EnumerateFiles(folder, SearchPattern, System.IO.SearchOption.TopDirectoryOnly))
            {
                yield return(file);
            }
            var ignoredSubFolders = new HashSet <string>()
            {
                ObjFolder, OutputFolder
            };

            foreach (var subFolder in System.IO.Directory.EnumerateDirectories(folder))
            {
                var subFolderName = new System.IO.DirectoryInfo(subFolder).Name;
                if (ignoredSubFolders.Contains(subFolderName))
                {
                    continue;
                }
                foreach (var file in System.IO.Directory.EnumerateFiles(subFolder, SearchPattern, System.IO.SearchOption.AllDirectories))
                {
                    yield return(file);
                }
            }
        }
コード例 #2
0
ファイル: ProjectHelper.cs プロジェクト: Drake53/CSharp.lua
        public static IEnumerable <(string folder, CustomProjectParserResult project)> EnumerateProjects(this CustomProjectParserResult mainProject)
        {
            var result = new Dictionary <string, CustomProjectParserResult>();

            void AddReferences(string folderPath, CustomProjectParserResult project)
            {
                foreach (var referencedProject in project.ProjectReferences.Select(p => ParseProject(p.FilePath, folderPath, project.Configuration, project.Platform)))
                {
                    var directory = referencedProject.GetDirectory();
                    if (result.TryAdd(directory, referencedProject))
                    {
                        AddReferences(directory, referencedProject);
                    }
                    else if (!string.Equals(referencedProject.ProjectFilePath.FullPath, result[directory].ProjectFilePath.FullPath, StringComparison.OrdinalIgnoreCase))
                    {
                        throw new Exception("Found two or more projects in the same directory.");
                    }
                }
            }

            var mainDirectory = mainProject.GetDirectory();

            result.Add(mainDirectory, mainProject);
            AddReferences(mainDirectory, mainProject);
            foreach (var pair in result)
            {
                yield return(pair.Key, pair.Value);
            }
        }