summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Reflection/Assembly.cs
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
commita56e30c8d33048216567753d9d3fefc2152af8ac (patch)
tree7e5d979695fc4a431740982eb1cfecc2898b23a5 /src/mscorlib/src/System/Reflection/Assembly.cs
parent4b11dc566a5bbfa1378d6266525c281b028abcc8 (diff)
downloadcoreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.gz
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.bz2
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.zip
Imported Upstream version 2.0.0.11353upstream/2.0.0.11353
Diffstat (limited to 'src/mscorlib/src/System/Reflection/Assembly.cs')
-rw-r--r--src/mscorlib/src/System/Reflection/Assembly.cs1680
1 files changed, 0 insertions, 1680 deletions
diff --git a/src/mscorlib/src/System/Reflection/Assembly.cs b/src/mscorlib/src/System/Reflection/Assembly.cs
deleted file mode 100644
index eaedc6ded4..0000000000
--- a/src/mscorlib/src/System/Reflection/Assembly.cs
+++ /dev/null
@@ -1,1680 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*=============================================================================
-**
-**
-**
-**
-**
-**
-** Purpose: For Assembly-related stuff.
-**
-**
-=============================================================================*/
-
-namespace System.Reflection
-{
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using CultureInfo = System.Globalization.CultureInfo;
- using System.Security;
- using System.Security.Policy;
- using System.IO;
- using StringBuilder = System.Text.StringBuilder;
- using System.Configuration.Assemblies;
- using StackCrawlMark = System.Threading.StackCrawlMark;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
- using System.Runtime.Serialization;
- using Microsoft.Win32;
- using System.Threading;
- using __HResults = System.__HResults;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
- using System.Runtime.Loader;
-
- [Serializable]
- public delegate Module ModuleResolveEventHandler(Object sender, ResolveEventArgs e);
-
-
- [Serializable]
- public abstract class Assembly : ICustomAttributeProvider, ISerializable
- {
- protected Assembly() {}
-
-#region public static methods
-
- public static String CreateQualifiedName(String assemblyName, String typeName)
- {
- return typeName + ", " + assemblyName;
- }
-
- public static Assembly GetAssembly(Type type)
- {
- if (type == null)
- throw new ArgumentNullException(nameof(type));
- Contract.EndContractBlock();
-
- Module m = type.Module;
- if (m == null)
- return null;
- else
- return m.Assembly;
- }
-
- public static bool operator ==(Assembly left, Assembly right)
- {
- if (ReferenceEquals(left, right))
- return true;
-
- if ((object)left == null || (object)right == null ||
- left is RuntimeAssembly || right is RuntimeAssembly)
- {
- return false;
- }
- return left.Equals(right);
- }
-
- public static bool operator !=(Assembly left, Assembly right)
- {
- return !(left == right);
- }
-
- public override bool Equals(object o)
- {
- return base.Equals(o);
- }
-
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
-
- public static Assembly LoadFrom(String assemblyFile)
- {
- if(assemblyFile == null)
- throw new ArgumentNullException(nameof(assemblyFile));
- string fullPath = Path.GetFullPath(assemblyFile);
- return AssemblyLoadContext.Default.LoadFromAssemblyPath(fullPath);
- }
-
- // Locate an assembly for reflection by the name of the file containing the manifest.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly ReflectionOnlyLoadFrom(String assemblyFile)
- {
- if (assemblyFile == null)
- throw new ArgumentNullException(nameof(assemblyFile));
- if (assemblyFile.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Format_StringZeroLength"));
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
- }
-
- // Evidence is protected in Assembly.Load()
- [Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static Assembly LoadFrom(String assemblyFile,
- Evidence securityEvidence)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
- return RuntimeAssembly.InternalLoadFrom(
- assemblyFile,
- securityEvidence,
- null, // hashValue
- AssemblyHashAlgorithm.None,
- false,// forIntrospection);
- ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly LoadFrom(String assemblyFile,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm)
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AssemblyLoadFromHash"));
- }
-
- public static Assembly UnsafeLoadFrom(string assemblyFile)
- {
- return LoadFrom(assemblyFile);
- }
-
- // Locate an assembly by the long form of the assembly name.
- // eg. "Toolbox.dll, version=1.1.10.1220, locale=en, publickey=1234567890123456789012345678901234567890"
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(String assemblyString)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoad(assemblyString, null, ref stackMark, false /*forIntrospection*/);
- }
-
- // Returns type from the assembly while keeping compatibility with Assembly.Load(assemblyString).GetType(typeName) for managed types.
- // Calls Type.GetType for WinRT types.
- // Note: Type.GetType fails for assembly names that start with weird characters like '['. By calling it for managed types we would
- // break AppCompat.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static Type GetType_Compat(String assemblyString, String typeName)
- {
- // Normally we would get the stackMark only in public APIs. This is internal API, but it is AppCompat replacement of public API
- // call Assembly.Load(assemblyString).GetType(typeName), therefore we take the stackMark here as well, to be fully compatible with
- // the call sequence.
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
-
- RuntimeAssembly assembly;
- AssemblyName assemblyName = RuntimeAssembly.CreateAssemblyName(
- assemblyString,
- false /*forIntrospection*/,
- out assembly);
-
- if (assembly == null) {
- if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime) {
- return Type.GetType(typeName + ", " + assemblyString, true /*throwOnError*/, false /*ignoreCase*/);
- }
-
- assembly = RuntimeAssembly.InternalLoadAssemblyName(
- assemblyName, null, null, ref stackMark,
- true /*thrownOnFileNotFound*/, false /*forIntrospection*/);
- }
- return assembly.GetType(typeName, true /*throwOnError*/, false /*ignoreCase*/);
- }
-
- // Locate an assembly for reflection by the long form of the assembly name.
- // eg. "Toolbox.dll, version=1.1.10.1220, locale=en, publickey=1234567890123456789012345678901234567890"
- //
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly ReflectionOnlyLoad(String assemblyString)
- {
- if (assemblyString == null)
- throw new ArgumentNullException(nameof(assemblyString));
- if (assemblyString.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Format_StringZeroLength"));
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
- }
-
- // Locate an assembly by its name. The name can be strong or
- // weak. The assembly is loaded into the domain of the caller.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(AssemblyName assemblyRef)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- if (assemblyRef != null && assemblyRef.CodeBase != null)
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AssemblyLoadCodeBase"));
- }
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/);
- }
-
- // Locate an assembly by its name. The name can be strong or
- // weak. The assembly is loaded into the domain of the caller.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static Assembly Load(AssemblyName assemblyRef, IntPtr ptrLoadContextBinder)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- if (assemblyRef != null && assemblyRef.CodeBase != null)
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_AssemblyLoadCodeBase"));
- }
-
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false /*forIntrospection*/, ptrLoadContextBinder);
- }
-
- [Obsolete("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
- public static Assembly LoadWithPartialName(String partialName)
- {
- if(partialName == null)
- throw new ArgumentNullException(nameof(partialName));
- return Load(partialName);
- }
-
- // Loads the assembly with a COFF based IMAGE containing
- // an emitted assembly. The assembly is loaded into the domain
- // of the caller.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(byte[] rawAssembly)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- AppDomain.CheckLoadByteArraySupported();
-
- return Load(rawAssembly, null);
- }
-
- // Loads the assembly for reflection with a COFF based IMAGE containing
- // an emitted assembly. The assembly is loaded into the domain
- // of the caller.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly ReflectionOnlyLoad(byte[] rawAssembly)
- {
- if (rawAssembly == null)
- throw new ArgumentNullException(nameof(rawAssembly));
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_ReflectionOnlyLoad"));
- }
-
- // Loads the assembly with a COFF based IMAGE containing
- // an emitted assembly. The assembly is loaded into the domain
- // of the caller. The second parameter is the raw bytes
- // representing the symbol store that matches the assembly.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly Load(byte[] rawAssembly,
- byte[] rawSymbolStore)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- AppDomain.CheckLoadByteArraySupported();
-
- if(rawAssembly == null)
- throw new ArgumentNullException(nameof(rawAssembly));
- AssemblyLoadContext alc = new IndividualAssemblyLoadContext();
- MemoryStream assemblyStream = new MemoryStream(rawAssembly);
- MemoryStream symbolStream = (rawSymbolStore!=null)?new MemoryStream(rawSymbolStore):null;
- return alc.LoadFromStream(assemblyStream, symbolStream);
- }
-
- private static Dictionary<string, Assembly> s_loadfile = new Dictionary<string, Assembly>();
-
- public static Assembly LoadFile(String path)
- {
- Contract.Ensures(Contract.Result<Assembly>() != null);
- Contract.Ensures(!Contract.Result<Assembly>().ReflectionOnly);
-
- AppDomain.CheckLoadFileSupported();
-
- Assembly result = null;
- if(path == null)
- throw new ArgumentNullException(nameof(path));
-
- if (PathInternal.IsPartiallyQualified(path))
- {
- throw new ArgumentException(Environment.GetResourceString("Argument_AbsolutePathRequired"), nameof(path));
- }
-
- string normalizedPath = Path.GetFullPath(path);
-
- lock(s_loadfile)
- {
- if(s_loadfile.TryGetValue(normalizedPath, out result))
- return result;
- AssemblyLoadContext alc = new IndividualAssemblyLoadContext();
- result = alc.LoadFromAssemblyPath(normalizedPath);
- s_loadfile.Add(normalizedPath, result);
- }
- return result;
- }
-
- /*
- * Get the assembly that the current code is running from.
- */
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly GetExecutingAssembly()
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return RuntimeAssembly.GetExecutingAssembly(ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public static Assembly GetCallingAssembly()
- {
- // LookForMyCallersCaller is not guarantee to return the correct stack frame
- // because of inlining, tail calls, etc. As a result GetCallingAssembly is not
- // ganranteed to return the correct result. We should document it as such.
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
- return RuntimeAssembly.GetExecutingAssembly(ref stackMark);
- }
-
- public static Assembly GetEntryAssembly() {
- AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
- if (domainManager == null)
- domainManager = new AppDomainManager();
- return domainManager.EntryAssembly;
- }
-
-#endregion // public static methods
-
-#region public methods
- public virtual event ModuleResolveEventHandler ModuleResolve
- {
- add
- {
- throw new NotImplementedException();
- }
- remove
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual String CodeBase
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual String EscapedCodeBase
- {
- get
- {
- return AssemblyName.EscapeCodeBase(CodeBase);
- }
- }
-
- public virtual AssemblyName GetName()
- {
- return GetName(false);
- }
-
- public virtual AssemblyName GetName(bool copiedName)
- {
- throw new NotImplementedException();
- }
-
- public virtual String FullName
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual MethodInfo EntryPoint
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual Type GetType(String name)
- {
- return GetType(name, false, false);
- }
-
- public virtual Type GetType(String name, bool throwOnError)
- {
- return GetType(name, throwOnError, false);
- }
-
- public virtual Type GetType(String name, bool throwOnError, bool ignoreCase)
- {
- throw new NotImplementedException();
- }
-
- public virtual IEnumerable<Type> ExportedTypes
- {
- get
- {
- return GetExportedTypes();
- }
- }
-
- public virtual Type[] GetExportedTypes()
- {
- throw new NotImplementedException();
- }
-
- public virtual IEnumerable<TypeInfo> DefinedTypes
- {
- get
- {
- Type[] types = GetTypes();
-
- TypeInfo[] typeinfos = new TypeInfo[types.Length];
-
- for (int i = 0; i < types.Length; i++)
- {
-
- TypeInfo typeinfo = types[i].GetTypeInfo();
- if (typeinfo == null)
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_NoTypeInfo", types[i].FullName));
-
- typeinfos[i] = typeinfo;
- }
-
- return typeinfos;
- }
- }
-
- public virtual Type[] GetTypes()
- {
- Module[] m = GetModules(false);
-
- int iFinalLength = 0;
- Type[][] ModuleTypes = new Type[m.Length][];
-
- for (int i = 0; i < ModuleTypes.Length; i++)
- {
- ModuleTypes[i] = m[i].GetTypes();
- iFinalLength += ModuleTypes[i].Length;
- }
-
- int iCurrent = 0;
- Type[] ret = new Type[iFinalLength];
- for (int i = 0; i < ModuleTypes.Length; i++)
- {
- int iLength = ModuleTypes[i].Length;
- Array.Copy(ModuleTypes[i], 0, ret, iCurrent, iLength);
- iCurrent += iLength;
- }
-
- return ret;
- }
-
- // Load a resource based on the NameSpace of the type.
- public virtual Stream GetManifestResourceStream(Type type, String name)
- {
- throw new NotImplementedException();
- }
-
- public virtual Stream GetManifestResourceStream(String name)
- {
- throw new NotImplementedException();
- }
-
- public virtual Assembly GetSatelliteAssembly(CultureInfo culture)
- {
- throw new NotImplementedException();
- }
-
- // Useful for binding to a very specific version of a satellite assembly
- public virtual Assembly GetSatelliteAssembly(CultureInfo culture, Version version)
- {
- throw new NotImplementedException();
- }
-
- public bool IsFullyTrusted
- {
- get
- {
- return true;
- }
- }
-
- public virtual SecurityRuleSet SecurityRuleSet
- {
- get
- {
- return SecurityRuleSet.None;
- }
- }
-
- // ISerializable implementation
- public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- throw new NotImplementedException();
- }
-
- public virtual Module ManifestModule
- {
- get
- {
- // This API was made virtual in V4. Code compiled against V2 might use
- // "call" rather than "callvirt" to call it.
- // This makes sure those code still works.
- RuntimeAssembly rtAssembly = this as RuntimeAssembly;
- if (rtAssembly != null)
- return rtAssembly.ManifestModule;
-
- throw new NotImplementedException();
- }
- }
-
- public virtual IEnumerable<CustomAttributeData> CustomAttributes
- {
- get
- {
- return GetCustomAttributesData();
- }
- }
- public virtual Object[] GetCustomAttributes(bool inherit)
- {
- Contract.Ensures(Contract.Result<Object[]>() != null);
- throw new NotImplementedException();
- }
-
- public virtual Object[] GetCustomAttributes(Type attributeType, bool inherit)
- {
- Contract.Ensures(Contract.Result<Object[]>() != null);
- throw new NotImplementedException();
- }
-
- public virtual bool IsDefined(Type attributeType, bool inherit)
- {
- throw new NotImplementedException();
- }
-
- public virtual IList<CustomAttributeData> GetCustomAttributesData()
- {
- throw new NotImplementedException();
- }
-
- public virtual bool ReflectionOnly
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public Module LoadModule(String moduleName,
- byte[] rawModule)
- {
- return LoadModule(moduleName, rawModule, null);
- }
-
- public virtual Module LoadModule(String moduleName,
- byte[] rawModule,
- byte[] rawSymbolStore)
- {
- throw new NotImplementedException();
- }
-
- //
- // Locates a type from this assembly and creates an instance of it using
- // the system activator.
- //
- public Object CreateInstance(String typeName)
- {
- return CreateInstance(typeName,
- false, // ignore case
- BindingFlags.Public | BindingFlags.Instance,
- null, // binder
- null, // args
- null, // culture
- null); // activation attributes
- }
-
- public Object CreateInstance(String typeName,
- bool ignoreCase)
- {
- return CreateInstance(typeName,
- ignoreCase,
- BindingFlags.Public | BindingFlags.Instance,
- null, // binder
- null, // args
- null, // culture
- null); // activation attributes
- }
-
- public virtual Object CreateInstance(String typeName,
- bool ignoreCase,
- BindingFlags bindingAttr,
- Binder binder,
- Object[] args,
- CultureInfo culture,
- Object[] activationAttributes)
- {
- Type t = GetType(typeName, false, ignoreCase);
- if (t == null) return null;
- return Activator.CreateInstance(t,
- bindingAttr,
- binder,
- args,
- culture,
- activationAttributes);
- }
-
- public virtual IEnumerable<Module> Modules
- {
- get
- {
- return GetLoadedModules(true);
- }
- }
-
- public Module[] GetLoadedModules()
- {
- return GetLoadedModules(false);
- }
-
- public virtual Module[] GetLoadedModules(bool getResourceModules)
- {
- throw new NotImplementedException();
- }
-
- public Module[] GetModules()
- {
- return GetModules(false);
- }
-
- public virtual Module[] GetModules(bool getResourceModules)
- {
- throw new NotImplementedException();
- }
-
- public virtual Module GetModule(String name)
- {
- throw new NotImplementedException();
- }
-
- // Returns the file in the File table of the manifest that matches the
- // given name. (Name should not include path.)
- public virtual FileStream GetFile(String name)
- {
- throw new NotImplementedException();
- }
-
- public virtual FileStream[] GetFiles()
- {
- return GetFiles(false);
- }
-
- public virtual FileStream[] GetFiles(bool getResourceModules)
- {
- throw new NotImplementedException();
- }
-
- // Returns the names of all the resources
- public virtual String[] GetManifestResourceNames()
- {
- throw new NotImplementedException();
- }
-
- public virtual AssemblyName[] GetReferencedAssemblies()
- {
- throw new NotImplementedException();
- }
-
- public virtual ManifestResourceInfo GetManifestResourceInfo(String resourceName)
- {
- throw new NotImplementedException();
- }
-
- public override String ToString()
- {
- String displayName = FullName;
- if (displayName == null)
- return base.ToString();
- else
- return displayName;
- }
-
- public virtual String Location
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual String ImageRuntimeVersion
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- /*
- Returns true if the assembly was loaded from the global assembly cache.
- */
- public virtual bool GlobalAssemblyCache
- {
- get
- {
- throw new NotImplementedException();
- }
- }
-
- public virtual Int64 HostContext
- {
- get
- {
- // This API was made virtual in V4. Code compiled against V2 might use
- // "call" rather than "callvirt" to call it.
- // This makes sure those code still works.
- RuntimeAssembly rtAssembly = this as RuntimeAssembly;
- if (rtAssembly != null)
- return rtAssembly.HostContext;
-
- throw new NotImplementedException();
- }
- }
-
- public virtual bool IsDynamic
- {
- get
- {
- return false;
- }
- }
-#endregion // public methods
-
- }
-
- [Serializable]
- internal class RuntimeAssembly : Assembly
- {
-#if FEATURE_APPX
- // The highest byte is the flags and the lowest 3 bytes are
- // the cached ctor token of [DynamicallyInvocableAttribute].
- private enum ASSEMBLY_FLAGS : uint
- {
- ASSEMBLY_FLAGS_UNKNOWN = 0x00000000,
- ASSEMBLY_FLAGS_INITIALIZED = 0x01000000,
- ASSEMBLY_FLAGS_FRAMEWORK = 0x02000000,
- ASSEMBLY_FLAGS_SAFE_REFLECTION = 0x04000000,
- ASSEMBLY_FLAGS_TOKEN_MASK = 0x00FFFFFF,
- }
-#endif // FEATURE_APPX
-
- private const uint COR_E_LOADING_REFERENCE_ASSEMBLY = 0x80131058U;
-
- internal RuntimeAssembly() { throw new NotSupportedException(); }
-
-#region private data members
- private event ModuleResolveEventHandler _ModuleResolve;
- private string m_fullname;
- private object m_syncRoot; // Used to keep collectible types alive and as the syncroot for reflection.emit
- private IntPtr m_assembly; // slack for ptr datum on unmanaged side
-
-#if FEATURE_APPX
- private ASSEMBLY_FLAGS m_flags;
-#endif
-#endregion
-
-#if FEATURE_APPX
- internal int InvocableAttributeCtorToken
- {
- get
- {
- int token = (int)(Flags & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_TOKEN_MASK);
-
- return token | (int)MetadataTokenType.MethodDef;
- }
- }
-
- private ASSEMBLY_FLAGS Flags
- {
- get
- {
- if ((m_flags & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_INITIALIZED) == 0)
- {
- ASSEMBLY_FLAGS flags = ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_UNKNOWN
- | ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_FRAMEWORK | ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_SAFE_REFLECTION;
-
- m_flags = flags | ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_INITIALIZED;
- }
-
- return m_flags;
- }
- }
-#endif // FEATURE_APPX
-
- internal object SyncRoot
- {
- get
- {
- if (m_syncRoot == null)
- {
- Interlocked.CompareExchange<object>(ref m_syncRoot, new object(), null);
- }
- return m_syncRoot;
- }
- }
-
- public override event ModuleResolveEventHandler ModuleResolve
- {
- add
- {
- _ModuleResolve += value;
- }
- remove
- {
- _ModuleResolve -= value;
- }
- }
-
- private const String s_localFilePrefix = "file:";
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetCodeBase(RuntimeAssembly assembly,
- bool copiedName,
- StringHandleOnStack retString);
-
- internal String GetCodeBase(bool copiedName)
- {
- String codeBase = null;
- GetCodeBase(GetNativeHandle(), copiedName, JitHelpers.GetStringHandleOnStack(ref codeBase));
- return codeBase;
- }
-
- public override String CodeBase
- {
- get {
- String codeBase = GetCodeBase(false);
- return codeBase;
- }
- }
-
- internal RuntimeAssembly GetNativeHandle()
- {
- return this;
- }
-
- // If the assembly is copied before it is loaded, the codebase will be set to the
- // actual file loaded if copiedName is true. If it is false, then the original code base
- // is returned.
- public override AssemblyName GetName(bool copiedName)
- {
- AssemblyName an = new AssemblyName();
-
- String codeBase = GetCodeBase(copiedName);
-
- an.Init(GetSimpleName(),
- GetPublicKey(),
- null, // public key token
- GetVersion(),
- GetLocale(),
- GetHashAlgorithm(),
- AssemblyVersionCompatibility.SameMachine,
- codeBase,
- GetFlags() | AssemblyNameFlags.PublicKey,
- null); // strong name key pair
-
- PortableExecutableKinds pek;
- ImageFileMachine ifm;
-
- Module manifestModule = ManifestModule;
- if (manifestModule != null)
- {
- if (manifestModule.MDStreamVersion > 0x10000)
- {
- ManifestModule.GetPEKind(out pek, out ifm);
- an.SetProcArchIndex(pek,ifm);
- }
- }
- return an;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void GetFullName(RuntimeAssembly assembly, StringHandleOnStack retString);
-
- public override String FullName
- {
- get {
- // If called by Object.ToString(), return val may be NULL.
- if (m_fullname == null)
- {
- string s = null;
- GetFullName(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref s));
- Interlocked.CompareExchange<string>(ref m_fullname, s, null);
- }
-
- return m_fullname;
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetEntryPoint(RuntimeAssembly assembly, ObjectHandleOnStack retMethod);
-
- public override MethodInfo EntryPoint
- {
- get {
- IRuntimeMethodInfo methodHandle = null;
- GetEntryPoint(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref methodHandle));
-
- if (methodHandle == null)
- return null;
-
- return (MethodInfo)RuntimeType.GetMethodBase(methodHandle);
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetType(RuntimeAssembly assembly,
- String name,
- bool throwOnError,
- bool ignoreCase,
- ObjectHandleOnStack type,
- ObjectHandleOnStack keepAlive);
-
- public override Type GetType(String name, bool throwOnError, bool ignoreCase)
- {
- // throw on null strings regardless of the value of "throwOnError"
- if (name == null)
- throw new ArgumentNullException(nameof(name));
-
- RuntimeType type = null;
- Object keepAlive = null;
- GetType(GetNativeHandle(), name, throwOnError, ignoreCase, JitHelpers.GetObjectHandleOnStack(ref type), JitHelpers.GetObjectHandleOnStack(ref keepAlive));
- GC.KeepAlive(keepAlive);
-
- return type;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes);
-
- public override Type[] GetExportedTypes()
- {
- Type[] types = null;
- GetExportedTypes(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref types));
- return types;
- }
-
- public override IEnumerable<TypeInfo> DefinedTypes
- {
- get
- {
- List<RuntimeType> rtTypes = new List<RuntimeType>();
-
- RuntimeModule[] modules = GetModulesInternal(true, false);
-
- for (int i = 0; i < modules.Length; i++)
- {
- rtTypes.AddRange(modules[i].GetDefinedTypes());
- }
-
- return rtTypes.ToArray();
- }
- }
-
- // Load a resource based on the NameSpace of the type.
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public override Stream GetManifestResourceStream(Type type, String name)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return GetManifestResourceStream(type, name, false, ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public override Stream GetManifestResourceStream(String name)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return GetManifestResourceStream(name, ref stackMark, false);
- }
-
- // ISerializable implementation
- public override void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- if (info==null)
- throw new ArgumentNullException(nameof(info));
-
- Contract.EndContractBlock();
-
- UnitySerializationHolder.GetUnitySerializationInfo(info,
- UnitySerializationHolder.AssemblyUnity,
- this.FullName,
- this);
- }
-
- public override Module ManifestModule
- {
- get
- {
- // We don't need to return the "external" ModuleBuilder because
- // it is meant to be read-only
- return RuntimeAssembly.GetManifestModule(GetNativeHandle());
- }
- }
-
- public override Object[] GetCustomAttributes(bool inherit)
- {
- return CustomAttribute.GetCustomAttributes(this, typeof(object) as RuntimeType);
- }
-
- public override Object[] GetCustomAttributes(Type attributeType, bool inherit)
- {
- if (attributeType == null)
- throw new ArgumentNullException(nameof(attributeType));
- Contract.EndContractBlock();
-
- RuntimeType attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;
-
- if (attributeRuntimeType == null)
- throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"),nameof(attributeType));
-
- return CustomAttribute.GetCustomAttributes(this, attributeRuntimeType);
- }
-
- public override bool IsDefined(Type attributeType, bool inherit)
- {
- if (attributeType == null)
- throw new ArgumentNullException(nameof(attributeType));
- Contract.EndContractBlock();
-
- RuntimeType attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;
-
- if (attributeRuntimeType == null)
- throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"),nameof(attributeType));
-
- return CustomAttribute.IsDefined(this, attributeRuntimeType);
- }
-
- public override IList<CustomAttributeData> GetCustomAttributesData()
- {
- return CustomAttributeData.GetCustomAttributesInternal(this);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static RuntimeAssembly InternalLoadFrom(String assemblyFile,
- Evidence securityEvidence,
- byte[] hashValue,
- AssemblyHashAlgorithm hashAlgorithm,
- bool forIntrospection,
- ref StackCrawlMark stackMark)
- {
- if (assemblyFile == null)
- throw new ArgumentNullException(nameof(assemblyFile));
-
- Contract.EndContractBlock();
-
- AssemblyName an = new AssemblyName();
- an.CodeBase = assemblyFile;
- an.SetHashControl(hashValue, hashAlgorithm);
- // The stack mark is used for MDA filtering
- return InternalLoadAssemblyName(an, securityEvidence, null, ref stackMark, true /*thrownOnFileNotFound*/, forIntrospection);
- }
-
- // Wrapper function to wrap the typical use of InternalLoad.
- internal static RuntimeAssembly InternalLoad(String assemblyString,
- Evidence assemblySecurity,
- ref StackCrawlMark stackMark,
- bool forIntrospection)
- {
- return InternalLoad(assemblyString, assemblySecurity, ref stackMark, IntPtr.Zero, forIntrospection);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal static RuntimeAssembly InternalLoad(String assemblyString,
- Evidence assemblySecurity,
- ref StackCrawlMark stackMark,
- IntPtr pPrivHostBinder,
- bool forIntrospection)
- {
- RuntimeAssembly assembly;
- AssemblyName an = CreateAssemblyName(assemblyString, forIntrospection, out assembly);
-
- if (assembly != null) {
- // The assembly was returned from ResolveAssemblyEvent
- return assembly;
- }
-
- return InternalLoadAssemblyName(an, assemblySecurity, null, ref stackMark,
- pPrivHostBinder,
- true /*thrownOnFileNotFound*/, forIntrospection);
- }
-
- // Creates AssemblyName. Fills assembly if AssemblyResolve event has been raised.
- internal static AssemblyName CreateAssemblyName(
- String assemblyString,
- bool forIntrospection,
- out RuntimeAssembly assemblyFromResolveEvent)
- {
- if (assemblyString == null)
- throw new ArgumentNullException(nameof(assemblyString));
- Contract.EndContractBlock();
-
- if ((assemblyString.Length == 0) ||
- (assemblyString[0] == '\0'))
- throw new ArgumentException(Environment.GetResourceString("Format_StringZeroLength"));
-
- if (forIntrospection)
- AppDomain.CheckReflectionOnlyLoadSupported();
-
- AssemblyName an = new AssemblyName();
-
- an.Name = assemblyString;
- an.nInit(out assemblyFromResolveEvent, forIntrospection, true);
-
- return an;
- }
-
- // Wrapper function to wrap the typical use of InternalLoadAssemblyName.
- internal static RuntimeAssembly InternalLoadAssemblyName(
- AssemblyName assemblyRef,
- Evidence assemblySecurity,
- RuntimeAssembly reqAssembly,
- ref StackCrawlMark stackMark,
- bool throwOnFileNotFound,
- bool forIntrospection,
- IntPtr ptrLoadContextBinder = default(IntPtr))
- {
- return InternalLoadAssemblyName(assemblyRef, assemblySecurity, reqAssembly, ref stackMark, IntPtr.Zero, true /*throwOnError*/, forIntrospection, ptrLoadContextBinder);
- }
-
- internal static RuntimeAssembly InternalLoadAssemblyName(
- AssemblyName assemblyRef,
- Evidence assemblySecurity,
- RuntimeAssembly reqAssembly,
- ref StackCrawlMark stackMark,
- IntPtr pPrivHostBinder,
- bool throwOnFileNotFound,
- bool forIntrospection,
- IntPtr ptrLoadContextBinder = default(IntPtr))
- {
-
- if (assemblyRef == null)
- throw new ArgumentNullException(nameof(assemblyRef));
- Contract.EndContractBlock();
-
- if (assemblyRef.CodeBase != null)
- {
- AppDomain.CheckLoadFromSupported();
- }
-
- assemblyRef = (AssemblyName)assemblyRef.Clone();
- if (!forIntrospection &&
- (assemblyRef.ProcessorArchitecture != ProcessorArchitecture.None)) {
- // PA does not have a semantics for by-name binds for execution
- assemblyRef.ProcessorArchitecture = ProcessorArchitecture.None;
- }
-
- String codeBase = VerifyCodeBase(assemblyRef.CodeBase);
-
- return nLoad(assemblyRef, codeBase, assemblySecurity, reqAssembly, ref stackMark,
- pPrivHostBinder,
- throwOnFileNotFound, forIntrospection, ptrLoadContextBinder);
- }
-
- // These are the framework assemblies that does reflection invocation
- // on behalf of user code. We allow framework code to invoke non-W8P
- // framework APIs but don't want user code to gain that privilege
- // through these assemblies. So we blaklist them.
- static string[] s_unsafeFrameworkAssemblyNames = new string[] {
- "System.Reflection.Context",
- "Microsoft.VisualBasic"
- };
-
-#if FEATURE_APPX
- internal bool IsFrameworkAssembly()
- {
- ASSEMBLY_FLAGS flags = Flags;
- return (flags & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_FRAMEWORK) != 0;
- }
-
- // Returns true if we want to allow this assembly to invoke non-W8P
- // framework APIs through reflection.
- internal bool IsSafeForReflection()
- {
- ASSEMBLY_FLAGS flags = Flags;
- return (flags & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_SAFE_REFLECTION) != 0;
- }
-#endif
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern RuntimeAssembly _nLoad(AssemblyName fileName,
- String codeBase,
- Evidence assemblySecurity,
- RuntimeAssembly locationHint,
- ref StackCrawlMark stackMark,
- IntPtr pPrivHostBinder,
- bool throwOnFileNotFound,
- bool forIntrospection,
- bool suppressSecurityChecks,
- IntPtr ptrLoadContextBinder);
-
- private static RuntimeAssembly nLoad(AssemblyName fileName,
- String codeBase,
- Evidence assemblySecurity,
- RuntimeAssembly locationHint,
- ref StackCrawlMark stackMark,
- IntPtr pPrivHostBinder,
- bool throwOnFileNotFound,
- bool forIntrospection,
- IntPtr ptrLoadContextBinder = default(IntPtr))
- {
- return _nLoad(fileName, codeBase, assemblySecurity, locationHint, ref stackMark,
- pPrivHostBinder,
- throwOnFileNotFound, forIntrospection, true /* suppressSecurityChecks */, ptrLoadContextBinder);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern bool IsReflectionOnly(RuntimeAssembly assembly);
-
- public override bool ReflectionOnly
- {
- get
- {
- return IsReflectionOnly(GetNativeHandle());
- }
- }
-
- // Returns the module in this assembly with name 'name'
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetModule(RuntimeAssembly assembly, String name, ObjectHandleOnStack retModule);
-
- public override Module GetModule(String name)
- {
- Module retModule = null;
- GetModule(GetNativeHandle(), name, JitHelpers.GetObjectHandleOnStack(ref retModule));
- return retModule;
- }
-
- // Returns the file in the File table of the manifest that matches the
- // given name. (Name should not include path.)
- public override FileStream GetFile(String name)
- {
- RuntimeModule m = (RuntimeModule)GetModule(name);
- if (m == null)
- return null;
-
- return new FileStream(m.GetFullyQualifiedName(),
- FileMode.Open,
- FileAccess.Read, FileShare.Read, FileStream.DefaultBufferSize, false);
- }
-
- public override FileStream[] GetFiles(bool getResourceModules)
- {
- Module[] m = GetModules(getResourceModules);
- FileStream[] fs = new FileStream[m.Length];
-
- for (int i = 0; i < fs.Length; i++)
- {
- fs[i] = new FileStream(((RuntimeModule)m[i]).GetFullyQualifiedName(),
- FileMode.Open,
- FileAccess.Read, FileShare.Read, FileStream.DefaultBufferSize, false);
- }
-
- return fs;
- }
-
- // Returns the names of all the resources
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern String[] GetManifestResourceNames(RuntimeAssembly assembly);
-
- // Returns the names of all the resources
- public override String[] GetManifestResourceNames()
- {
- return GetManifestResourceNames(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void GetExecutingAssembly(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retAssembly);
-
- internal static RuntimeAssembly GetExecutingAssembly(ref StackCrawlMark stackMark)
- {
- RuntimeAssembly retAssembly = null;
- GetExecutingAssembly(JitHelpers.GetStackCrawlMarkHandle(ref stackMark), JitHelpers.GetObjectHandleOnStack(ref retAssembly));
- return retAssembly;
- }
-
- // Returns the names of all the resources
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern AssemblyName[] GetReferencedAssemblies(RuntimeAssembly assembly);
-
- public override AssemblyName[] GetReferencedAssemblies()
- {
- return GetReferencedAssemblies(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern int GetManifestResourceInfo(RuntimeAssembly assembly,
- String resourceName,
- ObjectHandleOnStack assemblyRef,
- StringHandleOnStack retFileName,
- StackCrawlMarkHandle stackMark);
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public override ManifestResourceInfo GetManifestResourceInfo(String resourceName)
- {
- RuntimeAssembly retAssembly = null;
- String fileName = null;
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- int location = GetManifestResourceInfo(GetNativeHandle(), resourceName,
- JitHelpers.GetObjectHandleOnStack(ref retAssembly),
- JitHelpers.GetStringHandleOnStack(ref fileName),
- JitHelpers.GetStackCrawlMarkHandle(ref stackMark));
-
- if (location == -1)
- return null;
-
- return new ManifestResourceInfo(retAssembly, fileName,
- (ResourceLocation) location);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetLocation(RuntimeAssembly assembly, StringHandleOnStack retString);
-
- public override String Location
- {
- get {
- String location = null;
-
- GetLocation(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref location));
-
- return location;
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void GetImageRuntimeVersion(RuntimeAssembly assembly, StringHandleOnStack retString);
-
- public override String ImageRuntimeVersion
- {
- get{
- String s = null;
- GetImageRuntimeVersion(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref s));
- return s;
- }
- }
-
- public override bool GlobalAssemblyCache
- {
- get
- {
- return false;
- }
- }
-
- public override Int64 HostContext
- {
- get
- {
- return 0;
- }
- }
-
- private static String VerifyCodeBase(String codebase)
- {
- if(codebase == null)
- return null;
-
- int len = codebase.Length;
- if (len == 0)
- return null;
-
-
- int j = codebase.IndexOf(':');
- // Check to see if the url has a prefix
- if( (j != -1) &&
- (j+2 < len) &&
- ((codebase[j+1] == '/') || (codebase[j+1] == '\\')) &&
- ((codebase[j+2] == '/') || (codebase[j+2] == '\\')) )
- return codebase;
-#if !PLATFORM_UNIX
- else if ((len > 2) && (codebase[0] == '\\') && (codebase[1] == '\\'))
- return "file://" + codebase;
- else
- return "file:///" + Path.GetFullPath(codebase);
-#else
- else
- return "file://" + Path.GetFullPath(codebase);
-#endif // !PLATFORM_UNIX
- }
-
- internal Stream GetManifestResourceStream(
- Type type,
- String name,
- bool skipSecurityCheck,
- ref StackCrawlMark stackMark)
- {
- StringBuilder sb = new StringBuilder();
- if(type == null) {
- if (name == null)
- throw new ArgumentNullException(nameof(type));
- }
- else {
- String nameSpace = type.Namespace;
- if(nameSpace != null) {
- sb.Append(nameSpace);
- if(name != null)
- sb.Append(Type.Delimiter);
- }
- }
-
- if(name != null)
- sb.Append(name);
-
- return GetManifestResourceStream(sb.ToString(), ref stackMark, skipSecurityCheck);
- }
-
- // GetResource will return a pointer to the resources in memory.
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static unsafe extern byte* GetResource(RuntimeAssembly assembly,
- String resourceName,
- out ulong length,
- StackCrawlMarkHandle stackMark,
- bool skipSecurityCheck);
-
- internal unsafe Stream GetManifestResourceStream(String name, ref StackCrawlMark stackMark, bool skipSecurityCheck)
- {
- ulong length = 0;
- byte* pbInMemoryResource = GetResource(GetNativeHandle(), name, out length, JitHelpers.GetStackCrawlMarkHandle(ref stackMark), skipSecurityCheck);
-
- if (pbInMemoryResource != null) {
- //Console.WriteLine("Creating an unmanaged memory stream of length "+length);
- if (length > Int64.MaxValue)
- throw new NotImplementedException(Environment.GetResourceString("NotImplemented_ResourcesLongerThan2^63"));
-
- return new UnmanagedMemoryStream(pbInMemoryResource, (long)length, (long)length, FileAccess.Read);
- }
-
- //Console.WriteLine("GetManifestResourceStream: Blob "+name+" not found...");
- return null;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetVersion(RuntimeAssembly assembly,
- out int majVer,
- out int minVer,
- out int buildNum,
- out int revNum);
-
- internal Version GetVersion()
- {
- int majorVer, minorVer, build, revision;
- GetVersion(GetNativeHandle(), out majorVer, out minorVer, out build, out revision);
- return new Version (majorVer, minorVer, build, revision);
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetLocale(RuntimeAssembly assembly, StringHandleOnStack retString);
-
- internal CultureInfo GetLocale()
- {
- String locale = null;
-
- GetLocale(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref locale));
-
- if (locale == null)
- return CultureInfo.InvariantCulture;
-
- return new CultureInfo(locale);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern bool FCallIsDynamic(RuntimeAssembly assembly);
-
- public override bool IsDynamic
- {
- get {
- return FCallIsDynamic(GetNativeHandle());
- }
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetSimpleName(RuntimeAssembly assembly, StringHandleOnStack retSimpleName);
-
- internal String GetSimpleName()
- {
- string name = null;
- GetSimpleName(GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref name));
- return name;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static AssemblyHashAlgorithm GetHashAlgorithm(RuntimeAssembly assembly);
-
- private AssemblyHashAlgorithm GetHashAlgorithm()
- {
- return GetHashAlgorithm(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static AssemblyNameFlags GetFlags(RuntimeAssembly assembly);
-
- private AssemblyNameFlags GetFlags()
- {
- return GetFlags(GetNativeHandle());
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private static extern void GetPublicKey(RuntimeAssembly assembly, ObjectHandleOnStack retPublicKey);
-
- internal byte[] GetPublicKey()
- {
- byte[] publicKey = null;
- GetPublicKey(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref publicKey));
- return publicKey;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.Bool)]
- private extern static bool IsAllSecurityTransparent(RuntimeAssembly assembly);
-
- // Is everything introduced by this assembly transparent
- internal bool IsAllSecurityTransparent()
- {
- return IsAllSecurityTransparent(GetNativeHandle());
- }
-
- // This method is called by the VM.
- private RuntimeModule OnModuleResolveEvent(String moduleName)
- {
- ModuleResolveEventHandler moduleResolve = _ModuleResolve;
- if (moduleResolve == null)
- return null;
-
- Delegate[] ds = moduleResolve.GetInvocationList();
- int len = ds.Length;
- for (int i = 0; i < len; i++) {
- RuntimeModule ret = (RuntimeModule)((ModuleResolveEventHandler) ds[i])(this, new ResolveEventArgs(moduleName,this));
- if (ret != null)
- return ret;
- }
-
- return null;
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public override Assembly GetSatelliteAssembly(CultureInfo culture)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalGetSatelliteAssembly(culture, null, ref stackMark);
- }
-
- // Useful for binding to a very specific version of a satellite assembly
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- public override Assembly GetSatelliteAssembly(CultureInfo culture, Version version)
- {
- StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
- return InternalGetSatelliteAssembly(culture, version, ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal Assembly InternalGetSatelliteAssembly(CultureInfo culture,
- Version version,
- ref StackCrawlMark stackMark)
- {
- if (culture == null)
- throw new ArgumentNullException(nameof(culture));
- Contract.EndContractBlock();
-
-
- String name = GetSimpleName() + ".resources";
- return InternalGetSatelliteAssembly(name, culture, version, true, ref stackMark);
- }
-
- [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
- internal RuntimeAssembly InternalGetSatelliteAssembly(String name,
- CultureInfo culture,
- Version version,
- bool throwOnFileNotFound,
- ref StackCrawlMark stackMark)
- {
-
- AssemblyName an = new AssemblyName();
-
- an.SetPublicKey(GetPublicKey());
- an.Flags = GetFlags() | AssemblyNameFlags.PublicKey;
-
- if (version == null)
- an.Version = GetVersion();
- else
- an.Version = version;
-
- an.CultureInfo = culture;
- an.Name = name;
-
- RuntimeAssembly retAssembly = nLoad(an, null, null, this, ref stackMark,
- IntPtr.Zero,
- throwOnFileNotFound, false);
-
- if (retAssembly == this || (retAssembly == null && throwOnFileNotFound))
- {
- throw new FileNotFoundException(String.Format(culture, Environment.GetResourceString("IO.FileNotFound_FileName"), an.Name));
- }
-
- return retAssembly;
- }
-
- [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
- [SuppressUnmanagedCodeSecurity]
- private extern static void GetModules(RuntimeAssembly assembly,
- bool loadIfNotFound,
- bool getResourceModules,
- ObjectHandleOnStack retModuleHandles);
-
- private RuntimeModule[] GetModulesInternal(bool loadIfNotFound,
- bool getResourceModules)
- {
- RuntimeModule[] modules = null;
- GetModules(GetNativeHandle(), loadIfNotFound, getResourceModules, JitHelpers.GetObjectHandleOnStack(ref modules));
- return modules;
- }
-
- public override Module[] GetModules(bool getResourceModules)
- {
- return GetModulesInternal(true, getResourceModules);
- }
-
- public override Module[] GetLoadedModules(bool getResourceModules)
- {
- return GetModulesInternal(false, getResourceModules);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern RuntimeModule GetManifestModule(RuntimeAssembly assembly);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern int GetToken(RuntimeAssembly assembly);
- }
-}