예제 #1
0
        protected AssemblyDetail ExtractAll(string assemblyFile, DiffConfig config)
        {
            string cacheKey = assemblyFile + "|" + config.ToString();

            if (config.IsolationLevel == AppDomainIsolationLevel.AutoDetect)
            {
                config.IsolationLevel = AppDomainIsolationLevel.Medium;
            }

            if (!_infCache.ContainsKey(cacheKey))
            {
                lock (typeof(TestBase))
                {
                    if (!_infCache.ContainsKey(cacheKey))
                    {
                        if (!File.Exists(assemblyFile))
                        {
                            Assert.Inconclusive("Unable to locate subject assembly");
                        }

                        AssemblyManager am  = AssemblyManagerFactory.Create(config.IsolationLevel);
                        AssemblyDetail  inf = am.ExtractAssemblyInf(assemblyFile, config);

                        _infCache.Add(cacheKey, inf);
                    }
                }
            }

            return((AssemblyDetail)_infCache[cacheKey].Clone());
        }
예제 #2
0
        internal void Execute(object state)
        {
            AssemblyComparerThread act = (AssemblyComparerThread)state;

            try
            {
                if (act.Progress != null)
                {
                    if (act.Progress.CancelRequested)
                    {
                        throw new OperationCanceledException();
                    }

                    act.Progress.UpdateProgress(new ProgressStatus("Analyzing " + act.FileName, true));
                }

                AssemblyDetail assembly = act.Manager.ExtractAssemblyInf(act.FileName, _config);
                assembly.Name = act.Group.Name;

                lock (GetType())
                {
                    act.Group.Assemblies.Add(assembly);
                }
            }
            catch (Exception ex)
            {
                Log.Error("Unable to load assembly : {0}", act.FileName);
                act.Group.HasErrors   = true;
                act.Group.ErrorDetail = ex.GetNestedExceptionMessage();
                Log.Error(act.Group.ErrorDetail);
            }
        }
