2016-07-29 9 views
2

ich einen Deamon für Vorbelastung Montage oder die Einführung neuer ausführbare Assembly haben zu laden.wie Baugruppen zur Laufzeit mit Dotnet Kern

eine Montage vorzuladen:

Assembly assembly = Assembly.LoadFile(dllPath); 

dll zu starten:

AppDomain.CurrentDomain.ExecuteAssembly(executablePath, args); 

aber ich kann nicht Loadfile oder AppDomain-Klasse in netcoreapp1.0 API.

wie die Portierung für Dotnet Kern?


Ich habe versucht, LoadFromAssemblyPath und AssemblyLoadContext zu verwenden. aber es macht Ausnahmen zur Laufzeit.

hier ist der Code:

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; 
     } 
    } 
    } 
} 

Loaderexceptions Ausgabe:

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) 

Ausnahmen

+1

Mögliche Duplikat von [Wie Baugruppen in einem Ordner in .net Kern Konsole App befindet laden] (http://stackoverflow.com/questions/37895278/how-to-load-assemblies-located-in-a-folder -in-net-Core-Konsole-app) – Mat

Antwort

1

Versuchen diesen Beitrag zu sehen:

How to load assemblies located in a folder in .net core console app

In .NET Core existiert das Konzept von AppDomain nicht mehr.

+1

ich kann nicht DependencyContext Klasse in einem Link. und wenn ich das GetTypes() mit Assembly-Objekt von LoadFromAssemplyPath() aufrufen, habe ich viele Ausnahmen wie "System.IO.FileNotFoundException: Konnte Datei oder Assembly nicht laden" System.Runtime, Version = 4.1.1.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a '. Das System kann die angegebene Datei nicht finden. " –

+0

@piuslee Es ist in der Microsoft.Extensions.DependencyModel nuget lib. Das heißt, Sie können AppDomain aus dem nuget-Paket System.AppDomain abrufen – Sinaesthetic