예제 #1
0
        internal MemberInfoSerializationHolder(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            Contract.EndContractBlock();

            String assemblyName = info.GetString("AssemblyName");
            String typeName     = info.GetString("ClassName");

            if (assemblyName == null || typeName == null)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
            }

            Assembly assem = FormatterServices.LoadAssemblyFromString(assemblyName);

            m_reflectedType = assem.GetType(typeName, true, false) as RuntimeType;
            m_memberName    = info.GetString("Name");
            m_signature     = info.GetString("Signature");
            // Only v4.0 and later generates and consumes Signature2
            m_signature2 = (string)info.GetValueNoThrow("Signature2", typeof(string));
            m_memberType = (MemberTypes)info.GetInt32("MemberType");
            m_info       = info;
        }
예제 #2
0
        internal MemberInfoSerializationHolder(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            string string1 = info.GetString("AssemblyName");
            string string2 = info.GetString("ClassName");

            if (string1 == null || string2 == null)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
            }
            this.m_reflectedType = FormatterServices.LoadAssemblyFromString(string1).GetType(string2, true, false) as RuntimeType;
            this.m_memberName    = info.GetString("Name");
            this.m_signature     = info.GetString("Signature");
            this.m_signature2    = (string)info.GetValueNoThrow("Signature2", typeof(string));
            this.m_memberType    = (MemberTypes)info.GetInt32("MemberType");
            this.m_info          = info;
        }
예제 #3
0
        internal MemberInfoSerializationHolder(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            string assemblyName = info.GetString("AssemblyName");
            string name         = info.GetString("ClassName");

            if ((assemblyName == null) || (name == null))
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
            }
            Assembly assembly = FormatterServices.LoadAssemblyFromString(assemblyName);

            this.m_reflectedType = assembly.GetType(name, true, false) as RuntimeType;
            this.m_memberName    = info.GetString("Name");
            this.m_signature     = info.GetString("Signature");
            this.m_memberType    = (MemberTypes)info.GetInt32("MemberType");
            this.m_info          = info;
        }
예제 #4
0
 /// <summary>加载要调试的指定程序集。</summary>
 /// <returns>要调试的 <see cref="T:System.Reflection.Assembly" />。</returns>
 /// <param name="assemblyString">要加载的程序集的名称。</param>
 /// <PermissionSet>
 ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="*AllFiles*" PathDiscovery="*AllFiles*" />
 ///   <IPermission class="System.Security.Permissions.StrongNameIdentityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293" Name="System.Runtime.Serialization.Formatters.Soap" />
 /// </PermissionSet>
 public static Assembly LoadAssemblyFromString(string assemblyString)
 {
     return(FormatterServices.LoadAssemblyFromString(assemblyString));
 }
        private Delegate GetDelegate(DelegateEntry de)
        {
            Delegate d;

            if (de.methodName == null || de.methodName.Length == 0)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
            }

            Assembly assem = FormatterServices.LoadAssemblyFromString(de.assembly);

            if (assem == null)
            {
                BCLDebug.Trace("SER", "[DelegateSerializationHolder.ctor]: Unable to find assembly for TargetType: ", de.assembly);
                throw new SerializationException(String.Format(Environment.GetResourceString("Serialization_AssemblyNotFound"), de.assembly));
            }

            Type type = assem.GetTypeInternal(de.type, false, false, false);

            assem = FormatterServices.LoadAssemblyFromString(de.targetTypeAssembly);
            if (assem == null)
            {
                BCLDebug.Trace("SER", "[DelegateSerializationHolder.ctor]: Unable to find assembly for TargetType: ", de.targetTypeAssembly);
                throw new SerializationException(String.Format(Environment.GetResourceString("Serialization_AssemblyNotFound"), de.targetTypeAssembly));
            }

            Type targetType = assem.GetTypeInternal(de.targetTypeName, false, false, false);

            if (de.target == null && targetType == null)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
            }

            if (type == null)
            {
                BCLDebug.Trace("SER", "[DelegateSerializationHolder.GetRealObject]Missing Type");
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
            }

            if (targetType == null)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
            }

            Object target = null;

            if (de.target != null) //We have a delegate to a non-static object
            {
                target = RemotingServices.CheckCast(de.target, targetType);
                d      = Delegate.CreateDelegate(type, target, de.methodName);
            }
            else
            {
                //For a static delegate
                d = Delegate.CreateDelegate(type, targetType, de.methodName);
            }

            // We will refuse to create delegates to methods that are non-public.
            MethodInfo mi = d.Method;

            if (mi != null)
            {
                if (!mi.IsPublic)
                {
                    throw new SerializationException(
                              Environment.GetResourceString("Serialization_RefuseNonPublicDelegateCreation"));
                }
            }

            return(d);
        }