예제 #3
0
        private void CheckForUpdates(bool silentCheck)
        {
            List <GitHubRelease> releases = null;

            try
            {
                string sURL;
                sURL = "https://api.github.com/repos/kabili207/oracle-of-secrets-win/releases";

                WebRequest request = WebRequest.Create(sURL);
                Extensions.SetAllowUnsafeHeaderParsing();

                // GitHub requires a user agent
                ((HttpWebRequest)request).UserAgent = "ZoraGen updater";


                using (Stream objStream = request.GetResponse().GetResponseStream())
                {
                    StreamReader objReader = new StreamReader(objStream);
                    string       json      = objReader.ReadToEnd();
                    var          dict      = (SimpleJson.JsonArray)SimpleJson.SimpleJson.DeserializeObject(json);
                    var          converter = new GitHubReleaseJsonConverter();
                    releases = converter.Deserialize(dict).ToList();
                }
            }
            catch (Exception ex)
            {
                if (!silentCheck)
                {
                    MessageBox.Show("Unable to check for updates." + Environment.NewLine +
                                    ex.Message, "Check for updates", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }

            if (releases != null)
            {
                AssemblyDetail detail      = new AssemblyDetail(Assembly.GetExecutingAssembly());
                var            releaseInfo = releases.Where(x => !x.IsPreRelease && !x.IsDraft &&
                                                            x.TagName.StartsWith("v")).Select(x =>
                {
                    string versionString    = x.TagName.TrimStart('v', 'V');
                    SemanticVersion version = SemanticVersion.Parse(versionString);
                    return(new { Version = version, Release = x });
                }).Where(x => x.Version > detail.ProductVersion).OrderByDescending(x => x.Version);

                if (releaseInfo.Count() > 0)
                {
                    var win = new UpdateWindow(releaseInfo.First().Release, detail.ProductVersion);
                    win.Owner = this;
                    win.ShowDialog();
                }
                else if (!silentCheck)
                {
                    MessageBox.Show("There are no new updates available", "No updates");
                }
            }
        }
예제 #4
0
        protected T ExtractItem <T>(string assemblyFile, string name, DiffConfig config) where T : ICanAlign, new()
        {
            AssemblyDetail all = ExtractAll(assemblyFile, config);

            T t = ListOperations.FindOrReturnMissing(all.FilterChildren <T>(), name);

            Log.Verbose("Extracted Item {0} : {1}", t.GetType().Name, t.ToString());
            return(t);
        }
예제 #5
0
        public AssemblyDetail ExtractAssemblyInf(string assemblyPath, DiffConfig config)
        {
            if (!Path.IsPathRooted(assemblyPath))
            {
                assemblyPath = Path.GetFullPath(assemblyPath);
            }

            Log.Verbose("Extracting from assembly {0}", Path.GetFileName(assemblyPath));

            DomainExtractorPair pair = GetExtractor(assemblyPath);
            AssemblyDetail      ad   = pair.Extractor.ExtractFrom(assemblyPath, config);

            OneExtractionComplete(pair);
            return(ad);
        }
예제 #6
0
        protected T ExtractItem <T>(string assemblyFile, string parentName, string typeName, DiffConfig config) where T : ICanAlign, new()
        {
            AssemblyDetail all = ExtractAll(assemblyFile, config);

            foreach (ICanCompare parent in all.Children)
            {
                if (parent.Name == parentName)
                {
                    T t = ListOperations.FindOrReturnMissing(parent.FilterChildren <T>(), typeName);
                    Log.Verbose("Extracted Item {0} : {1}", t.GetType().Name, t.ToString());
                    return(t);
                }
            }

            Assert.Inconclusive("Specified parent {0} was not found", parentName);
            return(default(T));
        }
예제 #7
0
        public AssemblyDetail ExtractAssemblyInf(string assemblyPath, DiffConfig config)
        {
            if (!Path.IsPathRooted(assemblyPath))
            {
                assemblyPath = Path.GetFullPath(assemblyPath);
            }

            Log.Verbose("Extracting from assembly {0}", Path.GetFileName(assemblyPath));

            var deleteFiles          = new ConcurrentQueue <string>();
            DomainExtractorPair pair = GetExtractor(assemblyPath);
            AssemblyDetail      ad   = pair.Extractor.ExtractFrom(assemblyPath, config, ref deleteFiles);

            OneExtractionComplete(pair);
            OnUnloadDeleteFiles(deleteFiles);
            return(ad);
        }
예제 #8
0
        protected void OnAbout(object sender, EventArgs e)
        {
            AboutDialog dialog     = new AboutDialog();
            Assembly    asmCurrent = Assembly.GetExecutingAssembly();

            AssemblyDetail details = new AssemblyDetail(asmCurrent);

            dialog.ProgramName = details.Product;
            dialog.Version     = details.ProductVersion;
            dialog.Comments    = details.Description;
            dialog.Authors     = new string[] { "Amy Nagle" };
            dialog.Website     = "https://github.com/kabili207/zoragen-gtk";
            dialog.Copyright   = details.Copyright;
            dialog.Logo        = Gdk.Pixbuf.LoadFromResource("Zyrenth.ZoraGen.GtkUI.Farore.ico");
            dialog.Icon        = Gdk.Pixbuf.LoadFromResource("Zyrenth.ZoraGen.GtkUI.Farore.ico");
            dialog.Run();
            dialog.Destroy();
        }
예제 #9
0
    public static AssemblyDetail Extract(Assembly assembly)
    {
        var detail = _detailCache.GetOrAdd(assembly, a => {
            var assemblyDetail = new AssemblyDetail();
            var assemblyName   = a.GetName();

            assemblyDetail.AssemblyName    = assemblyName.Name;
            assemblyDetail.AssemblyVersion = assemblyName.Version?.ToString();

            assemblyDetail.AssemblyTitle                = a.GetCustomAttribute <AssemblyTitleAttribute>()?.Title;
            assemblyDetail.AssemblyDescription          = a.GetCustomAttribute <AssemblyDescriptionAttribute>()?.Description;
            assemblyDetail.AssemblyProduct              = a.GetCustomAttribute <AssemblyProductAttribute>()?.Product;
            assemblyDetail.AssemblyCompany              = a.GetCustomAttribute <AssemblyCompanyAttribute>()?.Company;
            assemblyDetail.AssemblyCopyright            = a.GetCustomAttribute <AssemblyCopyrightAttribute>()?.Copyright;
            assemblyDetail.AssemblyConfiguration        = a.GetCustomAttribute <AssemblyConfigurationAttribute>()?.Configuration;
            assemblyDetail.AssemblyFileVersion          = a.GetCustomAttribute <AssemblyFileVersionAttribute>()?.Version;
            assemblyDetail.AssemblyInformationalVersion = a.GetCustomAttribute <AssemblyInformationalVersionAttribute>()?.InformationalVersion;

            return(assemblyDetail);
        });

        return(detail);
    }
예제 #10
0
        public IActionResult Assemblies()
        {
            var details = AssemblyDetail.ExtractAll();

            return(Ok(details));
        }
예제 #11
0
        private void Do()
        {
            Query q1 = new Query(typeof(FNCART_CTLEntity));

            q1.AddAttribute(FNCART_CTLEntity.__STNO);
            q1.AddAttribute(FNCART_CTLEntity.__SECTION);
            q1.AddAttribute(FNCART_CTLEntity.__GROUPNO);
            Condition c1 = q1.GetQueryCondition();

            c1.AddEqualTo(FNCART_CTLEntity.__REGISTER_FLG, "1");
            q1.GroupBy(FNCART_CTLEntity.__STNO);
            q1.GroupBy(FNCART_CTLEntity.__GROUPNO);
            q1.GroupBy(FNCART_CTLEntity.__SECTION);

            Query q2 = new Query(typeof(FNRETRIEVAL_STEntity));

            q2.AddAttribute(FNRETRIEVAL_STEntity.__RETRIEVAL_STATION);
            q2.AddAttribute(FNRETRIEVAL_STEntity.__CART_TICKET_PRINTFLG);
            q2.AddAttribute(FNRETRIEVAL_STEntity.__PRINTER_NO_CART);
            q2.GroupBy(FNRETRIEVAL_STEntity.__RETRIEVAL_STATION);
            q2.GroupBy(FNRETRIEVAL_STEntity.__PRINTER_NO_CART);
            q2.GroupBy(FNRETRIEVAL_STEntity.__CART_TICKET_PRINTFLG);


            q1.AddJoinQuery(FNCART_CTLEntity.__STNO, q2, FNRETRIEVAL_STEntity.__UNIT_STNO);

            q1.OrderBy(FNCART_CTLEntity.__STNO);
            q1.OrderBy(FNCART_CTLEntity.__GROUPNO);

            DataTable dt = q1.Execute();       //sql1

            if (dt != null && dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DataRow dr               = dt.Rows[i];
                    string  printflag        = dr[FNRETRIEVAL_STEntity.__CART_TICKET_PRINTFLG].ToString();
                    decimal printNo          = Convert.ToDecimal(dr[FNRETRIEVAL_STEntity.__PRINTER_NO_CART]);
                    string  printName        = GetPrintName(printNo);
                    string  retrievalStation = dr[FNRETRIEVAL_STEntity.__RETRIEVAL_STATION].ToString();
                    string  groupNo          = dr[FNCART_CTLEntity.__GROUPNO].ToString();
                    string  section          = dr[FNCART_CTLEntity.__SECTION].ToString();

                    try
                    {
                        if (printflag == "1")   //要打印
                        {
                            DataTable dt1 = GetData(section, groupNo);
                            if (dt1 != null && dt1.Rows.Count > 0)
                            {
                                if (retrievalStation == "24")    //组立
                                {
                                    AssemblyHead head = new AssemblyHead();
                                    head.Section = section;
                                    List <AssemblyDetail> details = new List <AssemblyDetail>();
                                    for (int j = 0; j < dt1.Rows.Count; j++)
                                    {
                                        DataRow        dr1    = dt1.Rows[j];
                                        AssemblyDetail detail = new AssemblyDetail();
                                        detail.BucketNo  = dr1[FNCART_CTLEntity.__BUCKET_NO].ToString();
                                        detail.ColorCode = dr1[FNCART_CTLEntity.__COLOR_CODE].ToString();
                                        detail.ItemCode  = dr1[FNCART_CTLEntity.__ITEM_CODE].ToString();
                                        detail.ItemName  = dr1[FMZKEYEntity.__ZKNAME1].ToString();
                                        detail.Qty       = dr1[FNCART_CTLEntity.__QTY].ToString();
                                        detail.Weight    = dr1[FNCART_CTLEntity.__WEIGHT].ToString();
                                        details.Add(detail);
                                    }
                                    pc.DoPrint(printName, head, details);
                                }
                                else if (retrievalStation == "11" || retrievalStation == "21")   //SI
                                {
                                    SIHead head = new SIHead();
                                    head.Section = section;
                                    List <SIDetail> details = new List <SIDetail>();
                                    for (int j = 0; j < dt1.Rows.Count; j++)
                                    {
                                        DataRow  dr1    = dt1.Rows[j];
                                        SIDetail detail = new SIDetail();
                                        detail.BucketNo = dr1[FNCART_CTLEntity.__BUCKET_NO].ToString();
                                        detail.Line     = dr1[FNCART_CTLEntity.__LINE].ToString();
                                        detail.ItemCode = dr1[FNCART_CTLEntity.__ITEM_CODE].ToString();
                                        detail.ItemName = dr1[FMZKEYEntity.__ZKNAME1].ToString();
                                        detail.Qty      = dr1[FNCART_CTLEntity.__QTY].ToString();
                                        detail.Weight   = dr1[FNCART_CTLEntity.__WEIGHT].ToString();
                                        details.Add(detail);
                                    }
                                    pc.DoPrint(printName, head, details);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex.Message);
                    }
                    //update
                    UpdateCriteria uc = new UpdateCriteria(typeof(FNCART_CTLEntity));
                    Condition      c  = uc.GetNewCondition();
                    c.AddEqualTo(FNCART_CTLEntity.__SECTION, section);
                    c.AddEqualTo(FNCART_CTLEntity.__GROUPNO, groupNo);
                    c.AddEqualTo(FNCART_CTLEntity.__REGISTER_FLG, "1");
                    uc.AddAttributeForUpdate(FNCART_CTLEntity.__REGISTER_FLG, "3");
                    uc.Perform();
                }
            }
        }
예제 #12
0
        public ActionResult <IReadOnlyCollection <AssemblyDetail> > Assemblies()
        {
            var details = AssemblyDetail.ExtractAll();

            return(Ok(details));
        }
예제 #13
0
        static void Main(string[] args)
        {
            var checkReferences = false;

            if (args.Length < 2)
            {
                Usage();
            }

            var exclude = string.Empty;

            if (args.Length == 3)
            {
                exclude = args[2];
            }

            var filename__ = args[0];

            var filenames        = new List <string>();
            var excludeFileNames = new List <string>();

            if (File.Exists(filename__))
            {
                filenames.Add(filename__);
            }
            else
            {
                filenames.AddRange(Directory.GetFiles(".", filename__));
                excludeFileNames.AddRange(Directory.GetFiles(".", exclude));

                filenames = filenames.Except(excludeFileNames).ToList();
            }

            var assemblyDetails = new List <AssemblyDetail>();

            foreach (var filename in filenames)
            {
                var file = new FileInfo(filename);
                Console.WriteLine($"Processing ... {filename}");
                try
                {
                    var loadedAssembly = Assembly.LoadFile($@"{file.FullName}");
                    var references     = AssemblyReporter.GetReferences(loadedAssembly);

                    var assemblyName = loadedAssembly.GetName();

                    var assemblyDetail = new AssemblyDetail()
                    {
                        Name     = file.Name,
                        Version  = assemblyName.Version.ToString(),
                        Platform = assemblyName.ProcessorArchitecture.ToString()
                    };

                    assemblyDetails.Add(assemblyDetail);

                    if (checkReferences)
                    {
                        foreach (var reference in references)
                        {
                            Console.Write("  |---");
                            Console.WriteLine($"{reference.Name} {reference.Version}");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Fail {filename}: {ex.Message}");
                }
            }

            var json = Newtonsoft.Json.JsonConvert.SerializeObject(assemblyDetails);

            File.WriteAllText(args[1], json);
        }
예제 #14
0
        private void CheckForUpdates(bool silentCheck)
        {
            List <GitHubRelease> releases = null;

            try
            {
                string sURL;
                sURL = "https://api.github.com/repos/kabili207/zoragen-gtk/releases";

                // Mono doesn't need this, but it's a good idea to do it anyway in case
                // someone decides to run this on the .NET Framework.
                Extensions.SetAllowUnsafeHeaderParsing();

                // Mono, by default, doesn't include ANY ca certificates, nor does
                // it try to bridge to the OS cert store. So we have to trade features
                // for insecurity. I don't like it, but it's better than hard-coding
                // github's certificate...
                ServicePointManager.ServerCertificateValidationCallback =
                    new System.Net.Security.RemoteCertificateValidationCallback
                    (
                        (srvPoint, certificate, chain, errors) => true
                    );

                WebRequest request = WebRequest.Create(sURL);

                // GitHub requires a user agent
                ((HttpWebRequest)request).UserAgent = "ZoraGen updater";

                using (Stream objStream = request.GetResponse().GetResponseStream())
                {
                    StreamReader objReader  = new StreamReader(objStream);
                    string       json       = objReader.ReadToEnd();
                    var          serializer = new JavaScriptSerializer();
                    serializer.RegisterConverters(new[] { new GitHubReleaseJsonConverter() });
                    releases = serializer.Deserialize <List <GitHubRelease> >(json);
                }
            }
            catch (Exception ex)
            {
                if (!silentCheck)
                {
                    MessageBox.Show("Unable to check for updates." + Environment.NewLine +
                                    ex.Message, "Check for updates", ButtonsType.Ok, MessageType.Error);
                }
            }

            if (releases != null)
            {
                AssemblyDetail detail      = new AssemblyDetail(Assembly.GetExecutingAssembly());
                var            releaseInfo = releases.Where(x => !x.IsPreRelease && !x.IsDraft &&
                                                            x.TagName.StartsWith("v")).Select(x =>
                {
                    string versionString    = x.TagName.TrimStart('v', 'V');
                    SemanticVersion version = SemanticVersion.Parse(versionString);
                    return(new { Version = version, Release = x });
                }).Where(x => x.Version > detail.ProductVersion).OrderByDescending(x => x.Version);

                if (releaseInfo.Count() > 0)
                {
                    MessageBox.Show("There is an update available." + Environment.NewLine +
                                    "Current Version: " + detail.ProductVersion + Environment.NewLine +
                                    "Latest Version: " + releaseInfo.First().Release,
                                    "Update Available", ButtonsType.YesNo, MessageType.Info);
                }
                else if (!silentCheck)
                {
                    MessageBox.Show("There are no new updates available", "No updates", ButtonsType.Ok, MessageType.Info);
                }
            }
        }
예제 #15
0
        private AssemblyGroup DoCompareFiles(AssemblyManager manager, string[] assemblyFiles)
        {
            string[] assemblyFilesResolved = new string[assemblyFiles.Length];

            for (int i = 0; i < assemblyFiles.Length; i++)
            {
                if (Path.IsPathRooted(assemblyFiles[i]))
                {
                    assemblyFilesResolved[i] = Path.GetFullPath(assemblyFiles[i]);
                }
                else
                {
                    assemblyFilesResolved[i] = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), assemblyFiles[i]));
                }
            }

            AssemblyGroup group = new AssemblyGroup();

            foreach (string file in assemblyFilesResolved)
            {
                if (group.Name == null)
                {
                    group.Name = Path.GetFileName(file);
                }

                if (Path.GetFileName(file) != group.Name)
                {
                    group.Name = "(Multiple Names)";
                    break;
                }
            }

            foreach (string fileName in assemblyFilesResolved)
            {
                AssemblyComparerThread act = new AssemblyComparerThread(manager, group, fileName, _progress);

                if (_config.Multithread)
                {
                    _tpw.QueueUserWorkItem(Execute, act);
                }
                else
                {
                    Execute(act);
                }
            }

            if (_config.Multithread)
            {
                _tpw.WaitOne();

                List <AssemblyDetail> sorted = new List <AssemblyDetail>();

                foreach (string fileName in assemblyFilesResolved)
                {
                    AssemblyDetail sortedDetail = group.Assemblies.Find(delegate(AssemblyDetail detail) { return(string.Compare(detail.Location, fileName, true) == 0); });

                    if (sortedDetail == null)
                    {
                        Log.Error("Unable to sort assembly " + fileName);
                        //Log.Error(" List has " + string.Join(",", group.Assemblies.ConvertAll(delegate(AssemblyDetail detail) { return detail.Location; }).ToArray()));
                    }
                    else
                    {
                        sorted.Add(sortedDetail);
                    }
                }

                group.Assemblies.Clear();
                group.Assemblies.AddRange(sorted);
            }

            ListOperations.AlignLists(group.Assemblies);

            group.PerformCompare(_filter);

            return(group);
        }