gpt4 book ai didi

c# - 获取动态加载程序集的位置

转载 作者:行者123 更新时间:2023-11-30 15:59:19 25 4
gpt4 key购买 nike

假设我有一个应用程序:C:\MyPrograms\App.exe

此应用不引用 library.dll。 App.exe 可以动态加载程序集。

假设 DLL 的路径是 C:\MyPrograms\DLLs\library.dll

无论我如何尝试,我都可以获得执行程序集 (App.exe) 的路径。

获取执行程序集()

GetEntryAssembly()

AppDomain.CurrentDomain.BaseDirectory

有没有办法获取动态加载的 DLL 的位置?一切都只是返回,例如,App.exe 的位置

编辑 1:改写 OP...

MyApp.exe 可以通过传入 DLL 的路径来调用任何 DLL。该 DLL 可以位于用户将其放置的任何位置。排除硬编码路径或类似的东西。

我想做的是能够获取动态加载的 DLL 的当前位置。即为了处理错误,我希望能够将错误日志写入 DLL 所在的同一目录。

我已经找到并尝试了一些方法来获取加载的 DLL 所在的位置,但是这要么返回 CALLING 程序集 (MyApp.exe) 的目录,要么什么都不返回。

最佳答案

System.Reflection.Assembly 类具有属性 Location,它获取包含 list 的加载文件的路径或 UNC 位置。因此,例如,如果您以这种方式加载程序集

var assembly = System.Reflection.Assembly.Load(@"<assembly name>");

assembly.Location 将返回您的请求。

对编辑 1 的回答:为了做到这一点

to handle errors, I'd like to be able to write an error log to the same directory the DLL is in

你可以

  1. Load an assembly to app domain并订阅AppDomain.UnhandledException您可以在其中放置错误记录代码。此代码将知道当前域及其基本目录。
  2. 在调用程序集方法时在程序集路径中传递某种上下文,并在日志逻辑中使用它。如果只在一个线程中调用汇编方法,它可以是线程上下文。

关于c# - 获取动态加载程序集的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com