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
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());
}
Code: Select all
MessageBox.Show("Start")Ich habe also einen stillen Anwendungsabsturz und die folgende Meldung im Ereignisprotokoll:

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:

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"]
}
Ich habe versucht, PROBING_PATH in der Laufzeitkonfiguration zu verwenden.
Im Tracelog sehe ich, dass Dotnet versucht, DLLs nur in meinem Stammordner zu finden:

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