说我有一个应用程序:C:\ MyPrograms \ App.exe
此应用不会引用library.dll。 App.exe可以动态加载程序集。
让我们说DLL的路径是C:\ MyPrograms \ DLLs \ library.dll
无论我尝试过什么,我都可以获得执行程序集(App.exe)的路径。
GetExecutingAssembly()
GetEntryAssembly()
AppDomain.CurrentDomain.BaseDirectory
有没有办法获取动态加载的DLL的位置?一切只是返回,例如,App.exe的位置
编辑1: 改写OP ......
MyApp.exe可以通过传递DLL的路径来调用任何DLL。此DLL可以是用户删除它的任何位置。排除硬编码路径或类似的东西。
我想要做的是能够获取动态加载的DLL的当前位置。即为了处理错误,我希望能够将错误日志写入DLL所在的目录。
我发现并尝试了一些方法来获取加载的DLL所在的位置,但这会返回CALLING程序集的目录(MyApp.exe)或者根本不返回任何内容。
答案 0 :(得分:3)
void
类具有属性System.Reflection.Assembly
,它获取包含清单的已加载文件的路径或UNC位置。所以,例如,如果您以这种方式加载程序集
Location
var assembly = System.Reflection.Assembly.Load(@"<assembly name>");
将返回您的要求。
回答编辑1 :为了做到这一点
处理错误,我希望能够将错误日志写入 DLL所在的目录
你可以
答案 1 :(得分:0)
如果你在动态加载的程序集中,你已经定义了一个名为MyDynLoadObject的类,你可以这样做:
Assembly assem = Assembly.GetAssembly(typeof(MyDynLoadObject));
编辑:另一种方法:
public class MyDynLoadObject
{
public MyDynLoadObject()
{
Assembly assem = this.GetType().Assembly;
}
}