如何使用dotnet core在运行时加载程序集

piu*_*lee 6 .net c# .net-core

我有一个用于预加载程序集或启动新的可执行程序集的守护程序.

要预加载程序集:

Assembly assembly = Assembly.LoadFile(dllPath);
Run Code Online (Sandbox Code Playgroud)

要启动DLL:

AppDomain.CurrentDomain.ExecuteAssembly(executablePath, args);
Run Code Online (Sandbox Code Playgroud)

但我在netcoreapp1.0 API中找不到LoadFile或AppDomain类.

如何为dotnet核心移植它?


我试图使用LoadFromAssemblyPath和AssemblyLoadContext.但它在运行时会产生异常.

这是代码:

using System;
using System.Runtime.Loader;
using System.Reflection;
using System.IO;

namespace Tizen.DotnetLauncher
{
    class Shield
    {
    public static void Main(string[] args)
    {

        if (args.Length < 1) return;

        var asl = new AssemblyLoader();
        string fpath = Path.GetFullPath(args[0]);
        Console.WriteLine(fpath);
        var asm = asl.LoadFromAssemblyPath(fpath);

        Type[] types = null;

        try
        {
            types = asm.GetTypes();
        }
        catch (ReflectionTypeLoadException e)
        {
            foreach (Exception ex in e.LoaderExceptions)
            {
                Console.WriteLine(ex);
            }
        }

        foreach (Type info in types)
        {
            Console.WriteLine(info.GetTypeInfo());
        }
    }

    class AssemblyLoader : AssemblyLoadContext
    {
        protected override Assembly Load(AssemblyName assemblyName)
        {
            return null;
        }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

LoaderExceptions输出:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

File name: 'System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ---> System.IO.FileNotFoundException: Could not load the specified file.
File name: 'System.Runtime'
   at System.Runtime.Loader.AssemblyLoadContext.ResolveUsingEvent(AssemblyName assemblyName)
   at System.Runtime.Loader.AssemblyLoadContext.ResolveUsingResolvingEvent(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
Run Code Online (Sandbox Code Playgroud)

例外