假设我有一个应用程序: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
你可以
- Load an assembly to app domain并订阅AppDomain.UnhandledException您可以在其中放置错误记录代码。此代码将知道当前域及其基本目录。
- 在调用程序集方法时在程序集路径中传递某种上下文,并在日志逻辑中使用它。如果只在一个线程中调用汇编方法,它可以是线程上下文。
关于c# - 获取动态加载程序集的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749241/