| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | using System;using System.Collections.Generic;using System.IO;using System.Reflection;using System.Security.Cryptography;namespace Optimizer{    internal sealed class EmbeddedAssembly    {        static Dictionary<string, Assembly> _dictionary;        internal static void Load(string embeddedResource, string fileName)        {            if (_dictionary == null) _dictionary = new Dictionary<string, Assembly>();            byte[] bytes = null;            Assembly assembly = null;            Assembly currentAssembly = Assembly.GetExecutingAssembly();            using (Stream stream = currentAssembly.GetManifestResourceStream(embeddedResource))            {                if (stream == null) throw new Exception(embeddedResource + " is not found in Embedded Resources.");                bytes = new byte[(int)stream.Length];                stream.Read(bytes, 0, (int)stream.Length);                try                {                    assembly = Assembly.Load(bytes);                    _dictionary.Add(assembly.FullName, assembly);                    return;                }                catch (Exception ex)                {                    ErrorLogger.LogError("EmbeddedAssembly.Load", ex.Message, ex.StackTrace);                }            }            bool fileOk = false;            string tempFile = string.Empty;            using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())            {                string fileHash = BitConverter.ToString(sha1.ComputeHash(bytes)).Replace("-", string.Empty);                tempFile = Path.GetTempPath() + fileName;                if (File.Exists(tempFile))                {                    byte[] byteArray = File.ReadAllBytes(tempFile);                    string fileHash2 = BitConverter.ToString(sha1.ComputeHash(byteArray)).Replace("-", string.Empty);                    if (fileHash == fileHash2)                    {                        fileOk = true;                    }                }                else                {                    fileOk = false;                }            }            if (!fileOk)            {                File.WriteAllBytes(tempFile, bytes);            }            assembly = Assembly.LoadFile(tempFile);            _dictionary.Add(assembly.FullName, assembly);        }        internal static Assembly Get(string assemblyFullName)        {            if (_dictionary == null || _dictionary.Count == 0) return null;            if (_dictionary.ContainsKey(assemblyFullName)) return _dictionary[assemblyFullName];            return null;        }    }}
 |