示例#1
0
        internal static KernelTypeInfo Deserialize(XElement xe, string directory = null)
        {
            string name                     = xe.GetAttributeValue(csNAME);
            bool?  isDummy                  = xe.TryGetAttributeBoolValue(csISDUMMY);
            string behaviourStr             = xe.TryGetAttributeValue(csDUMMYBEHAVIOUR);
            string typeName                 = xe.Element(csTYPE).Value;
            string assemblyFullName         = xe.Element(csASSEMBLY).Value;
            string assemblyName             = xe.Element(csASSEMBLYNAME).Value;
            string assemblyPath             = xe.TryGetElementValue(csASSEMBLYPATH);
            long   checksum                 = XmlConvert.ToInt64(xe.Element(csCHECKSUM).Value);
            eCudafyDummyBehaviour behaviour = string.IsNullOrEmpty(behaviourStr) ? eCudafyDummyBehaviour.Default : (eCudafyDummyBehaviour)Enum.Parse(typeof(eCudafyDummyBehaviour), behaviourStr);
            Type           type             = null;
            KernelTypeInfo kti              = new KernelTypeInfo(null);

            if (!string.IsNullOrEmpty(typeName) && !string.IsNullOrEmpty(assemblyFullName))
            {
                Assembly assembly = null;
                try
                {
                    assembly = Assembly.Load(assemblyFullName);
                }
                catch (FileNotFoundException)
                {
                    directory    = directory != null ? directory : string.Empty;
                    assemblyName = directory + Path.DirectorySeparatorChar + assemblyName;
                    if (File.Exists(assemblyName + ".dll"))
                    {
                        assembly = Assembly.LoadFrom(assemblyName + ".dll");
                    }
                    else if (File.Exists(assemblyName + ".exe"))
                    {
                        assembly = Assembly.LoadFrom(assemblyName + ".exe");
                    }
                    else if (!string.IsNullOrEmpty(assemblyPath))
                    {
                        assembly = Assembly.LoadFrom(assemblyPath);
                    }
                    else
                    {
                        throw;
                    }
                }
                if (assembly == null)
                {
                    throw new CudafyException(CudafyException.csCOULD_NOT_LOAD_ASSEMBLY_X, assemblyFullName);
                }
                type = assembly.GetType(typeName);
                kti  = new KernelTypeInfo(type, isDummy == true ? true : false, behaviour);
            }
            kti.DeserializedChecksum = checksum;
            return(kti);
        }
示例#2
0
        internal static KernelTypeInfo Deserialize(XElement xe, string directory = null)
        {
            string name = xe.GetAttributeValue(csNAME);
            bool? isDummy = xe.TryGetAttributeBoolValue(csISDUMMY);
            string behaviourStr = xe.TryGetAttributeValue(csDUMMYBEHAVIOUR);            
            string typeName = xe.Element(csTYPE).Value;
            string assemblyFullName = xe.Element(csASSEMBLY).Value;
            string assemblyName = xe.Element(csASSEMBLYNAME).Value;
            string assemblyPath = xe.TryGetElementValue(csASSEMBLYPATH);
            long checksum = XmlConvert.ToInt64(xe.Element(csCHECKSUM).Value);
            eCudafyDummyBehaviour behaviour = string.IsNullOrEmpty(behaviourStr) ? eCudafyDummyBehaviour.Default : (eCudafyDummyBehaviour)Enum.Parse(typeof(eCudafyDummyBehaviour), behaviourStr);
            Type type = null;
            KernelTypeInfo kti = new KernelTypeInfo(null);

            if (!string.IsNullOrEmpty(typeName) && !string.IsNullOrEmpty(assemblyFullName))
            {
                Assembly assembly = null;
                try
                {
                    assembly = Assembly.Load(assemblyFullName);
                }
                catch (FileNotFoundException)
                {
                    directory = directory != null ? directory : string.Empty;
                    assemblyName = directory + Path.DirectorySeparatorChar + assemblyName;
                    if (File.Exists(assemblyName + ".dll"))
                    {
                        assembly = Assembly.LoadFrom(assemblyName + ".dll");
                    }
                    else if (File.Exists(assemblyName + ".exe"))
                    {
                        assembly = Assembly.LoadFrom(assemblyName + ".exe");
                    }
                    else if (!string.IsNullOrEmpty(assemblyPath))
                    {
                        assembly = Assembly.LoadFrom(assemblyPath);
                    }
                    else
                        throw;
                }
                if (assembly == null)
                    throw new CudafyException(CudafyException.csCOULD_NOT_LOAD_ASSEMBLY_X, assemblyFullName);
                type = assembly.GetType(typeName);
                kti = new KernelTypeInfo(type, isDummy == true ? true : false, behaviour);
            }
            kti.DeserializedChecksum = checksum;
            return kti;
        }