Die .NET 10-App kann die entsprechende DLL nicht aus dem Unterverzeichnis ladenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Die .NET 10-App kann die entsprechende DLL nicht aus dem Unterverzeichnis laden

Post by Anonymous »

Ich habe die Migration unserer .NET 4.6-App auf .NET 10 fast abgeschlossen.
Alles sieht in Ordnung aus, bis auf eines: Im .NET Framework haben wir den Wert
in der Datei app.exe.config verwendet und es hat großartig funktioniert. Wir könnten alle Bibliotheken von Drittanbietern in diesem Ordner entfernen und unser Hauptverzeichnis bereinigen.
Aber im neuen .NET 10 ist das eine Menge Ärger. Ich wollte den Sondierungspfad über den Code
auflösen

Code: Select all

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve,
AppDomain.CurrentDomain.AssemblyResolve,
AppDomain.CurrentDomain.TypeResolve,
AssemblyLoadContext.Default.Resolving
aber es funktioniert nicht wie erwartet: Referenzierte Assemblys werden in der Main()-Funktion nicht geladen/aufgelöst.
Ein kleines Codebeispiel:

Code: Select all

static Program()
{
MessageBox.Show("Start");
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve;
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
AppDomain.CurrentDomain.TypeResolve += CurrentDomain_TypeResolve;
AssemblyLoadContext.Default.Resolving += Default_Resolving;
}

[STAThread]
static void Main()
{
InitApp();

Application.Run(new frmMain());
}
Anwendung läuft NICHT im Konstruktor (

Code: Select all

MessageBox.Show("Start")
wird nicht ausgeführt).
Ich habe also einen stillen Anwendungsabsturz und die folgende Meldung im Ereignisprotokoll:
Image

Das passiert auch, wenn die Main()-Funktion völlig leer ist.
Es fühlt sich also an, als würde das Dotnet versuchen, alles zu laden Referenzierte DLL VOR dem eigentlichen Anwendungsstart:
Image

Gleichzeitig funktioniert alles einwandfrei, wenn ich alle zugehörigen DLLs im Anwendungsordner finde.
Auch AppDomain.CurrentDomain.AssemblyResolve funktioniert perfekt im DLL-Projekt Von .NET 4.6 auf .NET 10 migriert, rufen wir diese DLL über das COM-Interop aus der MFC-Exe-Datei auf. In diesem Fall wird AssemblyResolve für jede Referenz ausgelöst.
Ich habe versucht, zusätzliche ProbingPaths zu verwenden (kein Glück).

Code: Select all

"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.0.0"
},
"additionalProbingPaths": ["./Lib/AppDlls"]
}
Theoretisch kann ich Pfade in der .deps.json-Datei ändern, aber das würde ich gerne vermeiden.
Ich habe versucht, PROBING_PATH in der Laufzeitkonfiguration zu verwenden.
Im Tracelog sehe ich, dass Dotnet versucht, DLLs nur in meinem Stammordner zu finden:
Image

Leute, ich habe keine Ahnung, was ich sonst tun soll. Ich hoffe, dass Sie mir vielleicht einen Rat geben.
Vielen Dank.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post