CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法



我正在尝试使用 linux centos7 中的 CoreCLR Profiler 来检测在 .NET Core 3.1 上运行的 .NET Core Web 应用程序。 我已经设置了环境值CORECLR_PROFILER,CORECLR_ENABLE_PROFILING和CORECLR_PROFILER_PATH,其中我的CoreCLRProfiler dll附加到dotnet.exe并且它正在获取回调。

我能够获得所有回调,但是当我允许将代码注入 Web 应用程序的方法时,应用程序就会崩溃(dotnet.exe被杀死(,因为它找不到注入的函数调用。

我使用注入的函数体创建了帮助程序程序集(.NET 标准 2.0(,并使用强名称对其进行签名并将其安装到 GAC 中。并且还使用了来自IMetaDataAssemblyEmit的DefineAssemblyRef((,DefineTypeRefByName((和DefineMemberRef((来加载程序集及其类方法。并且还尝试通过将dotnet标准dll放在应用程序文件夹中。但帮助程序程序集不会加载到 dotnet .exe进程中。

我的助手组件应该放在哪里..?

如何从本机 CoreCLR 探查器将帮助程序程序集加载到 dotnet 进程?

如果我得到一些正确的方向来加载或使用帮助程序程序集到 dotnet 进程,这将非常有帮助。

提前谢谢。

我在加载托管 DLL 并从我们的探查器调用它时玩了很多:许多不同的方法,几乎所有方法都有这样或那样的限制。 我们看到的问题是,如果调用外部 dll 的方法已经编译,那么现在加载外部 dll 为时已晚。即使编译了该方法,并且 dll 作为方法的一部分加载(在调用 dll 之前(,这对于 CLR 来说仍然为时已晚。 您可以做的有点不完整,但它有效:检测对 https://learn.microsoft.com/en-us/dotnet/api/system.appdomain.assemblyresolve 的调用并添加您自己的在特定位置查找的方法。这必须尽早完成(在编译调用此程序集的方法之前(。请注意,这将支持.Net Framework以及.Net Core。如果只需要对 .Net Core 的支持,则可以使用此处所述的方法: https://github.com/richlander/dotnet-core-assembly-loading

最新更新