Exemple #1
0
        public void WriteFile()
        {
            if (MetaInfo.Exists)
            {
                MetaInfo.Delete();
            }

            var json = PackageMeta.ToJsonSimple();

            File.WriteAllText(MetaInfo.FullName, json);
            MetaInfo.Refresh();
        }
Exemple #2
0
        private Package LoadPossibleExtensionDll(Assembly a, DirectoryInfo dir, FileInfo file)
        {
            if (a == null)
            {
                return(null);
            }

            if (a.IsDynamic || a.GlobalAssemblyCache)
            {
                return(null);
            }

            if (a.FullName.StartsWith("Microsoft.", StringComparison.OrdinalIgnoreCase) || a.FullName.StartsWith("System.", StringComparison.OrdinalIgnoreCase) || a.FullName.StartsWith("NETStandard", StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }

            if (a.GetCustomAttribute <AssemblyCopyrightAttribute>()?.Copyright?.Contains("microsoft", StringComparison.OrdinalIgnoreCase) == true)
            {
                return(null);
            }

            var extt = typeof(IExtension);

            var types = a.GetLoadableTypes().Where(x => !x.IsAbstract && extt.IsAssignableFrom(x)).ToList();

            if (types.Count == 0)
            {
                //logger.Info("Cannot find any type in " + file.FullName + " that implements " + extt);
                return(null);
            }

            if (types.Count > 1)
            {
                Context.Logger.Info("Found multiple types in " + file.FullName + " implementing " + extt);
                return(null);
            }

            var pm   = types[0].InstanceAny <IExtension>();
            var meta = new PackageMeta(pm);
            var json = meta.ToJsonSimple();
            var fi   = new FileInfo(Path.Combine(dir.FullName, ExtFileName));

            if (fi.Exists)
            {
                fi.Delete();
            }

            File.WriteAllText(fi.FullName, json);
            fi.Refresh();
            return(new Package(meta, fi));
        }