Fundo
No Windows, estou integrando com uma ferramenta global .NET Core que, por sua vez, carrega assemblies por meio do parâmetro de linha de comando assembly="c:\source\bin\Debug\netstandard2.0\JohnZabroski.Database.dll"
. JohnZabroski.Database.dll
referencia transitivamente System.Data.SqlClient
.
Problema
Com COREHOST_TRACE=1
, meu stderr atual fica assim:
!!! 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)
Achei o seguinte post do blog bastante intimidador ao tentar solucionar por que minha montagem não pôde ser encontrada ou localizada: https://mattwarren.org/2016/07/04/How-the-dotnet-CLI-tooling-runs-your -código/
Eu encontrei a ferramenta Assembly Fusion Log Viewer no .NET 4.6 para ser uma experiência de usuário MUITO mais fácil. Veja: https://github.com/dotnet/coreclr/issues/10379
Possivelmente relacionado
https://github.com/dotnet/coreclr/issues/15863 - os usuários acham a depuração do carregamento de assembly no Linux horrível (corrigido: https://github.com/dotnet/coreclr/pull/15831)
Começando com @jeffschwMSFT. Por favor, corrija area-
se eu estiver errado.
Isso é absolutamente necessário. Está em nossa lista de pendências, mas provavelmente não fará o .NET Core 3.0.
Isso é absolutamente necessário. Está em nossa lista de pendências, mas provavelmente não fará o .NET Core 3.0.
Se é "absolutamente necessário", por que não estará no Core 3.0? O envio de recursos novos e sofisticados é ótimo, mas a força da Microsoft sempre esteve nas ferramentas para depurar esses recursos quando eles não funcionam. Solucionar falhas de associação de montagem é uma ferramenta crítica que deve ser incorporada ao Core desde o primeiro dia, e o fato de que não era e aparentemente ainda não é visto como uma prioridade é preocupante e, francamente, embaraçoso.
Comentários muito úteis
Isso é absolutamente necessário. Está em nossa lista de pendências, mas provavelmente não fará o .NET Core 3.0.