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; }
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; }
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; }
/// <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); }
// 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")); } }