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

标签 c# .net .net-assembly

假设我有一个应用程序: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/

相关文章:

c# - MVC 将我的 GET 请求路由到错误的操作

c# - streamwriters 有 Close() 和 Dispose() 有什么意义?

c# - 如何使用 C# 6.0 为 .NET 2.0 编译?

c# - 我们可以同时从 CodeExpressions 和文字源代码构造一个程序集吗?

javascript - 如何在 ASP.NET MVC 中使用 Razor View 从对象列表中获取 Controller 中的单个对象

c# - 将任务 'A' 的结果复制到任务 'B'?

c# - 让链接使用 AngularJS 路由而不是 MVC 路由

c# - 多线程 Windows 应用程序

c# - 将程序集加载到 applicationBase C# 之外的 AppDomain

asp.net - 在 bin 文件夹外的 ASP.NET 项目中解析程序集