97 lines
3.5 KiB
C#
97 lines
3.5 KiB
C#
|
using System.IO;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
using System.Runtime.InteropServices;
|
||
|
using System.Runtime.Loader;
|
||
|
using System.Threading;
|
||
|
|
||
|
namespace System.Reflection
|
||
|
{
|
||
|
[StructLayout (LayoutKind.Sequential)]
|
||
|
partial class Assembly
|
||
|
{
|
||
|
internal bool IsRuntimeImplemented () => this is RuntimeAssembly;
|
||
|
|
||
|
internal virtual IntPtr MonoAssembly {
|
||
|
get {
|
||
|
throw new NotImplementedException ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod
|
||
|
public static Assembly? LoadWithPartialName (string partialName)
|
||
|
{
|
||
|
if (partialName == null)
|
||
|
throw new ArgumentNullException (nameof (partialName));
|
||
|
|
||
|
if (partialName.Length == 0 || partialName [0] == '\0')
|
||
|
throw new ArgumentException (SR.Format_StringZeroLength, nameof (partialName));
|
||
|
|
||
|
try {
|
||
|
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
|
||
|
return RuntimeAssembly.InternalLoad (partialName, ref stackMark, IntPtr.Zero);
|
||
|
} catch (FileNotFoundException) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[System.Security.DynamicSecurityMethod]
|
||
|
[MethodImplAttribute (MethodImplOptions.NoInlining)]
|
||
|
public static Assembly GetExecutingAssembly()
|
||
|
{
|
||
|
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
|
||
|
return GetExecutingAssembly(ref stackMark);
|
||
|
}
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
internal static extern RuntimeAssembly GetExecutingAssembly (ref StackCrawlMark stackMark);
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
public static extern Assembly GetCallingAssembly ();
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
public static extern Assembly GetEntryAssembly ();
|
||
|
|
||
|
[System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod
|
||
|
public static Assembly Load (string assemblyString)
|
||
|
{
|
||
|
if (assemblyString == null)
|
||
|
throw new ArgumentNullException (nameof (assemblyString));
|
||
|
|
||
|
var name = new AssemblyName (assemblyString);
|
||
|
// TODO: trigger assemblyFromResolveEvent
|
||
|
|
||
|
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
|
||
|
return Load (name, ref stackMark, AssemblyLoadContext.CurrentContextualReflectionContext);
|
||
|
}
|
||
|
|
||
|
[System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod
|
||
|
public static Assembly Load (AssemblyName assemblyRef)
|
||
|
{
|
||
|
if (assemblyRef == null)
|
||
|
throw new ArgumentNullException (nameof (assemblyRef));
|
||
|
|
||
|
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
|
||
|
return Load (assemblyRef, ref stackMark, AssemblyLoadContext.CurrentContextualReflectionContext);
|
||
|
}
|
||
|
|
||
|
internal static Assembly Load (AssemblyName assemblyRef, ref StackCrawlMark stackMark, AssemblyLoadContext assemblyLoadContext)
|
||
|
{
|
||
|
// TODO: pass AssemblyName
|
||
|
// TODO: pass assemblyLoadContext
|
||
|
var assembly = InternalLoad (assemblyRef.FullName, ref stackMark, IntPtr.Zero);
|
||
|
if (assembly == null)
|
||
|
throw new FileNotFoundException (null, assemblyRef.Name);
|
||
|
return assembly;
|
||
|
}
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
internal static extern Assembly InternalLoad (string assemblyName, ref StackCrawlMark stackMark, IntPtr ptrLoadContextBinder);
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
internal extern Type InternalGetType (Module module, string name, bool throwOnError, bool ignoreCase);
|
||
|
|
||
|
[MethodImplAttribute (MethodImplOptions.InternalCall)]
|
||
|
internal extern static void InternalGetAssemblyName (string assemblyFile, out Mono.MonoAssemblyName aname, out string codebase);
|
||
|
}
|
||
|
}
|