예제 #6
0
        // GetRealObject uses the data we have in m_data and m_unityType to do a lookup on the correct
        // object to return.  We have specific code here to handle the different types which we support.
        // The reflection types (Assembly, Module, and Type) have to be looked up through their static
        // accessors by name.
        public virtual Object GetRealObject(StreamingContext context)
        {
            Assembly assem;

            BCLDebug.Trace("SER", "[GetRealObject] UnityType:", m_unityType);

            switch (m_unityType)
            {
            case EmptyUnity:
                BCLDebug.Trace("SER", "[GetRealObject]Returning Empty.Value");
                BCLDebug.Trace("SER", "[GetRealObject]Empty's value is: ", Empty.Value, "||");
                return(Empty.Value);

            case NullUnity:
                return(DBNull.Value);

            case MissingUnity:
                return(Missing.Value);

            case RuntimeTypeUnity:
                if (m_data == null || m_data.Length == 0 || m_assemName == null)
                {
                    BCLDebug.Trace("SER", "UnitySerializationHolder.GetRealObject Type. Data is: ", m_data);
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }
                if (m_assemName.Length == 0)
                {
                    return(RuntimeType.GetTypeInternal(m_data, false, false, false));
                }

                assem = FormatterServices.LoadAssemblyFromString(m_assemName);
                if (assem == null)
                {
                    BCLDebug.Trace("SER", "UnitySerializationHolder.GetRealObject Type. AssemblyName is: ", m_assemName, " but we can't load it.");
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }

                Type t = assem.GetTypeInternal(m_data, false, false, false);

                return(t);

            case ModuleUnity:
                if (m_data == null || m_data.Length == 0 || m_assemName == null)
                {
                    BCLDebug.Trace("SER", "UnitySerializationHolder.GetRealObject Module. Data is: ", m_data);
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }
                assem = FormatterServices.LoadAssemblyFromString(m_assemName);
                if (assem == null)
                {
                    BCLDebug.Trace("SER", "UnitySerializationHolder.GetRealObject Module. AssemblyName is: ", m_assemName, " but we can't load it.");
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }

                Module namedModule = assem.GetModule(m_data);
                if (namedModule == null)
                {
                    throw new SerializationException(Environment.GetResourceString("Serialization_UnableToFindModule"));
                }
                return(namedModule);

            case AssemblyUnity:
                if (m_data == null || m_data.Length == 0 || m_assemName == null)
                {
                    BCLDebug.Log("UnitySerializationHolder.GetRealObject.  Assembly. Data is: " + ((m_data == null)?"<null>":m_data));
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }
                assem = FormatterServices.LoadAssemblyFromString(m_assemName);
                if (assem == null)
                {
                    BCLDebug.Trace("SER", "UnitySerializationHolder.GetRealObject Module. AssemblyName is: ", m_assemName, " but we can't load it.");
                    throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientDeserializationState"));
                }

                return(assem);

            default:
                //This should never happen because we only use the class internally.
                throw new ArgumentException(Environment.GetResourceString("Argument_InvalidUnity"));
            }
        }