public ResourceFileSystem(AssemblyWithSourceInfo assemblyInfo) : base(new FileProviderFileSystemParams(new ManifestEmbeddedFileProvider(assemblyInfo.Assembly)))
    {
        this.AssemblyInfo = assemblyInfo;

        List <DirectoryPath> resourceRootList = new List <DirectoryPath>();

        // List all ResourcRoot directories (which contains the 'resource_root' file)
        foreach (DirectoryPath srcRootPath in this.AssemblyInfo.SourceRootList)
        {
            try
            {
                foreach (FileSystemEntity entity in srcRootPath.EnumDirectory(true, EnumDirectoryFlags.NoGetPhysicalSize))
                {
                    if (entity.IsCurrentOrParentDirectory == false && entity.IsDirectory)
                    {
                        DirectoryPath subDir = new DirectoryPath(entity.FullPath);
                        try
                        {
                            if (subDir.GetFiles().Where(x => x.GetFileName()._IsSamei(Consts.FileNames.RootMarker_Resource)).Any())
                            {
                                resourceRootList.Add(subDir);
                            }
                        }
                        catch { }
                    }
                }
            }
            catch { }
        }

        this.ResourceRootSourceDirectoryList = resourceRootList;

        this.Params.EasyAccessPathFindMode.Set(EasyAccessPathFindMode.MostMatch);
    }
    public override bool Equals(object?obj)
    {
        obj._NullCheck();

        AssemblyWithSourceInfo other = (AssemblyWithSourceInfo)obj;

        if (this.Assembly.Equals(other.Assembly) == false)
        {
            return(false);
        }

        string thisSourceListConcat  = this.SourceRootList.Select(x => x.PathString).OrderBy(x => x)._Combine(",");
        string otherSourceListConcat = other.SourceRootList.Select(x => x.PathString).OrderBy(x => x)._Combine(",");

        if (thisSourceListConcat != otherSourceListConcat)
        {
            return(false);
        }

        return(true);
    }
 public static ResourceFileSystem CreateOrGet(AssemblyWithSourceInfo assembly) => Singleton.CreateOrGet(assembly);