Montage Laden zur Laufzeit für .NET und .NET FrameworkC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Montage Laden zur Laufzeit für .NET und .NET Framework

Post by Anonymous »

Ich habe eine NetSpandard20 Klassenbibliothek und eine Konsolenanwendung, die keinen direkten Verweis auf diese Klassenbibliothek hat. Stattdessen muss ich diese Bibliothek zur Laufzeit laden, damit diese Typen korrekt aufgelöst werden können. Im Moment zielt meine Konsolenanwendung NET8.0 und ich mache es auf folgende Weise:

Code: Select all

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

namespace AssemblyResolveTest
{
internal class Program
{
static void Main(string[] args)
{
//if I uncomment this line typeSecondAttempt would be null below
//var typeFirstAttempt = Type.GetType("DataClasses.TestDataClass");

var path = Path.Combine(Directory.GetCurrentDirectory(), "DataClasses.dll");
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(path);

var typeSecondAttempt = Type.GetType("DataClasses.TestDataClass, DataClasses");
}
}
Mein erstes Problem ist - warum, wenn ich Viktionsstufe Zeilenstypesecondattempt null wird (kann nicht behoben werden)? Dort. Es gibt eine Nuget, aber es funktioniert, wenn es nur von .NET aufgerufen wird (aber ich muss auch .NET Framework unterstützen). Der einzige Ansatz, den ich kenne, ist Appdomain.currentDomain.AssemblyResolve , so:

Code: Select all

using System;
using System.IO;
using System.Reflection;

namespace AssemblyResolveTestClassLibrary
{
public static class AssemblyResolver
{
static AssemblyResolver()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (new AssemblyName(args.Name).Name == "DataClasses")
{
var path = Path.Combine(Directory.GetCurrentDirectory(), "DataClasses.dll");
return Assembly.LoadFile(path);
}
else
return null;
}

public static Type GetTestDataClassType()
{
return Type.GetType("DataClasses.TestDataClass, DataClasses");
}
}
}
Aber Assembly.loadFile (Pfad) wird jedes Mal ausgeführt, wenn ich AssemblyResolver.gettestDataclAsstype () aufrufe. Mein Ziel ist es, die Montage einmal zu laden - wie kann ich das erreichen? Vielleicht eine andere Appdomain.CurrentDomain Funktion?
Danke.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post