Runtime: COREHOST_TRACE doit enregistrer AssemblyLoadContext

Créé le 16 avr. 2019  ·  3Commentaires  ·  Source: dotnet/runtime

Contexte
Sous Windows, j'intègre un outil global .NET Core qui charge à son tour les assemblages via le paramètre de ligne de commande assembly="c:\source\bin\Debug\netstandard2.0\JohnZabroski.Database.dll" . JohnZabroski.Database.dll référence transitivement System.Data.SqlClient .

Problème
Avec COREHOST_TRACE=1 , mon stderr actuel ressemble à ceci :

!!! Could not load file or assembly 'System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)
!!! +- Could not load file or assembly 'System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621) ---> System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(IntPtr ptrNativeAssemblyLoadContext, String ilPath, String niPath, ObjectHandleOnStack retAssembly)
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at System.Reflection.Assembly.LoadFromResolveHandler(Object sender, ResolveEventArgs args)
   at System.AppDomain.InvokeResolveEvent(ResolveEventHandler eventHandler, RuntimeAssembly assembly, String name)

J'ai trouvé le billet de blog suivant plutôt intimidant lorsque j'essayais de dépanner POURQUOI mon assemblage était introuvable ou localisé : https://mattwarren.org/2016/07/04/How-the-dotnet-CLI-tooling-runs-your -code/

J'ai trouvé l'outil Assembly Fusion Log Viewer dans .NET 4.6 pour être une expérience utilisateur BEAUCOUP plus facile. Voir : https://github.com/dotnet/coreclr/issues/10379

Peut-être lié
https://github.com/dotnet/coreclr/issues/15863 - les utilisateurs trouvent que le chargement de l'assembly de débogage sur Linux est horrible (corrigé : https://github.com/dotnet/coreclr/pull/15831)

area-AssemblyLoader-coreclr enhancement

Commentaire le plus utile

C'est absolument nécessaire. Il fait partie de notre carnet de commandes, mais il est peu probable qu'il fasse .NET Core 3.0.

Tous les 3 commentaires

À commencer par @jeffschwMSFT. Veuillez corriger area- si je me trompe.

C'est absolument nécessaire. Il fait partie de notre carnet de commandes, mais il est peu probable qu'il fasse .NET Core 3.0.

C'est absolument nécessaire. Il fait partie de notre carnet de commandes, mais il est peu probable qu'il fasse .NET Core 3.0.

S'il est "absolument nécessaire", pourquoi ne sera-t-il pas dans le Core 3.0 ? L'expédition de fonctionnalités nouvelles et sophistiquées est excellente, mais la force de Microsoft a toujours été dans les outils permettant de déboguer ces fonctionnalités lorsqu'elles ne fonctionnent pas. Le dépannage des échecs de liaison d'assemblage est un outil essentiel qui devrait être intégré à Core dès le premier jour, et le fait qu'il ne l'était pas et qu'il ne soit apparemment toujours pas considéré comme une priorité est à la fois préoccupant et, très franchement, embarrassant.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

GitAntoinee picture GitAntoinee  ·  3Commentaires

noahfalk picture noahfalk  ·  3Commentaires

btecu picture btecu  ·  3Commentaires

nalywa picture nalywa  ·  3Commentaires

omajid picture omajid  ·  3Commentaires