我有一个名为A的项目,位于C:\ ProjectA中。 它引用了一个名为B.dll的dll,位于C:\ Binaries中。
现在B.dll必须动态加载另一个名为C.DLL的DLL,它位于同一个文件夹(C:\ Binaries)中。但B如何确定C的位置?
我知道AppDomain.CurrentDomain.BaseDirectory和Assembly.GetExecutingAssembly()。位置,但两者都会返回'C:\ ProjectA \',因为B.dll是由A.exe加载的。
我知道显而易见的解决方案是将所有二进制文件放在同一个文件夹中,它们将在发布时释放,但在开发时我无法更改存储库的布局,我想避免对路径进行硬编码。
编辑:抱歉重复How do I get the path of the assembly the code is in?
答案 0 :(得分:1)
从MSDN开始,您必须根据C(或B)中存在的某种类型对其进行测试:
Assembly assembly = Assembly.GetAssembly(yourVar.GetType());
//your location will be in assembly.Location
Console.WriteLine("Location=" + assembly.Location);
答案 1 :(得分:0)
如何使用B中的Assembly.GetCallingAssembly
?这将返回调用当前正在执行的方法的方法的Assembly对象。 (即B)
public void BMethod()
{
var assembly = Assembly.GetCallingAssembly();
string path = assembly.Location;
//now use this path to load C.dll in the same folder.
}
另见this类似的堆栈溢出问题